// This file is a part of Framsticks SDK. http://www.framsticks.com/ // Copyright (C) 1999-2015 Maciej Komosinski and Szymon Ulatowski. // See LICENSE.txt for details. #include "genotypeloader.h" #include #include /** @file Sample code: Loading framsticks "objects" (well... structs) \include loader_test_param.cpp */ struct Data { public: SString text, longtext; int i1, i2, i3; float f1, f2, f3; ExtValue x; }; #define FIELDSTRUCT Data ParamEntry data_paramtab[] = { { "Data", 1, 8, "data", }, { "text", 0, 0, "Text", "s 0 10", FIELD(text), }, // 10 = length limit { "longtext", 0, 0, "Long text", "s 1", FIELD(longtext), }, // 1 = multiline, 0 = unlimited { "i1", 0, 0, "Integer 1", "d", FIELD(i1), }, // unrestricted integer { "i2", 0, 0, "Integer 1", "d -5 5 1", FIELD(i2), }, // [-5..5] integer, default=1 { "i3", 0, 0, "Integer 1", "d 0 3 0 ~Zero~One~Two~Three", FIELD(i3), }, // [0..3] + text labels (Param::getText()) { "f1", 0, 0, "Float 1", "d", FIELD(f1), }, // unrestricted float { "f2", 0, 0, "Float 2", "f -100 100 -100", FIELD(f2), }, // [-100..100] float, default=-100 { "x", 0, 0, "Untyped", "x", FIELD(x), }, // any type (class ExtValue) { 0, 0, 0, }, }; #undef FIELDSTRUCT int main(int argc, char*argv[]) { if (argc < 2) { fprintf(stderr, "Arguments: filename\n"); return 1; } StdioFILEDontClose virt_stderr(stderr); StdoutErrorHandler error_handler(0, &virt_stderr); StdioFileSystem_autoselect stdiofilesys; MultiParamLoader loader(argv[1]); Data data; Param param(data_paramtab, &data); loader.addObject(¶m); loader.breakOn(MultiParamLoader::OnError + MultiParamLoader::BeforeObject + MultiParamLoader::AfterObject + MultiParamLoader::OnComment); while (int status = loader.go()) { switch (status) { case MultiParamLoader::OnComment: printf("comment: %s\n", (const char*)loader.getComment()); break; case MultiParamLoader::AfterObject: printf("loaded:\n"); for (int i = 0; i < param.getPropCount(); i++) printf("%s=%s\n", param.id(i), (const char*)param.getText(i)); printf("type of 'x' is: %s\n", (const char*)data.x.typeDescription()); printf("-----\n\n"); break; case MultiParamLoader::BeforeObject: printf("----- object found, loading...\n"); param.setDefault(); //reset (initialize) struct contents break; case MiniGenotypeLoader::OnError: fprintf(stderr, "Error: %s", (const char*)loader.getError()); } } }