Esempio n. 1
0
/* 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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
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;
}
Esempio n. 5
0
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);

}
Esempio n. 6
0
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);
  }
}