void Opcode8040::_run() {
     Logger::debug("SCRIPT") << "[8040] [*] op_bwand" << std::endl;
     auto bValue = _script->dataStack()->pop();
     auto aValue = _script->dataStack()->pop();
     if (!aValue.isNumber() || !bValue.isNumber()) {
         _error(std::string("op_bwand: invalid argument types: ") + aValue.typeName() + " bwand " +
                bValue.typeName());
     }
     _script->dataStack()->push(aValue.toInteger() & bValue.toInteger());
 }
void Opcode803DHandler::_run()
{
    Logger::debug("SCRIPT") << "[803D] [*] op_mod %" << std::endl;
    auto bValue = _vm->dataStack()->pop();
    auto aValue = _vm->dataStack()->pop();
    if (!aValue.isNumber() || !bValue.isNumber()) 
    {
        _error(std::string("op_mod: invalid argument types: ") + aValue.typeName() + " % " + bValue.typeName());
    }
    _vm->dataStack()->push(aValue.toInteger() % bValue.toInteger());
}
Beispiel #3
0
int typeSize(refObject type)
{ switch (toHook(car(type)))
  { case arrayHook:
    { type = cdr(type);
      return toInteger(car(type)) * typeSize(cadr(type)); }
    case char0Hook:
    { return sizeof(char0Type); }
    case char1Hook:
    { return sizeof(char1Type); }
    case int0Hook:
    { return sizeof(int0Type); }
    case int1Hook:
    { return sizeof(int1Type); }
    case int2Hook:
    { return sizeof(int2Type); }
    case nullHook:
    case referHook:
    case rowHook:
    { return sizeof(pointerType); }
    case procHook:
    { return sizeof(procType); }
    case real0Hook:
    { return sizeof(real0Type); }
    case real1Hook:
    { return sizeof(real1Type); }
    case skoHook:
    case varHook:
    { return typeSize(cadr(type)); }
    case strTypeHook:
    { return toInteger(cadddr(type)); }
    case tupleHook:
    { int slotAlign;
      refObject slotType;
      int tupleAlign = 1;
      int tupleSize = 0;
      type = cdr(type);
      while (type != nil)
      { slotType = car(type);
        slotAlign = typeAlign(slotType);
        tupleAlign = (slotAlign > tupleAlign ? slotAlign : tupleAlign);
        tupleSize += typeSize(slotType);
        tupleSize += rounder(tupleSize, slotAlign);
        type = cddr(type); }
      return tupleSize + rounder(tupleSize, tupleAlign); }
    case voidHook:
    { return sizeof(voidType); }
    default:
    { fail("Type has undefined size in typeSize!"); }}}
Beispiel #4
0
package_local boolean compileLiteral(String name) {
    int num = 0, sign = -1, idx = 0, len = strlen(name);
    if (charAt(name, 0) == '-') {
        sign = idx = 1;
    }
    int decimal = -10000;
    while (idx < len) {
        int chr = charAt(name, idx++);
        if (chr == '.') {
            decimal = 1;
        } else {
            int digit = '0' - chr;
            if (digit > 0 || digit < -9) return false; // NaN
            num = (num * 10) + digit;
            decimal *= 10;
        }
    }
    if (decimal < 0) {
        compilePushWord(name, toInteger(sign * num));
    } else {
        double real = (sign * num) / (double) decimal;
        compilePushWord(name, toDouble(real));
    }
    return true;

}
Beispiel #5
0
static status
addIntItem(IntItem ii, Int change)
{ Int ival;
  long val;
  char buf[100];
  CharArray ctmp;
  Int low, high;

  if ( (ival = toInteger(ii->value_text->string)) )
    val = valInt(ival);
  else
    val = 0;
  val += valInt(change);
  if ( (low=getLowIntItem(ii)) )
    val = max(val, valInt(low));
  if ( (high = getHighIntItem(ii)) )
    val = min(val, valInt(high));
  sprintf(buf, "%ld", val);
  ctmp = CtoScratchCharArray(buf);
  displayedValueTextItem((TextItem)ii, ctmp);
  doneScratchCharArray(ctmp);

  applyTextItem((TextItem)ii, OFF);

  succeed;
}
Beispiel #6
0
long LuaInterface::popInteger()
{
    assert(hasIndex(-1));
    long v = toInteger(-1);
    pop();
    return v;
}
Beispiel #7
0
static ssize_t write(struct file *file, const char __user *buffer, size_t size, loff_t *offset) {
	ssize_t result;

	char *valueAsString;
	if (!(valueAsString = kzalloc(size + 1, GFP_KERNEL))) {
		return -ENOMEM;
	}

	// Copy data from user to kernel memory
	if (!copy_from_user(valueAsString, buffer, size)) {
		//unsigned long value = simple_strtoul(buffer, NULL, 0);
		unsigned long value = toInteger(buffer);

		if (!(value >= 0 && value <= 255)) {
			return -ERANGE;
		}

		iowrite8((unsigned char)value, ledsIOBase);
		result = size;
	} else {
		printk(KERN_WARNING MODULE_LABEL "Error copying data to kernel memory!");
		result = /* Error copying data! */ -EFAULT;
	}

	kfree(valueAsString);

	return result;
}
Beispiel #8
0
string Numbers::toHex(int number) // Returns a string representation of integer in hex form.
{
	string ret_str; // Return string handle.
	string num_str; // Number string handle.

	if (number < 0) ret_str = "-0x"; else ret_str = "0x";

	while (number >= 16) // Collect all the hexa-decimal digits.
	{
		int rem = number % 16; // Get the hexa-decimal digit.
		number /= 16;

		if (rem > 9) num_str += (char) ('A' + rem - 10); // Add the letter hexa-decimal digit if more than 9.
		else num_str += toInteger(rem); // Add only the digit.
	}
	
	if (number > 9) num_str += (char) ('A' + number - 10); // Add the letter hexa-decimal digit if more than 9.
	else num_str += Numbers::toInteger(number);

	string cp_str = "";
	
	for (register int cnt = num_str.length() - 1; cnt >= 0; cnt--) cp_str += num_str[cnt]; // Reverse the string.
	num_str = cp_str; // Assign the reverse string.

	return (ret_str += num_str); // Return the final string.
}
Beispiel #9
0
bool toUnsigned(const std::u16string& value, unsigned int& output)
{
    int n;
    if (toInteger(value, n) && 0 <= n) {
        output = n;
        return true;
    }
    return false;
}
Beispiel #10
0
	double toScalar() const
	{
		if (isInteger())
			return toInteger();
		if (isDouble())
			return toDouble();

		qWarning("can't cast term to scalar");
		return 0.0;
	}
