Example #1
0
/*
=======================================================================================================================================
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;
}
Example #2
0
/*
=======================================================================================================================================
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