static ValueStruct * BuildMcpArea( size_t stacksize) { ValueStruct *value; char buff[SIZE_BUFF]; char *p; p = buff; p += sprintf(p, "mcparea {"); p += sprintf(p, "func varchar(%d);",SIZE_FUNC); p += sprintf(p, "obj object;"); p += sprintf(p, "bin binary;"); p += sprintf(p, "rc int;"); p += sprintf(p, "dc {"); p += sprintf(p, "window varchar(%d);",4); p += sprintf(p, "widget varchar(%d);",SIZE_NAME); p += sprintf(p, "event varchar(%d);",SIZE_EVENT); p += sprintf(p, "module varchar(%d);",SIZE_NAME); p += sprintf(p, "fromwin varchar(%d);",SIZE_NAME); p += sprintf(p, "status varchar(%d);",SIZE_STATUS); p += sprintf(p, "puttype varchar(%d);",SIZE_PUTTYPE); p += sprintf(p, "term varchar(%d);",SIZE_TERM); p += sprintf(p, "user varchar(%d);",SIZE_USER); p += sprintf(p, "};"); p += sprintf(p, "db {"); p += sprintf(p, "path {"); p += sprintf(p, "blocks int;"); p += sprintf(p, "rname int;"); p += sprintf(p, "pname int;"); p += sprintf(p, "name varchar(%d);",SIZE_NAME); p += sprintf(p, "}[%d];",N_PATH); p += sprintf(p, "};"); p += sprintf(p, "private {"); p += sprintf(p, "count int;"); p += sprintf(p, "swindow char(%d)[];",SIZE_NAME); p += sprintf(p, "state char(1)[%d];",(int)stacksize); p += sprintf(p, "index int[%d];",(int)stacksize); p += sprintf(p, "pstatus char(1);"); p += sprintf(p, "pputtype char(1);"); p += sprintf(p, "prc char(1);"); p += sprintf(p, "};"); p += sprintf(p, "aliases {"); p += sprintf(p, " foo = db.path.blocks;"); p += sprintf(p, " baa = private.count;"); p += sprintf(p, "};"); p += sprintf(p, "};"); value = RecParseValueMem(buff,NULL); return (value); }
static VALUE recval_initialize(VALUE self, VALUE defs) { ValueStruct *val; value_struct_data *data; ENTER_FUNC; Data_Get_Struct(self, value_struct_data, data); val = RecParseValueMem(StringValuePtr(defs),NULL); data->value = val; data->cache = rb_hash_new(); recval_set_method(self,data->value); LEAVE_FUNC; return Qnil; }
int main(int argc, char *argv[]) { ValueStruct *value, *v; size_t size; char *buf; RecParserInit(); value = RecParseValueMem(recdef, NULL); InitializeValue(value); v = GetRecordItem(value, "command"); SetValueString(v, "a\"a\\a/a\ba\fa\na\ra\ta", NULL); v = GetItemLongName(value, "record1[0].col1"); SetValueString(v, "bbbb", NULL); v = GetItemLongName(value, "record1[0].record2.col21"); SetValueString(v, "cccc", NULL); v = GetItemLongName(value, "int1"); SetValueInteger(v, 10); v = GetItemLongName(value, "int2"); SetValueInteger(v, 20); v = GetItemLongName(value, "double1"); SetValueFloat(v, -3.2); fprintf(stderr, "\n---- JSON_PackValue\n"); size = JSON_SizeValue(NULL, value); fprintf(stderr, "size:%ld\n", size); buf = malloc(size + 1); memset(buf, 0, size + 1); JSON_PackValue(NULL, buf, value); fprintf(stderr, "[%s]\nsize:%ld\n", buf, strlen(buf)); fprintf(stderr, "\n---- JSON_UnPackValue 1\n"); JSON_UnPackValue(NULL, buf, value); DumpValueStruct(value); free(buf); fprintf(stderr, "\n---- JSON_UnPackValue 2\n"); JSON_UnPackValue(NULL, "{\"int1\":1000,\"int2\":2000}", value); DumpValueStruct(value); /* ommit */ fprintf(stderr, "\n-------------------\n"); fprintf(stderr, "ommit\n"); fprintf(stderr, "-------------------\n\n"); InitializeValue(value); v = GetRecordItem(value, "command"); SetValueString(v, "a\"a\\a/a\ba\fa\na\ra\ta", NULL); v = GetItemLongName(value, "record1[0].col1"); SetValueString(v, "bbbb", NULL); v = GetItemLongName(value, "record1[0].record2.col21"); SetValueString(v, "cccc", NULL); v = GetItemLongName(value, "int1"); SetValueInteger(v, 10); v = GetItemLongName(value, "int2"); SetValueInteger(v, 20); v = GetItemLongName(value, "record3[1].record4[1].vc41"); SetValueString(v, "vc41", NULL); fprintf(stderr, "\n---- JSON_PackValueOmmit\n"); size = JSON_SizeValueOmmit(NULL, value); fprintf(stderr, "size:%ld\n", size); buf = malloc(size + 1); memset(buf, 0, size + 1); JSON_PackValueOmmit(NULL, buf, value); fprintf(stderr, "size:%ld [%s]\n", strlen(buf), buf); free(buf); fprintf(stderr, "\n---- JSON_UnPackValueOmmit\n"); JSON_UnPackValueOmmit(NULL, "{\"int1\":1000,\"int2\":2000}", value); DumpValueStruct(value); fprintf(stderr, "\n---- JSON_UnPackValueOmmit 2\n"); JSON_UnPackValueOmmit( NULL, "{\"int1\":1234,\"int2\":5678,\"bool1\":false,\"double1\":3.141592}", value); DumpValueStruct(value); fprintf(stderr, "\n---- JSON_UnPackValueOmmit 3\n"); JSON_UnPackValueOmmit( NULL, "{\"int1\":1000,\"command\":\"moge\",\"record1\":[{\"col1\":\"muge\"," "\"record2\":{\"col21\":\"gage\"}},{},{\"col2\":\"nuge\"}],\"record3\":[{" "},{\"record4\":[{},{\"vc41\":\"vc41\"}]}]}", value); DumpValueStruct(value); InitializeValue(value); fprintf(stderr, "\n---- test\n"); JSON_UnPackValueOmmit(NULL, "{\"int1\":10,\"int0\":[0,1,2,3,0,5,0,6],\"bool1\":" "false,\"arg1\":\"hogehoge\"}", value); size = JSON_SizeValueOmmit(NULL, value); fprintf(stderr, "size:%ld\n", size); buf = malloc(size); memset(buf, 0, size); JSON_PackValueOmmit(NULL, buf, value); fprintf(stderr, "size:%d %s\n", (int)strlen(buf), buf); free(buf); fprintf(stderr, "\n\n\n\n\n\n---- JSON_PackValueOmmitString\n"); InitializeValue(value); v = GetRecordItem(value, "command"); SetValueString(v, "a\"a\\a/a\ba\fa\na\ra\ta", NULL); v = GetItemLongName(value, "record1[0].col1"); SetValueString(v, "bbbb", NULL); #if 0 v = GetItemLongName(value,"record1[0].record2.col21"); SetValueString(v,"cccc",NULL); #endif v = GetItemLongName(value, "int1"); SetValueInteger(v, 10); v = GetItemLongName(value, "int2"); SetValueInteger(v, 20); v = GetItemLongName(value, "record3[1].record4[1].vc41"); SetValueString(v, "vc41", NULL); DumpValueStruct(value); size = JSON_SizeValueOmmitString(NULL, value); fprintf(stderr, "size:%ld\n", size); buf = malloc(size + 1); memset(buf, 0, size + 1); JSON_PackValueOmmitString(NULL, buf, value); fprintf(stderr, "size:%ld [%s]\n", strlen(buf), buf); free(buf); return 0; }