version 1.3, 2000/08/22 05:04:28 |
version 1.8, 2017/08/31 02:36:21 |
|
|
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* |
* |
* $OpenXM: OpenXM_contrib2/asir2000/parse/stdio.c,v 1.2 2000/08/21 08:31:47 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/parse/stdio.c,v 1.7 2005/10/19 04:51:15 noro Exp $ |
*/ |
*/ |
#include <stdio.h> |
#include <stdio.h> |
#include <stdlib.h> |
#include <stdlib.h> |
Line 61 static struct w_buf { |
|
Line 61 static struct w_buf { |
|
} W_BUF; |
} W_BUF; |
|
|
static int noflush; |
static int noflush; |
|
extern int emergency; |
|
|
#define INBUF_EMPTY (W_BUF.inpos >= W_BUF.inlen) |
#define INBUF_EMPTY (W_BUF.inpos >= W_BUF.inlen) |
|
|
|
void w_purge_stdin(void) |
|
{ |
|
W_BUF.inpos = 0; |
|
W_BUF.inlen = 0; |
|
} |
|
|
int w_filbuf(void) |
int w_filbuf(void) |
{ |
{ |
int status = get_line(W_BUF.inbuf); |
int status = get_line(W_BUF.inbuf); |
|
|
|
/* XXX */ |
|
if ( emergency ) return 0; |
|
|
W_BUF.inpos = 0; |
W_BUF.inpos = 0; |
W_BUF.inlen = strlen(W_BUF.inbuf); |
W_BUF.inlen = strlen(W_BUF.inbuf); |
return status; |
return status; |
} |
} |
|
|
int w_flushbuf(void) { |
int w_flushbuf(void) { |
|
/* XXX */ |
|
if ( emergency ) return 0; |
|
|
W_BUF.outbuf[W_BUF.outpos] = 0; |
W_BUF.outbuf[W_BUF.outpos] = 0; |
W_BUF.outpos = 0; |
W_BUF.outpos = 0; |
put_line(W_BUF.outbuf); |
put_line(W_BUF.outbuf); |
Line 135 int unget_char(int c) |
|
Line 149 int unget_char(int c) |
|
return c; |
return c; |
} |
} |
|
|
int put_char(int c,FILE *file) |
int win_put_string(char *s,FILE *file); |
|
|
|
int win_put_char(int c,FILE *file) |
{ |
{ |
static char s[2]; |
static char s[2]; |
|
|
s[0] = (char)c; |
s[0] = (char)c; |
put_string(s,file); |
win_put_string(s,file); |
return c; |
return c; |
} |
} |
|
|
int put_string(char *s,FILE *file) |
int win_put_string(char *s,FILE *file) |
{ |
{ |
char c; |
char c; |
|
|
Line 186 int w_ungetc(int c, FILE *file) |
|
Line 202 int w_ungetc(int c, FILE *file) |
|
int w_fputc(int c, FILE *file) |
int w_fputc(int c, FILE *file) |
{ |
{ |
if ( file == stdout || file == stderr ) |
if ( file == stdout || file == stderr ) |
return put_char(c,file); |
return win_put_char(c,file); |
else |
else |
return fputc(c,file); |
return fputc(c,file); |
} |
} |
|
|
int w_fputs(char *s, FILE *file) |
int w_fputs(char *s, FILE *file) |
{ |
{ |
int status; |
|
|
|
if ( file == stdout || file == stderr ) |
if ( file == stdout || file == stderr ) |
return put_string(s,file); |
return win_put_string(s,file); |
else |
else |
return fputs(s,file); |
return fputs(s,file); |
} |
} |
Line 205 int w_printf(char *format, ...) |
|
Line 219 int w_printf(char *format, ...) |
|
{ |
{ |
va_list ap; |
va_list ap; |
int status; |
int status; |
char buf[BUFSIZ]; |
static char *buf; |
|
static int bufsiz=0; |
|
|
|
if ( !bufsiz ) { |
|
bufsiz = BUFSIZ*10; buf = (char *)malloc(bufsiz); |
|
} |
va_start(ap,format); |
va_start(ap,format); |
|
status = vsnprintf(buf,0,format,ap); |
|
if ( status > bufsiz ) { |
|
bufsiz = 2*status; free(buf); buf = (char *)malloc(bufsiz); |
|
} |
status = vsprintf(buf,format,ap); |
status = vsprintf(buf,format,ap); |
put_string(buf,stdout); |
win_put_string(buf,stdout); |
return status; |
return status; |
} |
} |
|
|
Line 217 int w_fprintf(FILE *file, char *format, ...) |
|
Line 239 int w_fprintf(FILE *file, char *format, ...) |
|
{ |
{ |
va_list ap; |
va_list ap; |
int status; |
int status; |
char buf[BUFSIZ]; |
static char *buf; |
|
static int bufsiz=0; |
|
|
|
if ( !bufsiz ) { |
|
bufsiz = BUFSIZ*10; buf = (char *)malloc(bufsiz); |
|
} |
va_start(ap,format); |
va_start(ap,format); |
if ( file == stdout || file == stderr ) { |
if ( file == stdout || file == stderr ) { |
|
status = vsnprintf(buf,0,format,ap); |
|
if ( status > bufsiz ) { |
|
bufsiz = 2*status; free(buf); buf = (char *)malloc(bufsiz); |
|
} |
status = vsprintf(buf,format,ap); |
status = vsprintf(buf,format,ap); |
put_string(buf,file); |
win_put_string(buf,file); |
} else { |
} else { |
status = vfprintf(file,format,ap); |
status = vfprintf(file,format,ap); |
} |
} |