00001 #include <stdio.h>
00002 #include <string.h>
00003
00004 #include "machine.h"
00005 #include "sciprint.h"
00006
00007 extern int C2F(cvstr) __PARAMS((integer *,integer *,char *,integer *,unsigned long int));
00008
00009 void mput2 __PARAMS((FILE *fa, integer swap, double *res, integer n, char *type, integer *ierr));
00010
00011 void
00012 writec(flag,nevprt,t,xd,x,nx,z,nz,tvec,ntvec,rpar,nrpar,
00013 ipar,nipar,inptr,insz,nin,outptr,outsz,nout)
00014 integer *flag,*nevprt,*nx,*nz,*ntvec,*nrpar,ipar[],*nipar,insz[],*nin,outsz[],*nout;
00015 double x[],xd[],z[],tvec[],rpar[];
00016 double *inptr[],*outptr[],*t;
00017
00018
00019
00020
00021
00022
00023
00024 {
00025 char str[100],type[4];
00026 int job = 1,three=3;
00027 FILE *fd;
00028 int n, k, i, ierr;
00029 double *buffer,*record;
00030
00031
00032
00033 --ipar;
00034 --z;
00035 fd=(FILE *)(long)z[2];
00036 buffer = (z+3);
00037 ierr=0;
00038
00039
00040
00041
00042 if (*flag==2&&*nevprt>0) {
00043 n = ipar[5];
00044 k = (int)z[1];
00045
00046 record=buffer+(k-1)*(insz[0]);
00047
00048 for (i=0;i<insz[0];i++)
00049 record[i] = *(inptr[0]+i);
00050 if (k<n)
00051 z[1] = z[1]+1.0;
00052 else {
00053 F2C(cvstr)(&three,&(ipar[2]),type,&job,(unsigned long)strlen(type));
00054 for (i=2;i>=0;i--)
00055 if (type[i]!=' ') { type[i+1]='\0';break;}
00056 mput2(fd,ipar[6],buffer,ipar[5]*insz[0],type,&ierr);
00057 if(ierr!=0) {
00058 *flag = -3;
00059 return;
00060 }
00061 z[1] = 1.0;
00062 }
00063 }
00064 else if (*flag==4) {
00065 F2C(cvstr)(&(ipar[1]),&(ipar[7]),str,&job,(unsigned long)strlen(str));
00066 str[ipar[1]] = '\0';
00067 fd = fopen(str,"wb");
00068 if (!fd ) {
00069 sciprint("Could not open the file!\n");
00070 *flag = -3;
00071 return;
00072 }
00073 z[2]=(long)fd;
00074 z[1] = 1.0;
00075 }
00076 else if (*flag==5) {
00077 if(z[2]==0) return;
00078 k =(int) z[1];
00079 if (k>=1) {
00080 F2C(cvstr)(&three,&(ipar[2]),type,&job,(unsigned long)strlen(type));
00081 for (i=2;i>=0;i--)
00082 if (type[i]!=' ') { type[i+1]='\0';break;}
00083 mput2(fd,ipar[6],buffer,(k-1)*insz[0],type,&ierr);
00084 if(ierr!=0) {
00085 *flag = -3;
00086 return;
00087 }
00088 }
00089 fclose(fd);
00090 z[2] = 0.0;
00091 }
00092 return;
00093 }
00094