/* This routine needs to append block.hist in front. Ultimately it should probably only put this in front if there isn't a block. in the name already?? */ int thhstexeb_(char *A1,unsigned C1) { int A0; char *B1; A0 = thExecuteHists((!*(int *)A1)?0:memchr(A1,'\0',C1)?A1: (memcpy(B1=malloc(C1+1),A1,C1),B1[C1]='\0' ,kill_trailing(B1,' '))); if(B1) free(B1); return A0; }
double dtheval_(char *A1,unsigned C1) { char *B1; double d; thStatus status; status = thEvalImed((!*(int *)A1)?0:memchr(A1,'\0',C1)?A1: (memcpy(B1=malloc(C1+1),A1,C1),B1[C1]='\0' ,kill_trailing(B1,' ')),&d,0); if(B1) free(B1); return d; }
int thevalchk_(char *A1,unsigned C1) /* Check if an expression is valid. Return's zero if valid */ { int A0; char *B1; thStatus status; status = thEvalImed((!*(int *)A1)?0:memchr(A1,'\0',C1)?A1: (memcpy(B1=malloc(C1+1),A1,C1),B1[C1]='\0' ,kill_trailing(B1,' ')),0,0); if(B1) free(B1); return(status); }
int thtstclsb #else int thtstclsb_ #endif (char *A1,unsigned C1) { int A0; char *B1; A0 = thWalkTree((!*(int *)A1)?0:memchr(A1,'\0',C1)?A1: (memcpy(B1=malloc(C1+1),A1,C1),B1[C1]='\0' ,kill_trailing(B1,' ')),WALK_CLEAR_SCALERS); if(B1) free(B1); return A0; }
int evOpen(char *fname,char *flags,int *handle) { #ifdef BIT64 int ihandle; #endif EVFILE *a; char *cp; int header[EV_HDSIZ]; int i; int temp,blk_size; char *filename; filename = (char *) malloc(strlen(fname)+1); strcpy(filename,fname); a = evGetStructure(); /* allocate control structure or quit */ if (!a) { free(filename); return(S_EVFILE_ALLOCFAIL); } while (*filename==' ') filename++; /* remove leading spaces */ /* But don't frell with any other spaces except for the trailing ones */ #if 0 for (cp=filename;*cp!=NULL;cp++) { if ((*cp==' ') || !(isprint(*cp))) *cp='\0'; } #else kill_trailing(filename,' '); #endif switch (*flags) { case '\0': case 'r': case 'R': a->rw = EV_READ; if(strcmp(filename,"-")==0) { a->file = stdin; } else if(filename[0] == '|') { a->file = popen(filename+1,"r"); a->rw = EV_PIPE; /* Make sure we know to use pclose */ } else { a->file = fopen(filename,"r"); if(a->file) { int compressed; char bytes[2]; fread(bytes,2,1,a->file); /* Check magic bytes for compressions */ if(bytes[0]=='\037' && (bytes[1]=='\213' || bytes[1]=='\235')) { char *pipe_command; fclose(a->file); pipe_command = (char *)malloc(strlen(filename)+strlen("gunzip<")+1); strcpy(pipe_command,"gunzip<"); strcat(pipe_command,filename); a->file = popen(pipe_command,"r"); free(pipe_command); a->rw = EV_PIPE; } else { fclose(a->file); a->file = fopen(filename,"r"); } } } if (a->file) { fread(header,sizeof(header),1,a->file); /* update: check nbytes return */ if (header[EV_HD_MAGIC] != EV_MAGIC) { temp = int_swap_byte(header[EV_HD_MAGIC]); if(temp == EV_MAGIC) a->byte_swapped = 1; else{ /* close file and free memory */ fclose(a->file); free (a); free(filename); return(S_EVFILE_BADFILE); } } else a->byte_swapped = 0; if(a->byte_swapped){ blk_size = int_swap_byte(header[EV_HD_BLKSIZ]); a->buf = (int *)malloc(blk_size*4); } else a->buf = (int *) malloc(header[EV_HD_BLKSIZ]*4); if (!(a->buf)) { free(a); /* if can't allocate buffer, give up */ free(filename); return(S_EVFILE_ALLOCFAIL); } if(a->byte_swapped){ swapped_intcpy((char *)a->buf,(char *)header,EV_HDSIZ*4); fread(&(a->buf[EV_HDSIZ]),4,blk_size-EV_HDSIZ,a->file); } else{ memcpy(a->buf,header,EV_HDSIZ*4); fread(a->buf+EV_HDSIZ,4, header[EV_HD_BLKSIZ]-EV_HDSIZ, a->file); /* read rest of block */ } a->next = a->buf + (a->buf)[EV_HD_START]; a->left = (a->buf)[EV_HD_USED] - (a->buf)[EV_HD_START]; } break; case 'w': case 'W': a->rw = EV_WRITE; if(strcmp(filename,"-")==0) { a->file = stdout; } else if(filename[0] == '|') { a->file = popen(filename+1,"r"); a->rw = EV_PIPEWRITE; /* Make sure we know to use pclose */ } else { a->file = fopen(filename,"w"); } if (a->file) { a->buf = (int *) malloc(EVBLOCKSIZE*4); if (!(a->buf)) { free(a); free(filename); return(S_EVFILE_ALLOCFAIL); } a->buf[EV_HD_BLKSIZ] = EVBLOCKSIZE; a->buf[EV_HD_BLKNUM] = 0; a->buf[EV_HD_HDSIZ] = EV_HDSIZ; a->buf[EV_HD_START] = 0; a->buf[EV_HD_USED] = EV_HDSIZ; a->buf[EV_HD_VER] = EV_VERSION; a->buf[EV_HD_RESVD] = 0; a->buf[EV_HD_MAGIC] = EV_MAGIC; a->next = a->buf + EV_HDSIZ; a->left = EVBLOCKSIZE - EV_HDSIZ; a->evnum = 0; } break; default: free(a); free(filename); return(S_EVFILE_UNKOPTION); } if (a->file) { a->magic = EV_MAGIC; a->blksiz = a->buf[EV_HD_BLKSIZ]; a->blknum = a->buf[EV_HD_BLKNUM]; #ifdef BIT64 for(ihandle=0;ihandle<MAXHANDLES;ihandle++){ if(handle_list[ihandle]==0) { handle_list[ihandle] = a; *handle = ihandle+1; free(filename); return(S_SUCCESS); } } *handle = 0; /* No slots left */ free(a); free(filename); return(S_EVFILE_BADHANDLE); /* A better error code would help */ #else *handle = (int) a; free(filename); return(S_SUCCESS); #endif } else { free(a); #ifdef DEBUG fprintf(stderr,"evOpen: Error opening file %s, flag %s\n", filename,flags); perror(NULL); #endif *handle = 0; free(filename); return(errno); } free(filename); }
daVarStatus daVarRegRatr(daVarStruct *varp, char *attribute ,int index, any *retval) /* Regular Read Attribute routine. Returns failure if attribute is not of the standard set. */ { int i; if(*attribute == '\0' || strcasecmp(attribute,DAVAR_VALUE) == 0){ if(varp->type == DAVARINT){ retval->valtype = DAVARINT_RPC; if(index == DAVAR_NOINDEX) { retval->any_u.i.i_len = varp->size; retval->any_u.i.i_val = (int *) malloc(varp->size*sizeof(int)); for(i=0;i<varp->size;i++) { retval->any_u.i.i_val[i] = ((DAINT *)varp->varptr)[i]; /* printf("%d %d\n",i,retval->any_u.i.i_val[i]);*/ } } else { retval->any_u.i.i_len = 1; retval->any_u.i.i_val = (int *) malloc(sizeof(int)); retval->any_u.i.i_val[0] = ((DAINT *)varp->varptr)[index]; } } else if(varp->type == DAVARFLOAT){ retval->valtype = DAVARFLOAT_RPC; if(index == DAVAR_NOINDEX) { retval->any_u.r.r_len = varp->size; retval->any_u.r.r_val = (float *) malloc(varp->size*sizeof(float)); for(i=0;i<varp->size;i++) { retval->any_u.r.r_val[i] = ((DAFLOAT *)varp->varptr)[i]; /* printf("%d %f\n",i,retval->any_u.r.r_val[i]);*/ } } else { retval->any_u.r.r_len = 1; retval->any_u.r.r_val = (float *) malloc(sizeof(float)); retval->any_u.r.r_val[0] = ((DAFLOAT *)varp->varptr)[index]; } } else if(varp->type == DAVARDOUBLE){ /* Return a float type for now since doubles don't work with our RPC */ retval->valtype = DAVARFLOAT_RPC; if(index == DAVAR_NOINDEX) { retval->any_u.r.r_len = varp->size; retval->any_u.r.r_val = (float *) malloc(varp->size*sizeof(float)); for(i=0;i<varp->size;i++) { retval->any_u.r.r_val[i] = ((DADOUBLE *)varp->varptr)[i]; /* printf("%d %f\n",i,retval->any_u.r.r_val[i]);*/ } } else { retval->any_u.r.r_len = 1; retval->any_u.r.r_val = (float *) malloc(sizeof(float)); retval->any_u.r.r_val[0] = ((DADOUBLE *)varp->varptr)[index]; } } else if(varp->type == DAVARSTRING && index == DAVAR_NOINDEX){ /* indices to strings not supported */ retval->valtype = DAVARSTRING_RPC; retval->any_u.s = (char *) malloc(strlen((char *)varp->varptr) + 1); strcpy(retval->any_u.s,(char *)varp->varptr); /* printf("%s\n",retval->any_u.s);*/ } else if(varp->type == DAVARFSTRING && index == DAVAR_NOINDEX){ retval->valtype = DAVARSTRING_RPC; retval->any_u.s = (char *) malloc(varp->size+1); strncpy(retval->any_u.s,(char *)varp->varptr,varp->size); retval->any_u.s[varp->size] = '\0'; kill_trailing(retval->any_u.s,' '); } else { retval->valtype = DAVARERROR_RPC; retval->any_u.error = S_SUCCESS; } return(S_SUCCESS); } else if(strcasecmp(attribute,DAVAR_TITLE) == 0){ retval->valtype = DAVARSTRING_RPC; retval->any_u.s = (char *) malloc(strlen(varp->title) + 1); strcpy(retval->any_u.s,varp->title); /* printf("%s\n",retval->any_u.s);*/ return(S_SUCCESS); } else if(strcasecmp(attribute,DAVAR_SIZE) == 0){ retval->valtype = DAVARINT_RPC; retval->any_u.i.i_len = 1; retval->any_u.i.i_val = (int *) malloc(sizeof(int)); retval->any_u.i.i_val[0] = varp->size; return(S_SUCCESS); } else if(strcasecmp(attribute,DAVAR_TYPE) == 0){ retval->valtype = DAVARINT_RPC; retval->any_u.i.i_len = 1; retval->any_u.i.i_val = (int *) malloc(sizeof(int)); retval->any_u.i.i_val[0] = varp->type; return(S_SUCCESS); } else if(strcasecmp(attribute,DAVAR_FLAG) == 0){ retval->valtype = DAVARINT_RPC; retval->any_u.i.i_len = 1; retval->any_u.i.i_val = (int *) malloc(sizeof(int)); retval->any_u.i.i_val[0] = varp->flag; return(S_SUCCESS); } else if(strcasecmp(attribute,DAVAR_WATR) == 0){ retval->valtype = DAVARSTRING_RPC; retval->any_u.s = daVarMakeWAtrList(); return(S_SUCCESS); } else if(strcasecmp(attribute,DAVAR_RATR) == 0){ retval->valtype = DAVARSTRING_RPC; retval->any_u.s = daVarMakeRAtrList(); return(S_SUCCESS); } else { retval->valtype = DAVARERROR_RPC; retval->any_u.error = S_DAVAR_UNKATTR; /* Why success??? */ return(S_DAVAR_UNKATTR); } }