-

「LIBRARIES PUBLIC DOCUMENT LIBFIX」の版間の差分

提供: HI-TECH C for CP/M Fan WIKI(JP)
移動先: 案内検索
(タグ: モバイル編集モバイルウェブ編集)
(このライブラリについて)
(タグ: モバイル編集モバイルウェブ編集)
 
1行目: 1行目:
 
== このライブラリについて ==
 
== このライブラリについて ==
 
HI-TECH Cと一緒に提供されるライブラリの修正版です。
 
HI-TECH Cと一緒に提供されるライブラリの修正版です。
 +
 
HI-TECH社は親切なことに、このCP/M用のCコンパイラをお金を払うことなく使うことを許可してくれました。HI-TECH社はまた、CP/M用のライブラリとそのソースもフリーウェアとして提供しています。
 
HI-TECH社は親切なことに、このCP/M用のCコンパイラをお金を払うことなく使うことを許可してくれました。HI-TECH社はまた、CP/M用のライブラリとそのソースもフリーウェアとして提供しています。
 +
 
Pierre Gielen氏はこれをMSX-DOD2用に適用し、また拡張させて1993年にパブリックドメインとして提供しました。私自身でこれに修正や改良、追加を加えたもののいくつかをここに同梱しています。
 
Pierre Gielen氏はこれをMSX-DOD2用に適用し、また拡張させて1993年にパブリックドメインとして提供しました。私自身でこれに修正や改良、追加を加えたもののいくつかをここに同梱しています。
 +
 
私はMSX-DOS1でも簡単にプログラミングできるように、慎重に、MSX-DOS2環境下でのみ動くものから離れていきました。
 
私はMSX-DOS1でも簡単にプログラミングできるように、慎重に、MSX-DOS2環境下でのみ動くものから離れていきました。
 
MSX-DOS2の可能性を広げるような使い方を求める人用には、LIBDOS2があります。
 
MSX-DOS2の可能性を広げるような使い方を求める人用には、LIBDOS2があります。
 +
 
これらのパッチを使うには、このパッケージ内のヘッダファイルとライブラリをHI-TECH Cのコピーのあるディレクトリにコピーするか、'make install'とタイプします。あなたは、このパッケージを自由に使い、変更し、再配布することができます。バグレポートや提案などがあったら、私に送ってください。
 
これらのパッチを使うには、このパッケージ内のヘッダファイルとライブラリをHI-TECH Cのコピーのあるディレクトリにコピーするか、'make install'とタイプします。あなたは、このパッケージを自由に使い、変更し、再配布することができます。バグレポートや提案などがあったら、私に送ってください。
 +
 
Arnold Metselaar <連絡先省略>
 
Arnold Metselaar <連絡先省略>
  

2017年8月12日 (土) 06:16時点における最新版

このライブラリについて

HI-TECH Cと一緒に提供されるライブラリの修正版です。

HI-TECH社は親切なことに、このCP/M用のCコンパイラをお金を払うことなく使うことを許可してくれました。HI-TECH社はまた、CP/M用のライブラリとそのソースもフリーウェアとして提供しています。

Pierre Gielen氏はこれをMSX-DOD2用に適用し、また拡張させて1993年にパブリックドメインとして提供しました。私自身でこれに修正や改良、追加を加えたもののいくつかをここに同梱しています。

私はMSX-DOS1でも簡単にプログラミングできるように、慎重に、MSX-DOS2環境下でのみ動くものから離れていきました。 MSX-DOS2の可能性を広げるような使い方を求める人用には、LIBDOS2があります。

これらのパッチを使うには、このパッケージ内のヘッダファイルとライブラリをHI-TECH Cのコピーのあるディレクトリにコピーするか、'make install'とタイプします。あなたは、このパッケージを自由に使い、変更し、再配布することができます。バグレポートや提案などがあったら、私に送ってください。

Arnold Metselaar <連絡先省略>

ファイル

以下のファイルが、このパッケージ内にあるものです。

fixes.txt
このファイルです。
makefile
最新のバージョンのmake.comで使ってください。オブジェクトファイルを生成し、ライブラリファイルをアップデートします。引数を指定しないでmakeを実行すると、できることの一覧が表示されます。
libc.lib
libf.lib
HI-TECH Cに同梱されていた同名のファイルの代替物です。
string.h
libc.libでは実際には使用可能だった文字列関数を反映して、変更したヘッダファイルです。
time.h
いくつかの追加関数を定義して変更したヘッダファイルです。

ソースファイルと関数

