 MSX-C Ver1.1 e֐gZbg}jA
 By Tatsu(qBF) 1995

{pbP[WɊ܂܂t@C̓ełB
ETCLIB  .C   :e֐ibj\[Xt@C
ETCLIBA .MAC :e֐iAZuj\[Xt@C
ETCLIB  .REL :e֐Cu{
ETCLIB  .TCO :e֐FPC pp[^[t@C
ETCLIB  .H   :e֐wb_[t@C
ETCLIB  .DOC :AȂǂłt@CłB
MKELIBA .BAT :Cuč\zpob`t@C
MKELIBC .BAT :Cuč\zpob`t@C

{CȗΏ
@MSX-C Ver1.1

̃Cu͉҂H
@ MSX-C Ver.1.1ɂ͂ȂȀnɂ݂͑Ǝv֐A MSX-C Ver.1.1ɍ킹`ňڐA֐̃pbP[WłB

{Cu̍č\z@
@{Cu͂bŏꂽ֐ƁAAZuŏꂽ֐݂Ă̂ŁAL̎菇ɏ]ăRpC邱ƂŁA{pbP[WƓeč\zł܂B
CF etclib
mx etclib
mkelibc
mx etcliba
mkeliba
lib80 etclib2.rel=etclib.LIB,etcliba.LIB/E
fpc -c etclibp etclib
del etclib.tco
ren etclibp.tco etclib.tco
ren etclib2.rel etclib.rel
@č\źu{pbP[WɊ܂܂t@C̓ełBv̍ɂt@CȊO͏Ă܂Ă܂܂B܂Aԃt@C߂Ȃ̂ŁAfBNgɏ\ȗ]TfBXNōč\zsĂB

g
@\[Xt@C쐬ɂ́A#includegăwb_[t@CETCLIB.Hǂݍ܂ĂBFPC.COM gpɂETCLIB.TCOǂݍ܂ĂBŌɁANETCLIB.RELMLIB.RELyсACLIB.REL̑OɃN悤ɂĂBŁA{Zbg𗘗pvO\ƂȂ܂Blrw|b@uPDQgƂ̓\[Xt@CāAg֐̃Cuɉ悤ɂƂ悢ł傤B

zzɂ
@{Cu̓t[\tgEFAƂ܂Bzz͎RłB쌠͕Ă܂Bi{ł͕łȂBj{Cug\tg̔zzɂĂ͎gpn̋Kɏ܂B

Cu֐t@X

unsigned rotl(val,cnt)
unsigned val;
char cnt;
@valcnt񍶂Ƀ[e[gԂ܂B

unsigned rotr(val,cnt)
unsigned val;
char cnt;
@valcntEɃ[e[gԂ܂B

char *getdpb(drive)
char drive;
@ driveŎw肵hCui0=Jg 1=A 2=B ...j DPB̃AhXԂ܂B DPBɂ͉L̍\̂găANZXł܂Bɂ DPB̃AhXAsNULLԂ܂B
typedef struct dpb{
        char drive;   /* hCuԍ */
        char id;      /* fBAhc */
        int sec_s;    /* ZN^TCY */
        char d_mask;  /* fBNgE}XN */
        char d_sft;   /* fBNgEVtg */
        char c_mask;  /* NX^E}XN */
        char c_sft;   /* NX^EVtgiZN^ɂNX^TCY-1j */
        int fi_fat;   /* e`s̐擪ZN^ */
        char fat_c;   /* e`s̃Rs[ */
        char ents;    /* [gfBNgGg */
        int fi_dat;   /* f[^̈̐擪ZN^ */
        int la_cls;   /* ŏINX^ԍiNX^+1j */
        char si_fat;  /* e`sTCYiZN^Pʁj */
        int fi_dir;   /* fBNg̈̐擪ZN^ */
        char *fatbuf; /* e`sobt@̃AhXiVXeEj */
} DPB;
@̊֐܂łAZug֐łB

VOID getdate(date)
struct dosdate_t *date;
@VXě݂̓t𓾂*dateɃZbg܂Bdosdate_t^\̂<etclib.h>Ŏ̂悤ɒ`Ă܂B
struct  dosdate_t       {
	char   day;       /* (1-31)        */
	char   month;     /* (1-12)        */
	unsigned int    year;      /* N(1980-2099)   */
	char   dayofweek; /* j(0:j...) */
};

STATUS setdate(date)
struct dosdate_t *date;
@VXě݂̓t *dateɃZbg܂BƂOAs0xffԂ܂B

VOID gettime(time)
struct dostime_t *time;
@VXě݂̓t𓾂*timeɃZbg܂Bdostime_t^\̂<etclib.h>Ŏ̂悤ɒ`Ă܂B
struct  dostime_t       {
	char hour;    /* (0-23) */
	char minute;  /* (0-59) */
	char second;  /* b(0-59) */
	char hsecond; /* 1/100b(0-99) */
};

STATUS settime(time)
struct dostime_t *time;
@VXě݂̎ *timeɃZbg܂BƂOAs0xffԂ܂B

char findfirst(mask,dir)
char *mask;
DIR *dir;
@mask̏ɍt@C܂Bt@CƂ͂OAȂ0xffԂ܂Bmaskɂ̓ChJ[hgp邱Ƃł܂Bt@C̏͑QŎw肵\̂ɓ܂B

char findnext(dir)
DIR *dir;
@findfirst ֐̎wɃ}b`̃t@ČɎgpAPƂł̎gp͂ł܂Bt@CƂ͂OAȂ0xffԂ܂Bt@C͈̏Ŏw肵\̂ɓ܂B

findfirst(),findnext()֐Ŏg\̂̓e
typedef struct dirs{
	char drive; /* hCuԍ@*/
	char name[8];/*@t@C@*/
	char ext[3];/*@gq@*/
	char atr;/*@@*/
	char dummy[10];/**/
	int time;/*@XV@*/
	int date;/*@XV@*/
	int clst;/*@擪NX^ԍ@*/
	int size[2];/*@̧ٻށ@*/
} DIR;

char *calloc(n,s)
unsigned n,s;
@calloc͍x̃Ǘs֐łBnsoCg̃ubNq[v̈悩؂oA؂oꂽubN̐擪ւ̃|C^֐̒lƂĕԂ܂BAq[v̈ɏ\ȃƂnsÔƂɂ́ANULL֐̒lƂĕԂ܂B̃̊Jfree֐ōsĉB

VOID getdrive(drive)
unsigned *drive;
@JghCu̓e *driveɃZbg܂BiA=0 B=1 ...j

VOID setdrive(drive,drives)
unsigned drive;
unsigned *drives;
@JghCudriveɃZbgiA=0 B=1 ...jA *drivesɘ_hCuZbg܂B܂֌W܂񂪁AhCu𒲂ׂ̂ɂ MSXeNjJKChubNɂ悤Ȗʓ|Ȏ菇KvȏA܂ӖȂ̂ōC͂܂B

char putch(c)
char c;
@R\[ɕco͂܂B

STATUS cprintf(format,arg1,arg2,...)
char *format;
int cscanf(format,arg1,arg2,...)
char *format;
@MSX-C Ver1.1̓֐𗘗pprintf(),scanf()̕KR\[ɏo͂o[WłBڂ́AMSX-C Ver1.1̃}jAĂB

char *cgets(s)
char *s;
@R\[A͂A sɊi[܂Bs[0]ɂ͓͂ő啶ĂBs[1]ɂ͓͂ꂽ܂BCR/LF '\0'ɕϊ܂B^[lƂāA͂ꂽւ̃|C^A܂&s[2]Ԃ܂B

VOID cputs(s)
char *s;
@R\[ɕso͂܂B'\n'CR/LF ւ̓WJ͍s܂B

VOID swab(s,t,n)
char *s;
char *t;
int n;
@stnoCgQoCggƂďԂւȂRs[܂Bn͋łKv܂B

unsigned getdiskfree(device,diskspace)
unsigned device;
struct diskfree_t *diskspace;
@fBXNhCudevicei0=Jg 1=A 2=B ...j̏𓾂܂Bꂽ*diskspaceɃZbg܂Bdiskfree_t^\̂<etclib.h>Ŏ̂悤ɒ`Ă܂BƂOAsƂPԂ܂B
struct  diskfree_t      {
	unsigned total_clusters;      /* NX^             */
	unsigned avail_clusters;      /* gp\NX^       */
	unsigned sectors_per_cluster; /* NX^̃ZN^ */
	unsigned bytes_per_sector;    /* ZN^̃oCg   */
};

#pragma recursive
char *bsearch(key,base,membs,size,compar)
char *key;
char *base;
unsigned membs;
unsigned size;
int     (*compar)();
@sizeoCg̗vf membs鏸Ƀ\[gꂽzbase̒ keyƓvfQT@ŒTÃAhXԂ܂Brɂ͂Q̃|C^xyɂāA̒lԂcompar̎w֐g܂B
*x > *y̎ 
*x = *y̎ 0
*x < *y̎ 
@ԂlƂāA keyƓvf̃AhXԂAȂƂNULLԂ܂B
@ȌdčċAĂяo𗘗p܂̂ŁA\ȑ傫̃t[GApӂĂB

Ō
@LSI C-86 Ver.3.30 Hł̊֐Qlɂ̂ŁA MSX-C猩ƊsRȎdl邩܂B̃Cuƍ킹邱Ƃ MSX-C̊֐CibvX͂ȂƂ܂ŗƎv܂BCuŁAĴ́AMSX-DOS1̐ɂAA_[o[炢ƁAL80,Lib80 ̐ŁAV{̕ȂA؂̂Č̃V{dȂƂlȂ΂ȂȂƂłBɂAfBNgGgA MSX2+̃Xs[hȂǁAȓ_͂܂A MSX-C̏nɓ₷̂ŋĂ܂傤Bł́A͂̕ӂŎ炵܂B

