/* ======================================================================================================================================= 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; }
//=========================================================================== // // 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
/* ======================================================================================================================================= 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; }