virtual void interpret(char *input, int &total)
 {
     // for internal use
     int index;
     index = 0;
     if (!strncmp(input, nine(), 2))
     {
         total += 9 * multiplier();
         index += 2;
     }
     else if (!strncmp(input, four(), 2))
     {
         total += 4 * multiplier();
         index += 2;
     }
     else
     {
         if (input[0] == five())
         {
             total += 5 * multiplier();
             index = 1;
         }
         else
             index = 0;
         for (int end = index + 3; index < end; index++)
             if (input[index] == one())
                 total += 1 * multiplier();
             else
                 break;
     }
     strcpy(input, &(input[index]));
 } // remove leading chars processed
Esempio n. 2
0
File: div.c Progetto: 8l/go-learn
int
udiv(uint32 d, uint32 *mp, int *sp, int *pp)
{
	int p, s;
	uvlong m;

	s = multiplier(d, 32, &m);
	p = 0;
	if(m >= T32) {
		while((d & 1) == 0) {
			d >>= 1;
			p++;
		}
		s = multiplier(d, 32 - p, &m);
	}
	*mp = m;
	*pp = p;
	if(m >= T32) {
		/*assert(p == 0);*/
		*sp = s - 1;
		return 1;
	}
	else {
		*sp = s;
		return 0;
	}
}
Esempio n. 3
0
Real
PorousFlowSink::jac(unsigned int jvar)
{
  if (_dictator.notPorousFlowVariable(jvar))
    return 0.0;
  if (_qp_map[_i] == -1) // the Residual is zero for these nodes
    return 0.0;
  const unsigned int pvar = _dictator.porousFlowVariableNum(jvar);
  const int qp_for_this_node = _qp_map[_i];

  Real flux = 0;
  Real deriv = 0;

  if (_i != _j)
  {
    // since the only non-upwinded contribution to the residual is
    // from the permeability, the only contribution of the residual
    // at node _i from changing jvar at node _j is through the derivative
    // of permeability
    if (!_use_mobility)
      return 0.0;
    deriv = _test[_i][_qp] * multiplier();
    const Real kprime = (_dpermeability_dvar[_qp][pvar] * _normals[_qp]) * _normals[_qp];
    deriv *= _fluid_density_node[qp_for_this_node][_ph] * kprime / _fluid_viscosity[qp_for_this_node][_ph];
    if (_use_relperm)
      deriv *= _relative_permeability[qp_for_this_node][_ph];
    if (_use_mass_fraction)
      deriv *= _mass_fractions[qp_for_this_node][_ph][_sp];
    return deriv * _phi[_j][_qp];
  }

  flux = _test[_i][_qp] * multiplier();
  deriv = _test[_i][_qp] * dmultiplier_dvar(pvar);
  if (_use_mobility)
  {
    const Real k = (_permeability[_qp] * _normals[_qp]) * _normals[_qp];
    const Real mob = _fluid_density_node[qp_for_this_node][_ph] * k / _fluid_viscosity[qp_for_this_node][_ph];
    const Real kprime = (_dpermeability_dvar[_qp][pvar] * _normals[_qp]) * _normals[_qp] * _phi[_j][_qp];
    const Real mobprime = _dfluid_density_node_dvar[qp_for_this_node][_ph][pvar] * k / _fluid_viscosity[qp_for_this_node][_ph] + _fluid_density_node[qp_for_this_node][_ph] * kprime / _fluid_viscosity[qp_for_this_node][_ph] - _fluid_density_node[qp_for_this_node][_ph] * k * _dfluid_viscosity_dvar[qp_for_this_node][_ph][pvar] / std::pow(_fluid_viscosity[qp_for_this_node][_ph], 2);
    deriv = mob * deriv + mobprime * flux;
    flux *= mob;
  }
  if (_use_relperm)
  {
    deriv = _relative_permeability[qp_for_this_node][_ph] * deriv + _drelative_permeability_dvar[qp_for_this_node][_ph][pvar] * flux;
    flux *= _relative_permeability[qp_for_this_node][_ph];
  }
  if (_use_mass_fraction)
  {
    deriv = _mass_fractions[qp_for_this_node][_ph][_sp] * deriv + _dmass_fractions_dvar[qp_for_this_node][_ph][_sp][pvar] * flux;
  }
  return deriv;
}
Esempio n. 4
0
 boost::optional<double> Lights_Impl::lightingLevel() const {
   OptionalDouble temp = lightsDefinition().lightingLevel();
   if (temp) {
     return temp.get() * multiplier();
   }
   return temp;
 }
