home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Fish 1
/
GoldFishApril1994_CD1.img
/
d1xx
/
d111
/
assigndev
/
fprints.c
< prev
next >
Wrap
C/C++ Source or Header
|
1987-11-15
|
2KB
|
83 lines
/* -----------------------------------------------------:ts=8-------------
*
* FPRINTS
*
* A simplified version of fprintf, which only supports %s format.
*
* Usage: int count = fprints(BPTR struct FileHandle, char *format,
* char *argument, ... );
* The format string consists of characters which are output, except for
* the combination `%s' which is replaced by the string pointed to by
* the corresponding `argument'.
* A non-recognized character following the % is output literally, so
* you may use %% to output a single percent sign.
* The returned value `count' is the number of characters that should
* have been written, or 0 if an error has been detected.
* Note that errors are NOT detected.
*
* ----------------------------------------------------------------------- */
#define BUFSIZE 80
#define OVERKILL 0
#define PutChar(b,c) {(b).Buf[(b).Count++]=c;}
#define MayFlushBuffer(b) {if((b).Count>=BUFSIZE) FlushBuffer(b);}
#define FlushBuffer(b)\
{Write((b).Fh, &(b).Buf, (long)(b).Count); (b).Count=0;}
typedef struct {
unsigned short Count; /* Number of chars in the buffer */
long Fh; /* FileHandle assiciated with it */
char Buf[BUFSIZE+OVERKILL];
} BUFFER;
static BUFFER Buffer; /* NOT re-entrant */
/*VARARGS*/ /* Does anyone know a nice sweet lint for me? */
int fprints(file, format, arguments)
long file;
register char *format;
char *arguments;
{
register char **argptr = &arguments;
register char *argchar;
register char ch;
int total = 0;
Buffer.Fh = file;
Buffer.Count = 0;
while (ch = *format++) { /* Until the end of the format string */
if ((ch == '%') && ((ch = *format++) == 's')) {
argchar = *argptr++;
while (ch = *argchar++) { /* Copy the argument */
PutChar(Buffer, ch);
MayFlushBuffer(Buffer);
total++;
}
continue;
} else { /* A normal character: copy it to the buffer */
PutChar(Buffer, ch);
MayFlushBuffer(Buffer);
total++;
}
} /* End while format string */
if (Buffer.Count)
FlushBuffer(Buffer); /* Write out the rest of the buffer */
return total;
}
#if 0 /* Currently not used anymore */
int fputs(file, string)
long file;
char *string;
{
return Write(file, string, strlen(string));
}
#endif