/* ======================================================================================================================================= WriteStructWithIndent ======================================================================================================================================= */ int WriteStructWithIndent(FILE *fp, structdef_t *def, char *structure, int indent) { int i, num; void *p; fielddef_t *fd; if (!WriteIndent(fp, indent)) { return qfalse; } if (fprintf(fp, "{\r\n") < 0) { return qfalse; } indent++; for (i = 0; def->fields[i].name; i++) { fd = &def->fields[i]; if (!WriteIndent(fp, indent)) { return qfalse; } if (fprintf(fp, "%s\t", fd->name) < 0) { return qfalse; } p = (void *)(structure + fd->offset); if (fd->type & FT_ARRAY) { num = fd->maxarray; if (fprintf(fp, "{") < 0) { return qfalse; } } else { num = 1; } while (num-- > 0) { switch (fd->type & FT_TYPE) { case FT_CHAR: { if (fprintf(fp, "%d", *(char *)p) < 0) { return qfalse; } p = (char *)p + sizeof(char); break; } case FT_INT: { if (fprintf(fp, "%d", *(int *)p) < 0) { return qfalse; } p = (char *)p + sizeof(int); break; } case FT_FLOAT: { if (!WriteFloat(fp, *(float *)p)) { return qfalse; } p = (char *)p + sizeof(float); break; } case FT_STRING: { if (fprintf(fp, "\"%s\"", (char *)p) < 0) { return qfalse; } p = (char *)p + MAX_STRINGFIELD; break; } case FT_STRUCT: { if (!WriteStructWithIndent(fp, fd->substruct, structure, indent)) { return qfalse; } p = (char *)p + fd->substruct->size; break; } } if (fd->type & FT_ARRAY) { if (num > 0) { if (fprintf(fp, ",") < 0) { return qfalse; } } else { if (fprintf(fp, "}") < 0) { return qfalse; } } } } if (fprintf(fp, "\r\n") < 0) { return qfalse; } } indent--; if (!WriteIndent(fp, indent)) { return qfalse; } if (fprintf(fp, "}\r\n") < 0) { return qfalse; } return qtrue; }
/* ======================================================================================================================================= WriteStructure ======================================================================================================================================= */ int WriteStructure(FILE *fp, structdef_t *def, char *structure) { return WriteStructWithIndent(fp, def, structure, 0); }
//=========================================================================== // // Parameter: - // Returns: - // Changes Globals: - //=========================================================================== int WriteStructure( FILE *fp, structdef_t *def, char *structure ) { return WriteStructWithIndent( fp, def, structure, 0 ); } //end of the function WriteStructure