?? clib.arc
字號:
fopen(fn, mode) char *fn, *mode; {
int fd;
if(!_open(fn, mode, &fd)) return (NULL);
return (fd);
}
>>> FPRINTF.C 2133
#include "stdio.h"
/*
** fprintf(fd, ctlstring, arg, arg, ...) - Formatted print.
** Operates as described by Kernighan & Ritchie.
** b, c, d, o, s, u, and x specifications are supported.
** Note: b (binary) is a non-standard extension.
*/
fprintf(argc) int argc; {
int *nxtarg;
nxtarg = CCARGC() + &argc;
return(_print(*(--nxtarg), --nxtarg));
}
/*
** printf(ctlstring, arg, arg, ...) - Formatted print.
** Operates as described by Kernighan & Ritchie.
** b, c, d, o, s, u, and x specifications are supported.
** Note: b (binary) is a non-standard extension.
*/
printf(argc) int argc; {
return(_print(stdout, CCARGC() + &argc - 1));
}
/*
** _print(fd, ctlstring, arg, arg, ...)
** Called by fprintf() and printf().
*/
_print(fd, nxtarg) int fd, *nxtarg; {
int arg, left, pad, cc, len, maxchr, width;
char *ctl, *sptr, str[17];
cc = 0;
ctl = *nxtarg--;
while(*ctl) {
if(*ctl!='%') {fputc(*ctl++, fd); ++cc; continue;}
else ++ctl;
if(*ctl=='%') {fputc(*ctl++, fd); ++cc; continue;}
if(*ctl=='-') {left = 1; ++ctl;} else left = 0;
if(*ctl=='0') pad = '0'; else pad = ' ';
if(isdigit(*ctl)) {
width = atoi(ctl++);
while(isdigit(*ctl)) ++ctl;
}
else width = 0;
if(*ctl=='.') {
maxchr = atoi(++ctl);
while(isdigit(*ctl)) ++ctl;
}
else maxchr = 0;
arg = *nxtarg--;
sptr = str;
switch(*ctl++) {
case 'c': str[0] = arg; str[1] = NULL; break;
case 's': sptr = arg; break;
case 'd': itoa(arg,str); break;
case 'b': itoab(arg,str,2); break;
case 'o': itoab(arg,str,8); break;
case 'u': itoab(arg,str,10); break;
case 'x': itoab(arg,str,16); break;
default: return (cc);
}
len = strlen(sptr);
if(maxchr && maxchr<len) len = maxchr;
if(width>len) width = width - len; else width = 0;
if(!left) while(width--) {fputc(pad,fd); ++cc;}
while(len--) {fputc(*sptr++,fd); ++cc; }
if(left) while(width--) {fputc(pad,fd); ++cc;}
}
return(cc);
}
>>> FPUTC.C 544
#include "stdio.h"
#include "clib.h"
extern int _status[];
/*
** Character-stream output of a character to fd.
** Entry: ch = Character to write.
** fd = File descriptor of perinent file.
** Returns character written on success, else EOF.
*/
fputc(ch, fd) int ch, fd; {
switch(ch) {
case EOF: _write(DOSEOF, fd); break;
case '\n': _write(CR, fd); _write(LF, fd); break;
default: _write(ch, fd);
}
if(_status[fd] & ERRBIT) return (EOF);
return (ch);
}
#asm
_putc: jmp _fputc
public _putc
#endasm
>>> FPUTS.C 264
#include "stdio.h"
#include "clib.h"
/*
** Write a string to fd.
** Entry: string = Pointer to null-terminated string.
** fd = File descriptor of pertinent file.
*/
fputs(string, fd) char *string; int fd; {
while(*string) fputc(*string++, fd) ;
}
>>> FREAD.C 887
#include "clib.h"
extern int _status[];
/*
** Item-stream read from fd.
** Entry: buf = address of target buffer
** sz = size of items in bytes
** n = number of items to read
** fd = file descriptor
** Returns a count of the items actually read.
** Use feof() and ferror() to determine file status.
*/
fread(buf, sz, n, fd) unsigned char *buf; unsigned sz, n, fd; {
return (read(fd, buf, n*sz)/sz);
}
/*
** Binary-stream read from fd.
** Entry: fd = file descriptor
** buf = address of target buffer
** n = number of bytes to read
** Returns a count of the bytes actually read.
** Use feof() and ferror() to determine file status.
*/
read(fd, buf, n) unsigned fd, n; unsigned char *buf; {
unsigned cnt;
cnt = 0;
while(n--) {
*buf++ = _read(fd);
if(_status[fd] & (ERRBIT | EOFBIT)) break;
++cnt;
}
return (cnt);
}
>>> FREE.C 374
extern char *_memptr;
/*
** free(ptr) - Free previously allocated memory block.
** Memory must be freed in the reverse order from which
** it was allocated.
** ptr = Value returned by calloc() or malloc().
** Returns ptr if successful or NULL otherwise.
*/
free(ptr) char *ptr; {
return (_memptr = ptr);
}
#asm
_cfree: jmp _free
public _cfree
#endasm
>>> FREOPEN.C 799
#include <stdio.h>
#include "clib.h"
/*
** Close previously opened fd and reopen it.
** Entry: fn = Null-terminated DOS file name.
** mode = "a" - append
** "r" - read
** "w" - write
** "a+" - append update
** "r+" - read update
** "w+" - write update
** fd = File descriptor of pertinent file.
** Returns the original fd on success, else NULL.
*/
extern int _status[];
freopen(fn, mode, fd) char *fn, *mode; int fd; {
int tfd;
if(fclose(fd)) return (NULL);
if(!_open(fn, mode, &tfd)) return (NULL);
if(fd != tfd) {
if(_bdos2(FORCE<<8, tfd, fd, NULL) < 0) return (NULL);
_status[fd] = _status[tfd];
_status[tfd] = 0; /* leaves DOS using two handles */
}
return (fd);
}
>>> FSCANF.C 2479
#include "stdio.h"
/*
** fscanf(fd, ctlstring, arg, arg, ...) - Formatted read.
** Operates as described by Kernighan & Ritchie.
** b, c, d, o, s, u, and x specifications are supported.
** Note: b (binary) is a non-standard extension.
*/
fscanf(argc) int argc; {
int *nxtarg;
nxtarg = CCARGC() + &argc;
return (_scan(*(--nxtarg), --nxtarg));
}
/*
** scanf(ctlstring, arg, arg, ...) - Formatted read.
** Operates as described by Kernighan & Ritchie.
** b, c, d, o, s, u, and x specifications are supported.
** Note: b (binary) is a non-standard extension.
*/
scanf(argc) int argc; {
return (_scan(stdin, CCARGC() + &argc - 1));
}
/*
** _scan(fd, ctlstring, arg, arg, ...) - Formatted read.
** Called by fscanf() and scanf().
*/
_scan(fd,nxtarg) int fd, *nxtarg; {
char *carg, *ctl;
unsigned u;
int *narg, wast, ac, width, ch, cnv, base, ovfl, sign;
ac = 0;
ctl = *nxtarg--;
while(*ctl) {
if(isspace(*ctl)) {++ctl; continue;}
if(*ctl++ != '%') continue;
if(*ctl == '*') {narg = carg = &wast; ++ctl;}
else narg = carg = *nxtarg--;
ctl += utoi(ctl, &width);
if(!width) width = 32767;
if(!(cnv = *ctl++)) break;
while(isspace(ch = fgetc(fd))) ;
if(ch == EOF) {if(ac) break; else return(EOF);}
ungetc(ch,fd);
switch(cnv) {
case 'c':
*carg = fgetc(fd);
break;
case 's':
while(width--) {
if((*carg = fgetc(fd)) == EOF) break;
if(isspace(*carg)) break;
if(carg != &wast) ++carg;
}
*carg = 0;
break;
default:
switch(cnv) {
case 'b': base = 2; sign = 1; ovfl = 32767; break;
case 'd': base = 10; sign = 0; ovfl = 3276; break;
case 'o': base = 8; sign = 1; ovfl = 8191; break;
case 'u': base = 10; sign = 1; ovfl = 6553; break;
case 'x': base = 16; sign = 1; ovfl = 4095; break;
default: return (ac);
}
*narg = u = 0;
while(width-- && !isspace(ch=fgetc(fd)) && ch!=EOF) {
if(!sign)
if(ch == '-') {sign = -1; continue;}
else sign = 1;
if(ch < '0') return (ac);
if(ch >= 'a') ch -= 87;
else if(ch >= 'A') ch -= 55;
else ch -= '0';
if(ch >= base || u > ovfl) return (ac);
u = u * base + ch;
}
*narg = sign * u;
}
++ac;
}
return (ac);
}
>>> FWRITE.C 959
#include "clib.h"
extern int _status[];
/*
** Item-stream write to fd.
** Entry: buf = address of source buffer
** sz = size of items in bytes
** n = number of items to write
** fd = file descriptor
** Returns a count of the items actually written or
** zero if an error occurred.
** May use ferror(), as always, to detect errors.
*/
fwrite(buf, sz, n, fd) unsigned char *buf; unsigned sz, n, fd; {
if(write(fd, buf, n*sz) == -1) return (0);
return (n);
}
/*
** Binary-stream write to fd.
** Entry: fd = file descriptor
** buf = address of source buffer
** n = number of bytes to write
** Returns a count of the bytes actually written or
** -1 if an error occurred.
** May use ferror(), as always, to detect errors.
*/
write(fd, buf, n) unsigned fd, n; unsigned char *buf; {
unsigned cnt;
cnt = n;
while(cnt--) {
_write(*buf++, fd);
if(_status[fd] & ERRBIT) return (-1);
}
return (n);
}
>>> GETARG.C 626
#include "stdio.h"
/*
** Get command line argument.
** Entry: n = Number of the argument.
** s = Destination string pointer.
** size = Size of destination string.
** argc = Argument count from main().
** argv = Argument vector(s) from main().
** Returns number of characters moved on success,
** else EOF.
*/
getarg(n, s, size, argc, argv)
int n; char *s; int size, argc, argv[]; {
char *str;
int i;
if(n < 0 | n >= argc) {
*s = NULL;
return EOF;
}
i = 0;
str=argv[n];
while(i<size) {
if((s[i]=str[i])==NULL) break;
++i;
}
s[i]=NULL;
return i;
}
>>> GETCHAR.C 111
#include "stdio.h"
/*
** Get next character from standard input.
*/
getchar() {
return (fgetc(stdin));
}
>>> IS.C 2057
/*
** All character classification functions except isascii().
** Integer argument (c) must be in ASCII range (0-127) for
** dependable answers.
*/
#define ALNUM 1
#define ALPHA 2
#define CNTRL 4
#define DIGIT 8
#define GRAPH 16
#define LOWER 32
#define PRINT 64
#define PUNCT 128
#define BLANK 256
#define UPPER 512
#define XDIGIT 1024
int _is[128] = {
0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004,
0x004, 0x104, 0x104, 0x104, 0x104, 0x104, 0x004, 0x004,
0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004,
0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004,
0x140, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0,
0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0,
0x459, 0x459, 0x459, 0x459, 0x459, 0x459, 0x459, 0x459,
0x459, 0x459, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0,
0x0D0, 0x653, 0x653, 0x653, 0x653, 0x653, 0x653, 0x253,
0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253,
0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253,
0x253, 0x253, 0x253, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0,
0x0D0, 0x473, 0x473, 0x473, 0x473, 0x473, 0x473, 0x073,
0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073,
0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073,
0x073, 0x073, 0x073, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x004
};
isalnum (c) int c; {return (_is[c] & ALNUM );} /* 'a'-'z', 'A'-'Z', '0'-'9' */
isalpha (c) int c; {return (_is[c] & ALPHA );} /* 'a'-'z', 'A'-'Z' */
iscntrl (c) int c; {return (_is[c] & CNTRL );} /* 0-31, 127 */
isdigit (c) int c; {return (_is[c] & DIGIT );} /* '0'-'9' */
isgraph (c) int c; {return (_is[c] & GRAPH );} /* '!'-'~' */
islower (c) int c; {return (_is[c] & LOWER );} /* 'a'-'z' */
isprint (c) int c; {return (_is[c] & PRINT );} /* ' '-'~' */
ispunct (c) int c; {return (_is[c] & PUNCT );} /* !alnum && !cntrl && !space */
isspace (c) int c; {return (_is[c] & BLANK );} /* HT, LF, VT, FF, CR, ' ' */
isupper (c) int c; {return (_is[c] & UPPER );} /* 'A'-'Z' */
isxdigit(c) int c; {return (_is[c] & XDIGIT);} /* '0'-'9', 'a'-'f', 'A'-'F' */
>>> ISASCII.C 108
/*
** return 'true' if c is an ASCII character (0-127)
*/
isascii(c) unsigned c; {
return (c < 128);
}
>>> ISATTY.C 374
/*
** Return "true" if fd is a device, else "false"
*/
isatty(fd) int fd; {
fd; /* fetch handle */
#asm
push bx ; save 2nd reg
mov bx,ax ; place handle
mov ax,4400h ; ioctl get info function
int 21h ; call BDOS
pop bx ; restore 2nd reg
mov ax,dx ; fetch info bits
and ax,80h ; isdev bit
#endasm
}
>>> ISCONS.C 769
/*
** Determine if fd is the console.
*/
#include <stdio.h>
extern int _cons[];
iscons(fd) int fd; {
if(_cons[fd] == NULL) {
if(_iscons(fd)) _cons[fd] = 2;
else _cons[fd] = 1;
}
if(_cons[fd] == 1) return (NO);
return (YES);
}
/*
** Call DOS only the first time for a file.
*/
_iscons(fd) int fd; {
fd; /* fetch handle */
#asm
push bx ; save 2nd reg
mov bx,ax ; place handle
mov ax,4400h ; ioctl get info function
int 21h ; call BDOS
pop bx ; restore 2nd reg
mov ax,dx ; fetch info bits
and ax,83h ; keep device and console bits
cmp ax,80h ; device and console?
jg __cons1
xor ax,ax ; return false if not device and console
__cons1:
#endasm
}
>>> ITOA.C 276
/*
** itoa(n,s) - Convert n to characters in s
*/
itoa(n, s) char *s; int n; {
int sign;
char *ptr;
ptr = s;
if ((sign = n) < 0) n = -n;
do {
*ptr++ = n % 10 + '0';
} while ((n = n / 10) > 0);
if (sign < 0) *ptr++ = '-';
*ptr = '\0';
reverse(s);
}
>>> ITOAB.C 425
/*
** itoab(n,s,b) - Convert "unsigned" n to characters in s using base b.
** NOTE: This is a non-standard function.
*/
itoab(n, s, b) int n; char *s; int b; {
char *ptr;
int lowbit;
ptr = s;
b >>= 1;
do {
lowbit = n & 1;
n = (n >> 1) & 32767;
*ptr = ((n % b) << 1) + lowbit;
if(*ptr < 10) *ptr += '0'; else *ptr += 55;
++ptr;
} while(n /= b);
*ptr = 0;
reverse (s);
}
>>> ITOD.C 623
#include "stdio.h"
/*
** itod -- convert nbr to signed decimal string of width sz
** right adjusted, blank filled; returns str
**
** if sz > 0 terminate with null byte
** if sz = 0 find end of string
** if sz < 0 use last byte for data
*/
itod(nbr, str, sz) int nbr; char str[]; int sz; {
char sgn;
if(nbr<0) {nbr = -nbr; sgn='-';}
else sgn=' ';
if(sz>0) str[--sz]=NULL;
else if(sz<0) sz = -sz;
else while(str[sz]!=NULL) ++sz;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -