version 1.5, 2003/11/17 05:45:47 |
version 1.8, 2003/11/24 08:16:13 |
|
|
/*$OpenXM: OpenXM/src/kan96xx/plugin/file2.c,v 1.4 2001/05/04 01:06:30 takayama Exp $ */ |
/*$OpenXM: OpenXM/src/kan96xx/plugin/file2.c,v 1.7 2003/11/23 13:16:30 takayama Exp $ */ |
#include <stdio.h> |
#include <stdio.h> |
#include <sys/time.h> |
#include <sys/time.h> |
#include <sys/types.h> |
#include <sys/types.h> |
#include <unistd.h> |
#include <unistd.h> |
#include "file2.h" |
#include "file2.h" |
|
|
|
/* If you use file2 standalone to output string, |
|
make the following dummy definition; |
|
int KsocketSelect0(int a,int b) { return(0); } |
|
int oxSocketSelect0(int a,int b) { return(0); } |
|
or define FORSTRING |
|
*/ |
|
#ifdef FORSTRING |
|
#define KsocketSelect0(a,b) 0 |
|
#define oxSocketSelect0(a,b) 0 |
|
#endif |
|
|
#ifdef KXX |
#ifdef KXX |
#define GC_malloc(n) malloc(n) |
#define GC_malloc(n) malloc(n) |
#else |
#else |
Line 19 int WatchStream = 0; |
|
Line 30 int WatchStream = 0; |
|
|
|
static int debug1 = 0; |
static int debug1 = 0; |
static int checkfp2(FILE2 *fp2,char *s); |
static int checkfp2(FILE2 *fp2,char *s); |
|
static int fp2fputcString(int c,FILE2 *fp2); |
static int checkfp2(FILE2 *fp2,char *s) |
static int checkfp2(FILE2 *fp2,char *s) |
{ |
{ |
if (fp2 == NULL) { |
if (fp2 == NULL) { |
Line 38 FILE2 *fp2open(int fd) { |
|
Line 50 FILE2 *fp2open(int fd) { |
|
printf("fp2open is called. \n"); |
printf("fp2open is called. \n"); |
} |
} |
fp2 = (FILE2 *) GC_malloc(sizeof(FILE2)); |
fp2 = (FILE2 *) GC_malloc(sizeof(FILE2)); |
if (fd < 0) { |
if (fd < -1) { |
fprintf(stderr,"fp2open Invalid file descriptor %d\n",fd); |
fprintf(stderr,"fp2open Invalid file descriptor %d\n",fd); |
return(NULL); |
return(NULL); |
} |
} |
|
/* fd == -1 ==> store in string. */ |
if (fp2 == NULL) { |
if (fp2 == NULL) { |
fprintf(stderr,"fp2open. No memory.\n"); |
fprintf(stderr,"fp2open. No memory.\n"); |
return(NULL); |
return(NULL); |
Line 53 FILE2 *fp2open(int fd) { |
|
Line 66 FILE2 *fp2open(int fd) { |
|
fp2->readsize = 0; |
fp2->readsize = 0; |
fp2->writepos = 0; |
fp2->writepos = 0; |
fp2->limit = FILE2BSIZE; |
fp2->limit = FILE2BSIZE; |
|
fp2->readBuf = (char *) GC_malloc(FILE2BSIZE); |
|
fp2->writeBuf = (char *) GC_malloc(FILE2BSIZE); |
|
if ((fp2->readBuf == NULL) || (fp2->writeBuf == NULL)) { |
|
fprintf(stderr,"fp2open. No more memory.\n"); |
|
return(NULL); |
|
} |
fp2->watch = 0; |
fp2->watch = 0; |
fp2->watchFile = NULL; |
fp2->watchFile = NULL; |
fp2->mathcapList = NULL; |
fp2->mathcapList = NULL; |
Line 70 int fp2fflush(FILE2 *fp2) { |
|
Line 89 int fp2fflush(FILE2 *fp2) { |
|
printf("--------------------------\n"); |
printf("--------------------------\n"); |
} |
} |
if (checkfp2(fp2,"fp2fflush ") == -1) return(-1); |
if (checkfp2(fp2,"fp2fflush ") == -1) return(-1); |
|
if (fp2->fd == -1) return(0); |
if (fp2->writepos > 0) { |
if (fp2->writepos > 0) { |
r = write(fp2->fd,fp2->writeBuf,fp2->writepos); |
r = write(fp2->fd,fp2->writeBuf,fp2->writepos); |
fp2->writepos = 0; |
fp2->writepos = 0; |
Line 85 int fp2fflush(FILE2 *fp2) { |
|
Line 105 int fp2fflush(FILE2 *fp2) { |
|
int fp2fclose(FILE2 *fp2) { |
int fp2fclose(FILE2 *fp2) { |
int r; |
int r; |
if (checkfp2(fp2," fp2fclose ") == -1) return(-1); |
if (checkfp2(fp2," fp2fclose ") == -1) return(-1); |
|
if (fp2->fd == -1) return(0); |
r = fp2fflush(fp2); |
r = fp2fflush(fp2); |
if (r < 0) { |
if (r < 0) { |
fprintf(stderr,"fp2fclose: flush error.\n"); |
fprintf(stderr,"fp2fclose: flush error.\n"); |
Line 102 int fp2fputc(int c,FILE2 *fp2) { |
|
Line 123 int fp2fputc(int c,FILE2 *fp2) { |
|
if (fp2->watch || WatchStream) { |
if (fp2->watch || WatchStream) { |
if (fp2->watch) fp = fp2->watchFile; |
if (fp2->watch) fp = fp2->watchFile; |
else fp = stderr; |
else fp = stderr; |
|
fprintf(stderr,"put to <%x> ",fp2->fd); /* output the channel for debug */ |
if (c >= ' ' && c <='z') { |
if (c >= ' ' && c <='z') { |
fprintf(fp," %2x(%c)-> ",c& 0xff,c); |
fprintf(fp," %2x(%c)-> ",c& 0xff,c); |
}else{ |
}else{ |
Line 113 int fp2fputc(int c,FILE2 *fp2) { |
|
Line 135 int fp2fputc(int c,FILE2 *fp2) { |
|
if (checkfp2(fp2," fp2fputc ") == -1) return(-1); |
if (checkfp2(fp2," fp2fputc ") == -1) return(-1); |
(fp2->writeBuf)[fp2->writepos] = c; |
(fp2->writeBuf)[fp2->writepos] = c; |
(fp2->writepos)++; |
(fp2->writepos)++; |
|
if (fp2->fd == -1) return(fp2fputcString(c,fp2)); |
if (fp2->writepos < fp2->limit) { |
if (fp2->writepos < fp2->limit) { |
return(c); |
return(c); |
}else{ |
}else{ |
Line 132 int fp2fgetc(FILE2 *fp2) { |
|
Line 155 int fp2fgetc(FILE2 *fp2) { |
|
if (fp2->watch || WatchStream) { |
if (fp2->watch || WatchStream) { |
if (fp2->watch) fp = fp2->watchFile; |
if (fp2->watch) fp = fp2->watchFile; |
else fp = stderr; |
else fp = stderr; |
|
fprintf(fp,"get from <%x> ",fp2->fd); /* output the channel for debug*/ |
if (c >= ' ' && c <= 'z') { |
if (c >= ' ' && c <= 'z') { |
fprintf(fp," %2x(%c) ",c,c); |
fprintf(fp," %2x(%c) ",c,c); |
}else{ |
}else{ |
Line 142 int fp2fgetc(FILE2 *fp2) { |
|
Line 166 int fp2fgetc(FILE2 *fp2) { |
|
if (fp2->log_incomming != NULL) fputc(c,fp2->log_incomming); |
if (fp2->log_incomming != NULL) fputc(c,fp2->log_incomming); |
return(c); |
return(c); |
}else{ |
}else{ |
|
if (fp2->fd == -1) return(-1); |
fp2->readpos = 0; |
fp2->readpos = 0; |
fp2 ->readsize = |
fp2 ->readsize = |
read(fp2->fd, fp2->readBuf, fp2->limit); |
read(fp2->fd, fp2->readBuf, fp2->limit); |
Line 152 int fp2fgetc(FILE2 *fp2) { |
|
Line 177 int fp2fgetc(FILE2 *fp2) { |
|
fprintf(fp," <%2x ",c); |
fprintf(fp," <%2x ",c); |
fflush(NULL); |
fflush(NULL); |
} |
} |
if (fp2->log_incomming != NULL) fputc(c,fp2->log_incomming); |
|
return(-1); |
return(-1); |
} |
} |
else { |
else { |
Line 162 int fp2fgetc(FILE2 *fp2) { |
|
Line 186 int fp2fgetc(FILE2 *fp2) { |
|
} |
} |
|
|
int fp2select(FILE2 *fp2, int t) { |
int fp2select(FILE2 *fp2, int t) { |
|
if (fp2->fd == -1) { |
|
if (fp2->readpos < fp2->readsize) return(1); |
|
else return(0); |
|
} |
if (fp2->readpos < fp2->readsize) return(1); |
if (fp2->readpos < fp2->readsize) return(1); |
else { |
else { |
#ifdef KXX |
#ifdef KXX |
Line 205 int fp2clearReadBuf(FILE2 *fp2) { |
|
Line 233 int fp2clearReadBuf(FILE2 *fp2) { |
|
if (checkfp2(fp2," fp2clearReadBuf ") == -1) { |
if (checkfp2(fp2," fp2clearReadBuf ") == -1) { |
return(-1); |
return(-1); |
} |
} |
|
if (fp2->fd == -1) return(0); |
|
|
fp2->readsize=0; fp2->readpos = 0; /* Clear the buffer. */ |
fp2->readsize=0; fp2->readpos = 0; /* Clear the buffer. */ |
|
|
Line 287 int fp2stopLog(FILE2 *fp) { |
|
Line 316 int fp2stopLog(FILE2 *fp) { |
|
fp->log_incomming = fp->log_outgoing = NULL; |
fp->log_incomming = fp->log_outgoing = NULL; |
return 0; |
return 0; |
} |
} |
|
|
|
static int fp2fputcString(int c,FILE2 *fp2) { |
|
unsigned char *newwrite,*newread; |
|
int newsize; |
|
int i; |
|
(fp2->readBuf)[fp2->readsize] = c; |
|
(fp2->readsize)++; |
|
if ((fp2->writepos < fp2->limit) && (fp2->readsize < fp2->limit)) return(c); |
|
if ((fp2->limit)*2 >=0x3000000) { |
|
fprintf(stderr,"Too big output string.\n"); |
|
return(-1); |
|
} |
|
newsize = (fp2->limit)*2; |
|
newwrite = (char *)GC_malloc(newsize); |
|
newread = (char *)GC_malloc(newsize); |
|
if ((newwrite == NULL) || (newread == NULL)) { |
|
fprintf(stderr,"fp2fputcString: No more memory.\n"); |
|
return(-1); |
|
} |
|
for (i=0; i<fp2->writepos; i++) { |
|
newwrite[i] = fp2->writeBuf[i]; |
|
} |
|
for (i=0; i<fp2->readsize; i++) { |
|
newread[i] = fp2->readBuf[i]; |
|
} |
|
fp2->writeBuf = newwrite; |
|
fp2->readBuf = newread; |
|
fp2->limit = newsize; |
|
return(c); |
|
} |
|
|
|
char *fp2fcloseInString(FILE2 *fp2, int *sizep) |
|
{ |
|
if (fp2->fd == -1) { |
|
fp2fputc(0,fp2); |
|
*sizep = fp2->writepos-1; |
|
return(fp2->writeBuf); |
|
}else{ |
|
fprintf(stderr,"fp2fcloseInString is called for a file stream that is not associated to a string.\n"); |
|
} |
|
} |
|
|
|
int fp2fputs(char *s,FILE2 *fp) { |
|
int i,n; |
|
n = strlen(s); |
|
for (i=0; i<n; i++) { |
|
if (fp2fputc(s[i],fp) < 0) return(-1); |
|
} |
|
return(0); |
|
} |
|
|
|
/* Sample program FORSTRING |
|
FILE2 *fp2; |
|
int c; |
|
char *s; |
|
int size; |
|
fp2 = fp2fopen(-1); |
|
while ((c = getchar()) != EOF) { |
|
fp2fputc(c,fp2); |
|
} |
|
s = fp2fcloseInString(fp2,&size); |
|
|
|
or |
|
|
|
while ((c = fp2fgetc(fp2)) != EOF) { |
|
.... |
|
} |
|
*/ |