#include <stdio.h>#include <string.h>#include "machine.h"#include "sciprint.h"Include dependency graph for readc.c:

Go to the source code of this file.
Functions | |
| int | C2F (cvstr) |
| void | readc (integer *flag, integer *nevprt,*t, xd, x, integer *nx, z, integer *nz, tvec, integer *ntvec, rpar, integer *nrpar, ipar, integer *nipar, inptr, insz,*nin, outptr, outsz,*nout) |
| int C2F | ( | cvstr | ) |
Definition at line 7 of file readc.c.
References long.
00014 { 00015 char c; 00016 int wsz; 00017 00018 c=type[0]; 00019 if (c=='u') c=type[1]; 00020 switch ( c ) 00021 { 00022 case 'l' : wsz=sizeof(long); 00023 break; 00024 case 's' : wsz=sizeof(short); 00025 break; 00026 case 'c' : wsz=sizeof(char); 00027 break; 00028 case 'd' : wsz=sizeof(double); 00029 break; 00030 case 'f' : wsz=sizeof(float); 00031 break; 00032 } 00033 return wsz; 00034 }
| void readc | ( | integer * | flag, | |
| integer* | nevprt, | |||
| * | t, | |||
| xd | , | |||
| x | , | |||
| integer* | nx, | |||
| z | , | |||
| integer* | nz, | |||
| tvec | , | |||
| integer* | ntvec, | |||
| rpar | , | |||
| integer* | nrpar, | |||
| ipar | , | |||
| integer* | nipar, | |||
| inptr | , | |||
| insz | , | |||
| * | nin, | |||
| outptr | , | |||
| outsz | , | |||
| * | nout | |||
| ) |
Definition at line 36 of file readc.c.
References buffer, cvstr(), F2C(), fd, i, ierr, int, irep, job, long, m, mget2(), n, offset, sciprint(), str, and type.
00039 : file name length 00040 ipar[2:4] = fmt : numbers type ascii code 00041 ipar[5] = is there a time record 00042 ipar[6] = n : buffer length in number of records 00043 ipar[7] = maxvoie : record size 00044 ipar[8] = swap 00045 ipar[9] = first : first record to read 00046 ipar[10:9+lfil] = character codes for file name 00047 ipar[10+lfil:9+lfil++ny+ievt] = reading mask 00048 */ 00049 integer *flag,*nevprt,*nx,*nz,*ntvec,*nrpar,ipar[],*nipar; 00050 integer insz[],*nin,outsz[],*nout; 00051 double x[],xd[],z[],tvec[],rpar[]; 00052 double *inptr[],*outptr[],*t; 00053 00054 { 00055 char str[100],type[4]; 00056 int job = 1,three=3; 00057 FILE *fd; 00058 int n, k, ievt, kmax,/* no,*//* lfil,*/ m, i, irep,/* nm,*/ ierr; 00059 double *buffer,*record; 00060 int *mask; 00061 long offset; 00062 00063 00064 --ipar; 00065 --z; 00066 fd=(FILE *)(long)z[3]; 00067 buffer = (z+4); 00068 mask = ipar+11+ipar[1]-ipar[5]; 00069 00070 /* 00071 k : record counter within the buffer 00072 kmax : number of records in the buffer 00073 */ 00074 00075 if (*flag==1) { 00076 n = ipar[6]; 00077 ievt = ipar[5]; 00078 k = (int)z[1]; 00079 /* copy current record to output */ 00080 record=buffer+(k-1)*ipar[7]-1; 00081 00082 for (i=0;i<outsz[0];i++) 00083 *(outptr[0]+i)=record[mask[ievt+i]]; 00084 00085 if (*nevprt>0) { 00086 /* discrete state */ 00087 kmax = (int)z[2]; 00088 if (k>=kmax&&kmax==n) { 00089 /* read a new buffer */ 00090 m=ipar[6]*ipar[7]; 00091 F2C(cvstr)(&three,&(ipar[2]),type,&job, (unsigned long)strlen(type)); 00092 for (i=2;i>=0;i--) 00093 if (type[i]!=' ') { type[i+1]='\0';break;} 00094 ierr=0; 00095 mget2(fd,ipar[8],buffer,m,type,&ierr); 00096 if (ierr>0) { 00097 sciprint("Read error!\n"); 00098 fclose(fd); 00099 z[3] = 0.0; 00100 *flag = -1; 00101 return; 00102 } 00103 else if (ierr<0) { /* EOF reached */ 00104 kmax=-(ierr+1)/ipar[7]; 00105 } 00106 else 00107 kmax=ipar[6]; 00108 00109 z[1] = 1.0; 00110 z[2] = kmax; 00111 } 00112 else if (k<kmax) 00113 z[1] = z[1]+1.0; 00114 } 00115 } 00116 else if (*flag==3) { 00117 ievt = ipar[5]; 00118 n = ipar[6]; 00119 k = (int)z[1]; 00120 kmax = (int) z[2]; 00121 if (k > kmax && kmax < n) { 00122 if(ievt) 00123 tvec[0] = *t-1.0; 00124 else 00125 tvec[0] = *t*(1.0+0.0000000001); 00126 } 00127 else { 00128 record=buffer+(k-1)*ipar[7]-1; 00129 if(ievt) tvec[0] = record[mask[0]]; 00130 } 00131 } 00132 else if (*flag==4) { 00133 F2C(cvstr)(&(ipar[1]),&(ipar[10]),str,&job,(unsigned long)strlen(str)); 00134 str[ipar[1]] = '\0'; 00135 fd = fopen(str,"rb"); 00136 if (!fd ) { 00137 sciprint("Could not open the file!\n"); 00138 *flag = -1; 00139 return; 00140 } 00141 z[3]=(long)fd; 00142 /* skip first records */ 00143 if (ipar[9]>1) { 00144 F2C(cvstr)(&three,&(ipar[2]),type,&job,(unsigned long)strlen(type)); 00145 for (i=2;i>=0;i--) 00146 if (type[i]!=' ') { type[i+1]='\0';break;} 00147 offset=(ipar[9]-1)*ipar[7]*worldsize(type); 00148 irep = fseek(fd,offset,0) ; 00149 if ( irep != 0 ) 00150 { 00151 sciprint("Read error\r\n"); 00152 *flag = -1; 00153 fclose(fd); 00154 z[3] = 0.0; 00155 return; 00156 } 00157 } 00158 /* read first buffer */ 00159 m=ipar[6]*ipar[7]; 00160 F2C(cvstr)(&three,&(ipar[2]),type,&job,(unsigned long)strlen(type)); 00161 for (i=2;i>=0;i--) 00162 if (type[i]!=' ') { type[i+1]='\0';break;} 00163 mget2(fd,ipar[8],buffer,m,type,&ierr); 00164 if (ierr>0) { 00165 sciprint("Read error!\n"); 00166 *flag = -1; 00167 fclose(fd); 00168 z[3] = 0.0; 00169 return; 00170 } 00171 else if (ierr<0) { /* EOF reached */ 00172 kmax=-(ierr+1)/ipar[7]; 00173 } 00174 else 00175 kmax=ipar[6]; 00176 00177 z[1] = 1.0; 00178 z[2] = kmax; 00179 } 00180 else if (*flag==5) { 00181 if(z[3]==0) return; 00182 fclose(fd); 00183 z[3] = 0.0; 00184 } 00185 return; 00186 }
Here is the call graph for this function:

1.5.1