-

差分

移動先: 案内検索

LIBRARIES PUBLIC DOCUMENT LIBFIX

7,819 バイト追加, 2017年8月12日 (土) 06:14
ページの作成:「 Libfix_jp == このライブラリについて == HI-TECH Cと一緒に提供されるライブラリの修正版です。 HI-TECH社は親切なことに、このCP/M...」

Libfix_jp
== このライブラリについて ==
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
:サイズとスピードの面で少し改善した内部ルーチンです。

案内メニュー