Esempio n. 5
0
int main(){
	int a, b;
	printf("Digite dois números para multiplicação, separados por espaços: > ");
	scanf("%d %d",&a,&b);
	printf("O produto entre %d e %d é %d\n",a,b,multiplier(a,b));
	return 0;
	}
Esempio n. 6
0
void grid_octree_node::
split()
{
	if(child_nodes_ == nullptr)
	{
		child_nodes_ = new grid_octree_node*[8];
		
		for(size_t child_index = 0; child_index < 8; ++child_index)
		{
			scm::math::vec3d new_pos = get_position_center();
			
			scm::math::vec3d multiplier(1.0, 1.0, 1.0);

			if(child_index % 2 == 0)
			{
				multiplier.x = -1.0;
			}

			if(child_index / 4 == 1)
			{
				multiplier.y = -1.0;
			}

			if(child_index % 4 >= 2)
			{
				multiplier.z = -1.0;
			}

			double new_size = get_size().x * 0.5;
			new_pos = new_pos + (multiplier * get_size().x * 0.25);

			child_nodes_[child_index] = new grid_octree_node(new_size, new_pos);
		}
	}
}
Esempio n. 7
0
 boost::optional<double> Lights_Impl::powerPerPerson() const {
   OptionalDouble temp = lightsDefinition().wattsperPerson();
   if (temp) {
     return temp.get() * multiplier();
   }
   return temp;
 }
Esempio n. 8
0
 boost::optional<double> GasEquipment_Impl::powerPerFloorArea() const {
   OptionalDouble result = gasEquipmentDefinition().wattsperSpaceFloorArea();
   if (result) {
     return result.get() * multiplier();
   }
   return result;
 }
Esempio n. 9
0
 boost::optional<double> ElectricEquipment_Impl::designLevel() const {
   OptionalDouble result = electricEquipmentDefinition().designLevel();
   if (result) {
     return result.get() * multiplier();
   }
   return result;
 }
Esempio n. 10
0
 boost::optional<double> ElectricEquipment_Impl::powerPerPerson() const {
   OptionalDouble result = electricEquipmentDefinition().wattsperPerson();
   if (result) {
     return result.get() * multiplier();
   }
   return result;
 }
Esempio n. 11
0
Malachite::Image load(const QVector<Ref<PsdChannelData> > &channeldDataList, const QVector<PsdChannelInfo> &channelInfos, const QRect &rect, int bpp)
{
	Q_ASSERT(channeldDataList.size() == channelInfos.size());

	int count = rect.width() * rect.height();
	Malachite::Image image(rect.size());

	auto channelDataI = channeldDataList.begin();

	for (const PsdChannelInfo &info : channelInfos)
	{
		PAINTFIELD_DEBUG << "image size" << image.area() << "data size" << (*channelDataI)->rawData.size();
		loadDataForBppAndChannel(image, (*channelDataI)->rawData, bpp, info.id);
		++channelDataI;
	}

	// premultiply pixels
	{
		auto p = image.bits();
		for (int i = 0; i < count; ++i)
		{
			auto a = p->a();
			Malachite::Pixel multiplier(1, a, a, a);
			p->rv() *= multiplier.v();
			++p;
		}
	}

	return image;
}
Esempio n. 12
0
void FourierTransposition(std::vector< std::complex<double> >* polinomial, bool invert) {
	if ((*polinomial).size() == 1) {
        return;
	}

	std::vector<std::complex<double> > firstPolinomial((*polinomial).size() / 2); 
	std::vector<std::complex<double> > secondPolinomial((*polinomial).size() / 2);

	int newPosition = 0;
	for (size_t originalPosition = 0; originalPosition < (*polinomial).size(); originalPosition += 2) {
		firstPolinomial[newPosition] = (*polinomial)[originalPosition];
		secondPolinomial[newPosition] = (*polinomial)[originalPosition + 1]; 
		++newPosition;
	}

	FourierTransposition(&firstPolinomial, invert);
	FourierTransposition(&secondPolinomial, invert);

	double angle = 2 * PI / (*polinomial).size();
	std::complex<double> inversionFactor(1);
	if (invert) {
        angle = -angle;
		inversionFactor /= 2;
	} 

	std::complex<double> root(1);
	std::complex<double> multiplier(cos(angle), sin(angle));

	for (size_t position = 0; position < (*polinomial).size() / 2; ++position) {
		(*polinomial)[position] = (firstPolinomial[position] + root * secondPolinomial[position]) * inversionFactor;
		(*polinomial)[position + (*polinomial).size() / 2] = (firstPolinomial[position] - root * secondPolinomial[position]) * inversionFactor;
		root *= multiplier;
	}
}
Esempio n. 13
0
 boost::optional<double> InternalMass_Impl::surfaceAreaPerPerson() const {
   OptionalDouble result = internalMassDefinition().surfaceAreaperPerson();
   if (result) {
     return result.get() * multiplier();
   }
   return result;
 }
