home *** CD-ROM | disk | FTP | other *** search
- /* -----------------------------------------------------: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
-