⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wtstream.c

📁 Npc Generator
💻 C
字号:
#include <stdio.h>#include <stdarg.h>#include <string.h>#include <stdlib.h>#include "wtstream.h"/* ---------------------------------------------------------------------- * * Constant definitions * ---------------------------------------------------------------------- */#define MAX_POSSIBLE_BUFFER_LEN  ( 64000 )/* ---------------------------------------------------------------------- * * Public method implementation * ---------------------------------------------------------------------- */wtSTREAM_t* wtOpenFileStream( char* fname, char* mode ) {  wtSTREAM_t* stream;  FILE*       f;  f = fopen( fname, mode );  if( f == NULL ) {    return NULL;  }  stream = (wtSTREAM_t*)malloc( sizeof( wtSTREAM_t ) );  memset( stream, 0, sizeof( *stream ) );  stream->type = stFILE;  stream->stream.file.fp = f;  stream->stream.file.closeable = 1;  return stream;}wtSTREAM_t* wtOpenFileStreamFromHandle( FILE* fp ) {  wtSTREAM_t* stream;  if( fp == NULL ) {    return NULL;  }  stream = (wtSTREAM_t*)malloc( sizeof( wtSTREAM_t ) );  memset( stream, 0, sizeof( *stream ) );  stream->type = stFILE;  stream->stream.file.fp = fp;  stream->stream.file.closeable = 0;  return stream;}wtSTREAM_t* wtOpenBufferStream() {  wtSTREAM_t* stream;  stream = (wtSTREAM_t*)malloc( sizeof( wtSTREAM_t ) );  memset( stream, 0, sizeof( *stream ) );  stream->type = stBUFFER;  stream->stream.buffer.length = 0;  stream->stream.buffer.handle = NULL;    return stream;}wtSTREAM_t* wtOpenNullStream() {  wtSTREAM_t* stream;  stream = (wtSTREAM_t*)malloc( sizeof( wtSTREAM_t ) );  memset( stream, 0, sizeof( *stream ) );  stream->type = stNOSTREAM;  return stream;  }void wtCloseStream( wtSTREAM_t* stream ) {  switch( stream->type ) {    case stFILE:      if( stream->stream.file.closeable ) {        fclose( stream->stream.file.fp );      }      break;    case stBUFFER:      if( stream->stream.buffer.length > 0 ) {        free( stream->stream.buffer.handle );      }      break;    case stNOSTREAM:      break;  }  free( stream );}void wtPrint( wtSTREAM_t *stream, char *buffer ) {  char *temp;  int   len;  switch( stream->type ) {    case stNOSTREAM:      break;    case stFILE:      fputs( buffer, stream->stream.file.fp );      break;    case stBUFFER:      len = strlen( buffer );      if( len > 0 ) {        temp = (char*)malloc( stream->stream.buffer.length + len + 1 );        if( stream->stream.buffer.length > 0 ) {          strcpy( temp, stream->stream.buffer.handle );        }        strcpy( &temp[ stream->stream.buffer.length ], buffer );        if( stream->stream.buffer.length > 0 ) {          free( stream->stream.buffer.handle );        }        stream->stream.buffer.length += len;        stream->stream.buffer.handle = temp;      }      break;  }        }void wtPrintf( wtSTREAM_t *stream, char *format, ... ) {  va_list  args;  char    *buffer;  va_start( args, format );  buffer = (char*)malloc( MAX_POSSIBLE_BUFFER_LEN );  vsprintf( buffer, format, args );  va_end( args );  wtPrint( stream, buffer );  free( buffer );}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -