Category : C++ Source Code
Archive   : VCCRT2.ZIP
Filename : SPRINTF.C

 
Output of file : SPRINTF.C contained in archive : VCCRT2.ZIP
/***
*sprintf.c - print formatted to string
*
* Copyright (c) 1985-1992, Microsoft Corporation. All rights reserved.
*
*Purpose:
* defines sprintf() - print formatted data to string
*
*******************************************************************************/

#include
#include
#include
#include
#include
#include

#define MAXSTR INT_MAX


/***
#ifndef _COUNT_
*int sprintf(string, format, ...) - print formatted data to string
#else
*int _snprintf(string, cnt, format, ...) - print formatted data to string
#endif
*
*Purpose:
* Prints formatted data to the using the format string to
* format data and getting as many arguments as called for
* Sets up a FILE so file i/o operations can be used, make string look
* like a huge buffer to it, but _flsbuf will refuse to flush it if it
* fills up. Appends '\0' to make it a true string.
* _output does the real work here
*
* Allocate the 'fake' _iob[] entryit statically instead of on
* the stack so that other routines can assume that _iob[] entries are in
* are in DGROUP and, thus, are near.
*
#ifdef _COUNT_
* The _snprintf() flavor takes a count argument that is
* the max number of bytes that should be written to the
* user's buffer.
#endif
*
* Multi-thread: (1) Since there is no stream, this routine must never try
* to get the stream lock (i.e., there is no stream lock either). (2)
* Also, since there is only one staticly allocated 'fake' iob, we must
* lock/unlock to prevent collisions.
*
*Entry:
* char *string - pointer to place to put output
#ifdef _COUNT_
* size_t count - max number of bytes to put in buffer
#endif
* char *format - format string to control data format/number of arguments
* followed by list of arguments, number and type controlled by
* format string
*
*Exit:
* returns number of characters printed
*
*Exceptions:
*
*******************************************************************************/

#ifndef _COUNT_

int
sprintf (char *string, const char *format, ...)

#else

int
_snprintf (char *string, size_t count, const char *format, ...)

#endif


{

static FILE _NEAR_ str;
REG1 FILE _NEAR_ *outfile = &str;
va_list arglist;
REG2 int retval;

va_start(arglist, format);

assert(string != NULL);
assert(format != NULL);


outfile->_flag = _IOWRT|_IOSTRG;
outfile->_ptr = outfile->_base = string;
#ifndef _COUNT_
outfile->_cnt = MAXSTR;
#else
outfile->_cnt = count;
#endif

retval = _output(outfile,format,arglist);

putc('\0',outfile); /* no-lock version */


return(retval);
}


  3 Responses to “Category : C++ Source Code
Archive   : VCCRT2.ZIP
Filename : SPRINTF.C

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/