-
「LIBRARIES PUBLIC DOCUMENT LIBFIX」の版間の差分
(ページの作成:「 Libfix_jp == このライブラリについて == HI-TECH Cと一緒に提供されるライブラリの修正版です。 HI-TECH社は親切なことに、このCP/M...」) |
(タグ: モバイル編集、モバイルウェブ編集) |
||
1行目: | 1行目: | ||
− | |||
− | |||
== このライブラリについて == | == このライブラリについて == | ||
HI-TECH Cと一緒に提供されるライブラリの修正版です。 | HI-TECH Cと一緒に提供されるライブラリの修正版です。 |
2017年8月12日 (土) 06:15時点における版
このライブラリについて
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
- サイズとスピードの面で少し改善した内部ルーチンです。