=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/plugin/file2.hh,v retrieving revision 1.5 retrieving revision 1.6 diff -u -p -r1.5 -r1.6 --- OpenXM/src/kan96xx/plugin/file2.hh 2003/11/23 13:16:30 1.5 +++ OpenXM/src/kan96xx/plugin/file2.hh 2004/12/16 08:42:14 1.6 @@ -1,4 +1,4 @@ -/* $OpenXM: OpenXM/src/kan96xx/plugin/file2.hh,v 1.4 2001/08/12 03:13:36 takayama Exp $ */ +/* $OpenXM: OpenXM/src/kan96xx/plugin/file2.hh,v 1.5 2003/11/23 13:16:30 takayama Exp $ */ else if (strcmp(key,"fp2fdopen") == 0) { if (size != 2) errorKan1("%s\n","[(fp2fdopen) obj] extension obj-fp2."); if (SecureMode) errorKan1("%s\n","Security violation for fp2fdopen."); @@ -60,6 +60,21 @@ else if (strcmp(key,"fp2fputc") == 0) { } rob = KpoInteger(fp2fputc(obj1.lc.ival,(FILE2 *) obj2.rc.voidp)); } +else if (strcmp(key,"fp2fputs") == 0) { + if (size != 3) errorKan1("%s\n","[(fp2fgets) str obj-fp2] extension c."); + obj1 = getoa(obj,1); + if (obj1.tag != Sdollar) { + errorKan1("%s\n","[(fp2fputs) str obj-fp2] extension c."); + } + obj2= getoa(obj,2); + if (obj2.tag != Sfile) { + errorKan1("%s\n","[(fp2fputs) str obj-file-fp2] extension c."); + } + if (strcmp(obj2.lc.str,MAGIC2) != 0) { + errorKan1("%s\n","[(fp2fputs) str obj-fp2] extension c. obj-fp2 is not Sfile (FILE2)."); + } + rob = KpoInteger(fp2fputs(KopString(obj1),(FILE2 *) obj2.rc.voidp)); +} else if (strcmp(key,"fp2dumpBuffer") == 0) { if (size != 2) errorKan1("%s\n","[(fp2dumpBuffer) obj-fp2] extension c."); obj1= getoa(obj,1); @@ -148,7 +163,92 @@ else if (strcmp(key,"fp2pushfile") == 0) { fclose(fp); } } - +else if (strcmp(key,"fp2select") == 0) { + if (size != 3) errorKan1("%s\n","[(fp2select) obj-fp2 t] extension status."); + obj1 = getoa(obj,2); + obj1 = Kto_int32(obj1); + if (obj1.tag != Sinteger) { + errorKan1("%s\n","[(fp2select) obj-fp2 t] extension status."); + } + obj2= getoa(obj,1); + if (obj2.tag != Sfile) { + errorKan1("%s\n","[(fp2select) obj-fp2 t] extension status."); + } + if (strcmp(obj2.lc.str,MAGIC2) != 0) { + errorKan1("%s\n","[(fp2select) obj-fp2 t] extension status. obj-fp2 is not Sfile (FILE2)."); + } + rob = KpoInteger(fp2select((FILE2 *) obj2.rc.voidp,obj1.lc.ival)); +} +else if (strcmp(key,"fp2fopen") == 0) { + if (size != 3) errorKan1("%s\n","[(fp2fopen) name mode] extension obj-fp2."); + if (SecureMode) errorKan1("%s\n","Security violation for fp2fopen."); + obj1= getoa(obj,1); + if (obj1.tag != Sdollar) { + errorKan1("%s\n","[(fp2fopen) name-string mode] extension obj-fp2."); + } + obj2= getoa(obj,2); + if (obj2.tag != Sdollar) { + errorKan1("%s\n","[(fp2fopen) name-string mode] extension obj-fp2."); + } + { + FILE *fff; + fff = fopen(KopString(obj1),KopString(obj2)); + if (fff == NULL) { + rob = NullObject; + }else{ + rob.tag = Sfile; + rob.lc.str = MAGIC2 ; + rob.rc.voidp = (void *) fp2open(fileno(fff)); + fp2setfp((FILE2 *) rob.rc.voidp, fff, 0); + } + } +} +else if (strcmp(key,"fp2mkfifo") == 0) { + if (size != 2) errorKan1("%s\n","[(fp2mkfifo) name] extension obj-fp2."); + if (SecureMode) errorKan1("%s\n","Security violation for fp2mkfifo."); + obj1= getoa(obj,1); + if (obj1.tag != Sdollar) { + errorKan1("%s\n","[(fp2mkfifo) name-string] extension obj-fp2."); + } + { + char *fname; + fname = KopString(obj1); + if (mkfifo(fname,0600)) { + rob = KpoInteger(-1); + if (errno != EEXIST) { + perror(fname); + unlink(fname); + } + }else{ + rob = KpoInteger(0); + } + } +} +else if (strcmp(key,"fp2popen") == 0) { + if (size != 3) errorKan1("%s\n","[(fp2popen) name mode] extension obj-fp2."); + if (SecureMode) errorKan1("%s\n","Security violation for fp2popen."); + obj1= getoa(obj,1); + if (obj1.tag != Sdollar) { + errorKan1("%s\n","[(fp2popen) name-string mode] extension obj-fp2."); + } + obj2= getoa(obj,2); + if (obj2.tag != Sdollar) { + errorKan1("%s\n","[(fp2popen) name-string mode] extension obj-fp2."); + } + { + FILE *fff; + fff = popen(KopString(obj1),KopString(obj2)); + if (fff == NULL) { + perror(KopString(obj1)); + rob = NullObject; + }else{ + rob.tag = Sfile; + rob.lc.str = MAGIC2 ; + rob.rc.voidp = (void *) fp2open(fileno(fff)); + fp2setfp((FILE2 *) rob.rc.voidp, fff,1); + } + } +}