Beispiel #1
0
/*
=======================================================================================================================================
ReadFuzzyWeight
=======================================================================================================================================
*/
int ReadFuzzyWeight(source_t *source, fuzzyseperator_t *fs) {

	if (PC_CheckTokenString(source, "balance")) {
		fs->type = WT_BALANCE;

		if (!PC_ExpectTokenString(source, "(")) {
			return qfalse;
		}

		if (!ReadValue(source, &fs->weight)) {
			return qfalse;
		}

		if (!PC_ExpectTokenString(source, ",")) {
			return qfalse;
		}

		if (!ReadValue(source, &fs->minweight)) {
			return qfalse;
		}

		if (!PC_ExpectTokenString(source, ",")) {
			return qfalse;
		}

		if (!ReadValue(source, &fs->maxweight)) {
			return qfalse;
		}

		if (!PC_ExpectTokenString(source, ")")) {
			return qfalse;
		}
	} else {
		fs->type = 0;

		if (!ReadValue(source, &fs->weight)) {
			return qfalse;
		}

		fs->minweight = fs->weight;
		fs->maxweight = fs->weight;
	}

	if (!PC_ExpectTokenString(source, ";")) {
		return qfalse;
	}

	return qtrue;
}
Beispiel #2
0
//===========================================================================
//
// Parameter:				-
// Returns:					-
// Changes Globals:		-
//===========================================================================
int ReadFuzzyWeight(int source, fuzzyseperator_t *fs)
{
	if (PC_CheckTokenString(source, "balance"))
	{
		fs->type = WT_BALANCE;
		if (!PC_ExpectTokenString(source, "(")) return qfalse;
		if (!ReadValue(source, &fs->weight)) return qfalse;
		if (!PC_ExpectTokenString(source, ",")) return qfalse;
		if (!ReadValue(source, &fs->minweight)) return qfalse;
		if (!PC_ExpectTokenString(source, ",")) return qfalse;
		if (!ReadValue(source, &fs->maxweight)) return qfalse;
		if (!PC_ExpectTokenString(source, ")")) return qfalse;
	} //end if
	else
	{
		fs->type = 0;
		if (!ReadValue(source, &fs->weight)) return qfalse;
		fs->minweight = fs->weight;
		fs->maxweight = fs->weight;
	} //end if
	if (!PC_ExpectTokenString(source, ";")) return qfalse;
	return qtrue;
} //end of the function ReadFuzzyWeight
Beispiel #3
0
/*
=======================================================================================================================================
ReadStructure
=======================================================================================================================================
*/
int ReadStructure(source_t *source, structdef_t *def, char *structure) {
	token_t token;
	fielddef_t *fd;
	void *p;
	int num;

	if (!PC_ExpectTokenString(source, "{")) {
		return 0;
	}

	while (1) {
		if (!PC_ExpectAnyToken(source, &token)) {
			return qfalse;
		}
		// if end of structure
		if (!strcmp(token.string, "}")) {
			break;
		}
		// find the field with the name
		fd = FindField(def->fields, token.string);

		if (!fd) {
			SourceError(source, "unknown structure field %s", token.string);
			return qfalse;
		}

		if (fd->type & FT_ARRAY) {
			num = fd->maxarray;

			if (!PC_ExpectTokenString(source, "{")) {
				return qfalse;
			}
		} else {
			num = 1;
		}

		p = (void *)(structure + fd->offset);

		while (num-- > 0) {
			if (fd->type & FT_ARRAY) {
				if (PC_CheckTokenString(source, "}")) {
					break;
				}
			}

			switch (fd->type & FT_TYPE) {
				case FT_CHAR:
				{
					if (!ReadChar(source, fd, p)) {
						return qfalse;
					}

					p = (char *)p + sizeof(char);
					break;
				}
				case FT_INT:
				{
					if (!ReadNumber(source, fd, p)) {
						return qfalse;
					}

					p = (char *)p + sizeof(int);
					break;
				}
				case FT_FLOAT:
				{
					if (!ReadNumber(source, fd, p)) {
						return qfalse;
					}

					p = (char *)p + sizeof(float);
					break;
				}
				case FT_STRING:
				{
					if (!ReadString(source, fd, p)) {
						return qfalse;
					}

					p = (char *)p + MAX_STRINGFIELD;
					break;
				}
				case FT_STRUCT:
				{
					if (!fd->substruct) {
						SourceError(source, "BUG: no sub structure defined");
						return qfalse;
					}

					ReadStructure(source, fd->substruct, (char *)p);

					p = (char *)p + fd->substruct->size;
					break;
				}
			}

			if (fd->type & FT_ARRAY) {
				if (!PC_ExpectAnyToken(source, &token)) {
					return qfalse;
				}

				if (!strcmp(token.string, "}")) {
					break;
				}

				if (strcmp(token.string, ",")) {
					SourceError(source, "expected a comma, found %s", token.string);
					return qfalse;
				}
			}
		}
	}

	return qtrue;
}