Beispiel #11
0
static Variant idateImpl(const String& format, int64_t timestamp) {
  if (format.size() != 1) {
    throw_invalid_argument("format: %s", format.data());
    return false;
  }
  auto dt = req::make<DateTime>(timestamp, false);
  int64_t ret = dt->toInteger(*format.data());
  if (ret == -1) return false;
  return ret;
}
Beispiel #12
0
void ScriptInterpreter::setKernelVar(int index, const ScriptValue &value) {

	debugCN(kDebugScript, "ScriptInterpreter::setKernelVar() index = %d\n", index);

	if (index > _kernelVarsMax) {
		debugCN(kDebugScript, "ScriptInterpreter::setKernelVar() Invalid kernel var index %d!\n", index);
		return;
	}

	debugCN(kDebugScript, "ScriptInterpreter::setKernelVar() name = %s\n", _kernelVars[index].desc);

	ScriptKernelVariable var = _kernelVars[index].var;

	switch (var) {

	case kKernelTrigger:
		_vm->_kernel->trigger = toInteger(value);
		debugCN(kDebugScript, "kKernelTrigger -> %d\n", toInteger(value));
		break;

	case kKernelTriggerMode:
		_vm->_kernel->triggerMode = (KernelTriggerType)toInteger(value);
		debugCN(kDebugScript, "kKernelTrigger -> %d\n", toInteger(value));
		break;

	case kKernelContinueHandlingTrigger:
		_vm->_kernel->daemonTriggerAvailable = (toInteger(value) != 0);
		debugCN(kDebugScript, "kKernelContinueHandlingTrigger -> %d\n", toInteger(value));
		break;

	case kGameNewRoom:
		_vm->_kernel->newRoom = toInteger(value);
		debugCN(kDebugScript, "kGameNewRoom -> %d\n", toInteger(value));
		break;

	case kPlayerCommandReady:
		// TODO
		debugCN(kDebugScript, "kPlayerCommandReady -> %d\n", toInteger(value));
		break;

	default:
		debugCN(kDebugScript, "ScriptInterpreter::setKernelVar() Invalid kernel var %d!\n", var);
		//g_system->delayMillis(2000);

	}

}
Beispiel #13
0
double JSValue::toLength(ExecState* exec) const
{
    // ECMA 7.1.15
    // http://www.ecma-international.org/ecma-262/6.0/#sec-tolength
    double d = toInteger(exec);
    if (d <= 0)
        return 0.0;
    if (std::isinf(d))
        return 9007199254740991.0; // 2 ** 53 - 1
    return std::min(d, 9007199254740991.0);
}
void esViewportTearEdges(int sx, int sy, float desiredAspectRatio)
{
	double w = double(sx);
	double h = double(sy);
	double curAspect = w/h;
		
	if( curAspect < desiredAspectRatio )
	{
		double desiredHeight = w/desiredAspectRatio;
		double d = 1.0 - desiredHeight/h;
		double margin = 0.5 * d;
		glViewport(  0, toInteger(margin*h), toInteger(1.0*w), toInteger((1.0 - (2.0*margin))*h) );
	}
	else if( curAspect > desiredAspectRatio )
	{
		double desiredWidth = h*desiredAspectRatio;
		double d = 1.0 - desiredWidth/w;
		double margin = 0.5 * d;
		glViewport( toInteger(margin*w), 0, toInteger((1.0 - (2.0*margin))*w), toInteger(h) );
	}
	else
	{
		glViewport( 0, 0, sx, sy );
	}
}
	Number Number::clone() const {
		switch (type()) {
			case NumberType::Integer:
				return Integer(toInteger());
			case NumberType::Double:
				return Double(toDouble());
			case NumberType::Float:
				return Float(toFloat());
			case NumberType::Boolean:
				return Boolean(toBoolean());
		}
		throw std::runtime_error(MakeString()<<"Could not clone number "<<toString());
	}