memchr.as void * memchr (void * s, int c, size_t n)
memmove.as void * memmove (void * dest, void * src, size_t n)
元々のlibc.libでは抜けていたものです。
memcmp.as int memcmp (void * s1, void * s2, size_t n)
memcpy.as void * memcpy (void * dest, void * src, size_t n)
元々はC言語で実装されていたこれらの関数を、より効果的に実装したものです。
memset.as void * memset (void * s, int c, size_t n)
C言語で書かれていた元々の関数では、cとnの引数の引数が入れ替わっていました。これは、標準的な順序に従っています。
strchr.as char * strchr(char * s, int c)
char * index (char * s, int c)
strrchr.as char * strrchr(char * s, int c)
char * rindex (char * s, int c)
c==0の時に、元々の関数ではNULLを返しますが、この関数ではNUL文字が閉じるアドレスを返します。
stricmp.as int strcasecmp(char *s1, char *s2)
strnicmp.as int strncasecmp(char *s1, char *s2, size_t n)
これらの拡張関数はそれぞれ、strcmpやstrncmpに似ていますが、比較の前に小文字に変換され、大文字小文字の区別した比較ができなくなっていました。
strstr.c char * strstr (char *t, char *s)
strnstr.c char * strnstr (char *t, char *s, unsigned int n)
stristr.c char * strcasestr (char *t, char *s)
strnistr.c char * strncasestr (char *t, char *s, unsigned int n)
これらの追加関数は文字列tの中で、最初に文字列sが現れた場所をしめします。strnstrやstrcasestr関数は文字列tから多くともn文字を読み込みます。strnstrやstrcasestrは大文字小文字を区別した比較ができません。
これらの全ての関数は文字列tの中で文字列sが初めて現れた位置のポインタを返します。見つからなかった場合はNULLを返します。
strdup.c char * strdup (char * s)
この関数は新しいバッファを割り当て、sで与えられる場所の文字列をコピーします。文字列のコピーへのポインターを返しますが、メモリ割り当てが失敗した時はNULLを返します。

メモリブロックはfree()で解放が可能です。

strtok.c char *strtok(char *s, char *tok, size_t toklen, char *brk)
この関数はsからtokへ、brk内の文字に遭遇するか、toklen-1の長さの文字列がコピーされるまで、文字をコピーします。そして、その後、終端のゼロを付加します。
この関数はposix標準を構成しません。
time.c time_t time (time_t * tp)
time_t timerset (time_t t)
int timeup (time_t t)
msxtime.as time_t msxtime ()
time関数は1970年1月1日の00:00:00からの秒数(unixスタイル)を扱います。timersetとtimeup はとても便利で、特定の間隔の時間が経過したか確認ができます。実際の変換はMSX時間です。
getch.as char getch(void); /* get character */
char getche(void); /* get/echo character */
void putch(int); /* output character to console*/
void ungetch(int); /* unget character */
int kbhit(void); /* true if keyboard hit */
void cursor(char onoff)
conio.hで定義されている関数の高速化版です。
inout.as byte in(byte io-address)
byte out(byte io-address,byte value)
void di();
void ei();

in()とout()関数はCPUのIOポートに直接アクセスするために使われます。割り込みはそれぞれdi()とei()で無効化、有効化ができます。

これらの関数が有効化、無効化を制御するのは、CPUからというよりむしろVDPから発生したものです。というのも、多くのMSX Biosルーチンはそれが割り込み禁止の状態で呼ばれても、割り込みを許可してしまうからです。
peekpoke.as void poke(word address, byte value)
byte peek(word address)
この関数は、それぞれがより効果的な次のものと等価です。
(*((byte*)address)) = value
(*((byte*)address))
BASICの経験のあるプログラマは、親しみがあることでしょう。
sleep.c void sleep (unsigned int seconds)
この関数は与えられた秒数が経過するまで何もしません。
strftime.c size_t strftime(char *s, size_t maxs, char *f, struct tm *t)
この関数は時間をはかり、それをfで与えられたフォーマット文字列へ変換します。
convtime.c long convtime(unsigned int dostime, unsigned int dosdate)
このルーチンはMS(X)DOSの日付をunixスタイルの日付、つまり1970年1月1日の00:00:00からの秒数に変更します。
fdoprnt.c doprnt(FILE* fp, char* format, ...)
doprnt.c doprnt(FILE* fp, char* format, ...)
Printfと、それに類似したデータ整形用の関数に使われるルーチンです。fdoprntは変種を持ち浮動小数点も取り扱えます。

元々のバージョンは文字列の長さを保持するのに8bitを使っていましたが。255文字以上の時に失敗します。 もしも、このような長い文字列を使う必要がなければ、小さくて速いもともとの関数を使った方がいいかもしれません。

fbcd.obj
HI-TECH社から提供されたソースでは正しいのに、libc.lib内のオブジェクトファイルではそうでないという、とても不思議な、浮動小数点数の数値を表示するための内部ルーチンです。
frelop.as
同じ"べき数"を持つ負の数の比較で、間違った結果を返すバグを修正した内部ルーチンです。
rcsv.as
サイズとスピードの面で少し改善した内部ルーチンです。