// consoleCallback handles the processing of locally-defined commands const char *SimDynamicDataPlugin::consoleCallback(CMDConsole *, int iCmd, int argc, const char *argv[]) { char szDup[BUFSIZ]; switch (iCmd) { // RegisterDataBlock is used to create a new instance of a // known data block type case RegisterDataBlock: if (argc == 3) { if (strlen(argv[1]) >= DATANAME_MAX_LENGTH) { console->printf("registerDataBlock: name too long"); } else { int ret = registerDataBlock(argv[1], argv[2]); switch (ret) { case DATAERROR_NOTIMPL: console->printf("registerDataBlock: not implemented"); break; case DATAERROR_NOTFOUND: console->printf("registerDataBlock: data type not found"); break; case DATAERROR_UNKNOWN: console->printf("registerDataBlock: unknown error"); break; case DATAERROR_EXISTS: console->printf("registerDataBlock: named data block exists"); break; } } } else { console->printf("registerDataBlock <name> <type>"); } break; // RegisterDataBlock is used to create a new instance of a // known data block type case RegisterStaticDataBlock: if (argc == 3) { if (strlen(argv[1]) >= DATANAME_MAX_LENGTH) { console->printf("registerDataBlock: name too long"); } else { int ret = registerStaticDataBlock(argv[1], argv[2]); switch (ret) { case DATAERROR_NOTIMPL: console->printf("registerStaticDataBlock: not implemented"); break; case DATAERROR_NOTFOUND: console->printf("registerStaticDataBlock: data type not found"); break; case DATAERROR_UNKNOWN: console->printf("registerStaticDataBlock: unknown error"); break; case DATAERROR_EXISTS: console->printf("registerStaticDataBlock: named data block exists"); break; } } } else { console->printf("registerStaticDataBlock <name> <type>"); } break; // EditDataBlock will either bring the requested data block into // scope, or create the requested data block if it was not found case EditDataBlock : if (argc == 3) { if (strlen(argv[1]) >= DATANAME_MAX_LENGTH) { console->printf("editDataBlock: name too long"); } else { vec_data::iterator iter; strcpy(szDup, argv[1]); if ((iter = findData(strupr(szDup))) != data.end()) { pDataCurrent = (Data *)(*iter); } else { int ret; ret = registerDataBlock(argv[1], argv[2]); switch (ret) { case DATAERROR_NOTIMPL: console->printf("editDataBlock: not implemented"); break; case DATAERROR_NOTFOUND: console->printf("editDataBlock: data type not found"); break; case DATAERROR_UNKNOWN: console->printf("editDataBlock: unknown error"); break; } } } } else { console->printf("editDataBlock <name> <type>"); } break; // SetData is used to set the values of elements within an in-scope // data block case SetData: { Element *element; vec_elem::iterator iter; int iRow = 0, iCol = 0, ret; if (argc > 2) { if (pDataCurrent == NULL) { ret = DATAERROR_NOCURRENT; } else { // See if this is a subscripted element ret = subscript(argv[1], iRow, iCol); if (ret == DATAERROR_NOERROR) { strcpy(szDup, argv[1]); if ((iter = pDataCurrent->findElem(strupr(szDup))) != pDataCurrent->elements.end()) { element = (Element *)(*iter); ret = verifySubscripts(element, argc - 2, iRow, iCol); if (ret == DATAERROR_NOERROR) { ret = setData(element, &argv[2], argc - 2, iRow, iCol); } } else { ret = DATAERROR_NOTFOUND; } } } switch (ret) { case DATAERROR_NOCURRENT: console->printf("setData: no current record"); break; case DATAERROR_NOTFOUND: console->printf("setData: data field: %s not found", argv[1]); break; case DATAERROR_INDEXOOB: console->printf("setData: index out of bounds"); break; case DATAERROR_NOSUBSCRIPT: console->printf("setData: cannot access multidimensional array without subscript"); break; case DATAERROR_SYNTAX: console->printf("setData: syntax error (badly formed)"); break; } } else { console->printf("setData <name> <value>"); } } break; } return 0; }
void DataBlockRepository::registerDataBlockForEvent(const std::string& s, MappedEvent* e) { e->setDataBlockId(registerDataBlock(s)); }