Beispiel #16
0
static Elevation
getConvertElevation(Any receiver, Any val)
{ Int i;
  Elevation e;

  if ( (e= getLookupElevation(receiver, val,
			      DEFAULT, DEFAULT, DEFAULT,
			      DEFAULT, DEFAULT, DEFAULT)) )
    return e;

  if ( (i = toInteger(val)) )
    answer(answerObject(ClassElevation, i, i, EAV));

  fail;
}
Beispiel #17
0
int typeAlign(refObject type)
{ switch (toHook(car(type)))
  { case arrayHook:
    { return typeAlign(caddr(type)); }
    case char0Hook:
    { return alignof(char0Type); }
    case char1Hook:
    { return alignof(char1Type); }
    case int0Hook:
    { return alignof(int0Type); }
    case int1Hook:
    { return alignof(int1Type); }
    case int2Hook:
    { return alignof(int2Type); }
    case nullHook:
    case referHook:
    case rowHook:
    { return alignof(pointerType); }
    case procHook:
    { return alignof(procType); }
    case real0Hook:
    { return alignof(real0Type); }
    case real1Hook:
    { return alignof(real1Type); }
    case skoHook:
    case varHook:
    { return typeAlign(cadr(type)); }
    case strTypeHook:
    { return toInteger(caddr(type)); }
    case tupleHook:
    { int maxAlign = 1;
      type = cdr(type);
      while (type != nil)
      { int align = typeAlign(car(type));
        maxAlign = (align > maxAlign ? align : maxAlign);
        type = cddr(type); }
      return maxAlign; }
    case voidHook:
    { return alignof(voidType); }
    default:
    { fail("Type has undefined alignment in typeAlign!"); }}}
Beispiel #18
0
    inline ber::Value Value::toBerValue() const
    {
        switch(type().value())
        {
            case ParameterType::Integer:
                return ber::Value(toInteger());

            case ParameterType::Real:
                return ber::Value(toReal());

            case ParameterType::String:
                return ber::Value(toString());

            case ParameterType::Octets:
                return ber::Value(toOctets());

            case ParameterType::Boolean:
                return ber::Value(toBoolean());
        }

        return ber::Value();
    }
Beispiel #19
0
void GraphTranslator::translate(const value::Map& buffer)
{
    const value::Map& init = toMapValue(buffer);

    mNodeNumber = toInteger(init.get("number"));
    if (mNodeNumber <= 0) {
        throw utils::ArgError("GraphTranslator: bad node number");
    } else {
        BoolArray::extent_gen extents;

        mGraph.resize(extents[mNodeNumber][mNodeNumber]);
    }

    if (init.exist("prefix")) {
        mPrefix = toString(init.get("prefix"));
        if (mPrefix.empty()) {
            throw utils::ArgError("GraphTranslator: bad prefix");
        }
    }

    if (init.exist("port")) {
        mPort = toString(init.get("port"));
    }

    std::string adjmat;
    if (init.exist("adjacency matrix file")) {
        const value::Map& matrix = init.getMap("adjacency matrix file");
        std::string file =
            std::string(utils::Path::path().getExternalPackageDataFile(
                matrix.getString("package"), matrix.getString("file")));
        std::ifstream File(file.c_str());
        std::string ligne;
        while (getline(File,ligne)) {
            adjmat += ligne.c_str();
            adjmat += "\n";
        }
    } else {
        adjmat = init.getString("adjacency matrix");
    }

    std::string classes;
    if (init.exist("classes file")) {
        std::string file;
        const value::Map& classesFile = init.getMap("classes file");
        file =
            std::string(utils::Path::path().getExternalPackageDataFile(
                classesFile.getString("package"),
                    classesFile.getString("file")));
        std::ifstream File(file.c_str());
        std::string ligne;
        while (getline(File,ligne)) {
            classes += ligne.c_str();
            classes += "\n";
        }
    }
    else {
        classes  = init.getString("classes");
    }

    typedef boost::tokenizer < boost::char_separator < char > > tokenizer;
    boost::char_separator<char> sep(" \n\t\r");

    {
        tokenizer tok(adjmat, sep);
        size_type i = 0, j = 0;
        for (tokenizer::iterator it = tok.begin(); it != tok.end(); ++it) {
         if (j==mNodeNumber)
            throw utils::ArgError("GraphTranslator: bad node number in matrix");
           mGraph[j][i] = ((*it) == "1");
            ++i;
            if (i == mNodeNumber) {
                i = 0;
                ++j;
            }
        }

        if (j * mNodeNumber + i != mNodeNumber * mNodeNumber) {
            throw utils::ArgError("GraphTranslator: bad node number in matrix");
        }
    }

    {
        tokenizer tok(classes, sep);

        for (tokenizer::iterator it = tok.begin(); it != tok.end(); ++it) {
            mClass.push_back(*it);
        }
    }

    if (mClass.size() != mNodeNumber) {
        throw utils::ArgError("GraphTranslator: bad node number in class");
    }

    makeBigBang();
}
Beispiel #20
0
 inline bool toInteger(  signed int   &i) {   signed long l = 0; bool b=toInteger(l); i=l; return b; }
Beispiel #21
0
 /* Zero-initialize to pacify gcc-4.2.1 by giving initial value */
 inline bool toInteger(unsigned short &i) { unsigned long l = 0; bool b=toInteger(l); i=l; return b; }