Esempio n. 14
0
int multiplier( int num ) {

  int lastdigit, rest;

  if ( num < 9 )
    return num;
  else {
    lastdigit = num % 10;
    rest = num / 10;
    return ( multiplier( rest ) * lastdigit );
  }

}
Esempio n. 15
0
int persistencecheck( int num ) {

  int ans;

  ans = multiplier( num );
  
  if ( ans < 9 )
    return 1;
  else { 
    return persistencecheck( ans ) + 1;
  }

}
Esempio n. 16
0
File: div.c Progetto: 8l/go-learn
int
sdiv(uint32 d, uint32 *mp, int *sp)
{
	int s;
	uvlong m;

	s = multiplier(d, 32 - 1, &m);
	*mp = m;
	*sp = s;
	if(m >= T31)
		return 1;
	else
		return 0;
}
Esempio n. 17
0
Real
PorousFlowSink::computeQpResidual()
{
  if (_qp_map[_i] == -1) // the PorousFlowMaterials no not store nodal info for this node (it isn't on the boundary)
    return 0.0;

  const int qp_for_this_node = _qp_map[_i];
  Real flux = _test[_i][_qp] * multiplier();
  if (_use_mobility)
  {
    const Real k = (_permeability[_qp] * _normals[_qp]) * _normals[_qp]; // do not upwind permeability
    flux *= _fluid_density_node[qp_for_this_node][_ph] * k / _fluid_viscosity[qp_for_this_node][_ph];
  }
  if (_use_relperm)
    flux *= _relative_permeability[qp_for_this_node][_ph];
  if (_use_mass_fraction)
    flux *= _mass_fractions[qp_for_this_node][_ph][_sp];
  return flux;
}
Esempio n. 18
0
int main (int argc, char *argv[])
{
	struct Matrice m;
	struct Matrice I;
	int i;

	initialiser(&m);

	m.contenu[3][1] = 9.0;
	m.contenu[7][19] = 3.0;
	afficher(&m);

	// Creer la matrice Identite
	for (i = 0; i < 20; i++) {
		I.contenu[i][i] = 1.0;
	}

	multiplier(&m, &I, &m);
	afficher(&m);

	return 0;
}
Esempio n. 19
0
// doesn't return a remainder
// N.B. this function will break if there is a remainder
const Polynomial Polynomial::div( const Polynomial& rhs ) const {
  Polynomial retVal;

  if( degree() < rhs.degree() )
    {
      return retVal; // return 0
    }

  Polynomial rSide( *this );
  int rDeg = rhs.degree();
  double rCoeff = rhs._list.begin().getData().coeff;
  
  itr_t it = rSide._list.begin();
  while( 1 )
    {
      if( it == rSide._list.end() ) break;
      int deg_diff = it.getData().degree() - rDeg;
      if( deg_diff < 0 ) break; // TODO: check this condition, maybe need to put rest into remainder?
      
      double coeff = it.getData().coeff / rCoeff;
      Polynomial tmp;
      Term multiplier( coeff, deg_diff );
      retVal.addTerm( multiplier );
      
      for( itr_t itt = rhs._list.begin(); itt != rhs._list.end(); ++itt )
	{
	  Term res = itt.getData() * multiplier;
	  tmp.addTerm( res );
	}

      rSide = rSide.sub( tmp );
      it = rSide._list.begin();
    }
  
  return retVal;
}
double SteamEquipment_Impl::getPowerPerFloorArea(double floorArea, double numPeople) const
{
    return steamEquipmentDefinition().getPowerPerFloorArea(floorArea,numPeople) * multiplier();
}
Esempio n. 21
0
 double ElectricEquipment_Impl::getPowerPerPerson(double floorArea, double numPeople) const {
   return electricEquipmentDefinition().getPowerPerPerson(floorArea,numPeople) * multiplier();
 }
