static void dumpElement(DCM_ELEMENT* e) { char txt[1024]; int l; if (DCM_IsString(e->representation)) { l = (e->length < sizeof(txt)-1)? e->length: sizeof(txt)-1; strncpy(txt, e->d.string, l); txt[l] = '\0'; printf("%s", txt); } else { printf("%-32s", e->description); } /* NEED TO INSERT CASE STATEMENT FOR VALUE REPRESENTATION ?*/ }
CONDITION MSG_ParseCStoreRequest(DCM_OBJECT ** object, MSG_C_STORE_REQ * storeRequest) { static MSG_C_STORE_REQ request; static unsigned short command; static DCM_ELEMENT elementList[] = { {DCM_GROUPCOMMAND, DCM_CMDCOMMANDFIELD, DCM_US, "", 1, sizeof(command), (void *) &command}, {DCM_GROUPCOMMAND, DCM_CMDCLASSUID, DCM_UI, "", 1, sizeof(request.classUID), (void *) request.classUID}, {DCM_GROUPCOMMAND, DCM_CMDMSGID, DCM_US, "", 1, sizeof(request.messageID), (void *) &request.messageID}, {DCM_GROUPCOMMAND, DCM_CMDPRIORITY, DCM_US, "", 1, sizeof(request.priority), (void *) &request.priority}, {DCM_GROUPCOMMAND, DCM_CMDDATASETTYPE, DCM_US, "", 1, sizeof(request.dataSetType), (void *) &request.dataSetType}, {DCM_GROUPCOMMAND, DCM_CMDREQUESTEDINSTANCEUID, DCM_UI, "", 1, sizeof(request.instanceUID), (void *) request.instanceUID} }; static MSGPRV_CONDITIONAL conditional[] = { {DCM_GROUPCOMMAND, DCM_CMDMOVEAETITLE, DCM_AE, "", 1, sizeof(request.moveAETitle), (void *) request.moveAETitle, &request.conditionalFields, MSG_K_C_STORE_MOVEAETITLE}, {DCM_GROUPCOMMAND, DCM_CMDMOVEMESSAGEID, DCM_US, "", 1, sizeof(request.moveMessageID), (void *) &request.moveMessageID, &request.conditionalFields, MSG_K_C_STORE_MOVEMESSAGEID}, }; void *ctx; int index; unsigned long rtnLength; CONDITION cond; request.conditionalFields = 0; for (index = 0; index < (int) DIM_OF(elementList); index++) { ctx = NULL; cond = DCM_GetElementValue(object, &elementList[index], &rtnLength, &ctx); if (cond != DCM_NORMAL) return COND_PushCondition(MSG_PARSEFAILED, MSG_Message(MSG_PARSEFAILED)); } for (index = 0; index < (int) DIM_OF(conditional); index++) { ctx = NULL; cond = DCM_GetElementValue(object, &conditional[index].e, &rtnLength, &ctx); if (cond == DCM_NORMAL) { if (DCM_IsString(conditional[index].e.representation)) conditional[index].e.d.string[rtnLength] = '\0'; *conditional[index].flag |= conditional[index].flagBit; }else{ (void) COND_PopCondition(FALSE); } } request.type = MSG_K_C_STORE_REQ; *storeRequest = request; return MSG_NORMAL; }
CONDITION HAP_NormalizedToObject(DCM_OBJECT ** object, HAP_ELEMENT_MAP * map, int size) { int index, temp; CONDITION cond; DCM_ELEMENT e; for (index = 0; index < size; index++) if ((*map[index].flagAddress & map[index].flag) != 0) { e = map[index].e; if (DCM_IsString(e.representation)) e.length = strlen(e.d.string); cond = DCM_AddElement(object, &e); if (cond != DCM_NORMAL) return HAP_ILLEGALOBJECT; } return HAP_NORMAL; }
static CONDITION callback(const DCM_ELEMENT* e, void* ctx) { char txt[512] = ""; printf("<TR>\n"); printf("<TD>%04x %04x</TD>\n", DCM_TAG_GROUP(e->tag), DCM_TAG_ELEMENT(e->tag)); printf("<TD>%s\n", translate(e->representation)); printf("<TD ALIGN=RIGHT>%6d</TD>\n", e->length); printf("<TD ALIGN=CENTER>%s</TD>\n", e->description); if (e->d.ot == NULL) { strcpy(txt, "No data"); } else if (e->length == 0) { strcpy(txt, "0 length data"); } else { if (DCM_IsString(e->representation)) { int stringLength; stringLength = MIN(sizeof(txt)-1, e->length); strncpy(txt, e->d.string, stringLength); txt[stringLength] = '\0'; } else { switch (e->representation) { case DCM_AE: case DCM_AS: break; case DCM_AT: sprintf(txt, "%04x %04x", DCM_TAG_GROUP(*e->d.ul), DCM_TAG_ELEMENT(*e->d.ul)); break; case DCM_CS: case DCM_DA: break; case DCM_DD: strcpy(txt, "Unimplemented"); break; case DCM_DS: break; case DCM_FD: case DCM_FL: strcpy(txt, "Unimplemented"); break; case DCM_IS: case DCM_LO: case DCM_LT: case DCM_OT: case DCM_SH: break; case DCM_SL: sprintf(txt, "%d", *e->d.sl); break; case DCM_SQ: strcpy(txt, "Unimplemented"); break; case DCM_SS: sprintf(txt, "%d", *e->d.ss); break; case DCM_ST: case DCM_TM: case DCM_UI: break; case DCM_UL: sprintf(txt, "%d", *e->d.ul); break; case DCM_US: sprintf(txt, "%d", *e->d.us); break; case DCM_UNKNOWN: strcpy(txt, "Unknown"); break; case DCM_RET: strcpy(txt, "Retired"); break; case DCM_CTX: strcpy(txt, "Context sensitive"); break; case DCM_PN: break; case DCM_OB: case DCM_OW: strcpy(txt, "OB or OW"); break; case DCM_DT: break; case DCM_DLM: strcpy(txt, "Delimiter"); break; default: break; } } } printf("<TD>%s</TD></TR>\n", txt); return DCM_NORMAL; }