Beispiel #22
0
int MiniPS::Tokenizer::yylex() {
  int c=0; /* dummy initialization */
  bool hi;
  unsigned hv;
  slen_t nest, len;
  signed long l;
  double d;
  Real::metric_t metric;
  char saved;
  
  if (ungot==EOFF) return EOFF;
  if (ungot!=NO_UNGOT) { c=ungot; ungot=NO_UNGOT; goto again; }
 again_getcc:
  c=in.vi_getcc();
 again:
  switch (c) {
   case -1: eof:
    return ungot=EOFF;
   case '\n': case '\r': case '\t': case ' ': case '\f': case '\0':
    goto again_getcc;
   case '%': /* one-line comment */
    while ((c=in.vi_getcc())!='\n' && c!='\r' && c!=-1) ;
    if (c==-1) goto eof;
    goto again_getcc;
   case '{': case '[':
    return '[';
   case '}': case ']':
    return ']';
   case ')': goto err;
   case '>':
    if (in.vi_getcc()!='>') goto err;
    return '>';
   case '<':
    if ((c=in.vi_getcc())==-1) { uf_hex: Error::sev(Error::EERROR) << "miniPS: unfinished hexstr" << (Error*)0; }
    if (c=='<') return '<';
    if (c=='~') Error::sev(Error::EERROR) << "miniPS: a85str unsupported" << (Error*)0;
    tv.bb=&b; b.clear();
    hi=true;
    while (c!='>') {
      if ((hv=b.hexc2n(c))!=16) {
        if (hi) { b << (char)(hv<<4); hi=false; }
           else { b.end_()[-1]|=hv; hi=true; }
      } else if (!is_ps_white(c)) Error::sev(Error::EERROR) << "miniPS: syntax error in hexstr" << (Error*)0;
      if ((c=in.vi_getcc())==-1) goto uf_hex;
    }
    /* This is correct even if an odd number of hex digits have arrived */
    return '(';
   case '(':
    tv.bb=&b; b.clear();
    nest=1;
    while ((c=in.vi_getcc())!=-1) { redo:
      if (c==')' && --nest==0) return '(';
      if (c!='\\') { if (c=='(') nest++; b << (char)c; continue; }
      /* read a backslash */
      switch (c=in.vi_getcc()) {
       case -1: goto uf_str;
       case 'n': b << '\n'; break;
       case 'r': b << '\r'; break;
       case 't': b << '\t'; break;
       case 'b': b << '\010'; break; /* \b and \a conflict between -ansi and -traditional */
       case 'f': b << '\f'; break;
       default:
        if (c<'0' || c>'7') { b << (char)c; break; }
        hv=c-'0'; /* read at most 3 octal chars */
        if ((c=in.vi_getcc())==-1) goto uf_str;
        if (c<'0' || c>'7') { b << (char)hv; goto redo; }
        hv=8*hv+(c-'0');
        if ((c=in.vi_getcc())==-1) goto uf_str;
        if (c<'0' || c>'7') { b << (char)hv; goto redo; }
        b << (char)(8*hv+(c-'0'));
      } /* SWITCH */
    } /* WHILE */    
    uf_str: Error::sev(Error::EERROR) << "miniPS: unfinished str" << (Error*)0;
   case '/':
    /* fall-through, b will begin with '/' */
   default: /* /nametype, /integertype or /realtype */
    tv.bb=&b; b.clear();
    b.clear(); b << (char)c;
    while ((c=in.vi_getcc())!=-1 && is_ps_name(c)) b << (char)c;
    ungot=c==-1?EOFF:c;
    if (b[0]=='/') return '/';
    b.term0();
    /* Dat: we don't support base-n number such as `16#100' == 256 in PostScript */
    if (!toInteger(b, l)) { tv.i=l; return '1'; }
    /* Dat: call toInteger _before_ toReal */
    // if (!toReal(b, tv.d)) { fprintf(stderr,"%f;\n", tv.d); }
    /* assert(tv.bb!=NULLP); */
    len=b.getLength();
    if (!toReal(b, d)) { /* tv.bb is also valid */
      tv.r=new Real(d, b(), len);
      return '.';
    } 
    if (len>2 && (metric=Real::str2metric(b()+len-2))!=Real::ME_COUNT) {
      saved=b[len-2];
      b[len-2]='\0';
      if (!toReal(b, d)) {
        tv.r=new Real(d, b(), len-2);
        tv.r->setMetric(metric);
        return ':'; /* Real with metric */
      }
      b[len-2]=saved;
    }
    return 'E'; /* /nametype */
  }
 err:
  Error::sev(Error::EERROR) << "miniPS: syntax error" << (Error*)0;
  goto again_getcc; /* notreached */
}
void OpcodeComparisonHandler::_run()
{
    Logger::debug("SCRIPT") << "[8033-8038] [*] " << _cmpOpcodeName() << std::endl;
    auto bValue = _vm->dataStack()->pop();
    auto aValue = _vm->dataStack()->pop();
    int result = 0;
    switch (aValue.type())
    {
        case VMStackValue::Type::INTEGER:
        {
            int arg1 = aValue.integerValue();
            switch (bValue.type())
            {
                case VMStackValue::Type::INTEGER:
                {
                    result = _compare(arg1, bValue.integerValue()); // INTEGER op INTEGER
                    break;
                }
                case VMStackValue::Type::FLOAT:
                {
                    result = _compare(arg1, bValue.floatValue()); // INTEGER op FLOAT
                    break;
                }
                case VMStackValue::Type::STRING:
                {
                    result = _compare(arg1, bValue.toInteger()); // INTEGER op STRING (parsed as int)
                    break;
                }
                default:
                {
                    _error(std::string() + _cmpOpcodeName() + ": invalid right argument type: " + bValue.typeName());
                }
            }
            break;
        }
        case VMStackValue::Type::FLOAT:
        {
            float arg1 = aValue.floatValue();
            switch (bValue.type())
            {
                case VMStackValue::Type::INTEGER:
                {
                    result = _compare(arg1, bValue.integerValue()); // FLOAT op INTEGER
                    break;
                }
                case VMStackValue::Type::FLOAT:
                {
                    result = _compare(arg1, bValue.floatValue()); // FLOAT op FLOAT
                    break;
                }
                case VMStackValue::Type::STRING:
                {
                    float arg2 = 0.0;
                    try 
                    {
                        arg2 = std::stof(bValue.stringValue());
                    }
                    catch (std::invalid_argument ex) { }
                    catch (std::out_of_range ex) { }
                    result = _compare(arg1, arg2); // FLOAT op STRING (parsed as float)
                    break;
                }
                default:
                {
                    _error(std::string() + _cmpOpcodeName() + ": invalid right argument type: " + bValue.typeName());
                }
            }
            break;
        }
        case VMStackValue::Type::STRING:
        {
            switch (bValue.type())
            {
                case VMStackValue::Type::INTEGER:
                {
                    result = _compare(aValue.toInteger(), bValue.integerValue()); // STRING (as integer) op INTEGER
                    break;
                }
                case VMStackValue::Type::FLOAT:
                {
                    float arg1 = 0.0;
                    try 
                    {
                        arg1 = std::stof(aValue.stringValue());
                    }
                    catch (std::invalid_argument ex) { }
                    catch (std::out_of_range ex) { }
                    result = _compare(arg1, bValue.floatValue()); // STRING (as float) op FLOAT
                    break;
                }
                case VMStackValue::Type::STRING:
                {
                    result = _compare(aValue.stringValue(), bValue.stringValue()); // STRING op STRING
                    break;
                }
                default:
                {
                    _error(std::string() + _cmpOpcodeName() + ": invalid right argument type: " + bValue.typeName());
                }
            }
            break;
        }
        case VMStackValue::Type::OBJECT:
        {
            switch (bValue.type())
            {
                case VMStackValue::Type::INTEGER:
                {
                    result = _compare((int)aValue.toBoolean(), bValue.integerValue()); // OBJECT op INTEGER
                    break;
                }
                case VMStackValue::Type::FLOAT:
                {
                    result = _compare((float)aValue.toBoolean(), bValue.floatValue()); // OBJECT op FLOAT
                    break;
                }
                case VMStackValue::Type::STRING:
                {
                    result = _compare(aValue.toString(), bValue.stringValue()); // OBJECT op STRING - compare object name
                    break;
                }
                default:
                {
                    _error(std::string() + _cmpOpcodeName() + ": invalid right argument type: " + bValue.typeName());
                }
            }
            break;
        }
        default:
        {
            _error(std::string() + _cmpOpcodeName() + ": invalid left argument type: " + aValue.typeName());
        }
    }
    _vm->dataStack()->push(result);
}
Beispiel #24
0
void writingObject(refBuffer buffer, refObject object)
{ if (object == nil)
  { writeFormat(buffer, "[Nil]"); }
  else
  { switch (tag(object))
    { case cellTag:
      { writeFormat(buffer, "[Cell %X]", object);
        return; }
      case characterTag:
      { writeCharacter(buffer, toCharacter(object));
        return; }
      case evenBinderTag:
      { writeFormat(buffer, "[EvenBinder %X]", object);
        return; }
      case hookTag:
      { writeFormat(buffer, "?%s", hookTo(object));
        return; }
      case hunkTag:
      { writeFormat(buffer, "[Hunk %X]", object);
        return; }
      case integerTag:
      { writeFormat(buffer, "%i", toInteger(object));
        return; }
      case jokerTag:
      { writeFormat(buffer, "[%s]", jokerTo(object));
        return; }
      case leftBinderTag:
      { writeFormat(buffer, "[LeftBinder %X]", object);
        return; }
      case markedTag:
      { writeFormat(buffer, "[...]");
        return; }
      case matchTag:
      { writeFormat(buffer, "[Match %X]", object);
        return; }
      case nameTag:
      { writeVisibleName(buffer, object);
        return; }
      case pairTag:
      { refObject pairs = object;
        tag(object) = markedTag;
        writeChar(buffer, '(');
        writingObject(buffer, car(pairs));
        pairs = cdr(pairs);
        while (pairs != nil)
        { writeBlank(buffer);
          writingObject(buffer, car(pairs));
          pairs = cdr(pairs); }
        writeChar(buffer, ')');
        tag(object) = pairTag;
        return; }
      case realTag:
      { writeFormat(buffer, "%.17E", toReal(object));
        return; }
      case rightBinderTag:
      { writeFormat(buffer, "[RightBinder %X]", object);
        return; }
      case stringTag:
      { writeQuotedString(buffer, toRefString(object));
        return; }
      default:
      { writeFormat(buffer, "[Tag%i %X]", tag(object), object);
        return; }}}}
 bool
 processConfigurationDetail( std::string detail, Logger& logger, int lineNumber )
 {
   std::string parameter, value;
   if (extractParameterValue(detail, parameter, value))
     {
       if (parameter == "TrafficPercentage")
         trafficPercentage = toInteger(value);
       else if (parameter == "Name")
         name = value;
       else if (parameter == "NameAppendBytes")
         nameAppendBytes = toInteger(value);
       else if (parameter == "NameAppendSequenceNumber")
         nameAppendSequenceNumber = toInteger(value);
       else if (parameter == "MinSuffixComponents")
         minSuffixComponents = toInteger(value);
       else if (parameter == "MaxSuffixComponents")
         maxSuffixComponents = toInteger(value);
       else if (parameter == "ExcludeBefore")
         excludeBefore = value;
       else if (parameter == "ExcludeAfter")
         excludeAfter = value;
       else if (parameter == "ExcludeBeforeBytes")
         excludeBeforeBytes = toInteger(value);
       else if (parameter == "ExcludeAfterBytes")
         excludeAfterBytes = toInteger(value);
       else if (parameter == "ChildSelector")
         childSelector = toInteger(value);
       else if (parameter == "MustBeFresh")
         mustBeFresh = toInteger(value);
       else if (parameter == "NonceDuplicationPercentage")
         nonceDuplicationPercentage = toInteger(value);
       else if (parameter == "Scope")
         scope = toInteger(value);
       else if (parameter == "InterestLifetime")
         interestLifetime = toInteger(value);
       else if (parameter == "ExpectedContent")
         expectedContent = value;
       else
         logger.log("Line "+toString(lineNumber)+" \t- Invalid Parameter='"+parameter+"'", false, true);
     }
   else
     {
       logger.log("Line "+toString(lineNumber)+" \t- Improper Traffic Configuration Line- "+detail, false, true);
       return false;
     }
   return true;
 }