Esempio n. 22
0
 double ElectricEquipment_Impl::getDesignLevel(double floorArea, double numPeople) const {
   return electricEquipmentDefinition().getDesignLevel(floorArea,numPeople) * multiplier();
 }
Esempio n. 23
0
 double HotWaterEquipment_Impl::getDesignLevel(double floorArea, double numPeople) const {
   return hotWaterEquipmentDefinition().getDesignLevel(floorArea,numPeople) * multiplier();
 }
Esempio n. 24
0
void main()
{
	int r;
	r = multiplier(10, 20);
	printf("The product is: %d\n", r);
}
void varying ()
{
    std::cout << multiplier(10) << std::endl;
    std::cout << multiplier(1, 2, 3) << std::endl;
    std::cout << multiplier(6, 7.1, 8) << std::endl;
}
Esempio n. 26
0
sexp run_main (int argc, char **argv) {
#if SEXP_USE_MODULES
  char *impmod;
#endif
  char *arg;
  const char *prefix=NULL, *suffix=NULL, *main_symbol=NULL, *main_module=NULL;
  sexp_sint_t i, j, c, quit=0, print=0, init_loaded=0, mods_loaded=0,
    fold_case=SEXP_DEFAULT_FOLD_CASE_SYMS, nonblocking=0;
  sexp_uint_t heap_size=0, heap_max_size=SEXP_MAXIMUM_HEAP_SIZE;
  sexp out=SEXP_FALSE, ctx=NULL, ls;
  sexp_gc_var4(tmp, sym, args, env);
  args = SEXP_NULL;
  env = NULL;

  /* SRFI 22: invoke `main` procedure by default if the interpreter is */
  /* invoked as `scheme-r7rs`. */
  arg = strrchr(argv[0], '/');
  if (strncmp((arg == NULL ? argv[0] : arg + 1), "scheme-r7rs", strlen("scheme-r7rs")) == 0) {
    main_symbol = "main";
    /* skip option parsing since we can't pass `--` before the name of script */
    /* to avoid misinterpret the name as options when the interpreter is */
    /* executed via `#!/usr/env/bin scheme-r7rs` shebang.  */
    i = 1;
    goto done_options;
  }

  /* parse options */
  for (i=1; i < argc && argv[i][0] == '-'; i++) {
    switch ((c=argv[i][1])) {
    case 'D':
      init_context();
      arg = (argv[i][2] == '\0') ? argv[++i] : argv[i]+2;
      sym = sexp_intern(ctx, arg, -1);
      ls = sexp_global(ctx, SEXP_G_FEATURES);
      if (sexp_pairp(ls)) {
        for (; sexp_pairp(sexp_cdr(ls)); ls=sexp_cdr(ls))
          ;
        sexp_cdr(ls) = sexp_cons(ctx, sym, SEXP_NULL);
      }
      break;
    case 'e':
    case 'p':
      mods_loaded = 1;
      load_init(0);
      print = (argv[i][1] == 'p');
      arg = ((argv[i][2] == '\0') ? argv[++i] : argv[i]+2);
      check_nonull_arg('e', arg);
      tmp = check_exception(ctx, sexp_eval_string(ctx, arg, -1, env));
      if (print) {
        if (! sexp_oportp(out))
          out = sexp_eval_string(ctx, "(current-output-port)", -1, env);
        sexp_write(ctx, tmp, out);
        sexp_write_char(ctx, '\n', out);
      }
      quit = 1;
      break;
    case 'l':
      mods_loaded = 1;
      load_init(0);
      arg = ((argv[i][2] == '\0') ? argv[++i] : argv[i]+2);
      check_nonull_arg('l', arg);
      check_exception(ctx, sexp_load_module_file(ctx, arg, env));
      break;
    case 'x':
      prefix = sexp_environment_prefix;
      suffix = sexp_environment_suffix;
    case 'm':
      arg = ((argv[i][2] == '\0') ? argv[++i] : argv[i]+2);
      if (c == 'x') {
        if (strcmp(arg, "chibi.primitive") == 0) {
          goto load_primitive;
        } else if (strcmp(arg, "scheme.small") == 0) {
          load_init(0);
          break;
        }
      } else {
        prefix = sexp_import_prefix;
        suffix = sexp_import_suffix;
      }
      mods_loaded = 1;
      load_init(c == 'x');
#if SEXP_USE_MODULES
      check_nonull_arg(c, arg);
      impmod = make_import(prefix, arg, suffix);
      tmp = check_exception(ctx, sexp_eval_string(ctx, impmod, -1, (c=='x' ? sexp_global(ctx, SEXP_G_META_ENV) : env)));
      free(impmod);
      if (c == 'x') {
        sexp_set_parameter(ctx, sexp_global(ctx, SEXP_G_META_ENV), sexp_global(ctx, SEXP_G_INTERACTION_ENV_SYMBOL), tmp);
        sexp_context_env(ctx) = env = tmp;
        sexp_add_import_binding(ctx, env);
        tmp = sexp_param_ref(ctx, env, sexp_global(ctx, SEXP_G_CUR_OUT_SYMBOL));
        if (tmp != NULL && !sexp_oportp(tmp)) {
          sexp_load_standard_ports(ctx, env, stdin, stdout, stderr, 0);
        }
      }
#endif
      break;
    load_primitive:
    case 'Q':
      init_context();
      mods_loaded = 1;
      if (! init_loaded++)
        sexp_load_standard_ports(ctx, env, stdin, stdout, stderr, 0);
      handle_noarg();
      break;
    case 'q':
      argv[i--] = (char*)"-xchibi";
      break;
    case 'A':
      init_context();
      arg = ((argv[i][2] == '\0') ? argv[++i] : argv[i]+2);
      check_nonull_arg('A', arg);
      sexp_add_module_directory(ctx, tmp=sexp_c_string(ctx,arg,-1), SEXP_TRUE);
      break;
    case 'I':
      init_context();
      arg = ((argv[i][2] == '\0') ? argv[++i] : argv[i]+2);
      check_nonull_arg('I', arg);
      sexp_add_module_directory(ctx, tmp=sexp_c_string(ctx,arg,-1), SEXP_FALSE);
      break;
#if SEXP_USE_GREEN_THREADS
    case 'b':
      nonblocking = 1;
      break;
#endif
    case '-':
      if (argv[i][2] == '\0') {
        i++;
        goto done_options;
      }
      sexp_usage(1);
    case 'h':
      arg = ((argv[i][2] == '\0') ? argv[++i] : argv[i]+2);
      check_nonull_arg('h', arg);
#if ! SEXP_USE_BOEHM
      heap_size = strtoul(arg, &arg, 0);
      if (sexp_isalpha((unsigned char)*arg)) heap_size *= multiplier(*arg++);
      if (*arg == '/') {
        heap_max_size = strtoul(arg+1, &arg, 0);
        if (sexp_isalpha((unsigned char)*arg)) heap_max_size *= multiplier(*arg++);
      }
#endif
      break;
#if SEXP_USE_IMAGE_LOADING
    case 'i':
      arg = ((argv[i][2] == '\0') ? argv[++i] : argv[i]+2);
      if (ctx) {
        fprintf(stderr, "-:i <file>: image files must be loaded first\n");
        exit_failure();
      }
      ctx = sexp_load_image(arg, 0, heap_size, heap_max_size);
      if (!ctx || !sexp_contextp(ctx)) {
        fprintf(stderr, "-:i <file>: couldn't open image file for reading: %s\n", arg);
        fprintf(stderr, "            %s\n", sexp_load_image_err());
        ctx = NULL;
      } else {
        env = sexp_load_standard_params(ctx, sexp_context_env(ctx), nonblocking);
        init_loaded++;
      }
      break;
    case 'd':
      if (! init_loaded++) {
        init_context();
        env = sexp_load_standard_env(ctx, env, SEXP_SEVEN);
      }
      arg = ((argv[i][2] == '\0') ? argv[++i] : argv[i]+2);
      if (sexp_save_image(ctx, arg) != SEXP_TRUE) {
        fprintf(stderr, "-d <file>: couldn't save image to file: %s\n", arg);
        fprintf(stderr, "           %s\n", sexp_load_image_err());
        exit_failure();
      }
      quit = 1;
      break;
#endif
    case 'V':
      load_init(1);
      if (! sexp_oportp(out))
        out = sexp_eval_string(ctx, "(current-output-port)", -1, env);
      sexp_write_string(ctx, sexp_version_string, out);
      tmp = sexp_env_ref(ctx, env, sym=sexp_intern(ctx, "*features*", -1), SEXP_NULL);
      sexp_write(ctx, tmp, out);
      sexp_newline(ctx, out);
      return SEXP_TRUE;
#if SEXP_USE_FOLD_CASE_SYMS
    case 'f':
      fold_case = 1;
      init_context();
      sexp_global(ctx, SEXP_G_FOLD_CASE_P) = SEXP_TRUE;
      handle_noarg();
      break;
#endif
    case 'R':
      main_module = argv[i][2] != '\0' ? argv[i]+2 :
        (i+1 < argc && argv[i+1][0] != '-') ? argv[++i] : "chibi.repl";
      if (main_symbol == NULL) main_symbol = "main";
      break;
    case 'r':
      main_symbol = argv[i][2] == '\0' ? "main" : argv[i]+2;
      break;
    case 's':
      init_context(); sexp_global(ctx, SEXP_G_STRICT_P) = SEXP_TRUE;
      handle_noarg();
      break;
    case 'T':
      init_context(); sexp_global(ctx, SEXP_G_NO_TAIL_CALLS_P) = SEXP_TRUE;
      handle_noarg();
      break;
    case 't':
      mods_loaded = 1;
      load_init(1);
      arg = ((argv[i][2] == '\0') ? argv[++i] : argv[i]+2);
#if SEXP_USE_MODULES
      check_nonull_arg('t', arg);
      suffix = strrchr(arg, '.');
      sym = sexp_intern(ctx, suffix + 1, -1);
      *(char*)suffix = '\0';
      impmod = make_import(sexp_trace_prefix, arg, sexp_trace_suffix);
      tmp = check_exception(ctx, sexp_eval_string(ctx, impmod, -1, sexp_meta_env(ctx)));
      if (!(tmp && sexp_envp(tmp))) {
        fprintf(stderr, "couldn't find library to trace: %s\n", impmod);
      } else if (!((sym = sexp_env_cell(ctx, tmp, sym, 0)))) {
        fprintf(stderr, "couldn't find binding to trace: %s in %s\n", suffix + 1, impmod);
      } else {
        sym = sexp_list1(ctx, sym);
        tmp = check_exception(ctx, sexp_eval_string(ctx, "(environment '(chibi trace))", -1, sexp_meta_env(ctx)));
        tmp = sexp_env_ref(ctx, tmp, sexp_intern(ctx, "trace-cell", -1), 0);
        if (tmp && sexp_procedurep(tmp))
          check_exception(ctx, sexp_apply(ctx, tmp, sym));
      }
      free(impmod);
#endif
      break;
    default:
      fprintf(stderr, "unknown option: %s\n", argv[i]);
      /* ... FALLTHROUGH ... */
    case '?':
      sexp_usage(1);
    }
  }

 done_options:
  if (!quit || main_symbol != NULL) {
    init_context();
    /* build argument list */
    if (i < argc)
      for (j=argc-1; j>=i; j--)
        args = sexp_cons(ctx, tmp=sexp_c_string(ctx,argv[j],-1), args);
    if (i >= argc || main_symbol != NULL)
      args = sexp_cons(ctx, tmp=sexp_c_string(ctx,argv[0],-1), args);
    load_init(i < argc || main_symbol != NULL);
    sexp_set_parameter(ctx, sexp_meta_env(ctx), sym=sexp_intern(ctx, sexp_argv_symbol, -1), args);
    if (i >= argc && main_symbol == NULL) {
      /* no script or main, run interactively */
      repl(ctx, env);
    } else {
#if SEXP_USE_MODULES
      /* load the module or script */
      if (main_module != NULL) {
        impmod = make_import("(load-module '(", main_module, "))");
        env = check_exception(ctx, sexp_eval_string(ctx, impmod, -1, sexp_meta_env(ctx)));
        if (sexp_vectorp(env)) env = sexp_vector_ref(env, SEXP_ONE);
        free(impmod);
        check_exception(ctx, env);
        if (!sexp_envp(env)) {
          fprintf(stderr, "couldn't find module: %s\n", main_module);
          exit_failure();
        }
      } else
#endif
      if (i < argc) {   /* script usage */
#if SEXP_USE_MODULES
        /* reset the environment to have only the `import' and */
        /* `cond-expand' bindings */
        if (!mods_loaded) {
          env = sexp_make_env(ctx);
          sexp_set_parameter(ctx, sexp_meta_env(ctx),
                             sexp_global(ctx, SEXP_G_INTERACTION_ENV_SYMBOL), env);
          sexp_context_env(ctx) = env;
          sym = sexp_intern(ctx, "repl-import", -1);
          tmp = sexp_env_ref(ctx, sexp_meta_env(ctx), sym, SEXP_VOID);
          sym = sexp_intern(ctx, "import", -1);
          check_exception(ctx, sexp_env_define(ctx, env, sym, tmp));
          sym = sexp_intern(ctx, "cond-expand", -1);
          tmp = sexp_env_cell(ctx, sexp_meta_env(ctx), sym, 0);
#if SEXP_USE_RENAME_BINDINGS
          sexp_env_rename(ctx, env, sym, tmp);
#endif
          sexp_env_define(ctx, env, sym, sexp_cdr(tmp));
        }
#endif
        sexp_context_tracep(ctx) = 1;
        tmp = sexp_env_bindings(env);
#if SEXP_USE_MODULES
        /* use scheme load if possible for better stack traces */
        sym = sexp_intern(ctx, "load", -1);
        tmp = sexp_env_ref(ctx, sexp_meta_env(ctx), sym, SEXP_FALSE);
        if (sexp_procedurep(tmp)) {
          sym = sexp_c_string(ctx, argv[i], -1);
          sym = sexp_list2(ctx, sym, env);
          tmp = check_exception(ctx, sexp_apply(ctx, tmp, sym));
        } else
#endif
          tmp = check_exception(ctx, sexp_load(ctx, sym=sexp_c_string(ctx, argv[i], -1), env));
#if SEXP_USE_WARN_UNDEFS
        sexp_warn_undefs(ctx, env, tmp, SEXP_VOID);
#endif
#ifdef EMSCRIPTEN
        if (sexp_applicablep(tmp)) {
          sexp_resume_ctx = ctx;
          sexp_resume_proc = tmp;
          sexp_preserve_object(ctx, sexp_resume_proc);
          emscripten_exit_with_live_runtime();
        }
#endif
      }
      /* SRFI-22: run main if specified */
      if (main_symbol) {
        sym = sexp_intern(ctx, main_symbol, -1);
        tmp = sexp_env_ref(ctx, env, sym, SEXP_FALSE);
        if (sexp_procedurep(tmp)) {
          args = sexp_list1(ctx, sexp_cdr(args));
          check_exception(ctx, sexp_apply(ctx, tmp, args));
        } else {
          fprintf(stderr, "couldn't find main binding: %s in %s\n", main_symbol, main_module ? main_module : argv[i]);
        }
      }
    }
  }

  sexp_gc_release4(ctx);
  if (sexp_destroy_context(ctx) == SEXP_FALSE) {
    fprintf(stderr, "destroy_context error\n");
    return SEXP_FALSE;
  }
  return SEXP_TRUE;
}
Esempio n. 27
0
void run_main (int argc, char **argv) {
  char *arg, *impmod, *p;
  sexp out=SEXP_FALSE, env=NULL, ctx=NULL;
  sexp_sint_t i, j, len, quit=0, print=0, init_loaded=0, fold_case=SEXP_DEFAULT_FOLD_CASE_SYMS;
  sexp_uint_t heap_size=0, heap_max_size=SEXP_MAXIMUM_HEAP_SIZE;
  sexp_gc_var2(tmp, args);
  args = SEXP_NULL;

  /* parse options */
  for (i=1; i < argc && argv[i][0] == '-'; i++) {
    switch (argv[i][1]) {
    case 'e':
    case 'p':
      load_init();
      print = (argv[i][1] == 'p');
      arg = ((argv[i][2] == '\0') ? argv[++i] : argv[i]+2);
      check_nonull_arg('e', arg);
      tmp = check_exception(ctx, sexp_eval_string(ctx, arg, -1, env));
      if (print) {
        if (! sexp_oportp(out))
          out = sexp_eval_string(ctx, "(current-output-port)", -1, env);
        sexp_write(ctx, tmp, out);
        sexp_write_char(ctx, '\n', out);
      }
      quit = 1;
      break;
    case 'l':
      load_init();
      arg = ((argv[i][2] == '\0') ? argv[++i] : argv[i]+2);
      check_nonull_arg('l', arg);
      check_exception(ctx, sexp_load_module_file(ctx, arg, env));
      break;
    case 'm':
      load_init();
      arg = ((argv[i][2] == '\0') ? argv[++i] : argv[i]+2);
      check_nonull_arg('m', arg);
      len = strlen(arg)+strlen(sexp_import_prefix)+strlen(sexp_import_suffix);
      impmod = (char*) malloc(len+1);
      strcpy(impmod, sexp_import_prefix);
      strcpy(impmod+strlen(sexp_import_prefix), arg);
      strcpy(impmod+len-+strlen(sexp_import_suffix), sexp_import_suffix);
      impmod[len] = '\0';
      for (p=impmod; *p; p++)
        if (*p == '.') *p=' ';
      check_exception(ctx, sexp_eval_string(ctx, impmod, -1, env));
      free(impmod);
      break;
    case 'q':
      init_context();
      if (! init_loaded++)
        sexp_load_standard_ports(ctx, env, stdin, stdout, stderr, 0);
      break;
    case 'A':
      init_context();
      arg = ((argv[i][2] == '\0') ? argv[++i] : argv[i]+2);
      check_nonull_arg('A', arg);
      sexp_add_module_directory(ctx, tmp=sexp_c_string(ctx,arg,-1), SEXP_TRUE);
      break;
    case 'I':
      init_context();
      arg = ((argv[i][2] == '\0') ? argv[++i] : argv[i]+2);
      check_nonull_arg('I', arg);
      sexp_add_module_directory(ctx, tmp=sexp_c_string(ctx,arg,-1), SEXP_FALSE);
      break;
    case '-':
      i++;
      goto done_options;
    case 'h':
      arg = ((argv[i][2] == '\0') ? argv[++i] : argv[i]+2);
      check_nonull_arg('h', arg);
      heap_size = strtoul(arg, &arg, 0);
      if (sexp_isalpha(*arg)) heap_size *= multiplier(*arg++);
      if (*arg == '/') {
        heap_max_size = strtoul(arg+1, &arg, 0);
        if (sexp_isalpha(*arg)) heap_max_size *= multiplier(*arg++);
      }
      break;
    case 'V':
      load_init();
      if (! sexp_oportp(out))
        out = sexp_eval_string(ctx, "(current-output-port)", -1, env);
      sexp_write_string(ctx, sexp_version_string, out);
      tmp = sexp_env_ref(env, sexp_intern(ctx, "*features*", -1), SEXP_NULL);
      sexp_write(ctx, tmp, out);
      sexp_newline(ctx, out);
      return;
#if SEXP_USE_FOLD_CASE_SYMS
    case 'f':
      fold_case = 1;
      if (ctx) sexp_global(ctx, SEXP_G_FOLD_CASE_P) = SEXP_TRUE;
      break;
#endif
    default:
      fprintf(stderr, "unknown option: %s\n", argv[i]);
      exit_failure();
    }
  }

 done_options:
  if (! quit) {
    load_init();
    if (i < argc)
      for (j=argc-1; j>i; j--)
        args = sexp_cons(ctx, tmp=sexp_c_string(ctx,argv[j],-1), args);
    else
      args = sexp_cons(ctx, tmp=sexp_c_string(ctx,argv[0],-1), args);
    sexp_env_define(ctx, env, sexp_intern(ctx, sexp_argv_symbol, -1), args);
    sexp_eval_string(ctx, sexp_argv_proc, -1, env);
    if (i < argc) {             /* script usage */
      sexp_context_tracep(ctx) = 1;
      check_exception(ctx, sexp_load(ctx, tmp=sexp_c_string(ctx, argv[i], -1), env));
      tmp = sexp_intern(ctx, "main", -1);
      tmp = sexp_env_ref(env, tmp, SEXP_FALSE);
      if (sexp_procedurep(tmp)) {
        args = sexp_list1(ctx, args);
        check_exception(ctx, sexp_apply(ctx, tmp, args));
      }
    } else {
      repl(ctx, env);
    }
  }

  sexp_gc_release2(ctx);
  sexp_destroy_context(ctx);
}
Esempio n. 28
0
 double InternalMass_Impl::getSurfaceAreaPerPerson(double floorArea, double numPeople) const {
   return internalMassDefinition().getSurfaceAreaPerPerson(floorArea,numPeople) * multiplier();
 }
Esempio n. 29
0
 double HotWaterEquipment_Impl::getPowerPerPerson(double floorArea, double numPeople) const {
   return hotWaterEquipmentDefinition().getPowerPerPerson(floorArea,numPeople) * multiplier();
 }
Esempio n. 30
0
 double Lights_Impl::getPowerPerPerson(double floorArea, double numPeople) const {
   return lightsDefinition().getPowerPerPerson(floorArea,numPeople) * multiplier();
 }