Beispiel #26
0
int main(){
	char **a;
	char **userNo;
	char **textContent;
	int textContentCounter = 0;
	int userNoCounter;

	DDRB = 0xFF;
	DDRD = 0b11111100;
	DDRC = 0xFF;
	DDRA = 0x00;
	PORTA = 0x00;

	initLCD();
	USART_Init(78);
	sei();
	/************************* display Init message ********************/
	LCDClear();
	LCDPrint ("uC working");
	_delay_ms(1000);
	/*******************************************************************/

	/****************************** GSM INIT ***************************/
	okComplete = 0;
	sendATCommand("at");
	while (okComplete == 0);

	if (okComplete == 1) {
		/************** GSM initilization success ******************/
		LCDClear();
		LCDPrintLines ("GSM init.:", "successful");
		/***********************************************************/

		/****** Check for EEPROM value and reset it ****************/
		/***********************************************************/
	}else {
		/************ GSM unsuccessful in initilization *************/
		LCDClear();
		LCDPrintLines ("GSM init.:", "failure");
		_delay_ms(1000);
		LCDClear();
		LCDPrint ("System Halting...");
		while (1);
		/************************************************************/
	}
	_delay_ms(1000);
	okComplete = 0;
	sendATCommand("at+cmgda=\"DEL ALL\"");
	while (okComplete == 0);
	if (okComplete == 1){
		LCDPrintLines ("message Delete",  "successful");
	} else if (okComplete == 2) {
		LCDPrintLines ("can't del. msg.", "system halting...");
		while (1);
	}
	_delay_ms(1000);
	okComplete = 1;
	/*******************************************************************/

	whatIsGoingOn = NOTHING;
	bufferCount = 0;
	while (1){
		if (okComplete == 1){
			//OK received
			LCDClear();
			if (whatIsGoingOn == NOTHING){
				LCDPrintLines("Vending Machine", "Code: vm001");
			} else if (whatIsGoingOn == MESSAGE_SEND_SUCCESSFULLY){
				LCDPrintLines("Product Dropped", "Thank You");
			} else if (whatIsGoingOn == ERRORV){
				LCDPrintLines ("Last Message:", "vmCode invalid");
			} else if (whatIsGoingOn == ERRORP){
				LCDPrintLines ("Last Message:", "itemCode invalid");
			} else if (whatIsGoingOn == ERRORR){
				LCDPrintLines ("Last Message:", "5 Retries Error");
			} else if (whatIsGoingOn == ERRORO){
				LCDPrintLines ("Last Message:", "Overfall");
			} else if (whatIsGoingOn == ERRORA){
				LCDPrintLines ("Last Message:", "unavail. product");
			} else if (whatIsGoingOn == ERRORPA){
				LCDPrintLines ("Last Message:", "und. pinCode len");
			}
			_delay_ms(1000);
			if (whatIsGoingOn != NOTHING){
				whatIsGoingOn = NOTHING;
				okComplete = 1;
			} else {
				okComplete = 0;
			}
		} else if (okComplete == 2){
			//ERROR Received
			LCDClear();
			LCDPrint ("Error Received");
			_delay_ms(1000);

			okComplete = 1;
		}else if (msgReceived == 1){
			//=CMTI Received
			LCDClear();
			LCDPrint ("msg rec @: ");

			if (msgNumber1 == 255){
				LCDData ((char)msgNumber);
			} else {
				LCDData ((char)msgNumber);
				LCDData ((char)msgNumber1);
			}

			/******** read message and process on it **************/

			//@1 set EEPROM
			//@1 (set EEPROM) complete

			okComplete = 0;
			/************** try 5 times to read SMS ***************/
			char repeatCounter = 2;
			while (repeatCounter <= 5){

				if (msgNumber1 == 255){
					sendATCommand1("at+cmgr=", msgNumber);
				} else {
					sendATCommand2("at+cmgr=", msgNumber, msgNumber1);
				}

				while ((okComplete == 0)){
					_delay_ms(200);
				}

				repeatCounter ++;
				if (okComplete == 1 || repeatCounter > 5){
					break;
				} else {
					okComplete = 0;
				}
			}
			/******************************************************/

			if (okComplete == 1){
				/*********** AT+CMGR value received in buffer *********/

				/*********** check for user number ********************/
				if (authCheck){
				userNo = split((char *) buffer, "\"", &userNoCounter);
				if (equals(userNo[3], AUTH_PHONENO) == 0){
					freeSplitedString(userNo, userNoCounter);
					sendMessage1 (phoneNo, "Unknown number detected: ", userNo[3], 2);
					msgReceived = 0;
					msgNumber = -1;
					msgNumber1 = -1;
					continue;
				}
				freeSplitedString(userNo, userNoCounter);
				}
				/******************************************************/

				/********** Check for message format ******************/
				//@1 Spliting message
				char *tempA2Lower;
				a = split((char*) buffer, checkPattern, (int *)&counter);

				tempA2Lower = toLower(a[2]);
				free(a[2]);
				a[2] = tempA2Lower;
				textContent = split (a[2], " ", &textContentCounter);

				pinCode = textContent[0];
				vmCode = textContent[1];
				productCode = textContent[2];
				//@1 Complete

				//@2 Check for 6 digit pinCode
				if (length(pinCode) == 6){
					//@3 check for vmMachine code
					if (equals(vmCode, "vm001") == 1){
						//@4 check for itemcode
						char *subSubString;
						subSubString = subString(productCode, 0, 1);
						if (equals(subSubString, "a")){
							char *subSubString2;

							//@5 check for productValue
							int productValue;
							subSubString2 = subString(productCode, 1, 2);
							productValue = toInteger(subSubString2);
							if (productValue > 6 || productValue < 1){
								/**** unavailable product ***********/
								sendMessage1 (phoneNo, pinCode, "unavailable product", 2);
								LCDPrintLines("Error: ", "unavailable product");
								whatIsGoingOn = ERRORA;
								/************************************/
							} else {
								/******** Every thing is correct drop the product *****/
								//@6 drop the product and display in LCD
								PORTC = (1 << (5 - (productValue - 1)));
								LCDPrintLines("Dropping", "Product: ");
								LCDPrint(subSubString2);
								//@6 (drop the product and display in LCD) complete

								//@7 start motor and count for 2 sec
								unsigned int fallCounter = 0;
								while ((!(bit_is_set(PINA, PA6))) && (!(bit_is_set(PINA, PA7)))) {
									/******* find out time take here *******/
									_delay_ms(1);
									if (fallCounter > 2000){
										break;
									}
									fallCounter++;
									/****************************************/
								}
								//@8 stop the motor and check for time
								PORTC = 0x00;
								if (fallCounter >= 2000) {
									/*********** overFall error **************/
									sendMessage1 (phoneNo, pinCode, "Overfall error", 2);
									LCDPrintLines("Error: ", "Overfall");
									whatIsGoingOn = ERRORO;
									/*****************************************/
								} else {
									/*********** success **************/
									sendMessage (phoneNo, pinCode, 1);
									LCDPrintLines("Drop: ", "successful");
									whatIsGoingOn = MESSAGE_SEND_SUCCESSFULLY;
									/*****************************************/
								}
								//@7 () Complete
								/******************************************************/
							}
							free (subSubString2);
							//@5 (Product value check) complete
						} else {
							/****** invalid vmCode *******/
							sendMessage1 (phoneNo, pinCode, "productCode invalid", 2);
							LCDPrintLines("Error: ", "productCode invalid");
							whatIsGoingOn = ERRORP;
							/*****************************/
						}
						free (subSubString);
						//@4 (check for itemcode) complete
					} else {
						/****** invalid vmCode *******/
						sendMessage1 (phoneNo, pinCode, "vmCode invalid", 2);
						LCDPrintLines("Error: ", "vmCode invalid");
						whatIsGoingOn = ERRORV;
						/*****************************/
					}
					//@3 (check for vmMachine code) completed
				} else {
					/******* invalid pinCode *******/
					sendMessage1 (phoneNo, pinCode, "pinCode invalid", 2);
					LCDPrintLines("Error: und.", "pinCode length");
					whatIsGoingOn = ERRORPA;
					/*******************************/
				}
				//@2 (check for 6 digit pinCode) complete
				freeSplitedString (a, counter);
				freeSplitedString (textContent, textContentCounter);
				/******************************************************/

				/******************************************************/
			} else if (okComplete == 2){
				/**************** error reading sms *******************/
				sendMessage (phoneNo, "couldn't read message from GSM modem", 2);
				LCDPrintLines("Err Reading SMS", "5 Retries Error");
				whatIsGoingOn = ERRORR;
				/******************************************************/
			}

			/*********** delete the message **************/
			if (msgNumber1 == 255) {
				sendATCommand1("at+cmgd=", msgNumber);
			} else {
				sendATCommand2("at+cmgd=", msgNumber, msgNumber1);
			}
			/*********************************************/

			//@2 reset EEPROM
			//@2 (reset EEPROM) complete

			_delay_ms(1000);

			msgNumber = -1;
			msgNumber1 = -1;
			msgReceived = 0;
		} else if (ringReceived == 1){
			//RING received
			LCDClear();
			LCDPrintLines("Message Received:","dummy message");
			_delay_ms(200);
			/******** read message and process on it **************/

			//@1 set EEPROM
			//@1 (set EEPROM) complete

			okComplete = 1;
			strCpy((char*)newBuffer, (char*)buffer);
			if (okComplete == 1){
				/*********** AT+CMGR value received in buffer *********/

				/*********** check for user number ********************/
				if (authCheck){
				userNo = split((char *) buffer, "\"", &userNoCounter);
				if (equals(userNo[3], AUTH_PHONENO) == 0){
					freeSplitedString(userNo, userNoCounter);
					sendMessage1 (phoneNo, "Unknown number detected: ", userNo[3], 2);
					msgReceived = 0;
					msgNumber = -1;
					msgNumber1 = -1;
					continue;
				}
				freeSplitedString(userNo, userNoCounter);
				}
				/******************************************************/

				/********** Check for message format ******************/
				//@1 Spliting message
				char *tempA2Lower;
				a = split((char*) buffer, checkPattern, (int *)&counter);

				tempA2Lower = toLower(a[2]);
				free(a[2]);
				a[2] = tempA2Lower;

				textContent = split (a[2], " ", &textContentCounter);

				pinCode = textContent[0];
				vmCode = textContent[1];
				productCode = textContent[2];
				//@1 Complete

				//@2 Check for 6 digit pinCode
				if (length(pinCode) == 6){
					//@3 check for vmMachine code
					if (equals(vmCode, "vm001") == 1){
						//@4 check for itemcode
						char *subSubString;
						subSubString = subString(productCode, 0, 1);
						if (equals(subSubString, "a")){
							char *subSubString2;

							//@5 check for productValue
							int productValue;
							subSubString2 = subString(productCode, 1, 2);
							productValue = toInteger(subSubString2);
							if (productValue > 6 || productValue < 1){
								/**** unavailable product ***********/
								LCDPrintLines("Error: ", "unavailable product");
								whatIsGoingOn = ERRORA;
								/************************************/
							} else {
								/******** Every thing is correct drop the product *****/
								//@6 drop the product and display in LCD
								PORTC = (1 << (5 - (productValue - 1)));
								LCDPrintLines("Dropping", "Product: ");
								LCDPrint(subSubString2);
								//@6 (drop the product and display in LCD) complete

								//@7 start motor and count for 2 sec
								unsigned int fallCounter = 0;
								while ((!(bit_is_set(PINA, PA6))) && (!(bit_is_set(PINA, PA7)))) {
									/******* find out time take here *******/
									_delay_ms(1);
									if (fallCounter > 2000){
										break;
									}
									fallCounter++;
									/****************************************/
								}
								//@8 stop the motor and check for time
								PORTC = 0x00;
								if (fallCounter >= 2000) {
									/*********** overFall error **************/
									LCDPrintLines("Error: ", "Overfall");
									whatIsGoingOn = ERRORO;
									/*****************************************/
								} else {
									/*********** success **************/
									LCDPrint("Drop success");
									whatIsGoingOn = MESSAGE_SEND_SUCCESSFULLY;
									/*****************************************/
								}
								//@7 () Complete
								/******************************************************/
							}
							free (subSubString2);
							//@5 (Product value check) complete
						} else {
							/****** invalid vmCode *******/
							LCDPrintLines("Error: ", "productCode invalid");
							whatIsGoingOn = ERRORP;
							/*****************************/
						}
						free (subSubString);
						//@4 (check for itemcode) complete
					} else {
						/****** invalid vmCode *******/
						LCDPrintLines("Error: ", "vmCode invalid");
						whatIsGoingOn = ERRORV;
						/*****************************/
					}
					//@3 (check for vmMachine code) completed
				} else {
					/******* invalid pinCode *******/
					LCDPrintLines("Error: und.", "pinCode length");
					whatIsGoingOn = ERRORPA;
					/*******************************/
				}
				//@2 (check for 6 digit pinCode) complete
				freeSplitedString (a, counter);
				freeSplitedString (textContent, textContentCounter);
				/******************************************************/

				/******************************************************/
			} else if (okComplete == 2){
				/**************** error reading sms *******************/
				LCDPrintLines("Err Reading SMS", "5 Retries Error");
				whatIsGoingOn = ERRORR;
				/******************************************************/
			}

			//@2 reset EEPROM
			//@2 (reset EEPROM) complete

			_delay_ms(1000);

			msgNumber = -1;
			msgNumber1 = -1;
			msgReceived = 0;
			/***********************************************************************/

			ringReceived = 0;
		}
	}
	return 0;
}