Doxygen Source Code Documentation
mri_dicom_hdr.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <errno.h>
#include <stdarg.h>
#include <ctype.h>
#include "mri_dicom_hdr.h"
#include "mcw_malloc.h"
#include "Amalloc.h"
#include "debugtrace.h"
Go to the source code of this file.
Define Documentation
|
Definition at line 79 of file mri_dicom_hdr.c. Referenced by copyData(), DCM_GetCompressedValue(), DCM_GetElementValue(), DCM_GetElementValueOffset(), and RWC_set_endianosity(). |
|
Definition at line 78 of file mri_dicom_hdr.c. Referenced by exportData(), exportFixedFields(), exportVRLength(), readData(), readFile(), readGroupElement(), readVRLength(), and RWC_set_endianosity(). |
|
Definition at line 10720 of file mri_dicom_hdr.c. Referenced by LST_Insert(), LST_Next(), LST_Position(), LST_Previous(), and LST_Remove(). |
|
Definition at line 352 of file mri_dicom_hdr.c. Referenced by COND_PushCondition(). |
|
Definition at line 80 of file mri_dicom_hdr.c. Referenced by DCM_GetCompressedValue(), exportStream(), extractFileOptions(), newElementItem(), readFile(), and readFile1(). |
|
Definition at line 112 of file mri_dicom_hdr.c. Referenced by RWC_printf(). |
|
Definition at line 10721 of file mri_dicom_hdr.c. Referenced by LST_Insert(), and LST_Remove(). |
|
Definition at line 10722 of file mri_dicom_hdr.c. Referenced by LST_Insert(), and LST_Remove(). |
|
Definition at line 163 of file mri_dicom_hdr.c. Referenced by DCM_DumpElements(), and mri_dicom_nohex(). |
|
Definition at line 162 of file mri_dicom_hdr.c. Referenced by DCM_DumpElements(), and mri_dicom_noname(). |
Typedef Documentation
|
|
Function Documentation
|
Definition at line 6858 of file mri_dicom_hdr.c. References COND_PushCondition(), CTNBOOLEAN, DCM_ELEMENTOUTOFORDER, DCM_Message(), DCM_NORMAL, DCM_REPEATEDELEMENT, DCM_TAG_ELEMENT, DCM_TAG_GROUP, and DCM_ELEMENT::tag.
06860 { 06861 unsigned short group; 06862 unsigned short element; 06863 06864 group = DCM_TAG_GROUP(e->tag); 06865 element = DCM_TAG_ELEMENT(e->tag); 06866 06867 if ((long) group == *lastGroup) { 06868 if (((long) element == *lastElement) && allowRepeatElements) { 06869 return DCM_REPEATEDELEMENT; 06870 } 06871 if ((long) element <= *lastElement) 06872 return COND_PushCondition(DCM_ELEMENTOUTOFORDER, 06873 DCM_Message(DCM_ELEMENTOUTOFORDER), 06874 group, element, "checkAttributeOrder"); 06875 } else if ((long) group > *lastGroup) { 06876 } else { 06877 return COND_PushCondition(DCM_ELEMENTOUTOFORDER, 06878 DCM_Message(DCM_ELEMENTOUTOFORDER), 06879 group, element, "checkAttributeOrder"); 06880 } 06881 *lastGroup = (long) group; 06882 *lastElement = (long) element; 06883 06884 return DCM_NORMAL; 06885 } |
|
Definition at line 4987 of file mri_dicom_hdr.c. References COND_PushCondition(), DCM_ILLEGALOBJECT, DCM_Message(), DCM_NORMAL, DCM_NULLOBJECT, KEY_DCM_OBJECT, and object.
04988 { 04989 if (object == NULL) 04990 return COND_PushCondition(DCM_NULLOBJECT, DCM_Message(DCM_NULLOBJECT), 04991 caller); 04992 if (*object == NULL) 04993 return COND_PushCondition(DCM_NULLOBJECT, DCM_Message(DCM_NULLOBJECT), 04994 caller); 04995 04996 if (strcmp((*object)->keyType, KEY_DCM_OBJECT) != 0) 04997 return COND_PushCondition(DCM_ILLEGALOBJECT, 04998 DCM_Message(DCM_ILLEGALOBJECT), caller); 04999 return DCM_NORMAL; 05000 } |
|
Definition at line 7597 of file mri_dicom_hdr.c. References PRV_ELEMENT_ITEM::element, PRV_GROUP_ITEM::elementList, LST_Head(), LST_Next(), LST_Position(), and DCM_ELEMENT::tag.
07602 { 07603 PRV_ELEMENT_ITEM *e1 = NULL, 07604 *e2 = NULL; 07605 07606 if (g1 != NULL) { 07607 e1 = (void *)LST_Head(&g1->elementList); 07608 if (e1 != NULL) 07609 LST_Position(&g1->elementList, (void *)e1); 07610 } 07611 if (g2 != NULL) { 07612 e2 = (void *)LST_Head(&g2->elementList); 07613 if (e2 != NULL) 07614 LST_Position(&g2->elementList, (void *)e2); 07615 } 07616 while (e1 != NULL) { 07617 if (e2 == NULL) { 07618 callback(&e1->element, NULL, ctx); 07619 e1 = (void *)LST_Next(&g1->elementList); 07620 } else if (e1->element.tag == e2->element.tag) { 07621 callback(&e1->element, &e2->element, ctx); 07622 e1 = (void *)LST_Next(&g1->elementList); 07623 e2 = (void *)LST_Next(&g2->elementList); 07624 } else if (e1->element.tag < e2->element.tag) { 07625 callback(&e1->element, NULL, ctx); 07626 e1 = (void *)LST_Next(&g1->elementList); 07627 } else { 07628 callback(NULL, &e2->element, ctx); 07629 e2 = (void *)LST_Next(&g2->elementList); 07630 } 07631 } 07632 07633 while (e2 != NULL) { 07634 callback(NULL, &e2->element, ctx); 07635 e2 = (void *)LST_Next(&g2->elementList); 07636 } 07637 } |
|
Definition at line 5140 of file mri_dicom_hdr.c. References PRV_GROUP_ITEM::baseLength, CTNBOOLEAN, and PRV_GROUP_ITEM::longVRAttributes.
05142 { 05143 return (explicitVR) ? 05144 groupItem->baseLength + 4 * groupItem->longVRAttributes : 05145 groupItem->baseLength; 05146 05147 } |
|
Definition at line 7289 of file mri_dicom_hdr.c. References c, DCM_ELEMENT::d, DCM_AE, DCM_AS, DCM_AT, DCM_CS, DCM_CTX, DCM_DA, DCM_DD, DCM_DS, DCM_DT, DCM_FD, DCM_FL, DCM_IS, DCM_LO, DCM_LT, DCM_OT, DCM_PN, DCM_RET, DCM_SH, DCM_SL, DCM_SQ, DCM_SS, DCM_ST, DCM_TM, DCM_UI, DCM_UL, DCM_UN, DCM_US, DCM_UT, i, DCM_ELEMENT::length, DCM_ELEMENT::multiplicity, object, and DCM_ELEMENT::representation.
07290 { 07291 char 07292 *c; 07293 int 07294 i; 07295 07296 switch (element->representation) { 07297 case DCM_AE: /* Application Entity */ 07298 case DCM_AS: /* Age string */ 07299 case DCM_CS: /* Control string */ 07300 case DCM_DA: /* Date */ 07301 case DCM_DS: /* Decimal string */ 07302 case DCM_DT: /* Date/Time */ 07303 case DCM_IS: /* Integer string */ 07304 case DCM_LO: /* Long string */ 07305 case DCM_PN: /* Person Name */ 07306 case DCM_SH: /* Short string */ 07307 case DCM_TM: /* Time */ 07308 case DCM_UI: /* Unique identifier (UID) */ 07309 case DCM_UT: /* Unlimited text */ 07310 element->multiplicity = 1; 07311 c = element->d.string; 07312 for (i = 0; i < (int) element->length; i++) 07313 if (*c++ == '\\') 07314 element->multiplicity++; 07315 break; 07316 07317 case DCM_FD: /* Floating double */ 07318 element->multiplicity = element->length / 8; 07319 break; 07320 case DCM_AT: /* Attribute tag */ 07321 case DCM_FL: /* Float */ 07322 case DCM_SL: /* Signed long */ 07323 case DCM_UL: /* Unsigned long */ 07324 element->multiplicity = element->length / 4; 07325 break; 07326 case DCM_SS: /* Signed short */ 07327 case DCM_US: /* Unsigned short */ 07328 element->multiplicity = element->length / 2; 07329 break; 07330 case DCM_LT: /* Long text */ 07331 case DCM_OT: /* Other binary value */ 07332 case DCM_SQ: /* Sequence of items */ 07333 case DCM_ST: /* Short text */ 07334 /*case DCM_UNKNOWN:*/ 07335 case DCM_UN: 07336 case DCM_RET: 07337 case DCM_CTX: 07338 case DCM_DD: /* Data set */ 07339 default: 07340 element->multiplicity = 1; 07341 break; 07342 } 07343 } |
|
Definition at line 679 of file mri_dicom_hdr.c.
00680 { 00681 size_t i; 00682 int j; 00683 00684 txt[0] = '\0'; 00685 00686 j = stackPtr; 00687 while (length > 2 && j >= 0) { 00688 i = strlen(EDBStack[j].statusText); 00689 if (i > length) 00690 i = length - 2; 00691 strncpy(txt, EDBStack[j].statusText, i); 00692 txt[i++] = '\n'; 00693 txt[i] = '\0'; 00694 length -= i; 00695 txt += i; 00696 j--; 00697 } 00698 } |
|
Definition at line 636 of file mri_dicom_hdr.c. References dumpstack(), and stackPtr.
|
|
Definition at line 612 of file mri_dicom_hdr.c. References COND_NORMAL, and ErrorCallback.
00613 { 00614 00615 ErrorCallback = callback; 00616 00617 return COND_NORMAL; 00618 } |
|
Definition at line 466 of file mri_dicom_hdr.c. References AFNI_CALL_VALU_2ARG, COND_NORMAL, CONDITION, and stackPtr.
00467 { 00468 int 00469 index, 00470 returnflag; 00471 00472 for (index = stackPtr, returnflag = 1; index >= 0 && returnflag != 0; 00473 index--) { 00474 #if 0 00475 returnflag = callback(EDBStack[index].statusCode, 00476 EDBStack[index].statusText); 00477 #else 00478 AFNI_CALL_VALU_2ARG( callback , int,returnflag , 00479 CONDITION,EDBStack[index].statusCode , 00480 char * ,EDBStack[index].statusText ) ; 00481 #endif 00482 } 00483 00484 return COND_NORMAL; 00485 } |
|
Definition at line 565 of file mri_dicom_hdr.c. References COND_NORMAL, CONDITION, CTNBOOLEAN, and stackPtr.
00566 { 00567 CONDITION 00568 value; 00569 00570 if (stackPtr >= 0) 00571 value = EDBStack[stackPtr].statusCode; 00572 else 00573 value = COND_NORMAL; 00574 00575 if (clearstack) { 00576 stackPtr = -1; 00577 } else if (stackPtr <= 0) { 00578 stackPtr = -1; 00579 } else { 00580 stackPtr--; 00581 } 00582 00583 return value; 00584 } |
|
Definition at line 394 of file mri_dicom_hdr.c. References AFNI_CALL_VOID_2ARG, args, CONDITION, dumpstack(), ErrorCallback, MAXEDB, and stackPtr.
00395 { 00396 va_list 00397 args; 00398 char 00399 buffer[1024]; 00400 00401 /*lint -e40 -e50 */ 00402 va_start(args, controlString); 00403 if (controlString == NULL) 00404 controlString = "NULL Control string passedto PushCondition"; 00405 (void) vsprintf(buffer, controlString, args); 00406 va_end(args); 00407 /*lint +e40 +e50 */ 00408 00409 stackPtr++; 00410 EDBStack[stackPtr].statusCode = cond; 00411 buffer[256] = '\0'; 00412 00413 (void) strcpy(EDBStack[stackPtr].statusText, buffer); 00414 if (ErrorCallback != NULL) 00415 #if 0 00416 ErrorCallback(EDBStack[stackPtr].statusCode, 00417 EDBStack[stackPtr].statusText); 00418 #else 00419 AFNI_CALL_VOID_2ARG( ErrorCallback , 00420 CONDITION,EDBStack[stackPtr].statusCode , 00421 char * ,EDBStack[stackPtr].statusText ) ; 00422 #endif 00423 00424 if (stackPtr >= MAXEDB - 2) { 00425 dumpstack(stderr); 00426 fprintf(stderr, "CONDITION Stack overflow\n"); 00427 stackPtr = 0; 00428 } 00429 00430 return cond; 00431 00432 } |
|
Definition at line 519 of file mri_dicom_hdr.c. References COND_NORMAL, CONDITION, and stackPtr.
00520 { 00521 CONDITION rtnValue; 00522 00523 if (stackPtr >= 0) { 00524 *code = EDBStack[stackPtr].statusCode; 00525 (void) strncpy(text, EDBStack[stackPtr].statusText, maxlength - 1); 00526 text[maxlength - 1] = '\0'; 00527 rtnValue = EDBStack[stackPtr].statusCode; 00528 } else { 00529 *code = COND_NORMAL; 00530 *text = '\0'; 00531 rtnValue = COND_NORMAL; 00532 } 00533 00534 return rtnValue; 00535 } |
|
Definition at line 715 of file mri_dicom_hdr.c. References dumpstack(), and stackPtr.
|
|
Definition at line 7392 of file mri_dicom_hdr.c. References PRV_ELEMENT_ITEM::byteOrder, BYTEORDER_REVERSE, COND_PushCondition(), CONDITION, DCM_ELEMENT::d, PRV_ELEMENT_ITEM::dataOffset, DCM_AT, DCM_CANNOTGETSEQUENCEVALUE, DCM_FILEACCESSERROR, DCM_GETINCOMPLETE, DCM_Message(), DCM_NORMAL, DCM_SQ, PRV_ELEMENT_ITEM::element, l, DCM_ELEMENT::length, MIN, object, p, q, read(), DCM_ELEMENT::representation, swapATGroupElement(), swapInPlace(), DCM_ELEMENT::tag, and U32.
07394 { 07395 unsigned char *p = NULL; 07396 U32 l; 07397 int nBytes; 07398 CONDITION cond; 07399 07400 if (from->element.representation == DCM_SQ) 07401 return COND_PushCondition(DCM_CANNOTGETSEQUENCEVALUE, 07402 DCM_Message(DCM_CANNOTGETSEQUENCEVALUE), 07403 from->element.tag, "copyData (DCM internal)"); 07404 07405 l = MIN(from->element.length, to->length); 07406 if (rtnLength != NULL) 07407 *rtnLength = l; 07408 07409 if (from->element.d.ot == NULL) { 07410 if ((*object)->fd != -1) { 07411 (void) lseek((*object)->fd, 07412 from->dataOffset + (off_t) p, SEEK_SET); 07413 nBytes = read((*object)->fd, to->d.ot, (int) l); 07414 } else { 07415 (*object)->sk((*object)->userCtx, 07416 (long) (from->dataOffset + (off_t) p), SEEK_SET); 07417 cond = (*object)->rd((*object)->userCtx, to->d.ot, (long) l, &nBytes); 07418 } 07419 if (nBytes != (int) l) { 07420 return COND_PushCondition(DCM_FILEACCESSERROR, 07421 DCM_Message(DCM_FILEACCESSERROR), 07422 (*object)->fileName, 07423 "copyData (DCM internal)"); 07424 } 07425 if( LITTLE_ENDIAN_ARCHITECTURE ){ 07426 if (from->element.representation == DCM_AT) { 07427 DCM_ELEMENT e; 07428 e = from->element; 07429 e.length = l; 07430 e.d.ot = to->d.ot; 07431 swapATGroupElement(&e); 07432 } 07433 } 07434 if (from->byteOrder == BYTEORDER_REVERSE) { 07435 DCM_ELEMENT e; 07436 e = from->element; 07437 e.length = l; 07438 e.d.ot = to->d.ot; 07439 swapInPlace(object, &e); 07440 } 07441 } else { 07442 unsigned char *q; 07443 q = (unsigned char *) from->element.d.ot + 07444 (U32) p; 07445 (void) memcpy(to->d.ot, q, l); 07446 } 07447 p += l; 07448 if ((unsigned) p == from->element.length) 07449 return DCM_NORMAL; 07450 else 07451 return DCM_GETINCOMPLETE; 07452 } |
|
Definition at line 7656 of file mri_dicom_hdr.c. References AFMALL, DCM_ELEMENT::d, DCM_AddSequenceElement(), DCM_CopyObject(), DCM_OBJECT, LST_Create(), LST_Enqueue(), LST_Head(), LST_Next(), LST_Position(), DCM_SEQUENCE_ITEM::object, DCM_ELEMENT::representation, and DCM_ELEMENT::tag.
07657 { 07658 LST_HEAD *lst; 07659 DCM_SEQUENCE_ITEM *sqItem; 07660 DCM_ELEMENT newElement; 07661 07662 lst = LST_Create(); 07663 if (e->d.sq != NULL) { 07664 sqItem = (void *)LST_Head(&e->d.sq); 07665 (void) LST_Position(&e->d.sq, (void *)sqItem); 07666 } 07667 while (sqItem != NULL) { 07668 DCM_OBJECT *copy; 07669 DCM_SEQUENCE_ITEM *copyItem; 07670 07671 DCM_CopyObject(&sqItem->object, ©); 07672 copyItem = AFMALL( DCM_SEQUENCE_ITEM, sizeof(*copyItem)); 07673 copyItem->object = copy; 07674 (void) LST_Enqueue(&lst, (void *)copyItem); 07675 07676 sqItem = (void *)LST_Next(&e->d.sq); 07677 } 07678 07679 memset(&newElement, 0, sizeof(newElement)); 07680 newElement.tag = e->tag; 07681 newElement.representation = e->representation; 07682 newElement.d.sq = lst; 07683 DCM_AddSequenceElement((DCM_OBJECT **) dstObj, &newElement); 07684 } |
|
Definition at line 5046 of file mri_dicom_hdr.c. References DCM_NORMAL, and U32. Referenced by DCM_ComputeExportLength().
05048 { 05049 unsigned long *size; 05050 05051 size = (unsigned long *) sizePtr; 05052 05053 *size += length; 05054 05055 return DCM_NORMAL; 05056 } |
|
|
Definition at line 1334 of file mri_dicom_hdr.c. References checkObject(), COND_PopCondition(), COND_PushCondition(), CONDITION, DCM_CTX, DCM_ILLEGALADD, DCM_ILLEGALREPRESENTATION, DCM_INSERTFAILED, DCM_LookupElement(), DCM_Message(), DCM_NORMAL, DCM_OBJECT, DCM_OT, DCM_TAG_ELEMENT, DCM_TAG_GROUP, DCM_UN, findCreateGroup(), insertNewElement(), object, DCM_ELEMENT::representation, DCM_ELEMENT::tag, and updateObjectType().
01335 { 01336 CONDITION 01337 cond; 01338 DCM_ELEMENT 01339 localElement; 01340 PRIVATE_OBJECT 01341 ** object; 01342 PRV_GROUP_ITEM 01343 * groupItem; 01344 01345 object = (PRIVATE_OBJECT **) callerObject; 01346 01347 cond = checkObject(object, "DCM_AddElement"); 01348 if (cond != DCM_NORMAL) 01349 return cond; 01350 01351 if ((DCM_TAG_ELEMENT(element->tag) == 0x0000)) 01352 return COND_PushCondition(DCM_ILLEGALADD, 01353 DCM_Message(DCM_ILLEGALADD), DCM_TAG_GROUP(element->tag), 01354 DCM_TAG_ELEMENT(element->tag), "DCM_AddElement"); 01355 01356 01357 localElement = *element; 01358 01359 cond = DCM_LookupElement(&localElement); 01360 if (cond != DCM_NORMAL) { 01361 (void) COND_PopCondition(0); 01362 localElement = *element; 01363 } else { 01364 if (localElement.representation == DCM_OT || 01365 localElement.representation == DCM_CTX) 01366 localElement.representation = element->representation; 01367 if (element->representation != DCM_UN && 01368 element->representation != localElement.representation) { 01369 return COND_PushCondition(DCM_ILLEGALREPRESENTATION, 01370 DCM_Message(DCM_ILLEGALREPRESENTATION), 01371 DCM_TAG_GROUP(element->tag), 01372 DCM_TAG_ELEMENT(element->tag), 01373 "DCM_AddElement"); 01374 } 01375 } 01376 01377 cond = findCreateGroup(object, DCM_TAG_GROUP(localElement.tag), &groupItem); 01378 if (cond != DCM_NORMAL) 01379 return COND_PushCondition(DCM_INSERTFAILED, 01380 DCM_Message(DCM_INSERTFAILED), DCM_TAG_GROUP(element->tag), 01381 DCM_TAG_ELEMENT(element->tag), 01382 "DCM_AddElement"); 01383 01384 cond = insertNewElement(object, &localElement); 01385 if (cond != DCM_NORMAL) 01386 return COND_PushCondition(DCM_INSERTFAILED, 01387 DCM_Message(DCM_INSERTFAILED), DCM_TAG_GROUP(element->tag), 01388 DCM_TAG_ELEMENT(element->tag), 01389 "DCM_AddElement"); 01390 01391 cond = updateObjectType(object, &localElement); 01392 if (cond != DCM_NORMAL) 01393 return COND_PushCondition(DCM_INSERTFAILED, 01394 DCM_Message(DCM_INSERTFAILED), DCM_TAG_GROUP(element->tag), 01395 DCM_TAG_ELEMENT(element->tag), 01396 "DCM_AddElement"); 01397 01398 return DCM_NORMAL; 01399 } |
|
Definition at line 3334 of file mri_dicom_hdr.c. References CONDITION, CTN_FREE, DCM_ELEMENT::d, DCM_AddElement(), DCM_ListToString(), DCM_NORMAL, DCM_OBJECT, DCM_ELEMENT::length, and offset.
03336 { 03337 DCM_ELEMENT 03338 e; /* Local copy of caller's element */ 03339 CONDITION 03340 cond; 03341 char 03342 *s; 03343 03344 e = *element; 03345 cond = DCM_ListToString(list, offset, &s); 03346 if (cond != DCM_NORMAL) 03347 return cond; 03348 03349 e.d.string = s; 03350 e.length = strlen(s); 03351 cond = DCM_AddElement(callerObject, &e); 03352 CTN_FREE(s); 03353 return cond; 03354 } |
|
Definition at line 8123 of file mri_dicom_hdr.c. References checkObject(), COND_PushCondition(), CONDITION, CTN_MALLOC, DCM_ELEMENT::d, DCM_INSERTFAILED, DCM_LISTFAILURE, DCM_MALLOCFAILURE, DCM_Message(), DCM_NORMAL, DCM_OB, DCM_OBJECT, DCM_PXLPIXELDATA, DCM_UNEVENFRAGMENTLENGTH, PRV_ELEMENT_ITEM::element, findCreateGroup(), DCM_FRAGMENT_ITEM::fragment, PRV_ELEMENT_ITEM::fragmentFlag, insertThisElementItem(), DCM_FRAGMENT_ITEM::length, DCM_ELEMENT::length, locateElement(), LST_Create(), LST_Enqueue(), DCM_ELEMENT::multiplicity, newElementItem(), object, DCM_ELEMENT::representation, DCM_ELEMENT::tag, and U32.
08124 { 08125 PRIVATE_OBJECT** object; 08126 PRV_ELEMENT_ITEM* elementItem; 08127 PRV_ELEMENT_ITEM* newItem; 08128 CONDITION cond; 08129 PRV_GROUP_ITEM *groupItem = 0; 08130 DCM_FRAGMENT_ITEM* fragmentItem; 08131 U32 mallocLength; 08132 08133 if ((fragmentLength & 1) != 0) { 08134 return COND_PushCondition(DCM_UNEVENFRAGMENTLENGTH, 08135 DCM_Message(DCM_UNEVENFRAGMENTLENGTH), fragmentLength, "DCM_AddFragment"); 08136 } 08137 08138 object = (PRIVATE_OBJECT **) callerObject; 08139 cond = checkObject(object, "DCM_AddFragment"); 08140 if (cond != DCM_NORMAL) 08141 return cond; 08142 08143 cond = findCreateGroup(object, 0x7fe0, &groupItem); 08144 if (cond != DCM_NORMAL) 08145 return COND_PushCondition(DCM_INSERTFAILED, 08146 DCM_Message(DCM_INSERTFAILED), 0x7fe0, 0x0010, "DCM_AddFragment"); 08147 08148 elementItem = locateElement(object, 0x7fe00010); 08149 if (elementItem == NULL) { 08150 DCM_ELEMENT e; 08151 memset(&e, 0, sizeof(e)); 08152 e.tag = DCM_PXLPIXELDATA; 08153 e.representation = DCM_OB; 08154 e.multiplicity = 1; 08155 e.length = 0; 08156 e.d.fragments = 0; 08157 cond = newElementItem(&e, FALSE, &newItem); 08158 if (cond != DCM_NORMAL) 08159 return cond; 08160 newItem->element.d.fragments = LST_Create(); 08161 if (newItem->element.d.fragments == NULL) { 08162 return COND_PushCondition(DCM_LISTFAILURE, 08163 DCM_Message(DCM_LISTFAILURE), "DCM_AddFragment"); 08164 } 08165 cond = insertThisElementItem(object, newItem); 08166 if (cond != DCM_NORMAL) 08167 return cond; 08168 } 08169 08170 elementItem = locateElement(object, 0x7fe00010); 08171 08172 mallocLength = sizeof(DCM_FRAGMENT_ITEM) + fragmentLength; 08173 fragmentItem = CTN_MALLOC(mallocLength); 08174 if (fragmentItem == NULL) { 08175 return COND_PushCondition(DCM_MALLOCFAILURE, 08176 DCM_Message(DCM_MALLOCFAILURE), mallocLength, 08177 "DCM_AddFragment"); 08178 } 08179 08180 fragmentItem->fragment = ((char*)fragmentItem)+ sizeof(DCM_FRAGMENT_ITEM); 08181 fragmentItem->length = fragmentLength; 08182 memcpy(fragmentItem->fragment, fragment, fragmentLength); 08183 elementItem->fragmentFlag = 1; 08184 LST_Enqueue(&elementItem->element.d.fragments, (void *)fragmentItem); 08185 08186 return DCM_NORMAL; 08187 } |
|
Definition at line 1425 of file mri_dicom_hdr.c. References checkObject(), COND_PopCondition(), COND_PushCondition(), CONDITION, DCM_ELEMENT::d, DCM_ILLEGALADD, DCM_INSERTFAILED, DCM_LookupElement(), DCM_Message(), DCM_NORMAL, DCM_NOTASEQUENCE, DCM_OBJECT, DCM_SQ, DCM_TAG_ELEMENT, DCM_TAG_GROUP, findCreateGroup(), insertNewElement(), object, DCM_ELEMENT::representation, DCM_ELEMENT::tag, and updateObjectType().
01426 { 01427 CONDITION cond; 01428 DCM_ELEMENT localElement; 01429 PRIVATE_OBJECT **object; 01430 PRV_GROUP_ITEM *groupItem; 01431 01432 object = (PRIVATE_OBJECT **) callerObject; 01433 01434 cond = checkObject(object, "DCM_AddSequenceElement"); 01435 if (cond != DCM_NORMAL) 01436 return cond; 01437 01438 if ((DCM_TAG_ELEMENT(element->tag) == 0x0000)) 01439 return COND_PushCondition(DCM_ILLEGALADD, 01440 DCM_Message(DCM_ILLEGALADD), DCM_TAG_GROUP(element->tag), 01441 DCM_TAG_ELEMENT(element->tag), "DCM_AddElement"); 01442 01443 01444 localElement = *element; 01445 01446 cond = DCM_LookupElement(&localElement); 01447 if (cond != DCM_NORMAL) { 01448 (void) COND_PopCondition(0); 01449 localElement = *element; 01450 } else { 01451 localElement.representation = element->representation; 01452 } 01453 if (localElement.representation != DCM_SQ) { 01454 return COND_PushCondition(DCM_NOTASEQUENCE, 01455 DCM_Message(DCM_NOTASEQUENCE), 01456 DCM_TAG_GROUP(localElement.tag), 01457 DCM_TAG_ELEMENT(localElement.tag), 01458 "DCM_AddSequenceElement"); 01459 } 01460 cond = findCreateGroup(object, DCM_TAG_GROUP(localElement.tag), &groupItem); 01461 if (cond != DCM_NORMAL) 01462 return COND_PushCondition(DCM_INSERTFAILED, 01463 DCM_Message(DCM_INSERTFAILED), DCM_TAG_GROUP(element->tag), 01464 DCM_TAG_ELEMENT(element->tag), 01465 "DCM_AddSequenceElement"); 01466 01467 cond = insertNewElement(object, &localElement); 01468 if (cond != DCM_NORMAL) 01469 return COND_PushCondition(DCM_INSERTFAILED, 01470 DCM_Message(DCM_INSERTFAILED), DCM_TAG_GROUP(element->tag), 01471 DCM_TAG_ELEMENT(element->tag), 01472 "DCM_AddElement"); 01473 01474 cond = updateObjectType(object, &localElement); 01475 if (cond != DCM_NORMAL) 01476 return COND_PushCondition(DCM_INSERTFAILED, 01477 DCM_Message(DCM_INSERTFAILED), DCM_TAG_GROUP(element->tag), 01478 DCM_TAG_ELEMENT(element->tag), 01479 "DCM_AddSequenceElement"); 01480 01481 /* 01482 * We have taken ownership of the sequence list, so zero out caller's 01483 * copy 01484 */ 01485 element->d.sq = NULL; 01486 01487 return DCM_NORMAL; 01488 } |
|
Definition at line 1207 of file mri_dicom_hdr.c. References checkObject(), close(), COND_PushCondition(), CONDITION, CTN_FREE, DCM_ELEMENT::d, DCM_CloseObject(), DCM_FILEDELETEFAILED, DCM_LISTFAILURE, DCM_Message(), DCM_NORMAL, DCM_OBJECT, DCM_SQ, PRV_ELEMENT_ITEM::element, PRV_GROUP_ITEM::elementList, PRV_ELEMENT_ITEM::fragmentFlag, PRV_GROUP_ITEM::group, LST_Destroy(), LST_NORMAL, LST_Pop(), DCM_SEQUENCE_ITEM::object, object, DCM_ELEMENT::representation, DCM_ELEMENT::tag, and unlink.
01208 { 01209 CONDITION 01210 cond; 01211 PRV_GROUP_ITEM 01212 * group; 01213 PRV_ELEMENT_ITEM 01214 * element; 01215 PRIVATE_OBJECT 01216 ** object; 01217 DCM_SEQUENCE_ITEM 01218 * sequenceItem; 01219 DCM_FRAGMENT_ITEM* fragmentItem; 01220 01221 if (debug) 01222 fprintf(stderr, "Starting DCM_CloseObject\n"); 01223 01224 object = (PRIVATE_OBJECT **) callerObject; 01225 cond = checkObject(object, "DCM_CloseObject"); 01226 if (cond != DCM_NORMAL) 01227 return cond; 01228 01229 if ((*object)->fd > 0) 01230 (void) close((*object)->fd); 01231 01232 if (debug) 01233 fprintf(stderr, "DCM_CloseObject: Legal object and file closed\n"); 01234 01235 while ((group = (void *)LST_Pop(&(*object)->groupList)) != NULL) { 01236 if (debug) 01237 fprintf(stderr, "DCM_CloseObject: group %04x\n", group->group); 01238 01239 while ((element = (void *)LST_Pop(&group->elementList)) != NULL) { 01240 if (debug) 01241 fprintf(stderr, "DCM_CloseObject: Element %08x\n", 01242 element->element.tag); 01243 if (element->element.representation == DCM_SQ) { 01244 if (debug) 01245 fprintf(stderr, "Sequence List Address: %p\n", 01246 element->element.d.sq); 01247 if (element->element.d.sq != NULL) { 01248 while ((sequenceItem = (void *)LST_Pop(&element->element.d.sq)) != NULL) { 01249 (void) DCM_CloseObject(&sequenceItem->object); 01250 CTN_FREE(sequenceItem); 01251 } 01252 (void) LST_Destroy(&element->element.d.sq); 01253 } 01254 } else if (element->fragmentFlag) { 01255 if (debug) 01256 fprintf(stderr, "Fragment List Address: %p\n", 01257 element->element.d.fragments); 01258 if (element->element.d.fragments != NULL) { 01259 while ((fragmentItem = (void *)LST_Pop(&element->element.d.fragments)) != NULL) { 01260 CTN_FREE(fragmentItem); 01261 } 01262 (void) LST_Destroy(&element->element.d.fragments); 01263 } 01264 } 01265 if (debug) 01266 fprintf(stderr, "DCM_CloseObject: free %8p\n", element); 01267 01268 CTN_FREE(element); 01269 } 01270 cond = LST_Destroy(&group->elementList); 01271 if (cond != LST_NORMAL) 01272 return COND_PushCondition(DCM_LISTFAILURE, 01273 DCM_Message(DCM_LISTFAILURE), "DCM_CloseObject"); 01274 CTN_FREE(group); 01275 } 01276 cond = LST_Destroy(&(*object)->groupList); 01277 if (cond != LST_NORMAL) 01278 return COND_PushCondition(DCM_LISTFAILURE, 01279 DCM_Message(DCM_LISTFAILURE), "DCM_CloseObject"); 01280 01281 cond = DCM_NORMAL; 01282 if ((*object)->deleteFlag) { 01283 if (unlink((*object)->fileName) != 0) { 01284 /**** (void) COND_PushCondition(DCM_FILEDELETEFAILED, strerror(errno));****/ 01285 cond = COND_PushCondition(DCM_FILEDELETEFAILED, 01286 DCM_Message(DCM_FILEDELETEFAILED), (*object)->fileName, strerror(errno), 01287 "DCM_CloseObject"); 01288 01289 } 01290 } 01291 CTN_FREE(*object); 01292 *object = NULL; 01293 return cond; 01294 } |
|
Definition at line 3432 of file mri_dicom_hdr.c. References checkObject(), compareGroup(), CONDITION, DCM_NORMAL, DCM_OBJECT, PRV_GROUP_ITEM::group, LST_Head(), LST_Next(), and LST_Position().
03437 { 03438 PRIVATE_OBJECT **object1, 03439 **object2; 03440 PRV_GROUP_ITEM *groupItem1, 03441 *groupItem2; 03442 CONDITION cond; 03443 03444 object1 = (PRIVATE_OBJECT **) o1; 03445 cond = checkObject(object1, "DCM_CompareAttributes"); 03446 if (cond != DCM_NORMAL) 03447 return cond; 03448 03449 object2 = (PRIVATE_OBJECT **) o2; 03450 cond = checkObject(object1, "DCM_CompareAttributes"); 03451 if (cond != DCM_NORMAL) 03452 return cond; 03453 03454 groupItem1 = (void *)LST_Head(&(*object1)->groupList); 03455 if (groupItem1 != NULL) 03456 (void) LST_Position(&(*object1)->groupList, (void *)groupItem1); 03457 03458 groupItem2 = (void *)LST_Head(&(*object2)->groupList); 03459 if (groupItem2 != NULL) 03460 (void) LST_Position(&(*object2)->groupList, (void *)groupItem2); 03461 03462 03463 while (groupItem1 != NULL) { 03464 if (groupItem2 == NULL) { 03465 compareGroup(groupItem1, NULL, callback, ctx); 03466 groupItem1 = (void *)LST_Next(&(*object1)->groupList); 03467 } else if (groupItem1->group == groupItem2->group) { 03468 compareGroup(groupItem1, groupItem2, callback, ctx); 03469 groupItem1 = (void *)LST_Next(&(*object1)->groupList); 03470 groupItem2 = (void *)LST_Next(&(*object2)->groupList); 03471 } else if (groupItem1->group > groupItem2->group) { 03472 compareGroup(NULL, groupItem2, callback, ctx); 03473 groupItem2 = (void *)LST_Next(&(*object2)->groupList); 03474 } else { 03475 compareGroup(groupItem1, NULL, callback, ctx); 03476 groupItem1 = (void *)LST_Next(&(*object1)->groupList); 03477 } 03478 } 03479 03480 while (groupItem2 != NULL) { 03481 compareGroup(NULL, groupItem2, callback, ctx); 03482 groupItem2 = (void *)LST_Next(&(*object2)->groupList); 03483 } 03484 return DCM_NORMAL; 03485 } |
|
Definition at line 3407 of file mri_dicom_hdr.c. References checkObject(), CONDITION, countBytes(), DCM_ExportStream(), DCM_NORMAL, DCM_OBJECT, and object.
03409 { 03410 PRIVATE_OBJECT 03411 ** object; 03412 unsigned char 03413 buf[2048]; 03414 CONDITION 03415 cond; 03416 03417 object = (PRIVATE_OBJECT **) callerObject; 03418 cond = checkObject(object, "DCM_ComputeExportSize"); 03419 if (cond != DCM_NORMAL) 03420 return cond; 03421 03422 *length = 0; 03423 cond = DCM_ExportStream(callerObject, opt, buf, 03424 (unsigned long) sizeof(buf), countBytes, length); 03425 if (cond != DCM_NORMAL) 03426 return cond; 03427 03428 return DCM_NORMAL; 03429 } |
|
|
|
Definition at line 2707 of file mri_dicom_hdr.c. References CTNBOOLEAN, and debug.
02708 { 02709 debug = flag; 02710 } |
|
Definition at line 2287 of file mri_dicom_hdr.c. References PRV_GROUP_ITEM::baseLength, checkObject(), CONDITION, DCM_ELEMENT::d, DCM_ELEMENT::data_offset, DCM_AE, DCM_AS, DCM_AT, DCM_CS, DCM_DA, DCM_DD, DCM_DS, DCM_DT, DCM_DumpElements(), DCM_FD, DCM_FL, DCM_IS, DCM_LO, DCM_LT, DCM_NORMAL, DCM_OB, DCM_OBJECT, DCM_OBJECTCOMMAND, DCM_OBJECTELEMENTLIST, DCM_OBJECTIMAGE, DCM_OBJECTUNKNOWN, DCM_OT, DCM_OW, DCM_PN, DCM_RET, DCM_SH, DCM_SL, DCM_SQ, DCM_SS, DCM_ST, DCM_TAG_ELEMENT, DCM_TAG_GROUP, DCM_TM, DCM_UI, DCM_UL, DCM_UN, DCM_US, DCM_UT, DCM_ELEMENT::description, dumpBinaryData(), PRV_ELEMENT_ITEM::element, PRV_GROUP_ITEM::elementList, PRV_GROUP_ITEM::group, DCM_ELEMENT::length, LST_Head(), LST_Next(), LST_Position(), MIN, DCM_SEQUENCE_ITEM::object, object, DCM_ELEMENT::representation, RWC_NOHEX_MASK, RWC_NONAME_MASK, rwc_opt, RWC_printf(), rwc_vm, scratch, DCM_ELEMENT::tag, U32, and vm.
02288 { 02289 PRV_GROUP_ITEM 02290 * groupItem; 02291 PRV_ELEMENT_ITEM 02292 * elementItem; 02293 PRIVATE_OBJECT 02294 ** object; 02295 CONDITION 02296 cond; 02297 DCM_SEQUENCE_ITEM 02298 * sq; 02299 char 02300 scratch[128]; 02301 int 02302 stringLength; 02303 02304 object = (PRIVATE_OBJECT **) callerObject; 02305 02306 cond = checkObject(object, "DCM_DumpElements"); 02307 if (cond != DCM_NORMAL) 02308 return cond; 02309 02310 switch ((*object)->objectType) { 02311 case DCM_OBJECTUNKNOWN: 02312 RWC_printf("Object type: UNKNOWN\n"); 02313 break; 02314 case DCM_OBJECTCOMMAND: 02315 RWC_printf("Object type: COMMAND\n"); 02316 break; 02317 case DCM_OBJECTIMAGE: 02318 RWC_printf("Object type: IMAGE\n"); 02319 break; 02320 case DCM_OBJECTELEMENTLIST: 02321 RWC_printf("Object type: ELEMENT LIST\n"); 02322 break; 02323 default: 02324 RWC_printf("Object type: Unknown (error)\n"); 02325 break; 02326 } 02327 RWC_printf("Object size: %ld\n", (*object)->objectSize); 02328 02329 groupItem = (void *)LST_Head(&(*object)->groupList); 02330 if (groupItem != NULL) 02331 (void) LST_Position(&(*object)->groupList, (void *)groupItem); 02332 02333 while (groupItem != NULL) { 02334 #ifdef MACOS 02335 RWC_printf("Group: %04x, Length: %8ld\n", groupItem->group, 02336 groupItem->baseLength); 02337 #else 02338 RWC_printf("Group: %04x, Length: %8d\n", groupItem->group, 02339 groupItem->baseLength); 02340 #endif 02341 elementItem = (void *)LST_Head(&groupItem->elementList); 02342 if (elementItem != NULL) 02343 (void) LST_Position(&groupItem->elementList, (void *)elementItem); 02344 while (elementItem != NULL) { 02345 #ifdef MACOS 02346 (void) RWC_printf("%04x %04x %8ld [%-8lu] ", 02347 DCM_TAG_GROUP(elementItem->element.tag), 02348 DCM_TAG_ELEMENT(elementItem->element.tag), 02349 elementItem->element.length , 02350 (unsigned long) elementItem->element.data_offset ); 02351 #else 02352 (void) RWC_printf("%04x %04x %8d [%-8lu] ", 02353 DCM_TAG_GROUP(elementItem->element.tag), 02354 DCM_TAG_ELEMENT(elementItem->element.tag), 02355 elementItem->element.length , 02356 (unsigned long) elementItem->element.data_offset ); 02357 #endif 02358 02359 if( (rwc_opt & RWC_NONAME_MASK) == 0 ) 02360 (void) RWC_printf("//%31s//", elementItem->element.description); 02361 else 02362 (void) RWC_printf("//") ; 02363 02364 if (elementItem->element.d.ot == NULL) 02365 (void) RWC_printf("Data on disk\n"); 02366 else { 02367 switch (elementItem->element.representation) { 02368 case DCM_AE: 02369 case DCM_AS: 02370 case DCM_CS: 02371 case DCM_DA: 02372 case DCM_DT: 02373 stringLength = MIN(sizeof(scratch) - 1, elementItem->element.length); 02374 strncpy(scratch, elementItem->element.d.string, stringLength); 02375 scratch[stringLength] = '\0'; 02376 (void) RWC_printf("%s\n", scratch); 02377 break; 02378 case DCM_DD: 02379 case DCM_FD: 02380 case DCM_FL: 02381 (void) RWC_printf("Unimplemented\n"); 02382 break; 02383 case DCM_DS: 02384 case DCM_IS: 02385 case DCM_LO: 02386 case DCM_LT: 02387 case DCM_PN: 02388 case DCM_SH: 02389 case DCM_UT: 02390 stringLength = MIN(sizeof(scratch) - 1, elementItem->element.length); 02391 strncpy(scratch, elementItem->element.d.string, stringLength); 02392 scratch[stringLength] = '\0'; 02393 (void) RWC_printf("%s\n", scratch); 02394 break; 02395 case DCM_SL: 02396 #ifdef MACOS 02397 (void) RWC_printf("%8lx %ld\n", *elementItem->element.d.sl, 02398 *elementItem->element.d.sl); 02399 #else 02400 if( (rwc_opt & RWC_NOHEX_MASK) == 0 ) 02401 (void) RWC_printf("%8x %d\n", *elementItem->element.d.sl, 02402 *elementItem->element.d.sl); 02403 else 02404 (void) RWC_printf(" %d\n", *elementItem->element.d.sl ) ; 02405 02406 if (vm > 1) 02407 dumpBinaryData(elementItem->element.d.ot, 02408 elementItem->element.representation, 02409 elementItem->element.length / sizeof(U32), vm); 02410 #endif 02411 break; 02412 case DCM_SS: 02413 if( (rwc_opt & RWC_NOHEX_MASK) == 0 ) 02414 (void) RWC_printf("%4x %d\n", *elementItem->element.d.ss, 02415 *elementItem->element.d.ss); 02416 else 02417 (void) RWC_printf(" %d\n", *elementItem->element.d.ss ) ; 02418 02419 if (vm > 1) 02420 dumpBinaryData(elementItem->element.d.ot, 02421 elementItem->element.representation, 02422 elementItem->element.length / sizeof(short), vm); 02423 break; 02424 case DCM_SQ: 02425 (void) RWC_printf("SEQUENCE\n"); 02426 sq = (void *)LST_Head(&elementItem->element.d.sq); 02427 if (sq != NULL) 02428 (void) LST_Position(&elementItem->element.d.sq, (void *)sq); 02429 RWC_printf("DCM Dump SEQUENCE\n"); 02430 while (sq != NULL) { 02431 (void) DCM_DumpElements(&sq->object, vm); 02432 sq = (void *)LST_Next(&elementItem->element.d.sq); 02433 } 02434 RWC_printf("DCM Dump SEQUENCE Complete\n"); 02435 break; 02436 case DCM_ST: 02437 stringLength = MIN(sizeof(scratch) - 1, elementItem->element.length); 02438 strncpy(scratch, elementItem->element.d.string, stringLength); 02439 scratch[stringLength] = '\0'; 02440 (void) RWC_printf("%s\n", scratch); 02441 break; 02442 case DCM_TM: 02443 case DCM_UI: 02444 stringLength = MIN(sizeof(scratch) - 1, elementItem->element.length); 02445 strncpy(scratch, elementItem->element.d.string, stringLength); 02446 scratch[stringLength] = '\0'; 02447 (void) RWC_printf("%s\n", scratch); 02448 break; 02449 case DCM_AT: 02450 case DCM_UL: 02451 #ifdef MACOS 02452 (void) RWC_printf("%8lx %ld\n", *elementItem->element.d.ul, 02453 *elementItem->element.d.ul); 02454 #else 02455 if( (rwc_opt & RWC_NOHEX_MASK) == 0 ) 02456 (void) RWC_printf("%8x %d\n", *elementItem->element.d.ul, 02457 *elementItem->element.d.ul); 02458 else 02459 (void) RWC_printf(" %d\n", *elementItem->element.d.ul ) ; 02460 02461 if (vm > 1) 02462 dumpBinaryData(elementItem->element.d.ot, 02463 elementItem->element.representation, 02464 elementItem->element.length / sizeof(U32), vm); 02465 #endif 02466 break; 02467 case DCM_US:{ 02468 int nel = elementItem->element.length / sizeof(unsigned short) , rr ; 02469 for( rr=0 ; rr < nel ; rr++ ){ 02470 if( (rwc_opt & RWC_NOHEX_MASK) == 0 ) 02471 (void) RWC_printf("%4x %d", elementItem->element.d.us[rr], 02472 elementItem->element.d.us[rr]); 02473 else 02474 (void) RWC_printf(" %d", elementItem->element.d.us[rr] ) ; 02475 } 02476 RWC_printf("\n") ; 02477 02478 if (vm > 1) 02479 dumpBinaryData(elementItem->element.d.ot, 02480 elementItem->element.representation, 02481 elementItem->element.length / sizeof(unsigned short), vm); 02482 } 02483 break; 02484 case DCM_OB: 02485 case DCM_UN: 02486 dumpBinaryData(elementItem->element.d.ot, 02487 elementItem->element.representation, 02488 elementItem->element.length , MAX(rwc_vm,8)); 02489 break; 02490 02491 case DCM_OT: 02492 case DCM_OW: 02493 /*case DCM_UNKNOWN:*/ 02494 case DCM_RET: 02495 (void) RWC_printf("Unimplemented\n"); 02496 break; 02497 default: 02498 (void) RWC_printf("Some unimplemented logic if here\n"); 02499 break; 02500 } 02501 } 02502 elementItem = (void *)LST_Next(&groupItem->elementList); 02503 } 02504 groupItem = (void *)LST_Next(&(*object)->groupList); 02505 } 02506 02507 RWC_printf("DCM Dump Elements Complete\n"); 02508 return DCM_NORMAL; 02509 } |
|
Definition at line 8333 of file mri_dicom_hdr.c. References DIM_OF, vector::message, and RWC_printf().
08334 { 08335 int index; 08336 08337 for (index = 0; index < (int) DIM_OF(messageVector); index++) { 08338 if (messageVector[index].message != NULL) 08339 RWC_printf("%8x %8d %s\n", messageVector[index].cond, 08340 messageVector[index].cond, 08341 messageVector[index].message); 08342 } 08343 } |
|
Definition at line 10432 of file mri_dicom_hdr.c. References DCM_NORMAL, DCM_TAG, DCM_TAG_ELEMENT, DCM_TAG_GROUP, DCM_VALUEREPRESENTATION, GROUPPTR::dict, DIM_OF, DCMDICT::englishDescription, GROUPPTR::entries, i, p, r, DCMDICT::representation, and DCMDICT::tag.
10435 { 10436 int i; 10437 unsigned long j; 10438 GROUPPTR *p; 10439 DCMDICT *dictionaryPtr; 10440 10441 for (i = 0; i < (int) DIM_OF(group_dictionary); i++) { 10442 if ((DCM_TAG_GROUP(tag) == group_dictionary[i].group) || 10443 (DCM_TAG_GROUP(tag) == 0xffff)) { 10444 p = &group_dictionary[i]; 10445 dictionaryPtr = p->dict; 10446 for (j = 0; j < p->entries; j++, dictionaryPtr++) { 10447 if ((DCM_TAG_ELEMENT(tag) == 0xffff) || 10448 (DCM_TAG_ELEMENT(tag) == DCM_TAG_ELEMENT(dictionaryPtr->tag))) { 10449 callback(dictionaryPtr->tag, 10450 dictionaryPtr->englishDescription, 10451 dictionaryPtr->representation, 10452 ctx); 10453 } 10454 } 10455 } 10456 } 10457 return DCM_NORMAL; 10458 } |
|
|
|
Definition at line 2512 of file mri_dicom_hdr.c. References PRV_GROUP_ITEM::baseLength, checkObject(), CONDITION, DCM_ELEMENT::d, DCM_AE, DCM_AS, DCM_AT, DCM_CS, DCM_DA, DCM_DD, DCM_DS, DCM_DT, DCM_FD, DCM_FL, DCM_FormatElements(), DCM_IS, DCM_LO, DCM_LT, DCM_NORMAL, DCM_OB, DCM_OBJECT, DCM_OBJECTCOMMAND, DCM_OBJECTELEMENTLIST, DCM_OBJECTIMAGE, DCM_OBJECTUNKNOWN, DCM_OT, DCM_OW, DCM_PN, DCM_RET, DCM_SH, DCM_SL, DCM_SQ, DCM_SS, DCM_ST, DCM_TAG_ELEMENT, DCM_TAG_GROUP, DCM_TM, DCM_UI, DCM_UL, DCM_US, DCM_UT, DCM_ELEMENT::description, dumpBinaryData(), PRV_ELEMENT_ITEM::element, PRV_GROUP_ITEM::elementList, PRV_GROUP_ITEM::group, DCM_ELEMENT::length, LST_Head(), LST_Next(), LST_Position(), MIN, DCM_SEQUENCE_ITEM::object, object, DCM_ELEMENT::representation, RWC_printf(), scratch, DCM_ELEMENT::tag, U32, and vm.
02513 { 02514 PRV_GROUP_ITEM 02515 * groupItem; 02516 PRV_ELEMENT_ITEM 02517 * elementItem; 02518 PRIVATE_OBJECT 02519 ** object; 02520 CONDITION 02521 cond; 02522 DCM_SEQUENCE_ITEM 02523 * sq; 02524 char 02525 scratch[128]; 02526 int 02527 stringLength; 02528 char localPrefix[128]; 02529 02530 object = (PRIVATE_OBJECT **) callerObject; 02531 02532 cond = checkObject(object, "DCM_DumpElements"); 02533 if (cond != DCM_NORMAL) 02534 return cond; 02535 02536 RWC_printf("\n%sDCM Dump Elements\n", prefix); 02537 switch ((*object)->objectType) { 02538 case DCM_OBJECTUNKNOWN: 02539 RWC_printf("%sObject type: UNKNOWN\n", prefix); 02540 break; 02541 case DCM_OBJECTCOMMAND: 02542 RWC_printf("%sObject type: COMMAND\n", prefix); 02543 break; 02544 case DCM_OBJECTIMAGE: 02545 RWC_printf("%sObject type: IMAGE\n", prefix); 02546 break; 02547 case DCM_OBJECTELEMENTLIST: 02548 RWC_printf("%sObject type: ELEMENT LIST\n", prefix); 02549 break; 02550 default: 02551 RWC_printf("%sObject type: Unknown (error)\n", prefix); 02552 break; 02553 } 02554 RWC_printf("%sObject size: %ld\n", prefix, (*object)->objectSize); 02555 02556 groupItem = (void *)LST_Head(&(*object)->groupList); 02557 if (groupItem != NULL) 02558 (void) LST_Position(&(*object)->groupList, (void *)groupItem); 02559 02560 while (groupItem != NULL) { 02561 RWC_printf("%sGroup: %04x, Length: %8d\n", prefix, groupItem->group, 02562 groupItem->baseLength); 02563 elementItem = (void *)LST_Head(&groupItem->elementList); 02564 if (elementItem != NULL) 02565 (void) LST_Position(&groupItem->elementList, (void *)elementItem); 02566 while (elementItem != NULL) { 02567 (void) RWC_printf("%s%04x %04x %8d ", 02568 prefix, 02569 DCM_TAG_GROUP(elementItem->element.tag), 02570 DCM_TAG_ELEMENT(elementItem->element.tag), 02571 elementItem->element.length); 02572 (void) RWC_printf("//%31s//", elementItem->element.description); 02573 if (elementItem->element.d.ot == NULL) 02574 (void) RWC_printf("Data on disk\n"); 02575 else { 02576 switch (elementItem->element.representation) { 02577 case DCM_AE: 02578 case DCM_AS: 02579 case DCM_CS: 02580 case DCM_DA: 02581 case DCM_DT: 02582 stringLength = MIN(sizeof(scratch) - 1, elementItem->element.length); 02583 strncpy(scratch, elementItem->element.d.string, stringLength); 02584 scratch[stringLength] = '\0'; 02585 (void) RWC_printf("%s\n", scratch); 02586 break; 02587 case DCM_DD: 02588 case DCM_FD: 02589 case DCM_FL: 02590 (void) RWC_printf("Unimplemented\n"); 02591 break; 02592 case DCM_DS: 02593 case DCM_IS: 02594 case DCM_LO: 02595 case DCM_LT: 02596 case DCM_PN: 02597 case DCM_SH: 02598 case DCM_UT: 02599 stringLength = MIN(sizeof(scratch) - 1, elementItem->element.length); 02600 strncpy(scratch, elementItem->element.d.string, stringLength); 02601 scratch[stringLength] = '\0'; 02602 (void) RWC_printf("%s\n", scratch); 02603 break; 02604 case DCM_SL: 02605 #ifdef MACOS 02606 (void) RWC_printf("%8lx %ld\n", *elementItem->element.d.sl, 02607 *elementItem->element.d.sl); 02608 #else 02609 (void) RWC_printf("%8x %d\n", *elementItem->element.d.sl, 02610 *elementItem->element.d.sl); 02611 if (vm > 1) 02612 dumpBinaryData(elementItem->element.d.ot, 02613 elementItem->element.representation, 02614 elementItem->element.length / sizeof(U32), vm); 02615 #endif 02616 break; 02617 case DCM_SS: 02618 (void) RWC_printf("%4x %d\n", *elementItem->element.d.ss, 02619 *elementItem->element.d.ss); 02620 if (vm > 1) 02621 dumpBinaryData(elementItem->element.d.ot, 02622 elementItem->element.representation, 02623 elementItem->element.length / sizeof(short), vm); 02624 break; 02625 case DCM_SQ: 02626 (void) RWC_printf("SEQUENCE\n"); 02627 sq = (void *)LST_Head(&elementItem->element.d.sq); 02628 if (sq != NULL) 02629 (void) LST_Position(&elementItem->element.d.sq, (void *)sq); 02630 RWC_printf("%sDCM Dump SEQUENCE\n", prefix); 02631 strcpy(localPrefix, prefix); 02632 strcat(localPrefix, " "); 02633 while (sq != NULL) { 02634 (void) DCM_FormatElements(&sq->object, vm, localPrefix); 02635 sq = (void *)LST_Next(&elementItem->element.d.sq); 02636 } 02637 RWC_printf("%sDCM Dump SEQUENCE Complete\n", prefix); 02638 break; 02639 case DCM_ST: 02640 stringLength = MIN(sizeof(scratch) - 1, elementItem->element.length); 02641 strncpy(scratch, elementItem->element.d.string, stringLength); 02642 scratch[stringLength] = '\0'; 02643 (void) RWC_printf("%s\n", scratch); 02644 break; 02645 case DCM_TM: 02646 case DCM_UI: 02647 stringLength = MIN(sizeof(scratch) - 1, elementItem->element.length); 02648 strncpy(scratch, elementItem->element.d.string, stringLength); 02649 scratch[stringLength] = '\0'; 02650 (void) RWC_printf("%s\n", scratch); 02651 break; 02652 case DCM_AT: 02653 case DCM_UL: 02654 (void) RWC_printf("%8x %d\n", *elementItem->element.d.ul, 02655 *elementItem->element.d.ul); 02656 if (vm > 1) 02657 dumpBinaryData(elementItem->element.d.ot, 02658 elementItem->element.representation, 02659 elementItem->element.length / sizeof(U32), vm); 02660 break; 02661 case DCM_US: 02662 (void) RWC_printf("%4x %d\n", *elementItem->element.d.us, 02663 *elementItem->element.d.us); 02664 if (vm > 1) 02665 dumpBinaryData(elementItem->element.d.ot, 02666 elementItem->element.representation, 02667 elementItem->element.length / sizeof(unsigned short), vm); 02668 break; 02669 case DCM_OT: 02670 case DCM_OW: 02671 case DCM_OB: 02672 /*case DCM_UNKNOWN:*/ 02673 case DCM_RET: 02674 (void) RWC_printf("Unimplemented\n"); 02675 break; 02676 default: 02677 (void) RWC_printf("Some unimplemented logic if here\n"); 02678 break; 02679 } 02680 } 02681 elementItem = (void *)LST_Next(&groupItem->elementList); 02682 } 02683 groupItem = (void *)LST_Next(&(*object)->groupList); 02684 } 02685 02686 RWC_printf("%sDCM Dump Elements Complete\n\n", prefix); 02687 return DCM_NORMAL; 02688 } |
|
Definition at line 7689 of file mri_dicom_hdr.c. References BIG_ORDER, BYTEORDER_REVERSE, checkObject(), COND_PushCondition(), CONDITION, CTN_MALLOC, CTNBOOLEAN, DCM_ELEMENT::d, PRV_ELEMENT_ITEM::dataOffset, DCM_ACCEPTVRMISMATCH, DCM_ELEMENTNOTFOUND, DCM_EXPLICITBIGENDIAN, DCM_EXPLICITLITTLEENDIAN, DCM_GET_COMPRESSED_CALLBACK, DCM_Message(), DCM_NORMAL, DCM_OBJECT, DCM_ORDERBIGENDIAN, DCM_ORDERLITTLEENDIAN, DCM_ORDERMASK, DCM_ORDERNATIVE, DCM_STREAMCOMPLETE, DCM_TAG, DCM_TAG_ELEMENT, DCM_TAG_GROUP, DCM_UL, DCM_UNSPECIFIEDLENGTH, DCM_VRMASK, l, DCM_ELEMENT::length, LITTLE_ORDER, locateElement(), MIN, NATIVE_ORDER, object, PRV_ELEMENT_ITEM::originalDataLength, read(), readGroupElement(), readVRLength(), DCM_ELEMENT::representation, swapInPlace(), and U32.
07692 { 07693 PRIVATE_OBJECT 07694 ** object; 07695 PRV_ELEMENT_ITEM 07696 * elementItem; 07697 S32 nBytes; 07698 S32 toRead; 07699 CONDITION cond; 07700 int doneFlag = 0; 07701 size_t elementLength; 07702 unsigned char *ptr; 07703 U32 size = 0; 07704 off_t fileOffset = 0; 07705 unsigned long opt; 07706 int byteOrder; 07707 int explicitVR; 07708 CTNBOOLEAN acceptVRMismatch = FALSE; 07709 DCM_ELEMENT e; 07710 U32 sequenceLength = 0; 07711 CONDITION flag; 07712 int index = 0; 07713 CTNBOOLEAN firstBuffer = TRUE; 07714 U32 *offsetBuffer = NULL; 07715 U32 offsetBufferCount = 0; 07716 U32 streamOffset = 0; 07717 int startOfFragment = 1; 07718 07719 object = (PRIVATE_OBJECT **) callerObject; 07720 cond = checkObject(object, "DCM_GetCompressedValue"); 07721 if (cond != DCM_NORMAL) 07722 return cond; 07723 07724 elementItem = locateElement(object, tag); 07725 07726 if (elementItem == NULL) 07727 return COND_PushCondition(DCM_ELEMENTNOTFOUND, 07728 DCM_Message(DCM_ELEMENTNOTFOUND), DCM_TAG_GROUP(tag), 07729 DCM_TAG_ELEMENT(tag), 07730 "DCM_GetEncodedValue"); 07731 07732 elementLength = elementItem->originalDataLength; 07733 ptr = NULL; /* Means reading from a file */ 07734 size = DCM_UNSPECIFIEDLENGTH; 07735 fileOffset = elementItem->dataOffset; 07736 07737 opt |= (*object)->dataOptions & DCM_ORDERMASK; 07738 explicitVR = FALSE; 07739 switch (opt & DCM_ORDERMASK) { 07740 case DCM_ORDERNATIVE: 07741 byteOrder = NATIVE_ORDER; 07742 break; 07743 case DCM_ORDERLITTLEENDIAN: 07744 byteOrder = LITTLE_ORDER; 07745 break; 07746 case DCM_EXPLICITLITTLEENDIAN: 07747 byteOrder = LITTLE_ORDER; 07748 explicitVR = TRUE; 07749 break; 07750 case DCM_ORDERBIGENDIAN: 07751 byteOrder = BIG_ORDER; 07752 break; 07753 case DCM_EXPLICITBIGENDIAN: 07754 byteOrder = BIG_ORDER; 07755 explicitVR = TRUE; 07756 break; 07757 default: 07758 byteOrder = LITTLE_ORDER; 07759 explicitVR = TRUE; 07760 break; 07761 } 07762 if ((opt & DCM_VRMASK) == DCM_ACCEPTVRMISMATCH) 07763 acceptVRMismatch = TRUE; 07764 07765 (void) lseek((*object)->fd, elementItem->dataOffset, SEEK_SET); 07766 while (elementLength != 0) { 07767 sequenceLength = 0; 07768 memset(&e, 0, sizeof(e)); 07769 flag = readGroupElement("", &ptr, (*object)->fd, &size, &fileOffset, 07770 FALSE, byteOrder, explicitVR, acceptVRMismatch, 07771 object, &sequenceLength, &e); 07772 if (flag == DCM_STREAMCOMPLETE) 07773 break; 07774 else if (flag != DCM_NORMAL) 07775 return flag; 07776 07777 flag = readVRLength("", &ptr, (*object)->fd, &size, &fileOffset, 07778 FALSE, /* Known length */ 07779 byteOrder, explicitVR, acceptVRMismatch, object, 07780 &sequenceLength, &e); 07781 if (flag != DCM_NORMAL) 07782 return flag; 07783 07784 elementLength -= sequenceLength + e.length; 07785 07786 if (firstBuffer) { 07787 firstBuffer = FALSE; 07788 if (e.length != 0) { 07789 offsetBuffer = CTN_MALLOC(e.length); 07790 offsetBufferCount = e.length / sizeof(U32); 07791 if (offsetBuffer == NULL) 07792 exit(1); /* repair */ 07793 nBytes = read((*object)->fd, offsetBuffer, e.length); 07794 if (nBytes != e.length) { 07795 exit(1); /* repair */ 07796 } 07797 if (byteOrder == BYTEORDER_REVERSE) { 07798 DCM_ELEMENT offsetBufferElement; 07799 memset(&offsetBufferElement, 0, sizeof(DCM_ELEMENT)); 07800 offsetBufferElement.length = e.length; 07801 offsetBufferElement.d.ul = offsetBuffer; 07802 offsetBufferElement.representation = DCM_UL; 07803 swapInPlace(object, &offsetBufferElement); 07804 } 07805 callback(offsetBuffer, e.length, index, 1, 0, 1, ctx); 07806 streamOffset = 0; 07807 } else { 07808 streamOffset = 0xffffffff; 07809 } 07810 } else { 07811 U32 l = e.length; 07812 int j; 07813 int lastIndex; 07814 07815 lastIndex = index; 07816 for (j = 0; j < offsetBufferCount; j++) { 07817 if (streamOffset == offsetBuffer[j]) 07818 index = j + 1; 07819 } 07820 startOfFragment = 1; 07821 while (l != 0) { 07822 toRead = MIN(bufSize, l); 07823 nBytes = read((*object)->fd, buf, toRead); 07824 if (nBytes != toRead) { 07825 exit(1); /* repair */ 07826 } 07827 callback(buf, toRead, index, 07828 (index != lastIndex) ? 1 : 0, 07829 0, startOfFragment, ctx); 07830 l -= toRead; 07831 lastIndex = index; /* Guarantee first flag is off */ 07832 startOfFragment = 0; 07833 } 07834 streamOffset += sequenceLength + e.length; 07835 } 07836 fileOffset += e.length; 07837 index++; 07838 } 07839 callback(buf, 0, index, 0, 1, 1, ctx); 07840 return DCM_NORMAL; 07841 } |
|
Definition at line 3381 of file mri_dicom_hdr.c. References checkObject(), COND_PushCondition(), CONDITION, DCM_ELEMENT::d, DCM_ELEMENTNOTFOUND, DCM_Message(), DCM_NORMAL, DCM_OBJECT, DCM_TAG, DCM_TAG_ELEMENT, DCM_TAG_GROUP, PRV_ELEMENT_ITEM::element, and locateElement().
03382 { 03383 PRIVATE_OBJECT 03384 ** obj; 03385 CONDITION 03386 cond; 03387 PRV_ELEMENT_ITEM 03388 * elementItem; 03389 03390 obj = (PRIVATE_OBJECT **) callerObject; 03391 cond = checkObject(obj, "DCM_GetElementVM"); 03392 if (cond != DCM_NORMAL) 03393 return cond; 03394 03395 elementItem = locateElement(obj, tag); 03396 if (elementItem == NULL) 03397 return COND_PushCondition(DCM_ELEMENTNOTFOUND, 03398 DCM_Message(DCM_ELEMENTNOTFOUND), DCM_TAG_GROUP(tag), 03399 DCM_TAG_ELEMENT(tag), 03400 "DCM_GetElementVM"); 03401 *element = elementItem->element; 03402 element->d.ot = NULL; 03403 return DCM_NORMAL; 03404 } |
|
Definition at line 1990 of file mri_dicom_hdr.c. References checkObject(), COND_PushCondition(), CONDITION, CTNBOOLEAN, DCM_ELEMENTNOTFOUND, DCM_Message(), DCM_NORMAL, DCM_OBJECT, DCM_TAG, DCM_TAG_ELEMENT, DCM_TAG_GROUP, PRV_ELEMENT_ITEM::element, PRV_GROUP_ITEM::elementList, PRV_GROUP_ITEM::group, DCM_ELEMENT::length, LST_Head(), LST_Next(), LST_Position(), object, DCM_ELEMENT::tag, and U32.
01992 { 01993 PRIVATE_OBJECT 01994 ** object; 01995 PRV_GROUP_ITEM 01996 * groupItem; 01997 PRV_ELEMENT_ITEM 01998 * elementItem; 01999 CONDITION 02000 cond; 02001 CTNBOOLEAN 02002 flag; 02003 unsigned short 02004 group, 02005 element; 02006 02007 object = (PRIVATE_OBJECT **) callerObject; 02008 cond = checkObject(object, "DCM_GetElementSize"); 02009 if (cond != DCM_NORMAL) 02010 return cond; 02011 02012 group = DCM_TAG_GROUP(tag); 02013 element = DCM_TAG_ELEMENT(tag); 02014 02015 groupItem = (void *)LST_Head(&((*object)->groupList)); 02016 if (groupItem == NULL) 02017 return COND_PushCondition(DCM_ELEMENTNOTFOUND, 02018 DCM_Message(DCM_ELEMENTNOTFOUND), group, element, 02019 "DCM_GetElementSize"); 02020 02021 (void) LST_Position(&((*object)->groupList), (void *)groupItem); 02022 02023 flag = FALSE; 02024 while ((groupItem != NULL) && (flag == FALSE)) { 02025 if (groupItem->group == group) 02026 flag = TRUE; 02027 else 02028 groupItem = (void *)LST_Next(&(*object)->groupList); 02029 } 02030 if (flag == FALSE) 02031 return COND_PushCondition(DCM_ELEMENTNOTFOUND, 02032 DCM_Message(DCM_ELEMENTNOTFOUND), group, element, 02033 "DCM_GetElementSize"); 02034 02035 elementItem = (void *)LST_Head(&groupItem->elementList); 02036 if (elementItem == NULL) 02037 return COND_PushCondition(DCM_ELEMENTNOTFOUND, 02038 DCM_Message(DCM_ELEMENTNOTFOUND), group, element, 02039 "DCM_GetElementSize"); 02040 02041 (void) LST_Position(&groupItem->elementList, (void *)elementItem); 02042 02043 flag = FALSE; 02044 while ((elementItem != NULL) && (flag == FALSE)) { 02045 if (elementItem->element.tag == tag) 02046 flag = TRUE; 02047 else 02048 elementItem = (void *)LST_Next(&groupItem->elementList); 02049 } 02050 02051 if (flag == FALSE) 02052 return COND_PushCondition(DCM_ELEMENTNOTFOUND, 02053 DCM_Message(DCM_ELEMENTNOTFOUND), group, element, 02054 "DCM_GetElementSize"); 02055 02056 02057 *rtnLength = elementItem->element.length; 02058 return DCM_NORMAL; 02059 } |
|
Definition at line 1651 of file mri_dicom_hdr.c. References PRV_ELEMENT_ITEM::byteOrder, BYTEORDER_REVERSE, checkObject(), COND_PushCondition(), CONDITION, DCM_ELEMENT::d, PRV_ELEMENT_ITEM::dataOffset, DCM_AT, DCM_CANNOTGETSEQUENCEVALUE, DCM_ELEMENTNOTFOUND, DCM_FILEACCESSERROR, DCM_GETINCOMPLETE, DCM_ILLEGALCONTEXT, DCM_Message(), DCM_NORMAL, DCM_OBJECT, DCM_SQ, DCM_TAG_ELEMENT, DCM_TAG_GROUP, PRV_ELEMENT_ITEM::element, PRV_GROUP_ITEM::elementList, PRV_GROUP_ITEM::group, l, DCM_ELEMENT::length, LST_Head(), LST_Next(), LST_Position(), MIN, object, p, q, read(), DCM_ELEMENT::representation, swapATGroupElement(), swapInPlace(), DCM_ELEMENT::tag, and U32.
01653 { 01654 PRIVATE_OBJECT 01655 ** object; 01656 PRV_GROUP_ITEM 01657 * groupItem; 01658 PRV_ELEMENT_ITEM 01659 * elementItem; 01660 int 01661 nBytes; 01662 CONDITION 01663 cond; 01664 01665 object = (PRIVATE_OBJECT **) callerObject; 01666 cond = checkObject(object, "DCM_GetElementValue"); 01667 if (cond != DCM_NORMAL) 01668 return cond; 01669 01670 groupItem = (void *)LST_Head(&(*object)->groupList); 01671 if (groupItem == NULL) 01672 return COND_PushCondition(DCM_ELEMENTNOTFOUND, 01673 DCM_Message(DCM_ELEMENTNOTFOUND), DCM_TAG_GROUP(element->tag), 01674 DCM_TAG_ELEMENT(element->tag), 01675 "DCM_GetElementValue"); 01676 01677 (void) LST_Position(&(*object)->groupList, (void *)groupItem); 01678 while (groupItem != NULL) { 01679 if (groupItem->group == DCM_TAG_GROUP(element->tag)) 01680 break; 01681 01682 groupItem = (void *)LST_Next(&(*object)->groupList); 01683 } 01684 if (groupItem == NULL) 01685 return COND_PushCondition(DCM_ELEMENTNOTFOUND, 01686 DCM_Message(DCM_ELEMENTNOTFOUND), DCM_TAG_GROUP(element->tag), 01687 DCM_TAG_ELEMENT(element->tag), 01688 "DCM_GetElementValue"); 01689 01690 elementItem = (void *)LST_Head(&groupItem->elementList); 01691 if (elementItem == NULL) 01692 return COND_PushCondition(DCM_ELEMENTNOTFOUND, 01693 DCM_Message(DCM_ELEMENTNOTFOUND), DCM_TAG_GROUP(element->tag), 01694 DCM_TAG_GROUP(element->tag), 01695 "DCM_GetElementValue"); 01696 01697 (void) LST_Position(&groupItem->elementList, (void *)elementItem); 01698 while (elementItem != NULL) { 01699 if (elementItem->element.tag == element->tag) { 01700 unsigned char *p; 01701 U32 l; 01702 01703 if (element->representation == DCM_SQ) 01704 return COND_PushCondition(DCM_CANNOTGETSEQUENCEVALUE, 01705 DCM_Message(DCM_CANNOTGETSEQUENCEVALUE), 01706 element->tag, "DCM_GetElementValue"); 01707 01708 p = *ctx; 01709 if ((U32) p > elementItem->element.length) 01710 return COND_PushCondition(DCM_ILLEGALCONTEXT, 01711 DCM_Message(DCM_ILLEGALCONTEXT), 01712 "DCM_GetElementValue"); 01713 01714 l = MIN(element->length, (elementItem->element.length - (U32) p)); 01715 01716 *rtnLength = l; 01717 { 01718 if (elementItem->element.d.ot == NULL) { 01719 if ((*object)->fd != -1) { 01720 (void) lseek((*object)->fd, 01721 elementItem->dataOffset + (off_t) p, SEEK_SET); 01722 nBytes = read((*object)->fd, element->d.ot, (int) l); 01723 } else { 01724 (*object)->sk((*object)->userCtx, 01725 (long) (elementItem->dataOffset + (off_t) p), SEEK_SET); 01726 cond = (*object)->rd((*object)->userCtx, element->d.ot, l, 01727 &nBytes); 01728 } 01729 if ((unsigned) nBytes != l) { 01730 return COND_PushCondition(DCM_FILEACCESSERROR, 01731 DCM_Message(DCM_FILEACCESSERROR), 01732 (*object)->fileName, 01733 "DCM_GetElementValue"); 01734 } 01735 if( LITTLE_ENDIAN_ARCHITECTURE ){ 01736 if (elementItem->element.representation == DCM_AT) { 01737 DCM_ELEMENT e; 01738 e = elementItem->element; 01739 e.length = l; 01740 e.d.ot = element->d.ot; 01741 swapATGroupElement(&e); 01742 } 01743 } 01744 if (elementItem->byteOrder == BYTEORDER_REVERSE) { 01745 DCM_ELEMENT e; 01746 e = elementItem->element; 01747 e.length = l; 01748 e.d.ot = element->d.ot; 01749 swapInPlace(object, &e); 01750 } 01751 } else { 01752 unsigned char *q; 01753 q = (unsigned char *) elementItem->element.d.ot + 01754 (U32) p; 01755 (void) memcpy(element->d.ot, q, l); 01756 if (elementItem->byteOrder == BYTEORDER_REVERSE) { 01757 DCM_ELEMENT e; 01758 e = elementItem->element; 01759 e.length = l; 01760 e.d.ot = element->d.ot; 01761 swapInPlace(object, &e); 01762 } 01763 } 01764 p += l; 01765 *ctx = (void *) p; 01766 if ((unsigned) p == elementItem->element.length) 01767 return DCM_NORMAL; 01768 else 01769 return DCM_GETINCOMPLETE; 01770 } 01771 01772 } 01773 elementItem = (void *)LST_Next(&groupItem->elementList); 01774 } 01775 return COND_PushCondition(DCM_ELEMENTNOTFOUND, 01776 DCM_Message(DCM_ELEMENTNOTFOUND), DCM_TAG_GROUP(element->tag), 01777 DCM_TAG_ELEMENT(element->tag), 01778 "DCM_GetElementValue"); 01779 } |
|
Definition at line 3198 of file mri_dicom_hdr.c. References checkObject(), COND_PushCondition(), CONDITION, CTN_MALLOC, CTNBOOLEAN, DCM_ELEMENT::d, DCM_DELIMITOR, DCM_ELEMENTNOTFOUND, DCM_IsString(), DCM_LISTFAILURE, DCM_MALLOCFAILURE, DCM_Message(), DCM_NORMAL, DCM_OBJECT, DCM_TAG, DCM_TAG_ELEMENT, DCM_TAG_GROUP, DCM_UNEXPECTEDREPRESENTATION, PRV_ELEMENT_ITEM::element, PRV_GROUP_ITEM::elementList, PRV_GROUP_ITEM::group, l, DCM_ELEMENT::length, LST_Enqueue(), LST_Head(), LST_Next(), LST_NORMAL, LST_Position(), object, p, DCM_ELEMENT::representation, DCM_ELEMENT::tag, and U32.
03200 { 03201 PRIVATE_OBJECT 03202 ** obj; 03203 CONDITION 03204 cond; 03205 PRV_GROUP_ITEM 03206 * groupItem; 03207 PRV_ELEMENT_ITEM 03208 * elementItem; 03209 CTNBOOLEAN 03210 found = FALSE; 03211 char 03212 *src, 03213 *dst, 03214 *p; 03215 U32 03216 l; 03217 03218 obj = (PRIVATE_OBJECT **) object; 03219 cond = checkObject(obj, "DCM_GetSequenceList"); 03220 if (cond != DCM_NORMAL) 03221 return cond; 03222 03223 groupItem = (void *)LST_Head(&(*obj)->groupList); 03224 if (groupItem == NULL) 03225 return COND_PushCondition(DCM_ELEMENTNOTFOUND, 03226 DCM_Message(DCM_ELEMENTNOTFOUND), DCM_TAG_GROUP(tag), 03227 DCM_TAG_ELEMENT(tag), 03228 "DCM_GetSequenceList"); 03229 03230 (void) LST_Position(&(*obj)->groupList, (void *)groupItem); 03231 while (groupItem != NULL) { 03232 if (groupItem->group == DCM_TAG_GROUP(tag)) 03233 break; 03234 03235 groupItem = (void *)LST_Next(&(*obj)->groupList); 03236 } 03237 if (groupItem == NULL) 03238 return COND_PushCondition(DCM_ELEMENTNOTFOUND, 03239 DCM_Message(DCM_ELEMENTNOTFOUND), DCM_TAG_GROUP(tag), 03240 DCM_TAG_ELEMENT(tag), 03241 "DCM_GetSequenceList"); 03242 03243 elementItem = (void *)LST_Head(&groupItem->elementList); 03244 if (elementItem == NULL) 03245 return COND_PushCondition(DCM_ELEMENTNOTFOUND, 03246 DCM_Message(DCM_ELEMENTNOTFOUND), DCM_TAG_GROUP(tag), 03247 DCM_TAG_GROUP(tag), 03248 "DCM_GetSequenceTag"); 03249 03250 (void) LST_Position(&groupItem->elementList, (void *)elementItem); 03251 while (!found && (elementItem != NULL)) { 03252 if (elementItem->element.tag == tag) { 03253 found = TRUE; 03254 } else 03255 elementItem = (void *)LST_Next(&groupItem->elementList); 03256 } 03257 if (!found) 03258 return COND_PushCondition(DCM_ELEMENTNOTFOUND, 03259 DCM_Message(DCM_ELEMENTNOTFOUND), DCM_TAG_GROUP(tag), 03260 DCM_TAG_ELEMENT(tag), 03261 "DCM_GetElementValueList"); 03262 03263 if (!DCM_IsString(elementItem->element.representation)) { 03264 return COND_PushCondition(DCM_UNEXPECTEDREPRESENTATION, 03265 DCM_Message(DCM_UNEXPECTEDREPRESENTATION), "DCM_GetElementValueList", 03266 "string"); 03267 } 03268 src = elementItem->element.d.string; 03269 l = elementItem->element.length; 03270 while (l > 0) { 03271 while (l > 1 && (*src == ' ' || *src == DCM_DELIMITOR)) { 03272 l--; 03273 src++; 03274 } 03275 if ((l == 1) && (*src == ' ' || *src == DCM_DELIMITOR)) 03276 l--; 03277 03278 if (l != 0) { 03279 p = CTN_MALLOC(structureSize); 03280 if (p == NULL) 03281 return COND_PushCondition(DCM_MALLOCFAILURE, 03282 DCM_Message(DCM_MALLOCFAILURE), structureSize, 03283 "DCM_GetElementValueList"); 03284 dst = p + stringOffset; 03285 while ((l > 1) && (*src != DCM_DELIMITOR)) { 03286 *dst++ = *src++; 03287 l--; 03288 } 03289 if ((l == 1) && (*src != ' ')) { 03290 *dst++ = *src++; 03291 l--; 03292 } 03293 *dst = '\0';; 03294 cond = LST_Enqueue(list, (void *)p); 03295 if (cond != LST_NORMAL) 03296 return COND_PushCondition(DCM_LISTFAILURE, 03297 DCM_Message(DCM_LISTFAILURE), "DCM_GetElementValueList"); 03298 } 03299 } 03300 return DCM_NORMAL; 03301 } |
|
Definition at line 1866 of file mri_dicom_hdr.c. References PRV_ELEMENT_ITEM::byteOrder, BYTEORDER_REVERSE, checkObject(), COND_PushCondition(), CONDITION, DCM_ELEMENT::d, PRV_ELEMENT_ITEM::dataOffset, DCM_AT, DCM_BADLENGTH, DCM_BADOFFSET, DCM_CANNOTGETSEQUENCEVALUE, DCM_ELEMENTNOTFOUND, DCM_FILEACCESSERROR, DCM_Message(), DCM_NORMAL, DCM_OBJECT, DCM_SQ, DCM_TAG_ELEMENT, DCM_TAG_GROUP, PRV_ELEMENT_ITEM::element, l, DCM_ELEMENT::length, locateElement(), object, offset, p, q, read(), DCM_ELEMENT::representation, swapATGroupElement(), swapInPlace(), DCM_ELEMENT::tag, and U32.
01868 { 01869 PRIVATE_OBJECT **object; 01870 PRV_ELEMENT_ITEM *elementItem; 01871 int nBytes; 01872 CONDITION cond; 01873 01874 object = (PRIVATE_OBJECT **) callerObject; 01875 cond = checkObject(object, "DCM_GetElementValue"); 01876 if (cond != DCM_NORMAL) 01877 return cond; 01878 01879 elementItem = locateElement(object, element->tag); 01880 if (elementItem == NULL) 01881 return COND_PushCondition(DCM_ELEMENTNOTFOUND, 01882 DCM_Message(DCM_ELEMENTNOTFOUND), DCM_TAG_GROUP(element->tag), 01883 DCM_TAG_ELEMENT(element->tag), 01884 "DCM_GetElementValueOffset"); 01885 01886 01887 { 01888 unsigned char *p; 01889 U32 l; 01890 01891 if (element->representation == DCM_SQ) 01892 return COND_PushCondition(DCM_CANNOTGETSEQUENCEVALUE, 01893 DCM_Message(DCM_CANNOTGETSEQUENCEVALUE), 01894 element->tag, "DCM_GetElementValueOffset"); 01895 01896 p = (unsigned char *) offset;; 01897 if ((U32) p > elementItem->element.length) 01898 return COND_PushCondition(DCM_BADOFFSET, 01899 DCM_Message(DCM_BADOFFSET), 01900 (int) offset, 01901 (int) elementItem->element.length, 01902 "DCM_GetElementValueLength"); 01903 01904 l = element->length; 01905 if (l + offset > elementItem->element.length) { 01906 return COND_PushCondition(DCM_BADLENGTH, 01907 DCM_Message(DCM_BADLENGTH), 01908 (int) offset, (int) l, 01909 (int) elementItem->element.length, 01910 "DCM_GetElementValueLength"); 01911 } { 01912 if (elementItem->element.d.ot == NULL) { 01913 if ((*object)->fd != -1) { 01914 (void) lseek((*object)->fd, 01915 elementItem->dataOffset + (off_t) p, SEEK_SET); 01916 nBytes = read((*object)->fd, element->d.ot, (int) l); 01917 } else { 01918 (*object)->sk((*object)->userCtx, 01919 (long) (elementItem->dataOffset + (off_t) p), SEEK_SET); 01920 cond = (*object)->rd((*object)->userCtx, element->d.ot, l, 01921 &nBytes); 01922 } 01923 if ((unsigned) nBytes != l) { 01924 return COND_PushCondition(DCM_FILEACCESSERROR, 01925 DCM_Message(DCM_FILEACCESSERROR), 01926 (*object)->fileName, 01927 "DCM_GetElementValueValue"); 01928 } 01929 if( LITTLE_ENDIAN_ARCHITECTURE ){ 01930 if (elementItem->element.representation == DCM_AT) { 01931 DCM_ELEMENT e; 01932 e = elementItem->element; 01933 e.length = l; 01934 e.d.ot = element->d.ot; 01935 swapATGroupElement(&e); 01936 } 01937 } 01938 if (elementItem->byteOrder == BYTEORDER_REVERSE) { 01939 DCM_ELEMENT e; 01940 e = elementItem->element; 01941 e.length = l; 01942 e.d.ot = element->d.ot; 01943 swapInPlace(object, &e); 01944 } 01945 } else { 01946 unsigned char *q; 01947 q = (unsigned char *) elementItem->element.d.ot + 01948 (U32) p; 01949 (void) memcpy(element->d.ot, q, l); 01950 if (elementItem->byteOrder == BYTEORDER_REVERSE) { 01951 DCM_ELEMENT e; 01952 e = elementItem->element; 01953 e.length = l; 01954 e.d.ot = element->d.ot; 01955 swapInPlace(object, &e); 01956 } 01957 } 01958 return DCM_NORMAL; 01959 } 01960 01961 } 01962 } |
|
dst = (DCM_OBJECT *) dstObj; Definition at line 8047 of file mri_dicom_hdr.c. References checkObject(), CONDITION, DCM_EMPTYOBJECT, DCM_GetNextElement(), DCM_NORMAL, DCM_OBJECT, PRV_ELEMENT_ITEM::element, PRV_GROUP_ITEM::elementList, LST_Head(), LST_Position(), and object.
08048 { 08049 PRIVATE_OBJECT** object; 08050 PRV_GROUP_ITEM* groupItem; 08051 PRV_ELEMENT_ITEM* elementItem; 08052 CONDITION cond; 08053 08054 object = (PRIVATE_OBJECT **) callerObject; 08055 cond = checkObject(object, "DCM_GetFirstElement"); 08056 if (cond != DCM_NORMAL) 08057 return cond; 08058 08059 groupItem = (void *)LST_Head(&(*object)->groupList); 08060 08061 if (groupItem == NULL) { 08062 *e = 0; 08063 return DCM_EMPTYOBJECT; 08064 } 08065 (void) LST_Position(&(*object)->groupList, (void *)groupItem); 08066 (*object)->groupCtx = groupItem; 08067 08068 elementItem = (void *)LST_Head(&groupItem->elementList); 08069 (*object)->elementCtx = elementItem; 08070 if (elementItem == NULL) { 08071 return DCM_GetNextElement(callerObject, e); 08072 } 08073 08074 *e = &elementItem->element; 08075 return DCM_NORMAL; 08076 } |
|
Definition at line 8079 of file mri_dicom_hdr.c. References checkObject(), CONDITION, DCM_GetNextElement(), DCM_GETNEXTELEMENTCOMPLETE, DCM_NORMAL, DCM_OBJECT, PRV_ELEMENT_ITEM::element, PRV_GROUP_ITEM::elementList, LST_Head(), LST_Next(), LST_Position(), and object.
08080 { 08081 PRIVATE_OBJECT** object; 08082 PRV_GROUP_ITEM* groupItem; 08083 PRV_ELEMENT_ITEM* elementItem; 08084 CONDITION cond; 08085 08086 object = (PRIVATE_OBJECT **) callerObject; 08087 cond = checkObject(object, "DCM_GetNextElement"); 08088 if (cond != DCM_NORMAL) 08089 return cond; 08090 08091 groupItem = (*object)->groupCtx; 08092 elementItem = (*object)->elementCtx; 08093 08094 if (elementItem != 0) { 08095 (void)LST_Position(&groupItem->elementList, (void *)elementItem); 08096 elementItem = (PRV_ELEMENT_ITEM*)LST_Next(&groupItem->elementList); 08097 } 08098 08099 if (elementItem == 0) { 08100 (void)LST_Position(&(*object)->groupList, (void *)groupItem); 08101 groupItem = (PRV_GROUP_ITEM*)LST_Next(&(*object)->groupList); 08102 if (groupItem != 0) { 08103 elementItem = (PRV_ELEMENT_ITEM*)LST_Head(&groupItem->elementList); 08104 } 08105 } 08106 08107 if (groupItem == 0) { 08108 *e = 0; 08109 return DCM_GETNEXTELEMENTCOMPLETE; 08110 } 08111 08112 (*object)->groupCtx = groupItem; 08113 (*object)->elementCtx = elementItem; 08114 08115 if (elementItem == 0) 08116 return DCM_GetNextElement(callerObject, e); 08117 08118 *e = &elementItem->element; 08119 return DCM_NORMAL; 08120 } |
|
Definition at line 2242 of file mri_dicom_hdr.c. References checkObject(), CONDITION, DCM_NORMAL, DCM_OBJECT, and object.
02243 { 02244 PRIVATE_OBJECT 02245 ** object; 02246 CONDITION 02247 cond; 02248 02249 object = (PRIVATE_OBJECT **) callerObject; 02250 cond = checkObject(object, "DCM_GetObjectSize"); 02251 if (cond != DCM_NORMAL) 02252 return cond; 02253 02254 *returnlength = (*object)->objectSize; 02255 return DCM_NORMAL; 02256 } |
|
Definition at line 7880 of file mri_dicom_hdr.c. References checkObject(), COND_PushCondition(), CONDITION, DCM_ELEMENT::d, DCM_ELEMENTNOTFOUND, DCM_Message(), DCM_NORMAL, DCM_OBJECT, DCM_TAG, DCM_TAG_ELEMENT, DCM_TAG_GROUP, PRV_ELEMENT_ITEM::element, locateElement(), LST_Head(), LST_Next(), LST_Position(), DCM_SEQUENCE_ITEM::object, object, PRIVATE_OBJECT::offset, and offset.
07882 { 07883 PRIVATE_OBJECT **obj, 07884 *sqObject; 07885 CONDITION cond; 07886 PRV_ELEMENT_ITEM *elementItem; 07887 LST_HEAD *lst; 07888 DCM_SEQUENCE_ITEM *sqItem; 07889 07890 obj = (PRIVATE_OBJECT **) object; 07891 cond = checkObject(obj, "DCM_PrintSequenceList"); 07892 if (cond != DCM_NORMAL) 07893 return cond; 07894 07895 elementItem = locateElement(obj, tag); 07896 07897 if (elementItem == NULL) 07898 return COND_PushCondition(DCM_ELEMENTNOTFOUND, 07899 DCM_Message(DCM_ELEMENTNOTFOUND), DCM_TAG_GROUP(tag), 07900 DCM_TAG_ELEMENT(tag), 07901 "DCM_PrintSequenceList"); 07902 07903 lst = elementItem->element.d.sq; 07904 sqItem = (void *)LST_Head(&lst); 07905 (void) LST_Position(&lst, (void *)sqItem); 07906 while (sqItem != NULL) { 07907 sqObject = (PRIVATE_OBJECT *) sqItem->object; 07908 if (sqObject->offset == offset) { 07909 *rtnObject = sqItem->object; 07910 return DCM_NORMAL; 07911 } 07912 sqItem = (void *)LST_Next(&lst); 07913 } 07914 return 0; 07915 } |
|
Definition at line 3139 of file mri_dicom_hdr.c. References checkObject(), COND_PushCondition(), CONDITION, CTNBOOLEAN, DCM_ELEMENT::d, DCM_ELEMENTNOTFOUND, DCM_Message(), DCM_NORMAL, DCM_OBJECT, DCM_ParseObject(), DCM_SQ, DCM_TAG, DCM_TAG_ELEMENT, DCM_TAG_GROUP, DCM_UNEXPECTEDREPRESENTATION, PRV_ELEMENT_ITEM::element, locateElement(), LST_Head(), DCM_SEQUENCE_ITEM::object, object, DCM_ELEMENT::representation, and top.
03140 { 03141 PRIVATE_OBJECT **obj; 03142 CONDITION cond; 03143 PRV_GROUP_ITEM *groupItem; 03144 PRV_ELEMENT_ITEM *elementItem; 03145 DCM_SEQUENCE_ITEM *seqItem; 03146 03147 CTNBOOLEAN found = FALSE; 03148 03149 obj = (PRIVATE_OBJECT **) object; 03150 cond = checkObject(obj, "DCM_GetSequenceElement"); 03151 if (cond != DCM_NORMAL) 03152 return cond; 03153 03154 elementItem = locateElement(obj, top); 03155 if (elementItem == NULL) { 03156 return COND_PushCondition(DCM_ELEMENTNOTFOUND, 03157 DCM_Message(DCM_ELEMENTNOTFOUND), 03158 DCM_TAG_GROUP(top), 03159 DCM_TAG_ELEMENT(top), 03160 "DCM_GetElementSequence"); 03161 } 03162 if (elementItem->element.representation != DCM_SQ) { 03163 return COND_PushCondition(DCM_UNEXPECTEDREPRESENTATION, 03164 DCM_Message(DCM_UNEXPECTEDREPRESENTATION), 03165 "DCM_GetSequenceElement", "sequence"); 03166 } 03167 seqItem = (void *)LST_Head(&elementItem->element.d.sq); 03168 cond = DCM_ParseObject(&seqItem->object, e, 1, NULL, 0, NULL); 03169 return cond; 03170 03171 #if 0 03172 return DCM_NORMAL; 03173 #endif 03174 } |
|
Definition at line 3076 of file mri_dicom_hdr.c. References checkObject(), COND_PushCondition(), CONDITION, CTNBOOLEAN, DCM_ELEMENT::d, DCM_ELEMENTNOTFOUND, DCM_Message(), DCM_NORMAL, DCM_OBJECT, DCM_TAG, DCM_TAG_ELEMENT, DCM_TAG_GROUP, PRV_ELEMENT_ITEM::element, PRV_GROUP_ITEM::elementList, PRV_GROUP_ITEM::group, LST_Head(), LST_Next(), LST_Position(), object, and DCM_ELEMENT::tag.
03077 { 03078 PRIVATE_OBJECT 03079 ** obj; 03080 CONDITION 03081 cond; 03082 PRV_GROUP_ITEM 03083 * groupItem; 03084 PRV_ELEMENT_ITEM 03085 * elementItem; 03086 CTNBOOLEAN 03087 found = FALSE; 03088 03089 obj = (PRIVATE_OBJECT **) object; 03090 cond = checkObject(obj, "DCM_GetSequenceList"); 03091 if (cond != DCM_NORMAL) 03092 return cond; 03093 03094 groupItem = (void *)LST_Head(&(*obj)->groupList); 03095 if (groupItem == NULL) 03096 return COND_PushCondition(DCM_ELEMENTNOTFOUND, 03097 DCM_Message(DCM_ELEMENTNOTFOUND), DCM_TAG_GROUP(tag), 03098 DCM_TAG_ELEMENT(tag), 03099 "DCM_GetSequenceList"); 03100 03101 (void) LST_Position(&(*obj)->groupList, (void *)groupItem); 03102 while (groupItem != NULL) { 03103 if (groupItem->group == DCM_TAG_GROUP(tag)) 03104 break; 03105 03106 groupItem = (void *)LST_Next(&(*obj)->groupList); 03107 } 03108 if (groupItem == NULL) 03109 return COND_PushCondition(DCM_ELEMENTNOTFOUND, 03110 DCM_Message(DCM_ELEMENTNOTFOUND), DCM_TAG_GROUP(tag), 03111 DCM_TAG_ELEMENT(tag), 03112 "DCM_GetSequenceList"); 03113 03114 elementItem = (void *)LST_Head(&groupItem->elementList); 03115 if (elementItem == NULL) 03116 return COND_PushCondition(DCM_ELEMENTNOTFOUND, 03117 DCM_Message(DCM_ELEMENTNOTFOUND), DCM_TAG_GROUP(tag), 03118 DCM_TAG_GROUP(tag), 03119 "DCM_GetSequenceTag"); 03120 03121 (void) LST_Position(&groupItem->elementList, (void *)elementItem); 03122 while (!found && (elementItem != NULL)) { 03123 if (elementItem->element.tag == tag) { 03124 *list = elementItem->element.d.sq; 03125 found = TRUE; 03126 } 03127 elementItem = (void *)LST_Next(&groupItem->elementList); 03128 } 03129 if (found) 03130 return DCM_NORMAL; 03131 else 03132 return COND_PushCondition(DCM_ELEMENTNOTFOUND, 03133 DCM_Message(DCM_ELEMENTNOTFOUND), DCM_TAG_GROUP(tag), 03134 DCM_TAG_ELEMENT(tag), 03135 "DCM_GetSequenceList"); 03136 } |
|
Definition at line 1782 of file mri_dicom_hdr.c. References AFMALL, COND_PopCondition(), CONDITION, DCM_ELEMENT::d, DCM_AT, DCM_CTX, DCM_DLM, DCM_FD, DCM_FL, DCM_GetElement(), DCM_IsString(), DCM_NORMAL, DCM_OB, DCM_OBJECT, DCM_OW, DCM_ParseObject(), DCM_RET, DCM_SL, DCM_SQ, DCM_SS, DCM_TAG, DCM_UL, DCM_UN, DCM_US, free, DCM_ELEMENT::length, malloc, DCM_ELEMENT::representation, and DCM_ELEMENT::tag.
01783 { 01784 DCM_ELEMENT e; 01785 CONDITION cond; 01786 char* s; 01787 char tmp[64] = ""; 01788 char b[64] = ""; 01789 01790 e.tag = tag; 01791 cond = DCM_GetElement(callerObject, tag, &e); 01792 if (cond != DCM_NORMAL) { 01793 COND_PopCondition(TRUE); 01794 return 0; 01795 } 01796 01797 if (DCM_IsString(e.representation)) { 01798 s = AFMALL( char, e.length + 1); 01799 e.d.string = s; 01800 cond = DCM_ParseObject(callerObject, &e, 1, 0, 0, 0); 01801 if (cond != DCM_NORMAL) { 01802 free(s); 01803 s = 0; 01804 } 01805 return s; 01806 } 01807 01808 if (e.representation == DCM_SQ) { 01809 return 0; 01810 } 01811 01812 if (e.length > sizeof(b)) 01813 return 0; 01814 01815 e.d.ot = b; 01816 cond = DCM_ParseObject(callerObject, &e, 1, 0, 0, 0); 01817 if (cond != DCM_NORMAL) { 01818 COND_PopCondition(TRUE); 01819 return 0; 01820 } 01821 01822 switch (e.representation) { 01823 case DCM_AT: 01824 case DCM_FD: 01825 case DCM_FL: 01826 strcpy(tmp, "<Unimplemented>"); 01827 break; 01828 case DCM_SL: 01829 sprintf(tmp, "%d", *e.d.sl); 01830 break; 01831 case DCM_SQ: 01832 strcpy(tmp, "<Unimplemented>"); 01833 break; 01834 case DCM_SS: 01835 sprintf(tmp, "%d", *e.d.ss); 01836 break; 01837 case DCM_UL: 01838 sprintf(tmp, "%d", *e.d.ul); 01839 break; 01840 case DCM_UN: 01841 strcpy(tmp, "<Unimplemented>"); 01842 break; 01843 case DCM_US: 01844 sprintf(tmp, "%d", *e.d.us); 01845 break; 01846 /*case DCM_UNKNOWN:*/ 01847 case DCM_RET: 01848 case DCM_CTX: 01849 case DCM_OB: 01850 case DCM_OW: 01851 case DCM_DLM: 01852 default: 01853 strcpy(tmp, "<Unimplemented>"); 01854 break; 01855 } 01856 01857 s = (char*) malloc(strlen(tmp) + 1); 01858 strcpy(s, tmp); 01859 01860 return s; 01861 } |
|
Definition at line 10384 of file mri_dicom_hdr.c. References DCM_NORMAL, DIM_OF, and i.
10386 { 10387 int i; 10388 10389 for (i = 0; i < (int) DIM_OF(groupTable); i++) { 10390 if ((group == 0xffff) || (group == groupTable[i].group)) { 10391 callback(groupTable[i].group, groupTable[i].description, ctx); 10392 } 10393 } 10394 return DCM_NORMAL; 10395 } |
|
Definition at line 3488 of file mri_dicom_hdr.c. References checkObject(), CONDITION, CTNBOOLEAN, DCM_NORMAL, DCM_OBJECT, PRV_GROUP_ITEM::group, LST_Head(), LST_Next(), LST_Position(), object, and U16.
03489 { 03490 PRIVATE_OBJECT **object; 03491 PRV_GROUP_ITEM * item; 03492 CONDITION cond; 03493 CTNBOOLEAN tooFar = FALSE; 03494 03495 object = (PRIVATE_OBJECT **) o1; 03496 cond = checkObject(object, "DCM_CompareAttributes"); 03497 if (cond != DCM_NORMAL) 03498 return FALSE; 03499 03500 03501 item = (void *)LST_Head(&(*object)->groupList); 03502 if (item != NULL) 03503 (void) LST_Position(&(*object)->groupList, (void *)item); 03504 03505 while (item != NULL && !tooFar) { 03506 if (item->group == group) { 03507 return TRUE; 03508 } else if (item->group > group) { 03509 tooFar = TRUE; 03510 } else { 03511 item = (void *)LST_Next(&(*object)->groupList); 03512 } 03513 } 03514 return FALSE; 03515 } |
|
Definition at line 2203 of file mri_dicom_hdr.c. References COND_PushCondition(), DCM_ILLEGALOPTION, DCM_Message(), DCM_OBJECT, DCM_ORDERMASK, and readFile().
02205 { 02206 #ifdef DEBUG 02207 if (debug) 02208 (void) fprintf(stderr, "DCM_ImportStream, %ld bytes\n", length); 02209 #endif 02210 02211 if ((opt & DCM_ORDERMASK) == 0) 02212 return COND_PushCondition(DCM_ILLEGALOPTION, 02213 DCM_Message(DCM_ILLEGALOPTION), "Byte order", 02214 "DCM_ImportStream"); 02215 02216 return readFile("", buf, -1, length, 0, 0, opt, callerObject, NULL, NULL, 02217 NULL, NULL, NULL); 02218 } |
|
Definition at line 10611 of file mri_dicom_hdr.c. References CTNBOOLEAN, DCM_AE, DCM_AS, DCM_AT, DCM_CS, DCM_CTX, DCM_DA, DCM_DD, DCM_DS, DCM_DT, DCM_FD, DCM_FL, DCM_IS, DCM_LO, DCM_LT, DCM_OB, DCM_OT, DCM_OW, DCM_PN, DCM_RET, DCM_SH, DCM_SL, DCM_SQ, DCM_SS, DCM_ST, DCM_TM, DCM_UI, DCM_UL, DCM_US, DCM_UT, and DCM_VALUEREPRESENTATION.
10612 { 10613 CTNBOOLEAN 10614 flag = FALSE; 10615 10616 switch (representation) { 10617 case DCM_AE: /* Application Entity */ 10618 case DCM_AS: /* Age string */ 10619 flag = TRUE; 10620 break; 10621 case DCM_AT: /* Attribute tag */ 10622 break; 10623 case DCM_CS: /* Control string */ 10624 case DCM_DA: /* Date */ 10625 flag = TRUE; 10626 break; 10627 case DCM_DD: /* Data set */ 10628 break; 10629 case DCM_DS: /* Decimal string */ 10630 case DCM_DT: /* Old date/time */ 10631 flag = TRUE; 10632 break; 10633 case DCM_FD: /* Floating double */ 10634 case DCM_FL: /* Float */ 10635 break; 10636 case DCM_IS: /* Integer string */ 10637 case DCM_LO: /* Long string */ 10638 case DCM_LT: /* Long text */ 10639 flag = TRUE; 10640 break; 10641 case DCM_OB: /* Other binary value (byte) */ 10642 case DCM_OT: /* Other binary value */ 10643 case DCM_OW: /* Other binary value (word) */ 10644 break; 10645 case DCM_SH: /* Short string */ 10646 flag = TRUE; 10647 break; 10648 case DCM_SL: /* Signed long */ 10649 case DCM_SQ: /* Sequence of items */ 10650 case DCM_SS: /* Signed short */ 10651 break; 10652 case DCM_ST: /* Short text */ 10653 case DCM_TM: /* Time */ 10654 flag = TRUE; 10655 break; 10656 case DCM_UL: /* Unsigned long */ 10657 case DCM_US: /* Unsigned short */ 10658 /*case DCM_UNKNOWN:*/ /* Unknown/unspecified */ 10659 case DCM_RET: /* Retired */ 10660 case DCM_CTX: /* Context sensitive */ 10661 break; 10662 case DCM_PN: /* Person Name */ 10663 case DCM_UI: /* Unique identifier (UID) */ 10664 case DCM_UT: /* Unlimited Text */ 10665 flag = TRUE; 10666 break; 10667 }; 10668 return flag; 10669 } |
|
Definition at line 10539 of file mri_dicom_hdr.c. References c, COND_PushCondition(), CTN_MALLOC, DCM_LISTFAILURE, DCM_MALLOCFAILURE, DCM_Message(), DCM_NORMAL, LST_Head(), LST_Next(), LST_Position(), offset, and p.
10540 { 10541 GENERIC 10542 * g; 10543 char 10544 *c, 10545 *p; 10546 long 10547 length; 10548 10549 *string = NULL; 10550 if (list == NULL) 10551 return DCM_NORMAL; 10552 10553 g = (void *)LST_Head(&list); 10554 if (g == NULL) 10555 return DCM_NORMAL; 10556 10557 (void) LST_Position(&list, (void *)g); 10558 10559 length = 0; 10560 while (g != NULL) { 10561 c = ((char *) g) + offset; 10562 length += strlen(c) + 1; 10563 g = (void *)LST_Next(&list); 10564 } 10565 10566 p = CTN_MALLOC(length); 10567 if (p == NULL) 10568 return COND_PushCondition(DCM_MALLOCFAILURE, 10569 DCM_Message(DCM_MALLOCFAILURE), length, "DCM_ListToString"); 10570 10571 *string = p; 10572 g = (void *)LST_Head(&list); 10573 if (g == NULL) 10574 return COND_PushCondition(DCM_LISTFAILURE, DCM_Message(DCM_LISTFAILURE), 10575 "DCM_ListToString"); 10576 (void) LST_Position(&list, (void *)g); 10577 10578 length = 0; 10579 while (g != NULL) { 10580 c = ((char *) g) + offset; 10581 length = strlen(c); 10582 (void) memcpy(p, c, length); 10583 p += length; 10584 *p++ = '\\'; 10585 g = (void *)LST_Next(&list); 10586 } 10587 *--p = '\0'; 10588 return DCM_NORMAL; 10589 } |
|
Definition at line 10256 of file mri_dicom_hdr.c. References COND_PushCondition(), DCM_Message(), DCM_NORMAL, DCM_TAG_ELEMENT, DCM_TAG_GROUP, DCM_UL, DCM_UN, DCM_UNRECOGNIZEDELEMENT, DCM_UNRECOGNIZEDGROUP, DCM_ELEMENT::description, GROUPPTR::dict, DCMDICT::englishDescription, GROUPPTR::entries, GROUPPTR::group, p, DCMDICT::representation, DCM_ELEMENT::representation, DCMDICT::tag, and DCM_ELEMENT::tag.
10257 { 10258 int 10259 found; 10260 unsigned long 10261 index, 10262 entries; 10263 GROUPPTR 10264 * p; 10265 DCMDICT 10266 * dictionaryPtr; 10267 10268 element->representation = DCM_UN; 10269 (void) strcpy(element->description, ""); 10270 10271 for (index = 0, p = NULL; 10272 index < sizeof(group_dictionary) / sizeof(group_dictionary[0]) && p == NULL; 10273 index++) 10274 if (DCM_TAG_GROUP(element->tag) == group_dictionary[index].group) 10275 p = &group_dictionary[index]; 10276 10277 if (p == NULL) { 10278 if (DCM_TAG_ELEMENT(element->tag) == 0x0000) { 10279 element->representation = DCM_UL; 10280 (void) strcpy(element->description, "Unknown group length"); 10281 return DCM_NORMAL; 10282 } 10283 return COND_PushCondition(DCM_UNRECOGNIZEDGROUP, 10284 DCM_Message(DCM_UNRECOGNIZEDGROUP), 10285 DCM_TAG_GROUP(element->tag), 10286 "DCM_LookupElement"); 10287 } 10288 entries = p->entries; 10289 dictionaryPtr = p->dict; 10290 10291 for (found = 0; !found && entries > 0; entries--) 10292 if (element->tag == dictionaryPtr->tag) 10293 found++; 10294 else 10295 dictionaryPtr++; 10296 10297 if (!found) 10298 return COND_PushCondition(DCM_UNRECOGNIZEDELEMENT, 10299 DCM_Message(DCM_UNRECOGNIZEDELEMENT), 10300 DCM_TAG_GROUP(element->tag), 10301 DCM_TAG_ELEMENT(element->tag), 10302 "DCM_LookupElement"); 10303 10304 10305 element->representation = dictionaryPtr->representation; 10306 (void) strcpy(element->description, dictionaryPtr->englishDescription); 10307 return DCM_NORMAL; 10308 } |
|
Definition at line 7998 of file mri_dicom_hdr.c. References COND_PushCondition(), copySequence(), DCM_AddElement(), DCM_MALLOCFAILURE, DCM_Message(), DCM_NORMAL, DCM_NULLADDRESS, DCM_OBJECT, DCM_OBJECTCREATEFAILED, DCM_SQ, PRV_ELEMENT_ITEM::element, PRV_GROUP_ITEM::elementList, LST_Head(), LST_Next(), LST_Position(), and DCM_ELEMENT::representation.
07999 { 08000 PRIVATE_OBJECT **srcObj; 08001 PRIVATE_OBJECT *dstObj; 08002 PRV_GROUP_ITEM *groupItem; 08003 PRV_ELEMENT_ITEM *elementItem; 08004 08005 if (src == NULL) { 08006 (void) COND_PushCondition(DCM_NULLADDRESS, 08007 DCM_Message(DCM_NULLADDRESS), "DCM_MergeObject"); 08008 return COND_PushCondition(DCM_OBJECTCREATEFAILED, 08009 DCM_Message(DCM_OBJECTCREATEFAILED), "DCM_MergeObject"); 08010 } 08011 dstObj = *((PRIVATE_OBJECT **)dst); 08012 if (dstObj == NULL) { 08013 (void) COND_PushCondition(DCM_MALLOCFAILURE, 08014 DCM_Message(DCM_MALLOCFAILURE), sizeof(PRIVATE_OBJECT), 08015 "DCM_MergeObject"); 08016 *dst = NULL; 08017 return COND_PushCondition(DCM_OBJECTCREATEFAILED, 08018 DCM_Message(DCM_OBJECTCREATEFAILED), "DCM_MergeObject"); 08019 } 08020 srcObj = (PRIVATE_OBJECT **) src; 08021 08022 groupItem = (void *)LST_Head(&(*srcObj)->groupList); 08023 if (groupItem != NULL) 08024 (void) LST_Position(&(*srcObj)->groupList, (void *)groupItem); 08025 08026 while (groupItem != NULL) { 08027 elementItem = (void *)LST_Head(&groupItem->elementList); 08028 if (elementItem != NULL) 08029 (void) LST_Position(&groupItem->elementList, (void *)elementItem); 08030 while (elementItem != NULL) { 08031 if (elementItem->element.representation == DCM_SQ) { 08032 copySequence(&dstObj, &elementItem->element); 08033 } else { 08034 DCM_AddElement((DCM_OBJECT **) & dstObj, &elementItem->element); 08035 } 08036 elementItem = (void *)LST_Next(&groupItem->elementList); 08037 } 08038 groupItem = (void *)LST_Next(&(*srcObj)->groupList); 08039 } 08040 08041 /**dst = (DCM_OBJECT *) dstObj;*/ 08042 return DCM_NORMAL; 08043 } |
|
Definition at line 8321 of file mri_dicom_hdr.c. References vector::cond, CONDITION, and vector::message.
08322 { 08323 int 08324 index; 08325 08326 for (index = 0; messageVector[index].message != NULL; index++) 08327 if (condition == messageVector[index].cond) 08328 return messageVector[index].message; 08329 08330 return NULL; 08331 } |
|
Definition at line 2827 of file mri_dicom_hdr.c. References c, checkObject(), COND_PopCondition(), CONDITION, DCM_ELEMENT::d, DCM_AddElement(), DCM_IsString(), DCM_NORMAL, DCM_OBJECT, DCM_RemoveElement(), DCM_FLAGGED_ELEMENT::e, DCM_FLAGGED_ELEMENT::flag, DCM_FLAGGED_ELEMENT::flagAddress, DCM_ELEMENT::length, object, DCM_ELEMENT::representation, and DCM_ELEMENT::tag.
02830 { 02831 PRIVATE_OBJECT 02832 ** object; 02833 CONDITION 02834 cond; 02835 DCM_ELEMENT 02836 e; 02837 int 02838 c = 0; 02839 02840 object = (PRIVATE_OBJECT **) callerObject; 02841 cond = checkObject(object, "DCM_ModifyElement"); 02842 if (cond != DCM_NORMAL) 02843 return cond; 02844 02845 while (count-- > 0) { 02846 cond = DCM_RemoveElement(callerObject, vector->tag); 02847 if (cond != DCM_NORMAL) 02848 (void) COND_PopCondition(FALSE); 02849 02850 e = *vector; 02851 if (DCM_IsString(e.representation)) 02852 e.length = strlen(e.d.string); 02853 02854 cond = DCM_AddElement(callerObject, &e); 02855 if (cond != DCM_NORMAL) 02856 return cond; 02857 02858 c++; 02859 vector++; 02860 } 02861 02862 while (flaggedCount-- > 0) { 02863 if ((*(flaggedVector->flagAddress) & flaggedVector->flag) != 0) { 02864 cond = DCM_RemoveElement(callerObject, flaggedVector->e.tag); 02865 if (cond != DCM_NORMAL) 02866 (void) COND_PopCondition(FALSE); 02867 02868 e = flaggedVector->e; 02869 if (DCM_IsString(e.representation)) 02870 e.length = strlen(e.d.string); 02871 cond = DCM_AddElement(callerObject, &e); 02872 if (cond != DCM_NORMAL) 02873 return cond; 02874 c++; 02875 } 02876 flaggedVector++; 02877 } 02878 02879 if (updateCount != NULL) 02880 *updateCount = c; 02881 return DCM_NORMAL; 02882 } |
|
Definition at line 1001 of file mri_dicom_hdr.c. References close(), COND_PushCondition(), CONDITION, CTNBOOLEAN, DCM_DumpElements(), DCM_FILEACCESSERROR, DCM_FILEFORMATMASK, DCM_FILENAMEMASK, DCM_FILEOPENFAILED, DCM_ILLEGALOPTION, DCM_LENGTHTOENDMASK, DCM_Message(), DCM_NORMAL, DCM_OBJECT, DCM_ORDERMASK, DCM_TRYFILENAMECHANGE, DCM_USELENGTHTOEND, ENTRY, fd, fileSize(), name, O_BINARY, readFile(), readFile1(), readLengthToEnd(), remapFileName(), RETURN, rwc_fd, and U32.
01002 { 01003 CONDITION cond; 01004 int fd; 01005 off_t fileOffset = 0; 01006 U32 lengthToEnd; 01007 U32 size; 01008 CTNBOOLEAN 01009 remainFileOpen = FALSE; /* Leave file open after parse ? */ 01010 01011 ENTRY("DCM_OpenFile") ; 01012 01013 if ((opt & (DCM_ORDERMASK | DCM_FILEFORMATMASK)) == 0) 01014 RETURN(COND_PushCondition(DCM_ILLEGALOPTION, 01015 DCM_Message(DCM_ILLEGALOPTION), "Byte order", 01016 "DCM_OpenFile")); 01017 01018 #ifdef _MSC_VER 01019 fd = open(name, O_RDONLY | O_BINARY); 01020 #else 01021 rwc_fd = fd = open(name, O_RDONLY); 01022 #endif 01023 if ((fd < 0) && ((opt & DCM_FILENAMEMASK) == DCM_TRYFILENAMECHANGE)) { 01024 char mapName[1024]; 01025 remapFileName(name, mapName); 01026 #ifdef _MSC_VER 01027 fd = open(mapName, O_RDONLY | O_BINARY); 01028 #else 01029 fd = open(mapName, O_RDONLY); 01030 if (fd < 0) { 01031 strcat(mapName, "."); 01032 fd = open(mapName, O_RDONLY); 01033 } 01034 #endif 01035 } 01036 if (fd < 0) { 01037 char msg[1024] ; 01038 sprintf(msg,"DCM_OpenFile open(%s) fails",name) ; 01039 perror(msg) ; 01040 RETURN(COND_PushCondition(DCM_FILEOPENFAILED, 01041 DCM_Message(DCM_FILEOPENFAILED), name, 01042 "DCM_OpenFile")); 01043 } 01044 size = fileSize(fd); 01045 if (size <= 0) 01046 RETURN(DCM_FILEACCESSERROR); 01047 01048 if ((opt & DCM_LENGTHTOENDMASK) == DCM_USELENGTHTOEND) { 01049 cond = readLengthToEnd(fd, name, 01050 opt & (~DCM_LENGTHTOENDMASK), &lengthToEnd); 01051 if (cond != DCM_NORMAL) { 01052 (void) close(fd); rwc_fd = -1 ; 01053 RETURN(COND_PushCondition(DCM_FILEOPENFAILED, 01054 DCM_Message(DCM_FILEOPENFAILED), name, "DCM_OpenFile")); 01055 } 01056 size = lengthToEnd; 01057 fileOffset = 24; 01058 (void) lseek(fd, 24, SEEK_SET); 01059 } 01060 #ifdef OLDSMM 01061 cond = readFile(name, NULL, fd, size, 0, 0, opt, callerObject, NULL, 01062 &remainFileOpen, NULL, NULL, NULL); 01063 #endif 01064 cond = readFile1(name, NULL, fd, size, &fileOffset, 0, opt, NULL, 01065 callerObject, NULL, &remainFileOpen, NULL, NULL, NULL); 01066 if ((cond != DCM_NORMAL) || !remainFileOpen){ 01067 (void) close(fd); rwc_fd = -1 ; 01068 } 01069 if (cond != DCM_NORMAL) { 01070 if (debug) 01071 DCM_DumpElements(callerObject, 1); 01072 RETURN(COND_PushCondition(DCM_FILEOPENFAILED, 01073 DCM_Message(DCM_FILEOPENFAILED), name, "DCM_OpenFile")); 01074 } else 01075 RETURN(DCM_NORMAL); 01076 } |
|
Definition at line 2917 of file mri_dicom_hdr.c. References c, checkObject(), COND_PopCondition(), CONDITION, DCM_ELEMENT::d, DCM_GetElementValue(), DCM_IsString(), DCM_NORMAL, DCM_OBJECT, DCM_FLAGGED_ELEMENT::e, DCM_FLAGGED_ELEMENT::flag, DCM_FLAGGED_ELEMENT::flagAddress, l, object, p, DCM_ELEMENT::representation, and U32.
02920 { 02921 PRIVATE_OBJECT 02922 ** object; 02923 CONDITION 02924 cond; 02925 void 02926 *ctx; 02927 U32 02928 l; 02929 int 02930 c = 0; 02931 char 02932 *p; 02933 02934 object = (PRIVATE_OBJECT **) callerObject; 02935 cond = checkObject(object, "DCM_ParseObject"); 02936 if (cond != DCM_NORMAL) 02937 return cond; 02938 02939 while (count-- > 0) { 02940 ctx = NULL; 02941 cond = DCM_GetElementValue(callerObject, vector, &l, &ctx); 02942 if (cond != DCM_NORMAL) 02943 return cond; 02944 if (DCM_IsString(vector->representation)) { 02945 vector->d.string[l] = '\0'; 02946 p = vector->d.string + l - 1; 02947 while (p >= vector->d.string && (*p == ' ')) 02948 *p-- = '\0'; 02949 } 02950 c++; 02951 vector++; 02952 } 02953 02954 while (flagCount-- > 0) { 02955 ctx = NULL; 02956 cond = DCM_GetElementValue(callerObject, &flaggedVector->e, &l, &ctx); 02957 if (cond != DCM_NORMAL) { 02958 (void) COND_PopCondition(FALSE); 02959 } else { 02960 c++; 02961 if (DCM_IsString(flaggedVector->e.representation)) { 02962 flaggedVector->e.d.string[l] = '\0'; 02963 p = flaggedVector->e.d.string + l - 1; 02964 while (p >= flaggedVector->e.d.string && (*p == ' ')) 02965 *p-- = '\0'; 02966 } 02967 *(flaggedVector->flagAddress) |= flaggedVector->flag; 02968 } 02969 flaggedVector++; 02970 } 02971 02972 if (parseCount != NULL) 02973 *parseCount = c; 02974 return DCM_NORMAL; 02975 } |
|
Definition at line 7844 of file mri_dicom_hdr.c. References checkObject(), COND_PushCondition(), CONDITION, DCM_ELEMENT::d, DCM_ELEMENTNOTFOUND, DCM_Message(), DCM_NORMAL, DCM_OBJECT, DCM_TAG, DCM_TAG_ELEMENT, DCM_TAG_GROUP, PRV_ELEMENT_ITEM::element, locateElement(), LST_Head(), LST_Next(), LST_Position(), DCM_SEQUENCE_ITEM::object, object, PRIVATE_OBJECT::objectSize, PRIVATE_OBJECT::offset, PRIVATE_OBJECT::pixelOffset, and RWC_printf().
07845 { 07846 PRIVATE_OBJECT **obj, 07847 *sqObject; 07848 CONDITION cond; 07849 PRV_ELEMENT_ITEM *elementItem; 07850 LST_HEAD *lst; 07851 DCM_SEQUENCE_ITEM *sqItem; 07852 07853 obj = (PRIVATE_OBJECT **) object; 07854 cond = checkObject(obj, "DCM_PrintSequenceList"); 07855 if (cond != DCM_NORMAL) 07856 return cond; 07857 07858 elementItem = locateElement(obj, tag); 07859 07860 if (elementItem == NULL) 07861 return COND_PushCondition(DCM_ELEMENTNOTFOUND, 07862 DCM_Message(DCM_ELEMENTNOTFOUND), DCM_TAG_GROUP(tag), 07863 DCM_TAG_ELEMENT(tag), 07864 "DCM_PrintSequenceList"); 07865 07866 lst = elementItem->element.d.sq; 07867 sqItem = (void *)LST_Head(&lst); 07868 (void) LST_Position(&lst, (void *)sqItem); 07869 while (sqItem != NULL) { 07870 sqObject = (PRIVATE_OBJECT *) sqItem->object; 07871 RWC_printf("size: %6d offset: %6d, pixel offset: %6d\n", 07872 sqObject->objectSize, 07873 sqObject->offset, 07874 sqObject->pixelOffset); 07875 sqItem = (void *)LST_Next(&lst); 07876 } 07877 } |
|
Definition at line 1079 of file mri_dicom_hdr.c. References COND_PushCondition(), CONDITION, CTNBOOLEAN, DCM_FILEFORMATMASK, DCM_ILLEGALOPTION, DCM_Message(), DCM_NORMAL, DCM_OBJECT, DCM_ORDERMASK, DCM_READSTREAMFAILED, fd, offset, and readFile1().
01083 { 01084 CONDITION cond; 01085 int fd = -1; 01086 CTNBOOLEAN 01087 remainFileOpen = FALSE; /* Leave file open after parse ? */ 01088 off_t fileOffset = 0; 01089 01090 if ((opt & (DCM_ORDERMASK | DCM_FILEFORMATMASK)) == 0) 01091 return COND_PushCondition(DCM_ILLEGALOPTION, 01092 DCM_Message(DCM_ILLEGALOPTION), "Byte order", 01093 "DCM_ReadStream"); 01094 01095 cond = readFile1("", NULL, fd, size, &fileOffset, 0, opt, NULL, 01096 callerObject, NULL, &remainFileOpen, ctx, rd, sk); 01097 if (cond != DCM_NORMAL) 01098 return COND_PushCondition(DCM_READSTREAMFAILED, 01099 DCM_Message(DCM_READSTREAMFAILED), "DCM_ReadStream"); 01100 else 01101 return DCM_NORMAL; 01102 } |
|
Definition at line 1511 of file mri_dicom_hdr.c. References PRV_GROUP_ITEM::baseLength, checkObject(), COND_PushCondition(), CONDITION, CTN_FREE, CTNBOOLEAN, DCM_ELEMENT::d, DCM_ELEMENTNOTFOUND, DCM_Message(), DCM_NORMAL, DCM_OB, DCM_OBJECT, DCM_OW, DCM_SQ, DCM_TAG, DCM_TAG_ELEMENT, DCM_TAG_GROUP, DCM_UNSPECIFIEDLENGTH, PRV_ELEMENT_ITEM::element, PRV_GROUP_ITEM::elementList, PRV_GROUP_ITEM::group, PRV_GROUP_ITEM::longVRAttributes, LST_Head(), LST_K_AFTER, LST_Next(), LST_Position(), LST_Remove(), object, PRV_ELEMENT_ITEM::paddedDataLength, DCM_ELEMENT::representation, and DCM_ELEMENT::tag.
01512 { 01513 PRIVATE_OBJECT 01514 ** object; 01515 PRV_GROUP_ITEM 01516 * groupItem; 01517 PRV_ELEMENT_ITEM 01518 * elementItem, 01519 *groupLengthItem; 01520 CONDITION 01521 cond; 01522 CTNBOOLEAN 01523 flag; 01524 unsigned short 01525 group, 01526 element; 01527 01528 object = (PRIVATE_OBJECT **) callerObject; 01529 cond = checkObject(object, "DCM_RemoveElement"); 01530 if (cond != DCM_NORMAL) 01531 return cond; 01532 01533 group = DCM_TAG_GROUP(tag); 01534 element = DCM_TAG_ELEMENT(tag); 01535 01536 groupItem = (void *)LST_Head(&((*object)->groupList)); 01537 if (groupItem == NULL) 01538 return COND_PushCondition(DCM_ELEMENTNOTFOUND, 01539 DCM_Message(DCM_ELEMENTNOTFOUND), group, element, 01540 "DCM_RemoveElement"); 01541 01542 (void) LST_Position(&((*object)->groupList), (void *)groupItem); 01543 01544 flag = FALSE; 01545 while ((groupItem != NULL) && (flag == FALSE)) { 01546 if (groupItem->group == group) 01547 flag = TRUE; 01548 else 01549 groupItem = (void *)LST_Next(&(*object)->groupList); 01550 } 01551 if (flag == FALSE) 01552 return COND_PushCondition(DCM_ELEMENTNOTFOUND, 01553 DCM_Message(DCM_ELEMENTNOTFOUND), group, element, 01554 "DCM_RemoveElement"); 01555 01556 elementItem = (void *)LST_Head(&groupItem->elementList); 01557 if (elementItem == NULL) 01558 return COND_PushCondition(DCM_ELEMENTNOTFOUND, 01559 DCM_Message(DCM_ELEMENTNOTFOUND), group, element, 01560 "DCM_RemoveElement"); 01561 01562 (void) LST_Position(&groupItem->elementList, (void *)elementItem); 01563 01564 groupLengthItem = elementItem; 01565 if (DCM_TAG_ELEMENT(groupLengthItem->element.tag) != 0x0000) 01566 groupLengthItem = NULL; 01567 01568 01569 flag = FALSE; 01570 while ((elementItem != NULL) && (flag == FALSE)) { 01571 if (DCM_TAG_ELEMENT(elementItem->element.tag) == element) 01572 flag = TRUE; 01573 else 01574 elementItem = (void *)LST_Next(&groupItem->elementList); 01575 } 01576 01577 if (flag == FALSE) 01578 return COND_PushCondition(DCM_ELEMENTNOTFOUND, 01579 DCM_Message(DCM_ELEMENTNOTFOUND), group, element, 01580 "DCM_RemoveElement"); 01581 01582 if (groupItem->baseLength != DCM_UNSPECIFIEDLENGTH) { 01583 groupItem->baseLength -= elementItem->paddedDataLength + 2 + 2 + 4; 01584 if (groupLengthItem != NULL) { 01585 *groupLengthItem->element.d.ul = groupItem->baseLength; 01586 } 01587 } 01588 if ((*object)->objectSize != DCM_UNSPECIFIEDLENGTH) 01589 (*object)->objectSize -= elementItem->paddedDataLength + 2 + 2 + 4; 01590 if (elementItem->element.representation == DCM_OW || 01591 elementItem->element.representation == DCM_OB || 01592 elementItem->element.representation == DCM_SQ) { 01593 groupItem->longVRAttributes--; 01594 (*object)->longVRAttributes--; 01595 } 01596 (void) LST_Remove(&(groupItem->elementList), LST_K_AFTER); 01597 CTN_FREE(elementItem); 01598 return DCM_NORMAL; 01599 } |
|
Definition at line 3002 of file mri_dicom_hdr.c. References checkObject(), COND_PushCondition(), CONDITION, CTN_FREE, CTNBOOLEAN, DCM_GROUPNOTFOUND, DCM_LISTFAILURE, DCM_Message(), DCM_NORMAL, DCM_OBJECT, PRV_GROUP_ITEM::elementList, PRV_GROUP_ITEM::group, LST_Destroy(), LST_Head(), LST_K_AFTER, LST_Next(), LST_NORMAL, LST_Pop(), LST_Position(), LST_Remove(), and object.
03003 { 03004 PRIVATE_OBJECT 03005 ** object; 03006 CONDITION 03007 cond; 03008 PRV_GROUP_ITEM 03009 * groupItem; 03010 PRV_ELEMENT_ITEM 03011 * elementItem; 03012 CTNBOOLEAN 03013 found = FALSE; 03014 03015 object = (PRIVATE_OBJECT **) callerObject; 03016 cond = checkObject(object, "DCM_RemoveGroup"); 03017 if (cond != DCM_NORMAL) 03018 return cond; 03019 03020 groupItem = (void *)LST_Head(&(*object)->groupList); 03021 if (groupItem == NULL) 03022 return COND_PushCondition(DCM_GROUPNOTFOUND, 03023 DCM_Message(DCM_GROUPNOTFOUND), (int) group, "DCM_RemoveGroup"); 03024 03025 (void) LST_Position(&(*object)->groupList, (void *)groupItem); 03026 03027 while (!found && (groupItem != NULL)) { 03028 if (groupItem->group == group) 03029 found = TRUE; 03030 else 03031 groupItem = (void *)LST_Next(&(*object)->groupList); 03032 } 03033 if (groupItem == NULL) 03034 return COND_PushCondition(DCM_GROUPNOTFOUND, 03035 DCM_Message(DCM_GROUPNOTFOUND), (int) group, "DCM_RemoveGroup"); 03036 03037 03038 while ((elementItem = (void *)LST_Pop(&groupItem->elementList)) != NULL) 03039 CTN_FREE(elementItem); 03040 03041 groupItem = (void *)LST_Remove(&(*object)->groupList, LST_K_AFTER); 03042 cond = LST_Destroy(&groupItem->elementList); 03043 if (cond != LST_NORMAL) 03044 return COND_PushCondition(DCM_LISTFAILURE, 03045 DCM_Message(DCM_LISTFAILURE), "DCM_RemoveGroup"); 03046 CTN_FREE(groupItem); 03047 return DCM_NORMAL; 03048 } |
|
Definition at line 2104 of file mri_dicom_hdr.c. References checkObject(), CONDITION, copyData(), CTNBOOLEAN, DCM_IsString(), DCM_NORMAL, DCM_OBJECT, PRV_ELEMENT_ITEM::element, PRV_GROUP_ITEM::elementList, i, l, LST_Head(), LST_Next(), LST_Position(), object, p, DCM_ELEMENT::representation, DCM_ELEMENT::tag, and U32.
02108 { 02109 PRIVATE_OBJECT 02110 ** object; 02111 PRV_GROUP_ITEM 02112 * groupItem; 02113 PRV_ELEMENT_ITEM 02114 * elementItem; 02115 CONDITION 02116 cond; 02117 CTNBOOLEAN 02118 done = FALSE; 02119 DCM_ELEMENT 02120 e; 02121 int 02122 i; 02123 CTNBOOLEAN 02124 found; 02125 U32 02126 l; 02127 char 02128 *p; 02129 02130 object = (PRIVATE_OBJECT **) callerObject; 02131 cond = checkObject(object, "DCM_ScanParseObject"); 02132 if (cond != DCM_NORMAL) 02133 return cond; 02134 02135 groupItem = (void *)LST_Head(&((*object)->groupList)); 02136 (void) LST_Position(&((*object)->groupList), (void *)groupItem); 02137 while (groupItem != NULL && !done) { 02138 elementItem = (void *)LST_Head(&groupItem->elementList); 02139 (void) LST_Position(&groupItem->elementList, (void *)elementItem); 02140 while (elementItem != NULL && !done) { 02141 for (found = FALSE, i = 0; !found && i < vectorLength; i++) { 02142 if (elementItem->element.tag == elementVector[i].e.tag) { 02143 found = TRUE; 02144 (void)copyData(object,elementItem,&elementVector[i].e, &l); 02145 *elementVector[i].flagAddress |= elementVector[i].flag; 02146 02147 if (DCM_IsString(elementVector[i].e.representation)) { 02148 elementVector[i].e.d.string[l] = '\0'; 02149 p = elementVector[i].e.d.string + l - 1; 02150 while (p >= elementVector[i].e.d.string && (*p == ' ')) 02151 *p-- = '\0'; 02152 } 02153 } 02154 } 02155 if (!found) { 02156 e = elementItem->element; 02157 cond = callback(&e, ctx); 02158 if (cond != DCM_NORMAL) 02159 done = TRUE; 02160 } 02161 elementItem = (void *)LST_Next(&groupItem->elementList); 02162 } 02163 groupItem = (void *)LST_Next(&((*object)->groupList)); 02164 } 02165 return DCM_NORMAL; 02166 } |
|
Definition at line 2747 of file mri_dicom_hdr.c. References checkObject(), close(), COND_PushCondition(), CONDITION, DCM_ExportStream(), DCM_FILECREATEFAILED, DCM_Message(), DCM_NORMAL, DCM_OBJECT, fd, file, O_BINARY, O_WRONLY, object, strerror(), and writeFile().
02748 { 02749 PRIVATE_OBJECT 02750 ** object; 02751 int 02752 fd; 02753 unsigned char 02754 buf[2048]; 02755 CONDITION 02756 cond; 02757 02758 object = (PRIVATE_OBJECT **) callerObject; 02759 cond = checkObject(object, "DCM_WriteFile"); 02760 if (cond != DCM_NORMAL) 02761 return cond; 02762 #ifdef MACOS 02763 fd = open(file, O_WRONLY | O_CREAT | O_TRUNC); 02764 #elif _MSC_VER 02765 fd = _open(file, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 02766 _S_IREAD | _S_IWRITE); 02767 #else 02768 fd = open(file, O_WRONLY | O_CREAT | O_TRUNC, 0666); 02769 #endif 02770 if (fd < 0) { 02771 return COND_PushCondition(DCM_FILECREATEFAILED, 02772 DCM_Message(DCM_FILECREATEFAILED), file, strerror(errno), 02773 "DCM_WriteFile"); 02774 } 02775 cond = DCM_ExportStream(callerObject, opt, buf, 02776 (unsigned long) sizeof(buf), writeFile, &fd); 02777 if (cond != DCM_NORMAL) 02778 return cond; 02779 02780 (void) close(fd); 02781 return DCM_NORMAL; 02782 } |
|
Definition at line 7566 of file mri_dicom_hdr.c. References DCM_OB, DCM_SL, DCM_SS, DCM_UL, DCM_UN, DCM_US, DCM_VALUEREPRESENTATION, dumpOB(), dumpSL(), dumpSS(), dumpUL(), dumpUS(), U32, and vm.
07568 { 07569 vm = (vm < vmLimit) ? vm : vmLimit; 07570 07571 if (vm <= 1) 07572 return; 07573 07574 switch (vr) { 07575 case DCM_SL: 07576 dumpSL((S32 *) d, vm); 07577 break; 07578 case DCM_UL: 07579 dumpUL((U32 *) d, vm); 07580 break; 07581 case DCM_SS: 07582 dumpSS((short *) d, vm); 07583 break; 07584 case DCM_US: 07585 dumpUS((unsigned short *) d, vm); 07586 break; 07587 case DCM_OB: 07588 case DCM_UN: 07589 dumpOB((unsigned char*) d, vm); 07590 break; 07591 default: 07592 break; 07593 } 07594 } |
|
Definition at line 7553 of file mri_dicom_hdr.c. References c, RWC_printf(), and vm.
07554 { 07555 long index = 0; 07556 RWC_printf("hex OB:") ; 07557 while (index < vm) { 07558 RWC_printf("%02x ", *(c++)); 07559 if ((++index) % 8 == 0) 07560 RWC_printf("\n"); 07561 } 07562 if( index%8 != 0 ) RWC_printf("\n"); 07563 } |
|
Definition at line 7516 of file mri_dicom_hdr.c. References RWC_printf(), and vm.
07517 { 07518 long index = 0; 07519 RWC_printf("decimal SL:") ; 07520 while (index < vm) { 07521 RWC_printf("%7d ", *(sl++)); 07522 if ((++index) % 8 == 0) 07523 RWC_printf("\n"); 07524 } 07525 RWC_printf("\n"); 07526 } |
|
Definition at line 7503 of file mri_dicom_hdr.c. References RWC_printf(), and vm.
07504 { 07505 long index = 0; 07506 RWC_printf("decimal SS:") ; 07507 while (index < vm) { 07508 RWC_printf("%7d ", *(ss++)); 07509 if ((++index) % 8 == 0) 07510 RWC_printf("\n"); 07511 } 07512 RWC_printf("\n"); 07513 } |
|
Definition at line 644 of file mri_dicom_hdr.c. References stackPtr.
|
|
Definition at line 7541 of file mri_dicom_hdr.c. References RWC_printf(), U32, and vm.
07542 { 07543 long index = 0; 07544 RWC_printf("decimal UL:") ; 07545 while (index < vm) { 07546 RWC_printf("%7d ", *(ul++)); 07547 if ((++index) % 8 == 0) 07548 RWC_printf("\n"); 07549 } 07550 RWC_printf("\n"); 07551 } |
|
Definition at line 7529 of file mri_dicom_hdr.c. References RWC_printf(), and vm.
07530 { 07531 long index = 0; 07532 RWC_printf("decimal US:") ; 07533 while (index < vm) { 07534 RWC_printf("%7d ", *(us++)); 07535 if ((++index) % 8 == 0) 07536 RWC_printf("\n"); 07537 } 07538 RWC_printf("\n"); 07539 } |
|
Definition at line 4440 of file mri_dicom_hdr.c. References PRV_ELEMENT_ITEM::byteOrder, BYTEORDER_SAME, COND_PushCondition(), CONDITION, PRV_ELEMENT_ITEM::currentOffset, DCM_ELEMENT::d, DCM_AE, DCM_AS, DCM_AT, DCM_CS, DCM_DA, DCM_DD, DCM_DS, DCM_DT, DCM_FD, DCM_FILEACCESSERROR, DCM_FL, DCM_GENERALWARNING, DCM_IS, DCM_LO, DCM_LT, DCM_Message(), DCM_NORMAL, DCM_OB, DCM_OT, DCM_OW, DCM_PN, DCM_PXLPIXELDATA, DCM_SH, DCM_SL, DCM_SQ, DCM_SS, DCM_ST, DCM_TAG, DCM_TAG_ELEMENT, DCM_TAG_GROUP, DCM_TM, DCM_UI, DCM_UL, DCM_UN, DCM_US, DCM_UT, PRV_ELEMENT_ITEM::element, groupElement, DCM_ELEMENT::length, object, p, read(), DCM_ELEMENT::representation, swab, swapATGroupElement(), swapInPlace(), DCM_ELEMENT::tag, and U32.
04444 { 04445 /* repair OT for pixel data*/ 04446 unsigned char 04447 *p; 04448 DCM_TAG 04449 * tag; 04450 DCM_ELEMENT 04451 * element; 04452 int nBytes; 04453 CONDITION cond; 04454 04455 element = &item->element; 04456 04457 *rtnLength = 0; 04458 if (element->d.ot == NULL) { 04459 if ((*object)->fd != -1) { 04460 (void) lseek((*object)->fd, item->currentOffset, SEEK_SET); 04461 nBytes = read((*object)->fd, b, (int) length); 04462 } else { 04463 (*object)->sk((*object)->userCtx, item->currentOffset, SEEK_SET); 04464 cond = (*object)->rd((*object)->userCtx, b, (long) length, &nBytes); 04465 } 04466 if ((U32) nBytes != length) { 04467 char b[512]; 04468 sprintf(b, "byte count: %d %d, errno: %d", nBytes, length, errno); 04469 (void) COND_PushCondition(DCM_GENERALWARNING, 04470 DCM_Message(DCM_GENERALWARNING), "exportData", b); 04471 return COND_PushCondition(DCM_FILEACCESSERROR, 04472 DCM_Message(DCM_FILEACCESSERROR), (*object)->fileName, 04473 "exportData"); 04474 } 04475 if( LITTLE_ENDIAN_ARCHITECTURE ){ 04476 if (item->element.representation == DCM_AT) { 04477 DCM_ELEMENT e; 04478 e = *element; 04479 e.length = length; 04480 e.d.ot = b; 04481 swapATGroupElement(&e); 04482 } 04483 } 04484 if (byteOrder != item->byteOrder) { 04485 DCM_ELEMENT e; 04486 e = *element; 04487 e.length = length; 04488 e.d.ot = b; 04489 swapInPlace(object, &e); 04490 } 04491 *rtnLength = (U32) nBytes; 04492 item->currentOffset += nBytes; 04493 } else { 04494 p = src; 04495 switch (element->representation) { 04496 case DCM_AE: 04497 case DCM_AS: 04498 case DCM_CS: 04499 case DCM_DA: 04500 case DCM_DT: 04501 case DCM_DD: 04502 case DCM_DS: 04503 case DCM_FD: 04504 case DCM_IS: 04505 case DCM_LO: 04506 case DCM_LT: 04507 case DCM_OB: 04508 case DCM_OT: 04509 case DCM_PN: 04510 case DCM_SH: 04511 case DCM_SQ: 04512 case DCM_ST: 04513 case DCM_TM: 04514 case DCM_UI: 04515 case DCM_UT: 04516 (void) memcpy(b, p, length); 04517 *rtnLength = length; 04518 break; 04519 case DCM_AT: 04520 tag = (DCM_TAG *) p; 04521 while (length >= 4) { 04522 groupElement.sh[0] = DCM_TAG_GROUP(*tag); 04523 groupElement.sh[1] = DCM_TAG_ELEMENT(*tag); 04524 if (byteOrder == BYTEORDER_SAME) { 04525 *b++ = groupElement.ch[0]; /* Copy the group */ 04526 *b++ = groupElement.ch[1]; 04527 *b++ = groupElement.ch[2]; /* Now, the element */ 04528 *b++ = groupElement.ch[3]; 04529 } else { 04530 *b++ = groupElement.ch[1]; /* Copy the group */ 04531 *b++ = groupElement.ch[0]; 04532 *b++ = groupElement.ch[3]; /* Now, the element */ 04533 *b++ = groupElement.ch[2]; 04534 } 04535 tag++; 04536 length -= 4; 04537 *rtnLength += 4; 04538 } 04539 break; 04540 case DCM_SL: 04541 case DCM_UL: 04542 case DCM_FL: 04543 while (length >= 4) { 04544 if (byteOrder == BYTEORDER_SAME) { 04545 *b++ = *p++; 04546 *b++ = *p++; 04547 *b++ = *p++; 04548 *b++ = *p++; 04549 } else { 04550 *b++ = p[3]; 04551 *b++ = p[2]; 04552 *b++ = p[1]; 04553 *b++ = p[0]; 04554 p += 4; 04555 } 04556 length -= 4; 04557 *rtnLength += 4; 04558 } 04559 break; 04560 case DCM_SS: 04561 case DCM_US: 04562 case DCM_OW: 04563 /* 04564 * Temorary hack by Nilesh to support memory mapping for testing 04565 * purposes. 04566 */ 04567 length &= ~1; 04568 *rtnLength += length; 04569 if (element->tag == DCM_PXLPIXELDATA) { 04570 if (byteOrder == item->byteOrder) 04571 (void) memcpy(b, p, length); 04572 else 04573 #ifdef SOLARIS 04574 swab((char *) p, (char *) b, length); 04575 #elif defined AIXV3 04576 swab((short *) p, (short *) b, length); 04577 #elif defined MACOS 04578 /* Not Yet Defined */ 04579 #else 04580 swab(p, b, length); 04581 #endif 04582 } else { 04583 if (byteOrder == BYTEORDER_SAME) 04584 (void) memcpy(b, p, length); 04585 else 04586 #ifdef SOLARIS 04587 swab((char *) p, (char *) b, length); 04588 #elif defined AIXV3 04589 swab((short *) p, (short *) b, length); 04590 #elif defined MACOS 04591 /* Not Yet Defined */ 04592 #else 04593 swab(p, b, length); 04594 #endif 04595 } 04596 break; 04597 /*case DCM_UNKNOWN:*/ 04598 case DCM_UN: 04599 default: 04600 #if 0 04601 fprintf(stderr, "Should not get to default in exportData: %08x\n", 04602 element->tag); 04603 #endif 04604 (void) memcpy(b, p, length); 04605 *rtnLength = length; 04606 break; 04607 } 04608 } 04609 return DCM_NORMAL; 04610 } |
|
Definition at line 4613 of file mri_dicom_hdr.c. References COND_PushCondition(), CONDITION, DCM_ELEMENT::d, PRV_ELEMENT_ITEM::dataOffset, DCM_CALLBACKABORTED, DCM_DLM, DCM_EXPORT_STREAM_CALLBACK, DCM_FILEACCESSERROR, DCM_GENERALWARNING, DCM_Message(), DCM_NOFRAGMENTSINOBJECT, DCM_NORMAL, DCM_OB, DCM_PXLPIXELDATA, PRV_ELEMENT_ITEM::element, exportFixedFields(), DCM_FRAGMENT_ITEM::fragment, PRV_ELEMENT_ITEM::fragmentFlag, DCM_FRAGMENT_ITEM::length, DCM_ELEMENT::length, LITTLE_ORDER, LST_Head(), LST_Next(), LST_Position(), object, PRV_ELEMENT_ITEM::originalDataLength, read(), DCM_ELEMENT::representation, RWC_printf(), DCM_ELEMENT::tag, and U32.
04616 { 04617 DCM_ELEMENT * element; 04618 int nBytes; 04619 CONDITION cond; 04620 U32 toExport; 04621 int length; 04622 DCM_FRAGMENT_ITEM* fragmentItem = 0; 04623 DCM_ELEMENT e; 04624 U32 rtnLength = 0; 04625 04626 element = &item->element; 04627 if (element->d.ot == NULL) { 04628 if ((*object)->fd != -1) { 04629 /* Seek to the beginning of the data. Have to back up 12 bytes to 04630 ** get the pixel tag, VR, etc 04631 */ 04632 (void) lseek((*object)->fd, item->dataOffset-12, SEEK_SET); 04633 } else { 04634 (*object)->sk((*object)->userCtx, item->dataOffset-12, SEEK_SET); 04635 } 04636 04637 toExport = item->originalDataLength + 12; 04638 while(toExport > 0) { 04639 length = (toExport < bufferlength) ? toExport : bufferlength; 04640 04641 if ((*object)->fd != -1) { 04642 nBytes = read((*object)->fd, buffer, length); 04643 } else { 04644 cond = (*object)->rd((*object)->userCtx, buffer, (long) length, &nBytes); 04645 } 04646 if ((U32) nBytes != length) { 04647 char b[512]; 04648 sprintf(b, "byte count: %d %d, errno: %d", nBytes, length, errno); 04649 (void) COND_PushCondition(DCM_GENERALWARNING, 04650 DCM_Message(DCM_GENERALWARNING), "exportEncapsualtedPixels", b); 04651 return COND_PushCondition(DCM_FILEACCESSERROR, 04652 DCM_Message(DCM_FILEACCESSERROR), (*object)->fileName, 04653 "exportEncapsualtedPixels"); 04654 } 04655 cond = callback(buffer, length, 0, ctx); 04656 if (cond != DCM_NORMAL) { 04657 return COND_PushCondition(DCM_CALLBACKABORTED, 04658 DCM_Message(DCM_CALLBACKABORTED), "exportStream"); 04659 } 04660 toExport -= length; 04661 } 04662 } else { 04663 if (item->fragmentFlag != 1) { 04664 return COND_PushCondition(DCM_NOFRAGMENTSINOBJECT, 04665 "DCM Exporting pixels but did not find expected fragments in object"); 04666 } 04667 e.tag = DCM_PXLPIXELDATA; 04668 e.d.ot = 0; 04669 e.representation = DCM_OB; 04670 e.length = 0xffffffff; 04671 exportFixedFields(&e, buffer, bufferlength, 04672 LITTLE_ORDER /*byteOrder*/, 04673 1 /* explicitV*/, 04674 &rtnLength); 04675 toExport = rtnLength; 04676 e.tag = 0xfffee000; 04677 e.length = 0; 04678 e.representation = DCM_DLM; 04679 e.d.ot = 0; 04680 exportFixedFields(&e, buffer+toExport, bufferlength, 04681 LITTLE_ORDER /*byteOrder*/, 04682 1 /* explicitV*/, 04683 &rtnLength); 04684 toExport += rtnLength; 04685 04686 cond = callback(buffer, toExport, 0, ctx); 04687 if (cond != DCM_NORMAL) { 04688 return COND_PushCondition(DCM_CALLBACKABORTED, 04689 DCM_Message(DCM_CALLBACKABORTED), "exportEncapsulatedPixels"); 04690 } 04691 04692 fragmentItem = (DCM_FRAGMENT_ITEM*)LST_Head(&item->element.d.fragments); 04693 (void)LST_Position(&item->element.d.fragments, (void *)fragmentItem); 04694 while (fragmentItem != NULL) { 04695 RWC_printf("Fragment size: %6d\n", fragmentItem->length); 04696 e.tag = 0xfffee000; 04697 e.length = fragmentItem->length; 04698 e.representation = DCM_DLM; 04699 exportFixedFields(&e, buffer, bufferlength, 04700 LITTLE_ORDER /*byteOrder*/, 04701 1 /* explicitV*/, 04702 &rtnLength); 04703 cond = callback(buffer, rtnLength, 0, ctx); 04704 if (cond != DCM_NORMAL) { 04705 return COND_PushCondition(DCM_CALLBACKABORTED, 04706 DCM_Message(DCM_CALLBACKABORTED), "exportEncapsulatedPixels"); 04707 } 04708 cond = callback(fragmentItem->fragment, fragmentItem->length, 0, ctx); 04709 if (cond != DCM_NORMAL) { 04710 return COND_PushCondition(DCM_CALLBACKABORTED, 04711 DCM_Message(DCM_CALLBACKABORTED), "exportEncapsulatedPixels"); 04712 } 04713 04714 fragmentItem = (void *)LST_Next(&item->element.d.fragments); 04715 } 04716 e.tag = 0xfffee0dd; 04717 e.length = 0; 04718 e.representation = DCM_DLM; 04719 e.d.ot = 0; 04720 exportFixedFields(&e, buffer, bufferlength, 04721 LITTLE_ORDER /*byteOrder*/, 04722 1 /* explicitV*/, 04723 &rtnLength); 04724 cond = callback(buffer, rtnLength, 0, ctx); 04725 if (cond != DCM_NORMAL) { 04726 return COND_PushCondition(DCM_CALLBACKABORTED, 04727 DCM_Message(DCM_CALLBACKABORTED), "exportEncapsulatedPixels"); 04728 } 04729 } 04730 return DCM_NORMAL; 04731 } |
|
Definition at line 4306 of file mri_dicom_hdr.c. References BYTEORDER_SAME, CTNBOOLEAN, DCM_DLM, DCM_TAG_ELEMENT, DCM_TAG_GROUP, exportVRLength(), DCM_ELEMENT::length, p, DCM_ELEMENT::representation, DCM_ELEMENT::tag, and U32.
04309 { 04310 unsigned char 04311 *p; 04312 unsigned short 04313 group, 04314 element; 04315 U32 04316 minimumLength; 04317 04318 group = DCM_TAG_GROUP(e->tag); 04319 element = DCM_TAG_ELEMENT(e->tag); 04320 if (e->representation == DCM_DLM) 04321 explicitVR = FALSE; 04322 04323 minimumLength = sizeof(group) + sizeof(element) + sizeof(e->length); 04324 if (explicitVR) 04325 minimumLength += 4; 04326 04327 *rtnLength = 0; 04328 if (length >= minimumLength) { 04329 if (byteOrder == BYTEORDER_SAME) { 04330 p = (unsigned char *) &group; 04331 *b++ = *p++; 04332 *b++ = *p++; 04333 p = (unsigned char *) &element; 04334 *b++ = *p++; 04335 *b++ = *p++; 04336 *rtnLength += 4; 04337 if (explicitVR) { 04338 exportVRLength(e, b, byteOrder, rtnLength); 04339 } else { 04340 p = (unsigned char *) &e->length; 04341 *b++ = *p++; 04342 *b++ = *p++; 04343 *b++ = *p++; 04344 *b++ = *p++; 04345 *rtnLength += 4; 04346 } 04347 } else { 04348 p = (unsigned char *) &group; 04349 *b++ = p[1]; 04350 *b++ = p[0]; 04351 p = (unsigned char *) &element; 04352 *b++ = p[1]; 04353 *b++ = p[0]; 04354 *rtnLength += 4; 04355 if (explicitVR) { 04356 exportVRLength(e, b, byteOrder, rtnLength); 04357 } else { 04358 p = (unsigned char *) &e->length; 04359 *b++ = p[3]; 04360 *b++ = p[2]; 04361 *b++ = p[1]; 04362 *b++ = p[0]; 04363 *rtnLength += 4; 04364 } 04365 } 04366 } 04367 } |
|
Definition at line 4734 of file mri_dicom_hdr.c. References c, COND_PushCondition(), CONDITION, PRV_ELEMENT_ITEM::currentOffset, DCM_ELEMENT::d, PRV_ELEMENT_ITEM::dataOffset, DCM_CALLBACKABORTED, DCM_EXPORT_STREAM_CALLBACK, DCM_FILEACCESSERROR, DCM_GENERALWARNING, DCM_Message(), DCM_NORMAL, PRV_ELEMENT_ITEM::element, exportData(), exportEncapsulatedPixels(), exportFixedFields(), DCM_ELEMENT::length, object, PRV_ELEMENT_ITEM::originalDataLength, read(), DCM_ELEMENT::tag, and U32.
04739 { 04740 DCM_ELEMENT * element; 04741 int nBytes; 04742 CONDITION cond; 04743 U32 toExport; 04744 U32 bytesExported = 0; 04745 U32 exportLength = 0; 04746 int length; 04747 U32 rtnLength; 04748 U32 remainingData; 04749 unsigned char* dst; 04750 unsigned char* src; 04751 int c; 04752 04753 if (encapsulatedPixels) { 04754 return exportEncapsulatedPixels(object, item, buffer, 04755 bufferlength, callback, ctx); 04756 } 04757 04758 element = &item->element; 04759 rtnLength = 0; 04760 dst = buffer; 04761 c = bufferlength; 04762 exportFixedFields(element, dst, bufferlength, byteOrder, 04763 explicitVR, &rtnLength); 04764 dst += rtnLength; 04765 c -= rtnLength; 04766 bytesExported = rtnLength; 04767 04768 remainingData = element->length; 04769 src = element->d.ot; 04770 item->currentOffset = item->dataOffset; 04771 04772 while (remainingData > 0) { 04773 if (debug) { 04774 fprintf(stderr, "Export: (%08x) %d\n", element->tag, element->length); 04775 } 04776 04777 if (element->d.ot != NULL) { 04778 remainingData = element->length - 04779 (src - ((unsigned char *) element->d.ot)); 04780 } else { 04781 remainingData = element->length - 04782 (item->currentOffset - item->dataOffset); 04783 } 04784 04785 exportLength = (remainingData < c) ? remainingData : c; 04786 cond = exportData(object, item, src, dst, 04787 exportLength, byteOrder, &rtnLength); 04788 if (cond != DCM_NORMAL) 04789 return cond; 04790 04791 src += rtnLength; 04792 dst += rtnLength; 04793 bytesExported += rtnLength; 04794 c -= rtnLength; 04795 04796 if (c <= 20) { 04797 cond = callback(buffer, bytesExported, 0, ctx); 04798 if (cond != DCM_NORMAL) { 04799 return COND_PushCondition(DCM_CALLBACKABORTED, 04800 DCM_Message(DCM_CALLBACKABORTED), "exportPixels"); 04801 } 04802 bytesExported = 0; 04803 c = bufferlength; 04804 dst = (unsigned char *) buffer; 04805 } 04806 } 04807 if (bytesExported > 0) { 04808 cond = callback(buffer, bytesExported, 0, ctx); 04809 if (cond != DCM_NORMAL) { 04810 return COND_PushCondition(DCM_CALLBACKABORTED, 04811 DCM_Message(DCM_CALLBACKABORTED), "exportPixels"); 04812 } 04813 } 04814 04815 return DCM_NORMAL; 04816 04817 #if 0 04818 if (element->d.ot == NULL) { 04819 if ((*object)->fd != -1) { 04820 /* Seek to the beginning of the data. Have to back up 12 bytes to 04821 ** get the pixel tag, VR, etc 04822 */ 04823 (void) lseek((*object)->fd, item->dataOffset-12, SEEK_SET); 04824 } else { 04825 (*object)->sk((*object)->userCtx, item->dataOffset-12, SEEK_SET); 04826 } 04827 04828 toExport = item->originalDataLength + 12; 04829 while(toExport > 0) { 04830 length = (toExport < bufferlength) ? toExport : bufferlength; 04831 04832 if ((*object)->fd != -1) { 04833 nBytes = read((*object)->fd, buffer, length); 04834 } else { 04835 cond = (*object)->rd((*object)->userCtx, buffer, (long) length, &nBytes); 04836 } 04837 if ((U32) nBytes != length) { 04838 char b[512]; 04839 sprintf(b, "byte count: %d %d, errno: %d", nBytes, length, errno); 04840 (void) COND_PushCondition(DCM_GENERALWARNING, 04841 DCM_Message(DCM_GENERALWARNING), "exportPixels", b); 04842 return COND_PushCondition(DCM_FILEACCESSERROR, 04843 DCM_Message(DCM_FILEACCESSERROR), (*object)->fileName, 04844 "exportPixels"); 04845 } 04846 cond = callback(buffer, length, 0, ctx); 04847 if (cond != DCM_NORMAL) { 04848 return COND_PushCondition(DCM_CALLBACKABORTED, 04849 DCM_Message(DCM_CALLBACKABORTED), "exportStream"); 04850 } 04851 toExport -= length; 04852 } 04853 } else { 04854 } 04855 return DCM_NORMAL; 04856 #endif 04857 04858 } |
|
Definition at line 4252 of file mri_dicom_hdr.c. References COND_PushCondition(), DCM_EXPORTBUFFERTOOSMALL, DCM_Message(), DCM_NORMAL, DCM_PREAMBLELENGTH, and U32.
04254 { 04255 *rtnLength = 0; 04256 if (bufferLength < (DCM_PREAMBLELENGTH + 4)) 04257 return COND_PushCondition(DCM_EXPORTBUFFERTOOSMALL, 04258 DCM_Message(DCM_EXPORTBUFFERTOOSMALL), (int) bufferLength, 04259 "exportPreamble"); 04260 04261 (void) memcpy(dst, (*obj)->preamble, DCM_PREAMBLELENGTH); 04262 dst += DCM_PREAMBLELENGTH; 04263 (void) memcpy(dst, "DICM", 4); 04264 *rtnLength += DCM_PREAMBLELENGTH + 4; 04265 04266 return DCM_NORMAL; 04267 } |
|
Definition at line 5182 of file mri_dicom_hdr.c. References BIG_ORDER, c, checkObject(), computeGroupLength(), COND_PushCondition(), CONDITION, CTNBOOLEAN, PRV_ELEMENT_ITEM::currentOffset, DCM_ELEMENT::d, PRV_ELEMENT_ITEM::dataOffset, DCM_CALLBACKABORTED, DCM_DLM, DCM_DLMITEM, DCM_DLMITEMDELIMITATIONITEM, DCM_DLMSEQUENCEDELIMITATIONITEM, DCM_ENCAPSULATEDPIXELS, DCM_EXPLICITBIGENDIAN, DCM_EXPLICITLITTLEENDIAN, DCM_EXPORT_STREAM_CALLBACK, DCM_FILEFORMATMASK, DCM_GROUPFILEMETA, DCM_ILLEGALOPTION, DCM_LISTFAILURE, DCM_Message(), DCM_NORMAL, DCM_OBJECT, DCM_ORDERBIGENDIAN, DCM_ORDERLITTLEENDIAN, DCM_ORDERMASK, DCM_ORDERNATIVE, DCM_PART10FILE, DCM_PXLPIXELDATA, DCM_SEQUENCELENGTHMASK, DCM_SQ, DCM_TAG_ELEMENT, DCM_UNSPECIFIEDLENGTH, DCM_UNSPECIFIEDLENGTHFLAG, PRV_ELEMENT_ITEM::element, PRV_GROUP_ITEM::elementList, exportData(), exportFixedFields(), exportPixels(), exportPreamble(), exportStream(), extractFileOptions(), PRV_GROUP_ITEM::group, l, DCM_ELEMENT::length, LITTLE_ORDER, LST_Head(), LST_Next(), LST_Position(), NATIVE_ORDER, DCM_SEQUENCE_ITEM::object, object, PRV_ELEMENT_ITEM::paddedDataLength, DCM_ELEMENT::representation, setFileOptions(), DCM_ELEMENT::tag, and U32.
05185 { 05186 PRIVATE_OBJECT 05187 ** object; 05188 PRV_GROUP_ITEM 05189 * groupItem; 05190 PRV_ELEMENT_ITEM 05191 * elementItem; 05192 DCM_ELEMENT 05193 element; 05194 int 05195 byteOrder; 05196 int 05197 lastFlag = 0; 05198 unsigned char 05199 *src, 05200 *dst; 05201 U32 05202 c, 05203 bytesExported = 0, 05204 rtnLength, 05205 remainingData, 05206 exportLength; 05207 CONDITION 05208 cond; 05209 DCM_SEQUENCE_ITEM 05210 * sequenceItem; 05211 DCM_ELEMENT 05212 itemMarker = { 05213 DCM_DLMITEM, DCM_DLM, "", 1, DCM_UNSPECIFIEDLENGTH, NULL 05214 }, 05215 itemDelimiter = { 05216 DCM_DLMITEMDELIMITATIONITEM, DCM_DLM, "", 1, 0, NULL 05217 }, 05218 sequenceDelimiter = { 05219 DCM_DLMSEQUENCEDELIMITATIONITEM, DCM_DLM, "", 1, 0, NULL 05220 }; 05221 CTNBOOLEAN 05222 unspecifiedSQLength = FALSE, 05223 explicitVR = FALSE, 05224 part10File = FALSE, 05225 encapsulatedPixels = FALSE; 05226 unsigned long fileOptions = 0; 05227 05228 object = (PRIVATE_OBJECT **) callerObject; 05229 cond = checkObject(object, "exportStream"); 05230 if (cond != DCM_NORMAL) 05231 return cond; 05232 05233 if ((opt & DCM_FILEFORMATMASK) == DCM_PART10FILE) { 05234 part10File = TRUE; 05235 opt &= ~DCM_ORDERMASK; 05236 opt |= DCM_EXPLICITLITTLEENDIAN; 05237 cond = setFileOptions(callerObject, &fileOptions); 05238 if (cond != DCM_NORMAL) 05239 return cond; 05240 } 05241 if ((opt & DCM_ORDERMASK) == 0) 05242 return COND_PushCondition(DCM_ILLEGALOPTION, 05243 DCM_Message(DCM_ILLEGALOPTION), "Byte order", 05244 "exportStream"); 05245 05246 switch (opt & DCM_ORDERMASK) { 05247 case DCM_ORDERNATIVE: 05248 byteOrder = NATIVE_ORDER; 05249 break; 05250 case DCM_ORDERLITTLEENDIAN: 05251 byteOrder = LITTLE_ORDER; 05252 break; 05253 case DCM_EXPLICITLITTLEENDIAN: 05254 byteOrder = LITTLE_ORDER; 05255 explicitVR = TRUE; 05256 break; 05257 case DCM_ORDERBIGENDIAN: 05258 byteOrder = BIG_ORDER; 05259 break; 05260 case DCM_EXPLICITBIGENDIAN: 05261 byteOrder = BIG_ORDER; 05262 explicitVR = TRUE; 05263 break; 05264 case DCM_ENCAPSULATEDPIXELS: 05265 byteOrder = LITTLE_ORDER; 05266 explicitVR = TRUE; 05267 encapsulatedPixels = TRUE; 05268 break; 05269 default: 05270 byteOrder = LITTLE_ORDER; 05271 break; 05272 } 05273 05274 /* We are making this step mandatory for now (smm)*/ 05275 05276 opt &= ~DCM_SEQUENCELENGTHMASK; 05277 opt |= DCM_UNSPECIFIEDLENGTHFLAG; 05278 05279 /* End of something that is out of place */ 05280 05281 if ((opt & DCM_SEQUENCELENGTHMASK) == DCM_UNSPECIFIEDLENGTHFLAG) 05282 unspecifiedSQLength = TRUE; 05283 05284 dst = (unsigned char *) buffer; 05285 c = bufferlength; 05286 05287 if (part10File) { 05288 cond = exportPreamble(object, dst, c, &rtnLength); 05289 if (cond != DCM_NORMAL) 05290 return cond; 05291 05292 dst += rtnLength; 05293 c -= rtnLength; 05294 bytesExported += rtnLength; 05295 } 05296 if (sequenceLevel != 0) { 05297 if (!unspecifiedSQLength) 05298 itemMarker.length = (*object)->objectSize; 05299 exportFixedFields(&itemMarker, dst, bufferlength, byteOrder, 05300 explicitVR, &rtnLength); 05301 dst += rtnLength; 05302 c -= rtnLength; 05303 bytesExported += rtnLength; 05304 } 05305 groupItem = (void *)LST_Head(&(*object)->groupList); 05306 05307 /* Take this code out to allow empty groups. */ 05308 #if 0 05309 if (groupItem == NULL) 05310 return COND_PushCondition(DCM_LISTFAILURE, 05311 DCM_Message(DCM_LISTFAILURE), "exportStream"); 05312 #endif 05313 if (groupItem != NULL) 05314 (void) LST_Position(&(*object)->groupList, (void *)groupItem); 05315 05316 while (groupItem != NULL) { 05317 if (part10File && groupItem->group != DCM_GROUPFILEMETA) { 05318 if (opt != fileOptions) { 05319 opt = fileOptions; 05320 cond = extractFileOptions(opt, &part10File, 05321 &explicitVR, &byteOrder, 05322 &encapsulatedPixels); 05323 if (cond != DCM_NORMAL) 05324 return cond; 05325 } 05326 } 05327 elementItem = (void *)LST_Head(&groupItem->elementList); 05328 if (elementItem != NULL) 05329 (void) LST_Position(&groupItem->elementList, (void *)elementItem); 05330 if (DCM_TAG_ELEMENT(elementItem->element.tag) == 0x0000) { 05331 U32 l; 05332 l = computeGroupLength(groupItem, explicitVR); 05333 *elementItem->element.d.ul = l; 05334 05335 /* We have some problems computing group length for groups with sequences. 05336 ** For now, just remove this attribute, except for group 0000 and 0002. 05337 */ 05338 if (groupItem->group != 0x0000 && groupItem->group != 0x0002) 05339 elementItem = (void *)LST_Next(&groupItem->elementList); 05340 } 05341 while (elementItem != NULL) { 05342 if (c <= 20) { 05343 cond = callback(buffer, bytesExported, 0, ctx); 05344 if (cond != DCM_NORMAL) 05345 return COND_PushCondition(DCM_CALLBACKABORTED, 05346 DCM_Message(DCM_CALLBACKABORTED), "exportStream"); 05347 05348 bytesExported = 0; 05349 c = bufferlength; 05350 dst = (unsigned char *) buffer; 05351 } 05352 element = elementItem->element; 05353 05354 if (element.tag == DCM_PXLPIXELDATA) { 05355 /* Lots of special rules for pixel data. Handle separately */ 05356 /* First, dump the current buffer */ 05357 cond = callback(buffer, bytesExported, 0, ctx); 05358 if (cond != DCM_NORMAL) 05359 return COND_PushCondition(DCM_CALLBACKABORTED, 05360 DCM_Message(DCM_CALLBACKABORTED), "exportStream"); 05361 05362 cond = exportPixels(object, elementItem, encapsulatedPixels, 05363 buffer, bufferlength, callback, ctx, byteOrder, explicitVR); 05364 if (cond != DCM_NORMAL) 05365 return cond; 05366 05367 bytesExported = 0; 05368 c = bufferlength; 05369 dst = (unsigned char *) buffer; 05370 rtnLength = 0; 05371 } else if (element.representation == DCM_SQ) { 05372 if (unspecifiedSQLength) 05373 element.length = DCM_UNSPECIFIEDLENGTH; 05374 05375 exportFixedFields(&element, dst, bufferlength, byteOrder, 05376 explicitVR, &rtnLength); 05377 } else { 05378 element.length = elementItem->paddedDataLength; 05379 exportFixedFields(&element, dst, bufferlength, byteOrder, 05380 explicitVR, &rtnLength); 05381 } 05382 dst += rtnLength; 05383 c -= rtnLength; 05384 bytesExported += rtnLength; 05385 05386 remainingData = element.length; 05387 src = element.d.ot; 05388 elementItem->currentOffset = elementItem->dataOffset; 05389 05390 if (element.tag == DCM_PXLPIXELDATA) { 05391 /* Then, we did that above */ 05392 ; 05393 } else if (element.representation == DCM_SQ) { 05394 05395 cond = callback(buffer, bytesExported, 0, ctx); 05396 if (cond != DCM_NORMAL) 05397 return COND_PushCondition(DCM_CALLBACKABORTED, 05398 DCM_Message(DCM_CALLBACKABORTED), "exportStream"); 05399 05400 bytesExported = 0; 05401 c = bufferlength; 05402 dst = (unsigned char *) buffer; 05403 05404 if (element.d.sq != NULL) { 05405 sequenceItem = (void *)LST_Head(&element.d.sq); 05406 if (sequenceItem != NULL) 05407 (void) LST_Position(&element.d.sq, (void *)sequenceItem); 05408 while (sequenceItem != NULL) { 05409 cond = exportStream(&sequenceItem->object, opt, 05410 buffer, bufferlength, callback, ctx, 05411 sequenceLevel + 1); 05412 if (cond != DCM_NORMAL) 05413 return cond; 05414 sequenceItem = (void *)LST_Next(&element.d.sq); 05415 } 05416 } 05417 if (element.length == DCM_UNSPECIFIEDLENGTH) { 05418 sequenceDelimiter.length = 0; 05419 exportFixedFields(&sequenceDelimiter, dst, bufferlength, 05420 byteOrder, explicitVR, &rtnLength); 05421 dst += rtnLength; 05422 c -= rtnLength; 05423 bytesExported += rtnLength; 05424 } 05425 } else { 05426 while (remainingData > 0) { 05427 if (debug) 05428 fprintf(stderr, "Export: (%08x) %d\n", 05429 element.tag, element.length); 05430 if (element.d.ot != NULL) 05431 remainingData = element.length - 05432 (src - ((unsigned char *) element.d.ot)); 05433 else 05434 remainingData = element.length - 05435 (elementItem->currentOffset - elementItem->dataOffset); 05436 05437 exportLength = (remainingData < c) ? remainingData : c; 05438 cond = exportData(object, elementItem, src, dst, 05439 exportLength, byteOrder, &rtnLength); 05440 if (cond != DCM_NORMAL) 05441 return cond; 05442 05443 src += rtnLength; 05444 dst += rtnLength; 05445 bytesExported += rtnLength; 05446 c -= rtnLength; 05447 05448 if (c <= 20) { 05449 cond = callback(buffer, bytesExported, 0, ctx); 05450 if (cond != DCM_NORMAL) 05451 return COND_PushCondition(DCM_CALLBACKABORTED, 05452 DCM_Message(DCM_CALLBACKABORTED), "exportStream"); 05453 05454 bytesExported = 0; 05455 c = bufferlength; 05456 dst = (unsigned char *) buffer; 05457 } 05458 } 05459 } 05460 elementItem = (void *)LST_Next(&groupItem->elementList); 05461 } 05462 groupItem = (void *)LST_Next(&(*object)->groupList); 05463 } 05464 if ((sequenceLevel != 0) && unspecifiedSQLength) { 05465 if (c <= 20) { 05466 cond = callback(buffer, bytesExported, 0, ctx); 05467 if (cond != DCM_NORMAL) 05468 return COND_PushCondition(DCM_CALLBACKABORTED, 05469 DCM_Message(DCM_CALLBACKABORTED), "exportStream"); 05470 05471 bytesExported = 0; 05472 c = bufferlength; 05473 dst = (unsigned char *) buffer; 05474 } 05475 exportFixedFields(&itemDelimiter, dst, bufferlength, byteOrder, 05476 explicitVR, &rtnLength); 05477 dst += rtnLength; 05478 c -= rtnLength; 05479 bytesExported += rtnLength; 05480 } 05481 lastFlag = (sequenceLevel == 0) ? 1 : 0; 05482 cond = callback(buffer, bytesExported, lastFlag, ctx); 05483 if (cond != DCM_NORMAL) 05484 return COND_PushCondition(DCM_CALLBACKABORTED, 05485 DCM_Message(DCM_CALLBACKABORTED), "exportStream"); 05486 05487 return DCM_NORMAL; 05488 } |
|
|
|
Definition at line 4195 of file mri_dicom_hdr.c. References BYTEORDER_SAME, c, DCM_MAKETAG, DCM_OB, DCM_OW, DCM_SQ, DCM_UN, DCM_VALUEREPRESENTATION, DIM_OF, i, DCM_ELEMENT::length, p, DCM_ELEMENT::representation, DCM_ELEMENT::tag, U16, and U32.
04197 { 04198 int i; 04199 char *c = "xx"; 04200 unsigned char *p; 04201 U16 shortLength; 04202 DCM_VALUEREPRESENTATION vr; 04203 04204 vr = e->representation; 04205 if (e->tag == DCM_MAKETAG(0x003a, 0x1000)) 04206 vr = DCM_OB; 04207 04208 for (i = 0; i < DIM_OF(vrMap); i++) { 04209 if (vr == vrMap[i].representation) { 04210 c = vrMap[i].code; 04211 break; 04212 } 04213 } 04214 04215 *b++ = *c++; 04216 *b++ = *c++; 04217 *rtnLength += 2; 04218 04219 if (vr == DCM_OB || vr == DCM_OW || vr == DCM_SQ || vr == DCM_UN) { 04220 *b++ = 0x00; 04221 *b++ = 0x00; 04222 if (byteOrder == BYTEORDER_SAME) { 04223 p = (unsigned char *) &e->length; 04224 *b++ = *p++; 04225 *b++ = *p++; 04226 *b++ = *p++; 04227 *b++ = *p++; 04228 } else { 04229 p = (unsigned char *) &e->length; 04230 *b++ = p[3]; 04231 *b++ = p[2]; 04232 *b++ = p[1]; 04233 *b++ = p[0]; 04234 } 04235 *rtnLength += 6; 04236 } else { 04237 shortLength = (U16) e->length; 04238 if (byteOrder == BYTEORDER_SAME) { 04239 p = (unsigned char *) &shortLength; 04240 *b++ = *p++; 04241 *b++ = *p++; 04242 } else { 04243 p = (unsigned char *) &shortLength; 04244 *b++ = p[1]; 04245 *b++ = p[0]; 04246 } 04247 *rtnLength += 2; 04248 } 04249 } |
|
Definition at line 5086 of file mri_dicom_hdr.c. References BIG_ORDER, COND_PushCondition(), CTNBOOLEAN, DCM_ENCAPSULATEDPIXELS, DCM_EXPLICITBIGENDIAN, DCM_EXPLICITLITTLEENDIAN, DCM_FILEFORMATMASK, DCM_ILLEGALOPTION, DCM_Message(), DCM_NORMAL, DCM_ORDERBIGENDIAN, DCM_ORDERLITTLEENDIAN, DCM_ORDERMASK, DCM_ORDERNATIVE, DCM_PART10FILE, LITTLE_ORDER, and NATIVE_ORDER.
05089 { 05090 *part10File = *explicitVR = FALSE; 05091 05092 if ((opt & DCM_FILEFORMATMASK) == DCM_PART10FILE) { 05093 *part10File = TRUE; 05094 opt &= ~DCM_ORDERMASK; 05095 opt |= DCM_EXPLICITLITTLEENDIAN; 05096 } 05097 if ((opt & DCM_ORDERMASK) == 0) 05098 return COND_PushCondition(DCM_ILLEGALOPTION, 05099 DCM_Message(DCM_ILLEGALOPTION), "Byte order", 05100 "extractFileOptions"); 05101 05102 switch (opt & DCM_ORDERMASK) { 05103 case DCM_ORDERNATIVE: 05104 *byteOrder = NATIVE_ORDER; 05105 *encapsulatedPixels = FALSE; 05106 break; 05107 case DCM_ORDERLITTLEENDIAN: 05108 *byteOrder = LITTLE_ORDER; 05109 *encapsulatedPixels = FALSE; 05110 break; 05111 case DCM_EXPLICITLITTLEENDIAN: 05112 *byteOrder = LITTLE_ORDER; 05113 *explicitVR = TRUE; 05114 *encapsulatedPixels = FALSE; 05115 break; 05116 case DCM_ORDERBIGENDIAN: 05117 *byteOrder = BIG_ORDER; 05118 *encapsulatedPixels = FALSE; 05119 break; 05120 case DCM_EXPLICITBIGENDIAN: 05121 *byteOrder = BIG_ORDER; 05122 *explicitVR = TRUE; 05123 *encapsulatedPixels = FALSE; 05124 break; 05125 case DCM_ENCAPSULATEDPIXELS: 05126 *byteOrder = LITTLE_ORDER; 05127 *explicitVR = TRUE; 05128 *encapsulatedPixels = TRUE; 05129 break; 05130 default: 05131 *byteOrder = LITTLE_ORDER; 05132 *encapsulatedPixels = FALSE; 05133 break; 05134 } 05135 05136 return DCM_NORMAL; 05137 } |
|
Definition at line 4884 of file mri_dicom_hdr.c. References fd.
04885 { 04886 int 04887 status; 04888 struct stat 04889 im_stat; 04890 04891 status = fstat(fd, &im_stat); 04892 if (status < 0) { 04893 return status; 04894 } else 04895 return im_stat.st_size; 04896 } |
|
Definition at line 3637 of file mri_dicom_hdr.c. References PRV_GROUP_ITEM::baseLength, COND_PushCondition(), CONDITION, CTN_MALLOC, CTNBOOLEAN, DCM_ELEMENT::d, DCM_ELEMENTCREATEFAILED, DCM_LISTFAILURE, DCM_MAKETAG, DCM_Message(), DCM_NORMAL, DCM_UL, PRV_ELEMENT_ITEM::element, PRV_GROUP_ITEM::elementList, PRV_GROUP_ITEM::group, l, DCM_ELEMENT::length, PRV_GROUP_ITEM::longVRAttributes, LST_Create(), LST_Enqueue(), LST_Head(), LST_Insert(), LST_K_AFTER, LST_K_BEFORE, LST_Next(), LST_NORMAL, LST_Position(), newElementItem(), object, DCM_ELEMENT::tag, and U32.
03639 { 03640 PRV_GROUP_ITEM 03641 * item; 03642 CONDITION 03643 cond; 03644 CTNBOOLEAN 03645 tooFar = FALSE; 03646 03647 item = (void *)LST_Head(&(*object)->groupList); 03648 if (item != NULL) 03649 (void) LST_Position(&(*object)->groupList, (void *)item); 03650 03651 while (item != NULL && !tooFar) { 03652 if (item->group == group) { 03653 *groupItem = item; 03654 return DCM_NORMAL; 03655 } else if (item->group > group) { 03656 tooFar = TRUE; 03657 } else { 03658 item = (void *)LST_Next(&(*object)->groupList); 03659 } 03660 } 03661 03662 { 03663 U32 l; 03664 PRV_GROUP_ITEM *newGroupItem; 03665 DCM_ELEMENT groupLength = {0, DCM_UL, "", 1, sizeof(l), NULL}; 03666 PRV_ELEMENT_ITEM *groupLengthItem; 03667 03668 newGroupItem = CTN_MALLOC(sizeof(*newGroupItem)); 03669 if (newGroupItem == NULL) 03670 return COND_PushCondition(DCM_ELEMENTCREATEFAILED, 03671 DCM_Message(DCM_ELEMENTCREATEFAILED), 03672 "findCreateGroup", 03673 group, 0xffff, sizeof(*newGroupItem)); 03674 03675 03676 *groupItem = newGroupItem; 03677 newGroupItem->group = group; 03678 newGroupItem->baseLength = 0; 03679 newGroupItem->longVRAttributes = 0; 03680 newGroupItem->elementList = LST_Create(); 03681 if (newGroupItem->elementList == NULL) 03682 return COND_PushCondition(DCM_LISTFAILURE, 03683 DCM_Message(DCM_LISTFAILURE), 03684 "findCreateGroup"); 03685 03686 if (tooFar) 03687 cond = LST_Insert(&(*object)->groupList, (void *)newGroupItem, LST_K_BEFORE); 03688 else 03689 cond = LST_Enqueue(&(*object)->groupList, (void *)newGroupItem); 03690 if (cond != LST_NORMAL) 03691 return COND_PushCondition(DCM_LISTFAILURE, 03692 DCM_Message(DCM_LISTFAILURE), 03693 "findCreateGroup"); 03694 (void) LST_Position(&(*object)->groupList, (void *)newGroupItem); 03695 if (cond != LST_NORMAL) 03696 return COND_PushCondition(DCM_LISTFAILURE, 03697 DCM_Message(DCM_LISTFAILURE), 03698 "findCreateGroup"); 03699 03700 groupLength.d.ul = &l; 03701 l = 0; 03702 if ((*object)->groupLengthFlag) { 03703 groupLength.tag = DCM_MAKETAG(group, 0); 03704 cond = newElementItem(&groupLength, TRUE, &groupLengthItem); 03705 (void) memcpy(groupLengthItem->element.d.ot, &l, sizeof(l)); 03706 03707 if (LST_Insert(&newGroupItem->elementList, (void *)groupLengthItem, LST_K_AFTER) != 03708 LST_NORMAL) 03709 return COND_PushCondition(DCM_LISTFAILURE, 03710 DCM_Message(DCM_LISTFAILURE), 03711 "findCreateGroup"); 03712 03713 (*object)->objectSize += 8 + groupLengthItem->element.length; 03714 } 03715 } 03716 return DCM_NORMAL; 03717 } |
|
Definition at line 6888 of file mri_dicom_hdr.c. References COND_PushCondition(), CTN_MALLOC, CTNBOOLEAN, DCM_CloseObject(), DCM_ELEMENTCREATEFAILED, DCM_LISTFAILURE, DCM_Message(), DCM_NORMAL, DCM_OBJECT, LST_Create(), LST_Enqueue(), and LST_NORMAL.
06890 { 06891 CTNBOOLEAN createGroupFlag; 06892 06893 if (*groupItem == NULL) 06894 createGroupFlag = TRUE; 06895 else if ((*groupItem)->group != group) 06896 createGroupFlag = TRUE; 06897 else 06898 createGroupFlag = FALSE; 06899 06900 if (createGroupFlag == TRUE) { 06901 *groupItem = CTN_MALLOC(sizeof(**groupItem)); 06902 if (*groupItem == NULL) { 06903 (void) DCM_CloseObject((DCM_OBJECT **) obj); 06904 return COND_PushCondition(DCM_ELEMENTCREATEFAILED, 06905 DCM_Message(DCM_ELEMENTCREATEFAILED), 06906 "handleGroupItem", 06907 group, 0xffff, sizeof(**groupItem)); 06908 } 06909 (*groupItem)->group = group; 06910 (*groupItem)->baseLength = 0; 06911 (*groupItem)->longVRAttributes = 0; 06912 (*groupItem)->elementList = LST_Create(); 06913 if ((*groupItem)->elementList == NULL) { 06914 (void) DCM_CloseObject((DCM_OBJECT **) obj); 06915 return COND_PushCondition(DCM_LISTFAILURE, 06916 DCM_Message(DCM_LISTFAILURE), 06917 "handleGroupItem"); 06918 } 06919 if (LST_Enqueue(&(*obj)->groupList, (void *)*groupItem) != LST_NORMAL) { 06920 (void) DCM_CloseObject((DCM_OBJECT **) obj); 06921 return COND_PushCondition(DCM_LISTFAILURE, 06922 DCM_Message(DCM_LISTFAILURE), 06923 "handleGroupItem"); 06924 } 06925 } 06926 return DCM_NORMAL; 06927 } |
|
Definition at line 3757 of file mri_dicom_hdr.c. References PRV_GROUP_ITEM::baseLength, PRV_ELEMENT_ITEM::byteOrder, COND_PushCondition(), CONDITION, CTN_FREE, DCM_ELEMENT::d, DCM_AE, DCM_AS, DCM_BADELEMENTINGROUP, DCM_CS, DCM_DA, DCM_DS, DCM_IS, DCM_LISTFAILURE, DCM_LO, DCM_LT, DCM_Message(), DCM_NORMAL, DCM_OB, DCM_ORDERNATIVE, DCM_OW, DCM_PN, DCM_SH, DCM_SQ, DCM_ST, DCM_TAG_ELEMENT, DCM_TAG_GROUP, DCM_TM, DCM_UI, DCM_UNEVENELEMENTLENGTH, DCM_UNSPECIFIEDLENGTH, DCM_UT, PRV_ELEMENT_ITEM::element, PRV_GROUP_ITEM::elementList, PRV_GROUP_ITEM::group, DCM_ELEMENT::length, PRV_GROUP_ITEM::longVRAttributes, LST_Current(), LST_Enqueue(), LST_Head(), LST_Insert(), LST_K_BEFORE, LST_Next(), LST_NORMAL, LST_Position(), newElementItem(), object, p, PRV_ELEMENT_ITEM::paddedDataLength, DCM_ELEMENT::representation, DCM_ELEMENT::tag, and updateSpecialElements().
03758 { 03759 PRV_ELEMENT_ITEM 03760 * nextItem, 03761 *newItem; 03762 PRV_GROUP_ITEM 03763 * groupItem; 03764 CONDITION 03765 cond; 03766 char 03767 *p; 03768 03769 cond = newElementItem(element, TRUE, &newItem); 03770 if (cond != DCM_NORMAL) { 03771 return cond; 03772 } 03773 newItem->byteOrder = DCM_ORDERNATIVE; 03774 if ((newItem->element.length & 1) != 0) { 03775 if (newItem->element.representation == DCM_AE) { 03776 p = newItem->element.d.string; /* repair, check for 16 */ 03777 p[newItem->element.length] = ' '; 03778 newItem->paddedDataLength = element->length + 1; 03779 (void) memcpy(p, element->d.string, element->length); 03780 } else if (newItem->element.representation == DCM_AS) { 03781 p = newItem->element.d.string; 03782 p[newItem->element.length] = ' '; 03783 newItem->paddedDataLength = element->length + 1; 03784 (void) memcpy(p, element->d.string, element->length); 03785 } else if (newItem->element.representation == DCM_CS) { 03786 p = newItem->element.d.string; 03787 p[newItem->element.length] = ' '; 03788 newItem->paddedDataLength = element->length + 1; 03789 (void) memcpy(p, element->d.string, element->length); 03790 } else if (newItem->element.representation == DCM_DA) { 03791 p = newItem->element.d.string; 03792 p[newItem->element.length] = ' '; 03793 newItem->paddedDataLength = element->length + 1; 03794 (void) memcpy(p, element->d.string, element->length); 03795 } else if (newItem->element.representation == DCM_DS) { 03796 p = newItem->element.d.string; 03797 p[newItem->element.length] = ' '; 03798 newItem->paddedDataLength = element->length + 1; 03799 (void) memcpy(p, element->d.string, element->length); 03800 } else if (newItem->element.representation == DCM_IS) { 03801 p = newItem->element.d.string; 03802 p[newItem->element.length] = ' '; 03803 newItem->paddedDataLength = element->length + 1; 03804 (void) memcpy(p, element->d.string, element->length); 03805 } else if (newItem->element.representation == DCM_LT) { 03806 p = newItem->element.d.string; 03807 p[newItem->element.length] = ' '; 03808 newItem->paddedDataLength = element->length + 1; 03809 (void) memcpy(p, element->d.string, element->length); 03810 } else if (newItem->element.representation == DCM_LO) { 03811 p = newItem->element.d.string; 03812 p[newItem->element.length] = ' '; 03813 newItem->paddedDataLength = element->length + 1; 03814 (void) memcpy(p, element->d.string, element->length); 03815 } else if (newItem->element.representation == DCM_PN) { 03816 p = newItem->element.d.string; 03817 p[newItem->element.length] = ' '; 03818 newItem->paddedDataLength = element->length + 1; 03819 (void) memcpy(p, element->d.string, element->length); 03820 } else if (newItem->element.representation == DCM_SH) { 03821 p = newItem->element.d.string; 03822 p[newItem->element.length] = ' '; 03823 newItem->paddedDataLength = element->length + 1; 03824 (void) memcpy(p, element->d.string, element->length); 03825 } else if (newItem->element.representation == DCM_ST) { 03826 p = newItem->element.d.string; 03827 p[newItem->element.length] = ' '; 03828 newItem->paddedDataLength = element->length + 1; 03829 (void) memcpy(p, element->d.string, element->length); 03830 } else if (newItem->element.representation == DCM_TM) { 03831 p = newItem->element.d.string; 03832 p[newItem->element.length] = ' '; 03833 newItem->paddedDataLength = element->length + 1; 03834 (void) memcpy(p, element->d.string, element->length); 03835 } else if (newItem->element.representation == DCM_UI) { 03836 p = newItem->element.d.string; 03837 p[newItem->element.length] = '\0'; 03838 newItem->paddedDataLength = element->length + 1; 03839 (void) memcpy(p, element->d.string, element->length); 03840 } else if (newItem->element.representation == DCM_UT) { 03841 p = newItem->element.d.string; 03842 p[newItem->element.length] = ' '; 03843 newItem->paddedDataLength = element->length + 1; 03844 (void) memcpy(p, element->d.string, element->length); 03845 } else if (newItem->element.representation == DCM_SQ) { 03846 /* newItem->element.length = 0xffffffff; */ 03847 newItem->element.d.sq = element->d.sq; 03848 } else { 03849 CTN_FREE(newItem); 03850 return COND_PushCondition(DCM_UNEVENELEMENTLENGTH, 03851 DCM_Message(DCM_UNEVENELEMENTLENGTH), 03852 DCM_TAG_GROUP(element->tag), 03853 DCM_TAG_ELEMENT(element->tag), element->length, 03854 "insertNewElement"); 03855 } 03856 } else if (newItem->element.representation != DCM_SQ) { 03857 (void) memcpy(newItem->element.d.ot, element->d.ot, element->length); 03858 } else { 03859 /* newItem->element.length = 0xffffffff; */ 03860 newItem->element.d.sq = element->d.sq; 03861 } 03862 if ((*object)->objectSize != DCM_UNSPECIFIEDLENGTH) 03863 (*object)->objectSize += 8 + newItem->paddedDataLength; 03864 03865 /* repair */ 03866 cond = updateSpecialElements(object, newItem); 03867 if (cond != DCM_NORMAL) 03868 return cond; 03869 03870 groupItem = (void *)LST_Current(&(*object)->groupList); 03871 if (groupItem == NULL) 03872 return COND_PushCondition(DCM_LISTFAILURE, 03873 DCM_Message(DCM_LISTFAILURE), "insertNewElement"); 03874 03875 if (groupItem->baseLength != DCM_UNSPECIFIEDLENGTH) 03876 groupItem->baseLength += 2 + 2 + 4 + newItem->paddedDataLength; 03877 03878 if (newItem->element.representation == DCM_OW || 03879 newItem->element.representation == DCM_OB || 03880 newItem->element.representation == DCM_SQ) { 03881 groupItem->longVRAttributes++; 03882 (*object)->longVRAttributes++; 03883 } 03884 if ((nextItem = (void *)LST_Head(&groupItem->elementList)) == NULL) { 03885 cond = LST_Enqueue(&groupItem->elementList, (void *)newItem); 03886 if (cond != LST_NORMAL) 03887 return COND_PushCondition(DCM_LISTFAILURE, 03888 DCM_Message(DCM_LISTFAILURE), 03889 "insertNewElement"); 03890 else 03891 return DCM_NORMAL; 03892 } 03893 (void) LST_Position(&groupItem->elementList, (void *)nextItem); 03894 if (DCM_TAG_ELEMENT(nextItem->element.tag) == 0x0000) 03895 (void) memcpy(nextItem->element.d.ot, &groupItem->baseLength, 03896 sizeof(groupItem->baseLength)); 03897 03898 /* Now, search through the linked list for a place to insert/append 03899 ** this new item. 03900 */ 03901 03902 while (nextItem != NULL) { 03903 if (DCM_TAG_GROUP(element->tag) != 03904 DCM_TAG_GROUP(nextItem->element.tag)) { 03905 return COND_PushCondition(DCM_BADELEMENTINGROUP, 03906 DCM_Message(DCM_BADELEMENTINGROUP), 03907 DCM_TAG_GROUP(nextItem->element.tag), 03908 DCM_TAG_ELEMENT(nextItem->element.tag), 03909 groupItem->group, "insertNewElement"); 03910 } else if (DCM_TAG_ELEMENT(element->tag) < 03911 DCM_TAG_ELEMENT(nextItem->element.tag)) { 03912 cond = LST_Insert(&groupItem->elementList, (void *)newItem, LST_K_BEFORE); 03913 if (cond != LST_NORMAL) 03914 return COND_PushCondition(DCM_LISTFAILURE, 03915 DCM_Message(DCM_LISTFAILURE), 03916 "insertNewElement"); 03917 else 03918 return DCM_NORMAL; 03919 } 03920 nextItem = (void *)LST_Next(&groupItem->elementList); 03921 } 03922 03923 /* If we fall out of the loop, we must have reached the end of 03924 ** the group. Add the element to the end of the list of elements 03925 ** in this group. 03926 */ 03927 03928 cond = LST_Enqueue(&groupItem->elementList, (void *)newItem); 03929 if (cond != LST_NORMAL) 03930 return COND_PushCondition(DCM_LISTFAILURE, 03931 DCM_Message(DCM_LISTFAILURE), 03932 "insertNewElement"); 03933 else 03934 return DCM_NORMAL; 03935 } |
|
Definition at line 3938 of file mri_dicom_hdr.c. References PRV_GROUP_ITEM::baseLength, COND_PushCondition(), CONDITION, DCM_ELEMENT::d, DCM_BADELEMENTINGROUP, DCM_LISTFAILURE, DCM_Message(), DCM_NORMAL, DCM_OB, DCM_OW, DCM_SQ, DCM_TAG_ELEMENT, DCM_TAG_GROUP, DCM_UNSPECIFIEDLENGTH, PRV_ELEMENT_ITEM::element, PRV_GROUP_ITEM::elementList, findCreateGroup(), PRV_GROUP_ITEM::group, PRV_GROUP_ITEM::longVRAttributes, LST_Enqueue(), LST_Head(), LST_Insert(), LST_K_BEFORE, LST_Next(), LST_NORMAL, LST_Position(), object, PRV_ELEMENT_ITEM::paddedDataLength, DCM_ELEMENT::representation, DCM_ELEMENT::tag, and updateSpecialElements().
03939 { 03940 PRV_ELEMENT_ITEM * nextItem; 03941 PRV_GROUP_ITEM * groupItem = 0; 03942 CONDITION cond; 03943 03944 /* repair */ 03945 cond = updateSpecialElements(object, newItem); 03946 if (cond != DCM_NORMAL) 03947 return cond; 03948 03949 cond = findCreateGroup(object, DCM_TAG_GROUP(newItem->element.tag), 03950 &groupItem); 03951 03952 if (groupItem == NULL) 03953 return COND_PushCondition(DCM_LISTFAILURE, 03954 DCM_Message(DCM_LISTFAILURE), "insertThisElementItem"); 03955 03956 if (groupItem->baseLength != DCM_UNSPECIFIEDLENGTH) 03957 groupItem->baseLength += 2 + 2 + 4 + newItem->paddedDataLength; 03958 03959 if (newItem->element.representation == DCM_OW || 03960 newItem->element.representation == DCM_OB || 03961 newItem->element.representation == DCM_SQ) { 03962 groupItem->longVRAttributes++; 03963 (*object)->longVRAttributes++; 03964 } 03965 03966 if ((nextItem = (void *)LST_Head(&groupItem->elementList)) == NULL) { 03967 cond = LST_Enqueue(&groupItem->elementList, (void *)newItem); 03968 if (cond != LST_NORMAL) 03969 return COND_PushCondition(DCM_LISTFAILURE, 03970 DCM_Message(DCM_LISTFAILURE), 03971 "insertThisElementItem"); 03972 else 03973 return DCM_NORMAL; 03974 } 03975 03976 (void) LST_Position(&groupItem->elementList, (void *)nextItem); 03977 if (DCM_TAG_ELEMENT(nextItem->element.tag) == 0x0000) 03978 (void) memcpy(nextItem->element.d.ot, &groupItem->baseLength, 03979 sizeof(groupItem->baseLength)); 03980 03981 /* Now, search through the linked list for a place to insert/append 03982 ** this new item. 03983 */ 03984 03985 while (nextItem != NULL) { 03986 if (DCM_TAG_GROUP(newItem->element.tag) != 03987 DCM_TAG_GROUP(nextItem->element.tag)) { 03988 return COND_PushCondition(DCM_BADELEMENTINGROUP, 03989 DCM_Message(DCM_BADELEMENTINGROUP), 03990 DCM_TAG_GROUP(nextItem->element.tag), 03991 DCM_TAG_ELEMENT(nextItem->element.tag), 03992 groupItem->group, "insertThisElementItem"); 03993 } else if (DCM_TAG_ELEMENT(newItem->element.tag) < 03994 DCM_TAG_ELEMENT(nextItem->element.tag)) { 03995 cond = LST_Insert(&groupItem->elementList, (void *)newItem, LST_K_BEFORE); 03996 if (cond != LST_NORMAL) 03997 return COND_PushCondition(DCM_LISTFAILURE, 03998 DCM_Message(DCM_LISTFAILURE), 03999 "insertThisElementItem"); 04000 else 04001 return DCM_NORMAL; 04002 } 04003 nextItem = (void *)LST_Next(&groupItem->elementList); 04004 } 04005 04006 /* If we fall out of the loop, we must have reached the end of 04007 ** the group. Add the element to the end of the list of elements 04008 ** in this group. 04009 */ 04010 04011 cond = LST_Enqueue(&groupItem->elementList, (void *)newItem); 04012 if (cond != LST_NORMAL) 04013 return COND_PushCondition(DCM_LISTFAILURE, 04014 DCM_Message(DCM_LISTFAILURE), 04015 "insertThisElementItem"); 04016 else 04017 return DCM_NORMAL; 04018 } |
|
Definition at line 7230 of file mri_dicom_hdr.c. References CTNBOOLEAN, DCM_TAG, DCM_TAG_GROUP, PRV_ELEMENT_ITEM::element, PRV_GROUP_ITEM::elementList, PRV_GROUP_ITEM::group, LST_Head(), LST_Next(), LST_Position(), and DCM_ELEMENT::tag.
07231 { 07232 PRV_GROUP_ITEM 07233 * groupItem; 07234 PRV_ELEMENT_ITEM 07235 * elementItem; 07236 CTNBOOLEAN 07237 found = FALSE; 07238 07239 groupItem = (void *)LST_Head(&(*obj)->groupList); 07240 if (groupItem == NULL) 07241 return NULL; 07242 07243 (void) LST_Position(&(*obj)->groupList, (void *)groupItem); 07244 while (groupItem != NULL) { 07245 if (groupItem->group == DCM_TAG_GROUP(tag)) 07246 break; 07247 07248 groupItem = (void *)LST_Next(&(*obj)->groupList); 07249 } 07250 if (groupItem == NULL) 07251 return NULL; 07252 07253 elementItem = (void *)LST_Head(&groupItem->elementList); 07254 if (elementItem == NULL) 07255 return NULL; 07256 07257 (void) LST_Position(&groupItem->elementList, (void *)elementItem); 07258 while (!found && (elementItem != NULL)) { 07259 if (elementItem->element.tag == tag) { 07260 found = TRUE; 07261 } else 07262 elementItem = (void *)LST_Next(&groupItem->elementList); 07263 } 07264 if (found) 07265 return elementItem; 07266 else 07267 return NULL; 07268 } |
|
Definition at line 4166 of file mri_dicom_hdr.c.
|
|
Definition at line 10869 of file mri_dicom_hdr.c.
10874 {
10875 return (*list)->count;
10876 }
|
|
Definition at line 10727 of file mri_dicom_hdr.c. References lst_head::count, CTN_MALLOC, lst_head::current, lst_head::head, and lst_head::tail. Referenced by copySequence(), DCM_AddFragment(), DCM_CopyObject(), DCM_CreateObject(), findCreateGroup(), handleGroupItem(), readFile(), and readSequence().
|
|
Definition at line 10893 of file mri_dicom_hdr.c.
10899 {
10900 return (*list)->current;
10901 }
|
|
Definition at line 10811 of file mri_dicom_hdr.c. References lst_node::next, and lst_node::previous.
10817 { 10818 LST_NODE 10819 * ptr; 10820 10821 if ((*list)->head == NULL) {/* list is empty */ 10822 (*list)->count = 0; 10823 return NULL; 10824 } 10825 ptr = (*list)->head; /* save the head */ 10826 (*list)->head = ptr->next; /* set new head of list */ 10827 if ((*list)->head == NULL) /* if the list is now empty */ 10828 (*list)->tail = NULL; /* there is no tail anymore */ 10829 else 10830 (*list)->head->previous = NULL; /* new head has no previous */ 10831 ptr->next = NULL; /* hide data from user */ 10832 (*list)->count--; /* list has one fewer node */ 10833 /* now */ 10834 return ptr; 10835 } |
|
Definition at line 10750 of file mri_dicom_hdr.c. References CTN_FREE, LST_LISTNOTEMPTY, and LST_NORMAL.
10756 { 10757 10758 if ((*list)->count != 0) 10759 return LST_LISTNOTEMPTY; 10760 10761 CTN_FREE(*list); 10762 *list = NULL; 10763 return LST_NORMAL; 10764 } |
|
Definition at line 10769 of file mri_dicom_hdr.c. References LST_NORMAL, lst_node::next, and lst_node::previous.
10775 { 10776 node->next = NULL; /* no next node */ 10777 node->previous = (*list)->tail; /* previous is old tail */ 10778 if ((*list)->head == NULL) /* if list was empty... */ 10779 (*list)->head = node; /* it has a head now! */ 10780 else 10781 (*list)->tail->next = node; /* old tail now has a next */ 10782 10783 (*list)->tail = node; /* list now has a new tail */ 10784 (*list)->count++; /* bump the counter */ 10785 return LST_NORMAL; 10786 } |
|
Definition at line 10881 of file mri_dicom_hdr.c.
10887 {
10888 return (*list)->head;
10889 }
|
|
Definition at line 11186 of file mri_dicom_hdr.c. References l, LST_Head(), LST_Next(), and LST_Position().
11187 { 11188 LST_NODE 11189 * n; 11190 11191 n = LST_Head(l); 11192 if (n == NULL) 11193 return NULL; 11194 11195 index--; 11196 LST_Position(l, n); 11197 while (index-- > 0 && n != NULL) 11198 n = LST_Next(l); 11199 11200 return n; 11201 } |
|
Definition at line 10918 of file mri_dicom_hdr.c. References CURRENT, LST_BADEND, LST_END, LST_K_AFTER, LST_K_BEFORE, LST_NOCURRENT, LST_NORMAL, lst_node::next, OLD_NEXT, OLD_PREV, and lst_node::previous.
10926 { 10927 if ((where != LST_K_BEFORE) && (where != LST_K_AFTER)) 10928 goto badend; 10929 10930 if ((*list)->head == NULL) {/* if the list was empty */ 10931 (*list)->tail = node; /* set the tail pointer */ 10932 (*list)->head = node; /* set the head pointer */ 10933 (*list)->count = 0; /* will get bumped later... */ 10934 (node)->next = NULL; /* there is no next */ 10935 (node)->previous = NULL;/* and no previous */ 10936 10937 } else if (CURRENT == NULL) /* is he mixing semantics? */ 10938 goto nocurrent; 10939 10940 else if ((CURRENT == (*list)->head) && /* if at the head */ 10941 (where == LST_K_BEFORE)) { /* and inserting BEFORE */ 10942 node->next = CURRENT; /* splice new node in */ 10943 CURRENT->previous = node; /* before the current */ 10944 node->previous = NULL; /* new one has no previous */ 10945 (*list)->head = node; /* new one is first now */ 10946 10947 } else if ((CURRENT == (*list)->tail) && /* if at the tail */ 10948 (where == LST_K_AFTER)) { /* and inserting AFTER */ 10949 node->next = NULL; /* new node has no next */ 10950 node->previous = (*list)->tail; /* previous is old tail */ 10951 CURRENT->next = node; /* splice new node in */ 10952 (*list)->tail = node; /* new node is now the tail */ 10953 10954 } else if (where == LST_K_AFTER) { /* not a special case */ 10955 OLD_NEXT->previous = node; /* we preceed a node */ 10956 node->next = OLD_NEXT; /* the old next follows us */ 10957 node->previous = CURRENT; /* the current preceeds us */ 10958 CURRENT->next = node; /* we follow current */ 10959 10960 } else { /* not a special case */ 10961 OLD_PREV->next = node; /* we follow the previous */ 10962 node->previous = OLD_PREV; /* of current */ 10963 node->next = CURRENT; /* current follows us and */ 10964 CURRENT->previous = node; /* we preceed current */ 10965 }; 10966 10967 (*list)->count++; /* bump the counter */ 10968 (*list)->current = node; /* and set current */ 10969 return LST_NORMAL; 10970 10971 badend: 10972 return LST_BADEND; 10973 10974 nocurrent: 10975 return LST_NOCURRENT; 10976 } |
|
Definition at line 11053 of file mri_dicom_hdr.c. References CURRENT.
|
|
Definition at line 10840 of file mri_dicom_hdr.c. References lst_node::next, and lst_node::previous.
10846 { 10847 LST_NODE 10848 * ptr; 10849 10850 if ((*list)->head == NULL) {/* list is empty */ 10851 (*list)->count = 0; 10852 return NULL; 10853 } 10854 ptr = (*list)->head; /* save the head */ 10855 (*list)->head = ptr->next; /* set new head of list */ 10856 if ((*list)->head == NULL) /* if the list is now empty */ 10857 (*list)->tail = NULL; /* there is no tail anymore */ 10858 else 10859 (*list)->head->previous = NULL; /* new head has no previous */ 10860 ptr->next = NULL; /* hide data from user */ 10861 (*list)->count--; /* list has one fewer node */ 10862 /* now */ 10863 return ptr; 10864 } |
|
Definition at line 11098 of file mri_dicom_hdr.c. References CURRENT, lst_node::next, and lst_node::previous.
11103 : node = lst_position(list, lst_head(list)); 11104 * makes the node at the head of the list current 11105 * and returns a pointer to it. 11106 * 11107 * The routine tries to verify that "node" is in the list 11108 * by doing a few consistency checks. It assumes that if 11109 * any of three "known" pointers are what they should be 11110 * that all is well. Its not damnfoolproof, but... 11111 */ 11112 { 11113 if ((*list)->head == NULL) {/* list is empty */ 11114 return NULL; 11115 } 11116 if (node == NULL) 11117 return NULL; 11118 if (((node->previous == NULL) && ((*list)->head == node)) || 11119 ((node->next == NULL) && ((*list)->tail == node)) || 11120 (node->previous->next == node)) { /* its probably OK */ 11121 11122 CURRENT = node; 11123 return CURRENT; 11124 }; 11125 11126 return NULL; 11127 } |
|
Definition at line 11074 of file mri_dicom_hdr.c. References CURRENT.
11080 { 11081 if ((*list)->head == NULL) {/* list is empty */ 11082 (*list)->count = 0; 11083 return NULL; 11084 } 11085 if (CURRENT == NULL) { /* there is no CURRENT */ 11086 return NULL; 11087 } 11088 if (CURRENT->previous == NULL) { /* no PREVIOUS */ 11089 return NULL; 11090 } 11091 CURRENT = CURRENT->previous;/* found it */ 11092 return CURRENT; 11093 } |
|
Definition at line 10789 of file mri_dicom_hdr.c. References LST_NORMAL, lst_node::next, and lst_node::previous.
10796 { 10797 node->next = (*list)->head; /* set the forward link */ 10798 node->previous = NULL; /* set rearward link */ 10799 if ((*list)->tail == NULL) /* if the list was empty */ 10800 (*list)->tail = node; /* set the tail pointer */ 10801 else /* otherwise, */ 10802 (*list)->head->previous = node; /* old head now has a previous */ 10803 10804 (*list)->head = node; /* set new first node */ 10805 (*list)->count++; /* bump the counter */ 10806 return LST_NORMAL; 10807 10808 } |
|
Definition at line 10981 of file mri_dicom_hdr.c. References CURRENT, LST_END, LST_K_AFTER, LST_K_BEFORE, lst_node::next, OLD_NEXT, OLD_PREV, and lst_node::previous.
10991 { 10992 LST_NODE 10993 * ptr; 10994 10995 if ((dir != LST_K_BEFORE) && (dir != LST_K_AFTER)) 10996 goto baddir; 10997 if (CURRENT == NULL) 10998 goto nocurrent; 10999 if ((*list)->head == NULL) 11000 goto listempty; 11001 11002 ptr = CURRENT; /* save node */ 11003 11004 if (CURRENT == (*list)->head) { /* removing the head */ 11005 (*list)->head = OLD_NEXT; /* set new head of list */ 11006 if ((*list)->head == NULL) /* if the list is now empty */ 11007 (*list)->tail = NULL; /* no tail anymore either */ 11008 else 11009 (*list)->head->previous = NULL; /* new head has no previous */ 11010 if (dir == LST_K_BEFORE)/* there is nothing before */ 11011 (*list)->current = NULL; /* the head of the list */ 11012 else /* otherwise, remain */ 11013 (*list)->current = (*list)->head; /* at the head... */ 11014 11015 } else if (CURRENT == (*list)->tail) { /* removing the tail */ 11016 (*list)->tail = OLD_PREV; /* set new tail of list */ 11017 (*list)->tail->next = NULL; /* new tail has no next */ 11018 if (dir == LST_K_AFTER) /* there is nothing after */ 11019 (*list)->current = NULL; /* the tail of a list */ 11020 else /* otherwise, remain */ 11021 (*list)->current = (*list)->tail; /* at the tail... */ 11022 11023 } else { /* not a special case */ 11024 OLD_PREV->next = CURRENT->next; /* set forward pointer */ 11025 OLD_NEXT->previous = CURRENT->previous; /* set backward pointer */ 11026 if (dir == LST_K_BEFORE)/* depending on direction, */ 11027 (*list)->current = CURRENT->previous; /* set current */ 11028 else /* in the */ 11029 (*list)->current = CURRENT->next; /* list head */ 11030 } 11031 11032 (*list)->count--; /* one fewer nodes now */ 11033 ptr->previous = NULL; /* hide data from user */ 11034 ptr->next = NULL; /* hide data from user */ 11035 return ptr; 11036 11037 baddir: 11038 return NULL; 11039 11040 nocurrent: 11041 return NULL; 11042 11043 listempty: 11044 (*list)->count = 0; 11045 (*list)->current = NULL; 11046 (*list)->head = (*list)->tail = NULL; 11047 return NULL; 11048 } |
|
Definition at line 11135 of file mri_dicom_hdr.c. References AFNI_CALL_VALU_2ARG, compare(), lst_head::count, CTNBOOLEAN, lst_head::current, lst_head::head, LST_Dequeue(), LST_Enqueue(), LST_Head(), LST_Insert(), LST_K_BEFORE, LST_Next(), LST_NORMAL, LST_Position(), n1, n2, and lst_head::tail.
11136 { 11137 LST_NODE 11138 * n1, 11139 *n2; 11140 LST_HEAD 11141 temp, 11142 *head; 11143 CTNBOOLEAN 11144 inserted; 11145 int ccc ; 11146 11147 if ((*list)->head == NULL) {/* list is empty */ 11148 return LST_NORMAL; 11149 } 11150 head = &temp; 11151 head->head = NULL; 11152 head->tail = NULL; 11153 head->current = NULL; 11154 head->count = 0; 11155 11156 while ((n1 = LST_Dequeue(list)) != NULL) { 11157 n2 = LST_Head(&head); 11158 if (n2 != NULL) 11159 (void) LST_Position(&head, n2); 11160 inserted = FALSE; 11161 while (n2 != NULL && !inserted) { 11162 #if 0 11163 if (compare(n1, n2) < 0) { 11164 #else 11165 AFNI_CALL_VALU_2ARG(compare,int,ccc,LST_NODE *,n1,LST_NODE *,n2) ; 11166 if( ccc < 0 ){ 11167 #endif 11168 (void) LST_Insert(&head, n1, LST_K_BEFORE); 11169 inserted = TRUE; 11170 } else 11171 n2 = LST_Next(&head); 11172 } 11173 if (n2 == NULL) 11174 (void) LST_Enqueue(&head, n1); 11175 } 11176 **list = *head; 11177 return LST_NORMAL; 11178 } |
|
Definition at line 10906 of file mri_dicom_hdr.c.
10912 {
10913 return (*list)->tail;
10914 }
|
|
Definition at line 4179 of file mri_dicom_hdr.c. References DCM_VALUEREPRESENTATION, DIM_OF, and i.
|
|
Definition at line 203 of file mri_dicom_hdr.c. References close(), COND_PopCondition(), CONDITION, CTNBOOLEAN, DCM_CloseObject(), DCM_Debug(), DCM_DumpElements(), DCM_FormatElements(), DCM_NORMAL, DCM_OBJECT, DCM_OpenFile(), DCM_ORDERLITTLEENDIAN, DCM_PART10FILE, ENTRY, getenv(), object, p, pbuf, pxl_len, pxl_off, RETURN, RWC_clear_pbuf(), rwc_fd, RWC_printf(), RWC_set_endianosity(), rwc_vm, and STATUS.
00204 { 00205 DCM_OBJECT * object; 00206 CONDITION cond; 00207 CTNBOOLEAN verbose = FALSE , 00208 exitFlag = FALSE, 00209 formatFlag = FALSE; 00210 unsigned long 00211 options = DCM_ORDERLITTLEENDIAN; 00212 long vmLimit = rwc_vm ; /* 28 Oct 2002 */ 00213 LST_HEAD* fileNames = 0; 00214 UTL_FILEITEM* p = NULL; 00215 00216 char *ppp=NULL ; 00217 00218 ENTRY("mri_dicom_header") ; 00219 00220 if( fname == NULL ) RETURN(NULL) ; 00221 00222 RWC_set_endianosity() ; 00223 00224 { char *eee = getenv("AFNI_TRACE") ; 00225 if( eee!=NULL && (*eee=='y' || *eee=='Y') ) verbose = TRUE ; 00226 } 00227 00228 DCM_Debug(verbose); 00229 00230 RWC_clear_pbuf() ; pxl_len = 0 ; pxl_off = 0 ; 00231 00232 STATUS(fname) ; 00233 rwc_fd = -1 ; 00234 cond = DCM_OpenFile(fname, options, &object); 00235 if (cond != DCM_NORMAL && ((options & DCM_PART10FILE) == 0)) { 00236 STATUS("DCM_OpenFile open failed; try again as Part 10") ; 00237 (void) DCM_CloseObject(&object); 00238 (void) COND_PopCondition(TRUE); 00239 if( rwc_fd >= 0 ){ close(rwc_fd); rwc_fd = -1; } 00240 cond = DCM_OpenFile(fname, options | DCM_PART10FILE, &object); 00241 } 00242 if (cond == DCM_NORMAL) { 00243 STATUS("DCM_OpenFile is good") ; 00244 RWC_printf("DICOM File: %s\n", fname); 00245 if (formatFlag) 00246 cond = DCM_FormatElements(&object, vmLimit, ""); 00247 else 00248 cond = DCM_DumpElements(&object, vmLimit); 00249 } else { 00250 STATUS("DCM_OpenFile failed") ; 00251 } 00252 (void) DCM_CloseObject(&object); 00253 (void) COND_PopCondition(TRUE); 00254 00255 if( pbuf != NULL ){ 00256 ppp = strdup(pbuf) ; RWC_clear_pbuf() ; 00257 } 00258 00259 if( rwc_fd >= 0 ){ close(rwc_fd); rwc_fd = -1; } 00260 00261 RETURN(ppp); 00262 } |
|
Definition at line 173 of file mri_dicom_hdr.c. References RWC_NOHEX_MASK, and rwc_opt.
00174 { 00175 if( ii ) 00176 rwc_opt |= RWC_NOHEX_MASK ; 00177 else if( rwc_opt & RWC_NOHEX_MASK ) 00178 rwc_opt ^= RWC_NOHEX_MASK ; 00179 } |
|
Definition at line 165 of file mri_dicom_hdr.c. References RWC_NONAME_MASK, and rwc_opt.
00166 { 00167 if( ii ) 00168 rwc_opt |= RWC_NONAME_MASK ; 00169 else if( rwc_opt & RWC_NONAME_MASK ) 00170 rwc_opt ^= RWC_NONAME_MASK ; 00171 } |
|
Definition at line 153 of file mri_dicom_hdr.c. References pxl_len, and pxl_off.
|
|
Definition at line 194 of file mri_dicom_hdr.c. References rwc_err.
00195 { 00196 rwc_err = vv ; /* 07 May 2003: an error will subtract 1 from rwc_err */ 00197 } |
|
Definition at line 185 of file mri_dicom_hdr.c. References rwc_vm.
00186 { 00187 rwc_vm = vv ; 00188 } |
|
Definition at line 3547 of file mri_dicom_hdr.c. References COND_PushCondition(), CTN_MALLOC, CTNBOOLEAN, DCM_ELEMENTCREATEFAILED, DCM_Message(), DCM_NORMAL, DCM_SQ, DCM_TAG_ELEMENT, DCM_TAG_GROUP, l, DCM_ELEMENT::length, NATIVE_ORDER, DCM_ELEMENT::representation, DCM_ELEMENT::tag, and U32.
03549 { 03550 U32 03551 l; 03552 03553 if (allocateData && (src->representation != DCM_SQ)) { 03554 l = src->length; 03555 if (l & 1) 03556 l++; 03557 } else 03558 l = 0; 03559 03560 if (debug) 03561 fprintf(stderr, "newElementItem: CTN_MALLOC %8d %8d ", l, 03562 (int)(sizeof(PRV_ELEMENT_ITEM) + l)); 03563 03564 *dst = (PRV_ELEMENT_ITEM *) CTN_MALLOC(sizeof(PRV_ELEMENT_ITEM) + l); 03565 if (debug) 03566 fprintf(stderr, "%8p\n", *dst); 03567 03568 if (*dst == NULL) { 03569 return COND_PushCondition(DCM_ELEMENTCREATEFAILED, 03570 DCM_Message(DCM_ELEMENTCREATEFAILED), "newElementItem", 03571 DCM_TAG_GROUP(src->tag), 03572 DCM_TAG_ELEMENT(src->tag), 03573 l); 03574 } 03575 memset(*dst, 0, sizeof(PRV_ELEMENT_ITEM)); 03576 (*dst)->element = *src; 03577 (*dst)->byteOrder = NATIVE_ORDER; 03578 (*dst)->allocatedDataLength = (size_t) l; 03579 (*dst)->originalDataLength = src->length; 03580 (*dst)->paddedDataLength = src->length; 03581 if (allocateData) 03582 (*dst)->element.d.ot = ((char *) (*dst)) + sizeof(PRV_ELEMENT_ITEM); 03583 else 03584 (*dst)->element.d.ot = NULL; 03585 03586 (*dst)->fragmentFlag = 0; 03587 return DCM_NORMAL; 03588 } |
|
Definition at line 6738 of file mri_dicom_hdr.c. References BYTEORDER_SAME, COND_PushCondition(), CONDITION, CTNBOOLEAN, DCM_AT, DCM_CloseObject(), DCM_FILEACCESSERROR, DCM_Message(), DCM_NORMAL, DCM_OB, DCM_OBJECT, DCM_OW, DCM_PXLPIXELDATA, DCM_UNSPECIFIEDLENGTH, fd, name, newElementItem(), object, pxl_len, pxl_off, read(), scanCompressedPixels(), swapATGroupElement(), swapInPlace(), DCM_ELEMENT::tag, U32, and verifyFormat().
06746 { 06747 CTNBOOLEAN pixelFlag; 06748 CONDITION cond; 06749 int nBytes; 06750 06751 pixelFlag = (e->tag == DCM_PXLPIXELDATA); 06752 cond = newElementItem(e, (pixelFlag == FALSE), elementItem); 06753 if (cond != DCM_NORMAL) { 06754 (void) DCM_CloseObject((DCM_OBJECT **) object); 06755 return cond; 06756 } 06757 (*elementItem)->element.data_offset = 0 ; /* RWCox */ 06758 if (pixelFlag) { 06759 if (fileFlag) 06760 *remainOpenFlag = TRUE; 06761 (*elementItem)->byteOrder = byteOrder; 06762 (*elementItem)->dataOffset = *fileOffset; 06763 (*elementItem)->currentOffset = 0; 06764 (*elementItem)->element.d.ot = NULL; 06765 if ((*object)->pixelBitsAllocated == 8) 06766 (*elementItem)->element.representation = DCM_OB; 06767 else 06768 (*elementItem)->element.representation = DCM_OW; 06769 if (fileFlag) { 06770 if (fd != -1) { 06771 if ((*elementItem)->element.length != DCM_UNSPECIFIEDLENGTH){ 06772 06773 pxl_off = lseek( fd , 0 , SEEK_CUR ) ; 06774 pxl_len = (*elementItem)->element.length ; 06775 06776 (*elementItem)->element.data_offset = pxl_off ; /* RWCox */ 06777 06778 (void) lseek(fd, 06779 (off_t) (*elementItem)->element.length, 06780 SEEK_CUR); 06781 } else { 06782 U32 l1 = 0; 06783 U32 s1; 06784 off_t f1 = 0; 06785 06786 s1 = *size; 06787 scanCompressedPixels("", ptr, fd, 06788 &s1, /* size */ 06789 &f1, /* fileOffset */ 06790 0, 0, 06791 byteOrder, explicitVR, 06792 acceptVRMismatch, 06793 fileFlag, remainOpenFlag, 06794 convertFlag, object, 06795 &l1, /* scannedLength */ 06796 e, elementItem); 06797 (*elementItem)->originalDataLength = l1; 06798 (*elementItem)->paddedDataLength = l1; 06799 } 06800 } else { 06801 (*object)->sk((*object)->userCtx, 06802 (*elementItem)->element.length, SEEK_CUR); 06803 } 06804 (*object)->fd = fd; 06805 } 06806 } else { 06807 if (fileFlag) { 06808 if (fd != -1) { 06809 (*elementItem)->element.data_offset = lseek(fd,0,SEEK_CUR); /* RWCox */ 06810 nBytes = read(fd, (*elementItem)->element.d.ot, 06811 (int) (*elementItem)->element.length); 06812 } else { 06813 cond = (*object)->rd((*object)->userCtx, 06814 (*elementItem)->element.d.ot, 06815 (long) (*elementItem)->element.length, &nBytes); 06816 } 06817 if (nBytes != (int) (*elementItem)->element.length) { 06818 (void) DCM_CloseObject((DCM_OBJECT **) object); 06819 return COND_PushCondition(DCM_FILEACCESSERROR, 06820 DCM_Message(DCM_FILEACCESSERROR), name, "readFile"); 06821 } 06822 } else { 06823 (void) memcpy((*elementItem)->element.d.ot, ptr, 06824 (*elementItem)->element.length); 06825 ptr += (*elementItem)->originalDataLength; 06826 } 06827 if( LITTLE_ENDIAN_ARCHITECTURE ){ 06828 if ((*elementItem)->element.representation == DCM_AT) 06829 swapATGroupElement(&(*elementItem)->element); 06830 } 06831 if (byteOrder != BYTEORDER_SAME) 06832 swapInPlace(object, &(*elementItem)->element); 06833 if (convertFlag) { 06834 cond = verifyFormat(*elementItem); 06835 if (cond != DCM_NORMAL) 06836 return cond; 06837 } 06838 } 06839 if (*size != (long) DCM_UNSPECIFIEDLENGTH) 06840 *size -= (*elementItem)->originalDataLength; 06841 *fileOffset += (off_t) (*elementItem)->originalDataLength; 06842 if (scannedLength != NULL) 06843 (*scannedLength) += (*elementItem)->originalDataLength; 06844 06845 if ((*elementItem)->element.length != DCM_UNSPECIFIEDLENGTH) { 06846 (*elementItem)->paddedDataLength = (*elementItem)->element.length; 06847 } 06848 if (((*elementItem)->paddedDataLength != DCM_UNSPECIFIEDLENGTH) && 06849 ((*elementItem)->paddedDataLength & 1) ) 06850 (*elementItem)->paddedDataLength += 1; 06851 (*object)->objectSize += (*elementItem)->paddedDataLength; 06852 06853 return DCM_NORMAL; 06854 06855 } |
|
Definition at line 5728 of file mri_dicom_hdr.c. References PRV_GROUP_ITEM::baseLength, BIG_ORDER, PRV_ELEMENT_ITEM::byteOrder, BYTEORDER_SAME, computeVM(), COND_PopCondition(), COND_PushCondition(), CONDITION, CTN_FREE, CTN_MALLOC, CTNBOOLEAN, ctxSensitiveLookup(), PRV_ELEMENT_ITEM::currentOffset, DCM_ELEMENT::d, PRV_ELEMENT_ITEM::dataOffset, DCM_AT, DCM_CloseObject(), DCM_CONVERTMASK, DCM_CreateObject(), DCM_CTX, DCM_DELETEMASK, DCM_DELETEONCLOSE, DCM_DLMITEM, DCM_DLMITEMDELIMITATIONITEM, DCM_DLMSEQUENCEDELIMITATIONITEM, DCM_DumpElements(), DCM_ELEMENTCREATEFAILED, DCM_ELEMENTLENGTHERROR, DCM_ELEMENTOUTOFORDER, DCM_EXPLICITBIGENDIAN, DCM_EXPLICITLITTLEENDIAN, DCM_FILEACCESSERROR, DCM_FORMATCONVERSION, DCM_ILLEGALSTREAMLENGTH, DCM_LISTFAILURE, DCM_LookupElement(), DCM_MAKETAG, DCM_MALLOCFAILURE, DCM_Message(), DCM_NORMAL, DCM_OB, DCM_OBJECT, DCM_ORDERBIGENDIAN, DCM_ORDERLITTLEENDIAN, DCM_ORDERMASK, DCM_ORDERNATIVE, DCM_OW, DCM_PXLPIXELDATA, DCM_SQ, DCM_TAG_ELEMENT, DCM_TAG_GROUP, DCM_UNEVENELEMENTLENGTH, DCM_UNSPECIFIEDLENGTH, PRV_ELEMENT_ITEM::element, PRV_GROUP_ITEM::elementList, fd, GET_LONG_REVERSE_ORDER, GET_LONG_SAME_ORDER, GET_SHORT_REVERSE_ORDER, GET_SHORT_SAME_ORDER, PRV_GROUP_ITEM::group, DCM_ELEMENT::length, LITTLE_ORDER, PRV_GROUP_ITEM::longVRAttributes, LST_Create(), LST_Enqueue(), LST_Head(), LST_Next(), LST_NORMAL, LST_Position(), name, NATIVE_ORDER, newElementItem(), DCM_SEQUENCE_ITEM::object, object, offset, PRV_ELEMENT_ITEM::originalDataLength, PRV_ELEMENT_ITEM::paddedDataLength, read(), readFile(), DCM_ELEMENT::representation, swapATGroupElement(), swapInPlace(), DCM_ELEMENT::tag, U32, updateObjectType(), updateSpecialElements(), and verifyFormat().
05735 { 05736 CONDITION 05737 cond; 05738 int 05739 byteOrder; 05740 long 05741 lastGroup = -1, 05742 lastElement = -1; 05743 U32 05744 sequenceLength, 05745 localLength; 05746 PRIVATE_OBJECT 05747 ** object; 05748 PRV_GROUP_ITEM 05749 * groupItem = NULL; 05750 unsigned short 05751 group, 05752 element, 05753 tagGroup, 05754 tagElement; 05755 DCM_ELEMENT 05756 e, 05757 tagE; 05758 CTNBOOLEAN 05759 pixelFlag, 05760 convertFlag = FALSE, 05761 done = FALSE, 05762 knownLength = TRUE, 05763 sequenceDone = FALSE, 05764 createGroupFlag, 05765 explicitVR = FALSE; 05766 unsigned char 05767 buf[8], 05768 *ptr; 05769 int 05770 nBytes; 05771 PRV_ELEMENT_ITEM 05772 * elementItem = NULL; 05773 DCM_OBJECT 05774 * sequenceObject; 05775 DCM_SEQUENCE_ITEM 05776 * sequenceItem; 05777 CTNBOOLEAN 05778 fileFlag = TRUE; 05779 05780 if (callerBuf != NULL) { 05781 ptr = callerBuf; 05782 fileFlag = FALSE; 05783 } else 05784 ptr = buf; 05785 05786 switch (opt & DCM_ORDERMASK) { 05787 case DCM_ORDERNATIVE: 05788 byteOrder = NATIVE_ORDER; 05789 break; 05790 case DCM_ORDERLITTLEENDIAN: 05791 byteOrder = LITTLE_ORDER; 05792 break; 05793 case DCM_EXPLICITLITTLEENDIAN: 05794 byteOrder = LITTLE_ORDER; 05795 explicitVR = TRUE; 05796 break; 05797 case DCM_ORDERBIGENDIAN: 05798 byteOrder = BIG_ORDER; 05799 break; 05800 case DCM_EXPLICITBIGENDIAN: 05801 byteOrder = BIG_ORDER; 05802 explicitVR = TRUE; 05803 break; 05804 default: 05805 byteOrder = NATIVE_ORDER; 05806 break; 05807 } 05808 if ((opt & DCM_CONVERTMASK) == DCM_FORMATCONVERSION) 05809 convertFlag = TRUE; 05810 05811 if (scannedLength != NULL) 05812 *scannedLength = 0; 05813 05814 cond = DCM_CreateObject(callerObject, opt); 05815 if (cond != DCM_NORMAL) 05816 return cond; 05817 05818 object = (PRIVATE_OBJECT **) callerObject; 05819 if (fileFlag) 05820 strcpy((*object)->fileName, name); 05821 05822 (*object)->fd = -1; 05823 (*object)->rd = rd; 05824 (*object)->sk = sk; 05825 (*object)->userCtx = ctx; 05826 if (size == (long) DCM_UNSPECIFIEDLENGTH) 05827 knownLength = FALSE; 05828 05829 if ((fileFlag) && ((opt & DCM_DELETEMASK) == DCM_DELETEONCLOSE) && (recursionLevel == 0)) 05830 (*object)->deleteFlag = TRUE; 05831 05832 if (knownLength && (size == 0)) 05833 done = TRUE; 05834 05835 while (!done) { 05836 05837 if ((size < 8) && knownLength) { 05838 if (debug) 05839 (void) DCM_DumpElements(callerObject, 0); 05840 (void) DCM_CloseObject(callerObject); 05841 return COND_PushCondition(DCM_ILLEGALSTREAMLENGTH, 05842 DCM_Message(DCM_ILLEGALSTREAMLENGTH), size, 05843 "readFile"); 05844 } 05845 if (fileFlag) { 05846 if (fd != -1) { 05847 nBytes = read(fd, buf, 4); 05848 } else { 05849 cond = (*object)->rd((*object)->userCtx, buf, 4, &nBytes); 05850 } 05851 05852 if (nBytes != 4) 05853 return COND_PushCondition(DCM_FILEACCESSERROR, 05854 DCM_Message(DCM_FILEACCESSERROR), name, 05855 "readFile"); 05856 ptr = buf; 05857 } 05858 if (knownLength) 05859 size -= 4; 05860 fileOffset += (off_t) 4; 05861 if (scannedLength != NULL) 05862 (*scannedLength) += 4; 05863 (*object)->objectSize += 4; 05864 05865 if (byteOrder == BYTEORDER_SAME) { 05866 GET_SHORT_SAME_ORDER(ptr, group); 05867 GET_SHORT_SAME_ORDER(ptr + 2, element); 05868 e.tag = DCM_MAKETAG(group, element); 05869 } else { 05870 GET_SHORT_REVERSE_ORDER(ptr, group); 05871 GET_SHORT_REVERSE_ORDER(ptr + 2, element); 05872 e.tag = DCM_MAKETAG(group, element); 05873 } 05874 ptr += 4; 05875 05876 if (explicitVR) { 05877 if (fileFlag) { 05878 if (fd != -1) { 05879 nBytes = read(fd, buf, 4); 05880 } else { 05881 cond = (*object)->rd((*object)->userCtx, buf, 4, &nBytes); 05882 } 05883 05884 if (nBytes != 4) 05885 return COND_PushCondition(DCM_FILEACCESSERROR, 05886 DCM_Message(DCM_FILEACCESSERROR), name, 05887 "readFile"); 05888 ptr = buf; 05889 } 05890 if (knownLength) 05891 size -= 4; 05892 fileOffset += (off_t) 4; 05893 if (scannedLength != NULL) 05894 (*scannedLength) += 4; 05895 (*object)->objectSize += 4; 05896 if ((strncmp((char *) ptr, "OB", 2) == 0) || 05897 (strncmp((char *) ptr, "OW", 2) == 0) || 05898 (strncmp((char *) ptr, "SQ", 2) == 0)) { 05899 } else { 05900 } 05901 } else { 05902 05903 if (fileFlag) { 05904 if (fd != -1) { 05905 nBytes = read(fd, buf, 4); 05906 } else { 05907 cond = (*object)->rd((*object)->userCtx, buf, 4, &nBytes); 05908 } 05909 05910 if (nBytes != 4) 05911 return COND_PushCondition(DCM_FILEACCESSERROR, 05912 DCM_Message(DCM_FILEACCESSERROR), name, 05913 "readFile"); 05914 ptr = buf; 05915 } 05916 if (knownLength) 05917 size -= 4; 05918 fileOffset += (off_t) 4; 05919 if (scannedLength != NULL) 05920 (*scannedLength) += 4; 05921 (*object)->objectSize += 4; 05922 05923 05924 if (byteOrder == BYTEORDER_SAME) { 05925 GET_LONG_SAME_ORDER(ptr, e.length); 05926 } else { 05927 GET_LONG_REVERSE_ORDER(ptr, e.length); 05928 } 05929 ptr += 4; 05930 } 05931 05932 if (((e.length & 1) != 0) && (e.length != DCM_UNSPECIFIEDLENGTH)) { 05933 if (debug) 05934 (void) DCM_DumpElements(callerObject, 0); 05935 (void) DCM_CloseObject(callerObject); 05936 return COND_PushCondition(DCM_UNEVENELEMENTLENGTH, 05937 DCM_Message(DCM_UNEVENELEMENTLENGTH), 05938 group, element, e.length, 05939 "readFile"); 05940 } 05941 if ((e.length != (U32) DCM_UNSPECIFIEDLENGTH) && (e.length > (U32) size)) { 05942 if (debug) 05943 (void) DCM_DumpElements(callerObject, 0); 05944 (void) DCM_CloseObject(callerObject); 05945 return COND_PushCondition(DCM_ELEMENTLENGTHERROR, 05946 DCM_Message(DCM_ELEMENTLENGTHERROR), 05947 group, element, e.length, size, "readFile"); 05948 } 05949 if ((e.tag == DCM_DLMITEMDELIMITATIONITEM) || 05950 (e.tag == DCM_DLMSEQUENCEDELIMITATIONITEM)) { 05951 return DCM_NORMAL; 05952 } 05953 cond = DCM_LookupElement(&e); 05954 if (cond != DCM_NORMAL) 05955 (void) COND_PopCondition(0); 05956 if (e.representation == DCM_CTX) 05957 ctxSensitiveLookup(object, &e); 05958 05959 if (e.representation == DCM_SQ) { 05960 cond = newElementItem(&e, FALSE, &elementItem); 05961 if (cond != DCM_NORMAL) 05962 return cond; 05963 elementItem->element.d.sq = LST_Create(); 05964 if (elementItem->element.d.sq == NULL) 05965 return COND_PushCondition(DCM_LISTFAILURE, 05966 DCM_Message(DCM_LISTFAILURE), "readFile"); 05967 05968 localLength = elementItem->element.length; 05969 sequenceDone = (localLength == 0); 05970 05971 while (!sequenceDone) { 05972 if (debug) 05973 fprintf(stderr, "Sequence Length: %d %x\n", localLength, 05974 localLength); 05975 if (fileFlag) { 05976 if (fd != -1) { 05977 nBytes = read(fd, buf, 8); 05978 } else { 05979 cond = (*object)->rd((*object)->userCtx, buf, 8, &nBytes); 05980 } 05981 if (nBytes != 8) 05982 return COND_PushCondition(DCM_FILEACCESSERROR, 05983 DCM_Message(DCM_FILEACCESSERROR), name, 05984 "readFile"); 05985 ptr = buf; 05986 } 05987 if (size != (long) DCM_UNSPECIFIEDLENGTH) 05988 size -= 8; 05989 fileOffset += (off_t) 8; 05990 if (scannedLength != NULL) 05991 (*scannedLength) += 8; 05992 (*object)->objectSize += 8; 05993 if (localLength != DCM_UNSPECIFIEDLENGTH) 05994 localLength -= 8; 05995 05996 if (byteOrder == BYTEORDER_SAME) { 05997 GET_SHORT_SAME_ORDER(ptr, tagGroup); 05998 GET_SHORT_SAME_ORDER(ptr + 2, tagElement); 05999 tagE.tag = DCM_MAKETAG(tagGroup, tagElement); 06000 GET_LONG_SAME_ORDER(ptr + 4, tagE.length); 06001 } else { 06002 GET_SHORT_REVERSE_ORDER(ptr, tagGroup); 06003 GET_SHORT_REVERSE_ORDER(ptr + 2, tagElement); 06004 tagE.tag = DCM_MAKETAG(tagGroup, tagElement); 06005 GET_LONG_REVERSE_ORDER(ptr + 4, tagE.length); 06006 } 06007 ptr += 8; 06008 if (debug) 06009 fprintf(stderr, "Sequence item: %4x %4x %d (%x)\n", 06010 tagGroup, tagElement, tagE.length, tagE.length); 06011 if (tagE.tag == DCM_DLMITEM) { 06012 /* if (size != DCM_UNSPECIFIEDLENGTH) 06013 size -= 8; 06014 */ 06015 /* fileOffset += 8; 06016 */ 06017 cond = readFile(name, 06018 (fileFlag) ? NULL : ptr, 06019 fd, tagE.length, 06020 fileOffset, recursionLevel + 1, opt, 06021 &sequenceObject, &sequenceLength, 06022 remainOpenFlag, ctx, rd, sk); 06023 if (cond == DCM_NORMAL) { 06024 sequenceItem = CTN_MALLOC(sizeof(*sequenceItem)); 06025 if (sequenceItem == NULL) 06026 return COND_PushCondition(DCM_MALLOCFAILURE, 06027 DCM_Message(DCM_MALLOCFAILURE), 06028 sizeof(*sequenceItem), "readFile"); 06029 06030 sequenceItem->object = sequenceObject; 06031 cond = LST_Enqueue(&elementItem->element.d.sq, 06032 (void *)sequenceItem); 06033 if (cond != LST_NORMAL) 06034 return COND_PushCondition(DCM_LISTFAILURE, 06035 DCM_Message(DCM_LISTFAILURE), "readFile"); 06036 if (size != (long) DCM_UNSPECIFIEDLENGTH) 06037 size -= sequenceLength; 06038 fileOffset += (off_t) sequenceLength; 06039 if (scannedLength != NULL) 06040 *scannedLength += sequenceLength; 06041 (*object)->objectSize += sequenceLength; 06042 if (localLength != DCM_UNSPECIFIEDLENGTH) 06043 localLength -= sequenceLength; 06044 ptr += sequenceLength; 06045 } else 06046 return cond; 06047 } else { 06048 sequenceDone = TRUE; 06049 } 06050 if (localLength == 0) 06051 sequenceDone = TRUE; 06052 } 06053 } else { 06054 pixelFlag = (e.tag == DCM_PXLPIXELDATA); 06055 cond = newElementItem(&e, (pixelFlag == FALSE), &elementItem); 06056 if (cond != DCM_NORMAL) { 06057 (void) DCM_CloseObject(callerObject); 06058 return cond; 06059 } 06060 if (pixelFlag) { 06061 if (fileFlag) 06062 *remainOpenFlag = TRUE; 06063 elementItem->byteOrder = byteOrder; 06064 elementItem->dataOffset = fileOffset; 06065 elementItem->currentOffset = 0; 06066 if (fileFlag) 06067 elementItem->element.d.ot = NULL; 06068 else 06069 elementItem->element.d.ot = (void *) ptr; 06070 if ((*object)->pixelBitsAllocated == 8) 06071 elementItem->element.representation = DCM_OB; 06072 else 06073 elementItem->element.representation = DCM_OW; 06074 if (fileFlag) { 06075 if (fd != -1) { 06076 (void) lseek(fd, (off_t) elementItem->element.length, SEEK_CUR); 06077 } else { 06078 (*object)->sk((*object)->userCtx, 06079 elementItem->element.length, SEEK_CUR); 06080 } 06081 (*object)->fd = fd; 06082 } 06083 } else { 06084 if (fileFlag) { 06085 if (fd != -1) { 06086 nBytes = read(fd, elementItem->element.d.ot, 06087 (int) elementItem->element.length); 06088 } else { 06089 cond = (*object)->rd((*object)->userCtx, 06090 elementItem->element.d.ot, 06091 (long) elementItem->element.length, &nBytes); 06092 } 06093 if (nBytes != (int) elementItem->element.length) { 06094 (void) DCM_CloseObject(callerObject); 06095 return COND_PushCondition(DCM_FILEACCESSERROR, 06096 DCM_Message(DCM_FILEACCESSERROR), name, "readFile"); 06097 } 06098 } else { 06099 (void) memcpy(elementItem->element.d.ot, ptr, 06100 elementItem->element.length); 06101 ptr += elementItem->originalDataLength; 06102 } 06103 06104 if( LITTLE_ENDIAN_ARCHITECTURE ){ 06105 if (elementItem->element.representation == DCM_AT) 06106 swapATGroupElement(&elementItem->element); 06107 } 06108 if (byteOrder != BYTEORDER_SAME) 06109 swapInPlace(object, &elementItem->element); 06110 if (convertFlag) { 06111 cond = verifyFormat(elementItem); 06112 if (cond != DCM_NORMAL) 06113 return cond; 06114 } 06115 } 06116 if (size != (long) DCM_UNSPECIFIEDLENGTH) 06117 size -= elementItem->originalDataLength; 06118 fileOffset += (off_t) elementItem->originalDataLength; 06119 if (scannedLength != NULL) 06120 (*scannedLength) += elementItem->originalDataLength; 06121 06122 elementItem->paddedDataLength = elementItem->element.length; 06123 if (elementItem->paddedDataLength & 1) 06124 elementItem->paddedDataLength += 1; 06125 (*object)->objectSize += elementItem->paddedDataLength; 06126 } 06127 06128 computeVM(object, &elementItem->element); 06129 06130 if ((long) DCM_TAG_GROUP(e.tag) == lastGroup) { 06131 if ((long) DCM_TAG_ELEMENT(e.tag) <= lastElement) 06132 return COND_PushCondition(DCM_ELEMENTOUTOFORDER, 06133 DCM_Message(DCM_ELEMENTOUTOFORDER), 06134 group, element, "readFile"); 06135 } else if ((long) DCM_TAG_GROUP(e.tag) > lastGroup) { 06136 } else { 06137 return COND_PushCondition(DCM_ELEMENTOUTOFORDER, 06138 DCM_Message(DCM_ELEMENTOUTOFORDER), group, element, 06139 "readFile"); 06140 } 06141 lastGroup = (long) group; 06142 lastElement = (long) element; 06143 06144 if (groupItem == NULL) 06145 createGroupFlag = TRUE; 06146 else if (groupItem->group != group) 06147 createGroupFlag = TRUE; 06148 else 06149 createGroupFlag = FALSE; 06150 06151 if (createGroupFlag == TRUE) { 06152 groupItem = CTN_MALLOC(sizeof(*groupItem)); 06153 if (groupItem == NULL) { 06154 (void) DCM_CloseObject(callerObject); 06155 return COND_PushCondition(DCM_ELEMENTCREATEFAILED, 06156 DCM_Message(DCM_ELEMENTCREATEFAILED), 06157 "readFile", 06158 group, 0xffff, sizeof(*groupItem)); 06159 } 06160 groupItem->group = group; 06161 groupItem->baseLength = 0; 06162 groupItem->longVRAttributes = 0; 06163 groupItem->elementList = LST_Create(); 06164 if (groupItem->elementList == NULL) { 06165 (void) DCM_CloseObject(callerObject); 06166 return COND_PushCondition(DCM_LISTFAILURE, 06167 DCM_Message(DCM_LISTFAILURE), 06168 "readFile"); 06169 } 06170 if (LST_Enqueue(&(*object)->groupList, (void *)groupItem) != LST_NORMAL) { 06171 (void) DCM_CloseObject(callerObject); 06172 return COND_PushCondition(DCM_LISTFAILURE, 06173 DCM_Message(DCM_LISTFAILURE), 06174 "readFile"); 06175 } 06176 } 06177 if (element != 0x0000) 06178 groupItem->baseLength += 8 + elementItem->paddedDataLength; 06179 if ((element == 0x0000) && ((*object)->groupLengthFlag == FALSE)) { 06180 CTN_FREE(elementItem); 06181 } else { 06182 cond = LST_Enqueue(&groupItem->elementList, (void *)elementItem); 06183 if (cond != LST_NORMAL) { 06184 (void) DCM_CloseObject(callerObject); 06185 return COND_PushCondition(DCM_LISTFAILURE, 06186 DCM_Message(DCM_LISTFAILURE), 06187 "readFile"); 06188 } 06189 cond = updateObjectType(object, &elementItem->element); /* repair */ 06190 06191 cond = updateSpecialElements(object, elementItem); /* repair */ 06192 } 06193 06194 if (size == 0) 06195 done = TRUE; 06196 06197 #ifdef DEBUG 06198 if (debug) { 06199 /*lint -e644 */ 06200 (void) fprintf(stderr, "Address: %px Group %2x, element %2x, length %ld ", 06201 elementItem, 06202 DCM_TAG_GROUP(elementItem->element.tag), 06203 DCM_TAG_ELEMENT(elementItem->element.tag), 06204 elementItem->element.length); 06205 /*lint +e644 */ 06206 (void) fprintf(stderr, "Object size: %d\n", (*object)->objectSize); 06207 } 06208 #endif 06209 } 06210 06211 groupItem = (void *)LST_Head(&(*object)->groupList); 06212 if (groupItem != NULL) { 06213 (void) LST_Position(&(*object)->groupList, (void *)groupItem); 06214 while (groupItem != NULL) { 06215 elementItem = (void *)LST_Head(&groupItem->elementList); 06216 if (elementItem != NULL) { 06217 if (DCM_TAG_ELEMENT(elementItem->element.tag) == 0x0000) { 06218 *elementItem->element.d.ul = groupItem->baseLength; 06219 } 06220 } 06221 groupItem = (void *)LST_Next(&(*object)->groupList); 06222 } 06223 } 06224 return DCM_NORMAL; 06225 } |
|
Definition at line 6930 of file mri_dicom_hdr.c. References PRV_GROUP_ITEM::baseLength, BIG_ORDER, checkAttributeOrder(), computeVM(), COND_PushCondition(), CONDITION, CTN_FREE, CTNBOOLEAN, DCM_ELEMENT::d, DCM_ACCEPTVRMISMATCH, DCM_ALLOWREPEATELEMENTS, DCM_CloseObject(), DCM_CONVERTMASK, DCM_CreateObject(), DCM_DELETEMASK, DCM_DELETEONCLOSE, DCM_DLMITEMDELIMITATIONITEM, DCM_DLMSEQUENCEDELIMITATIONITEM, DCM_EFILM, DCM_EXPLICITBIGENDIAN, DCM_EXPLICITLITTLEENDIAN, DCM_FILEFORMATMASK, DCM_FORMATCONVERSION, DCM_LISTFAILURE, DCM_MAKETAG, DCM_Message(), DCM_NORMAL, DCM_OB, DCM_OBJECT, DCM_ORDERBIGENDIAN, DCM_ORDERLITTLEENDIAN, DCM_ORDERMASK, DCM_ORDERNATIVE, DCM_OW, DCM_PART10FILE, DCM_PREAMBLELENGTH, DCM_REPEATEDELEMENT, DCM_REPEATELEMENTSMASK, DCM_SPECIALFORMATMASK, DCM_SQ, DCM_STREAMCOMPLETE, DCM_TAG_ELEMENT, DCM_TAG_GROUP, DCM_UN, DCM_UNSPECIFIEDLENGTH, DCM_VRMASK, PRV_ELEMENT_ITEM::element, PRV_GROUP_ITEM::elementList, ENTRY, fd, handleGroupItem(), DCM_ELEMENT::length, LITTLE_ORDER, PRV_GROUP_ITEM::longVRAttributes, LST_Enqueue(), LST_Head(), LST_Next(), LST_NORMAL, LST_Position(), name, NATIVE_ORDER, object, offset, PRV_ELEMENT_ITEM::paddedDataLength, readData(), readGroupElement(), readPreamble(), readSequence(), readVRLength(), DCM_ELEMENT::representation, RETURN, STATUS, DCM_ELEMENT::tag, U32, updateObjectType(), and updateSpecialElements().
06938 { 06939 CONDITION 06940 cond; 06941 int 06942 byteOrder; 06943 long 06944 lastGroup = -1, 06945 lastElement = -1; 06946 U32 06947 sequenceLength, 06948 scannedSequenceLength; 06949 PRIVATE_OBJECT 06950 ** object; 06951 PRV_GROUP_ITEM 06952 * groupItem = NULL; 06953 DCM_ELEMENT 06954 e; 06955 CTNBOOLEAN 06956 convertFlag = FALSE, 06957 done = FALSE, 06958 knownLength = TRUE, 06959 explicitVR = FALSE, 06960 acceptVRMismatch = FALSE, 06961 part10Flag = FALSE; 06962 unsigned char 06963 *ptr = NULL; 06964 PRV_ELEMENT_ITEM 06965 * elementItem = NULL; 06966 CTNBOOLEAN 06967 fileFlag = TRUE; 06968 CONDITION flag; 06969 CTNBOOLEAN allowRepeatElements = FALSE; 06970 06971 ENTRY("readFile1") ; 06972 06973 ptr = callerBuf; 06974 if (ptr != NULL) 06975 fileFlag = FALSE; 06976 06977 if ((opt & DCM_FILEFORMATMASK) == DCM_PART10FILE) { 06978 part10Flag = TRUE; 06979 opt &= ~DCM_ORDERMASK; 06980 opt &= ~DCM_FILEFORMATMASK; 06981 opt |= DCM_EXPLICITLITTLEENDIAN; 06982 } 06983 if ((opt & DCM_SPECIALFORMATMASK) == DCM_EFILM) { 06984 part10Flag = TRUE; 06985 opt &= ~DCM_ORDERMASK; 06986 opt &= ~DCM_FILEFORMATMASK; 06987 opt |= DCM_ORDERLITTLEENDIAN; 06988 } 06989 if ((opt & DCM_REPEATELEMENTSMASK) == DCM_ALLOWREPEATELEMENTS) { 06990 allowRepeatElements = TRUE; 06991 } 06992 06993 switch (opt & DCM_ORDERMASK) { 06994 case DCM_ORDERNATIVE: 06995 byteOrder = NATIVE_ORDER; 06996 break; 06997 case DCM_ORDERLITTLEENDIAN: 06998 byteOrder = LITTLE_ORDER; 06999 break; 07000 case DCM_EXPLICITLITTLEENDIAN: 07001 byteOrder = LITTLE_ORDER; 07002 explicitVR = TRUE; 07003 break; 07004 case DCM_ORDERBIGENDIAN: 07005 byteOrder = BIG_ORDER; 07006 break; 07007 case DCM_EXPLICITBIGENDIAN: 07008 byteOrder = BIG_ORDER; 07009 explicitVR = TRUE; 07010 break; 07011 default: 07012 byteOrder = NATIVE_ORDER; 07013 break; 07014 } 07015 if ((opt & DCM_CONVERTMASK) == DCM_FORMATCONVERSION) 07016 convertFlag = TRUE; 07017 if ((opt & DCM_VRMASK) == DCM_ACCEPTVRMISMATCH) 07018 acceptVRMismatch = TRUE; 07019 07020 if (scannedLength != NULL) 07021 *scannedLength = 0; 07022 07023 cond = DCM_CreateObject(callerObject, opt); 07024 if (cond != DCM_NORMAL) 07025 RETURN( cond ) ; 07026 07027 object = (PRIVATE_OBJECT **) callerObject; 07028 if (fileFlag) 07029 strcpy((*object)->fileName, name); 07030 07031 (*object)->fd = -1; 07032 (*object)->rd = rd; 07033 (*object)->sk = sk; 07034 (*object)->userCtx = ctx; 07035 (*object)->dataOptions = 0; 07036 if (size == (long) DCM_UNSPECIFIEDLENGTH) 07037 knownLength = FALSE; 07038 07039 if ((fileFlag) && ((opt & DCM_DELETEMASK) == DCM_DELETEONCLOSE) && (recursionLevel == 0)) 07040 (*object)->deleteFlag = TRUE; 07041 07042 if (parentObject != NULL) 07043 (*object)->pixelRepresentation = (*parentObject)->pixelRepresentation; 07044 07045 if (recursionLevel == 0 && part10Flag) { 07046 flag = readPreamble(name, &ptr, fd, &size, fileOffset, knownLength, 07047 object, scannedLength); 07048 if (flag != DCM_NORMAL) 07049 { STATUS("readPreamble fails"); goto abort; } 07050 } 07051 while (!done) { 07052 flag = readGroupElement(name, &ptr, fd, &size, fileOffset, knownLength, 07053 byteOrder, explicitVR, acceptVRMismatch, object, 07054 scannedLength, &e); 07055 if (flag == DCM_STREAMCOMPLETE) 07056 break; 07057 else if (flag != DCM_NORMAL) 07058 { STATUS("readGroupElement fails"); goto abort; } 07059 #if 0 07060 if (e.tag == DCM_MAKETAG(0x003a, 0x1000)) { 07061 fprintf(stderr, "Found waveform\n"); 07062 } 07063 #endif 07064 flag = readVRLength(name, &ptr, fd, &size, fileOffset, knownLength, 07065 byteOrder, explicitVR, acceptVRMismatch, object, 07066 scannedLength, &e); 07067 if (flag != DCM_NORMAL) 07068 { STATUS("readVRLength fails"); goto abort; } 07069 07070 if ((e.representation == DCM_UN) && 07071 (e.length == DCM_UNSPECIFIEDLENGTH)) { 07072 e.representation = DCM_SQ; 07073 } 07074 #ifndef SMM 07075 if ((e.tag == DCM_DLMITEMDELIMITATIONITEM) || 07076 (e.tag == DCM_DLMSEQUENCEDELIMITATIONITEM)) { 07077 RETURN( DCM_NORMAL) ; 07078 } 07079 #else 07080 if (e.tag == DCM_DLMITEMDELIMITATIONITEM) { 07081 (*object)->objectSize -= 8; 07082 RETURN( DCM_NORMAL ); 07083 } 07084 if (e.tag == DCM_DLMSEQUENCEDELIMITATIONITEM) 07085 RETURN( DCM_NORMAL ); 07086 #endif 07087 07088 if (e.representation == DCM_SQ) { 07089 sequenceLength = e.length; 07090 scannedSequenceLength = 0; 07091 flag = readSequence(name, &ptr, fd, &sequenceLength, 07092 fileOffset, recursionLevel, opt, 07093 byteOrder, explicitVR, acceptVRMismatch, 07094 fileFlag, remainOpenFlag, 07095 convertFlag, object, &scannedSequenceLength, 07096 &e, &elementItem); 07097 if (flag != DCM_NORMAL) 07098 { STATUS("readSequence fails"); goto abort; } 07099 if (size != (long) DCM_UNSPECIFIEDLENGTH) 07100 size -= scannedSequenceLength; 07101 if (scannedLength != NULL) 07102 *scannedLength += scannedSequenceLength; 07103 07104 } else { 07105 07106 flag = readData(name, &ptr, fd, &size, fileOffset, knownLength, 07107 byteOrder, explicitVR, acceptVRMismatch, fileFlag, 07108 remainOpenFlag, convertFlag, 07109 object, scannedLength, &e, &elementItem); 07110 if (flag != DCM_NORMAL) 07111 { STATUS("readData fails"); goto abort; } 07112 } 07113 computeVM(object, &elementItem->element); 07114 07115 cond = checkAttributeOrder(&e, &lastGroup, &lastElement, allowRepeatElements); 07116 if (cond != DCM_NORMAL) { 07117 if (cond == DCM_REPEATEDELEMENT) { 07118 CTN_FREE(elementItem); 07119 continue; 07120 } else { 07121 CTN_FREE(elementItem); /* 22 June 2005 [rickr] */ 07122 RETURN( cond ) ; 07123 } 07124 } 07125 07126 cond = handleGroupItem(object, &groupItem, DCM_TAG_GROUP(e.tag)); 07127 if (cond != DCM_NORMAL) 07128 /* goto abort; ASG */ RETURN( cond ); 07129 07130 if (DCM_TAG_ELEMENT(e.tag) != 0x0000) { 07131 groupItem->baseLength += 8 + elementItem->paddedDataLength; 07132 if (elementItem->element.representation == DCM_OB || 07133 elementItem->element.representation == DCM_OW || 07134 elementItem->element.representation == DCM_SQ) { 07135 groupItem->longVRAttributes++; 07136 (*object)->longVRAttributes++; 07137 } 07138 } 07139 if ((DCM_TAG_ELEMENT(e.tag) == 0x0000) && ((*object)->groupLengthFlag == FALSE)) { 07140 CTN_FREE(elementItem); 07141 } else { 07142 cond = LST_Enqueue(&groupItem->elementList, (void *)elementItem); 07143 if (cond != LST_NORMAL) { 07144 (void) DCM_CloseObject(callerObject); 07145 RETURN( COND_PushCondition(DCM_LISTFAILURE, 07146 DCM_Message(DCM_LISTFAILURE), 07147 "readFile") ); 07148 } 07149 cond = updateObjectType(object, &elementItem->element); /* repair */ 07150 07151 cond = updateSpecialElements(object, elementItem); /* repair */ 07152 } 07153 07154 if (size == 0) 07155 done = TRUE; 07156 07157 if (part10Flag) { 07158 if ((*object)->objectSize == (DCM_PREAMBLELENGTH + 4 + 12 + (*object)->metaHeaderLength)) { 07159 opt &= ~DCM_ORDERMASK; 07160 opt |= (*object)->dataOptions & DCM_ORDERMASK; 07161 explicitVR = FALSE; 07162 switch (opt & DCM_ORDERMASK) { 07163 case DCM_ORDERNATIVE: 07164 byteOrder = NATIVE_ORDER; 07165 break; 07166 case DCM_ORDERLITTLEENDIAN: 07167 byteOrder = LITTLE_ORDER; 07168 break; 07169 case DCM_EXPLICITLITTLEENDIAN: 07170 byteOrder = LITTLE_ORDER; 07171 explicitVR = TRUE; 07172 break; 07173 case DCM_ORDERBIGENDIAN: 07174 byteOrder = BIG_ORDER; 07175 break; 07176 case DCM_EXPLICITBIGENDIAN: 07177 byteOrder = BIG_ORDER; 07178 explicitVR = TRUE; 07179 break; 07180 default: 07181 byteOrder = LITTLE_ORDER; 07182 explicitVR = TRUE; 07183 break; 07184 } 07185 } 07186 } 07187 } 07188 07189 #ifdef SMM 07190 #endif 07191 07192 groupItem = (void *)LST_Head(&(*object)->groupList); 07193 if (groupItem != NULL) { 07194 (void) LST_Position(&(*object)->groupList, (void *)groupItem); 07195 while (groupItem != NULL) { 07196 elementItem = (void *)LST_Head(&groupItem->elementList); 07197 if (elementItem != NULL) { 07198 if (DCM_TAG_ELEMENT(elementItem->element.tag) == 0x0000) { 07199 *elementItem->element.d.ul = groupItem->baseLength; 07200 } 07201 } 07202 groupItem = (void *)LST_Next(&(*object)->groupList); 07203 } 07204 } 07205 RETURN( DCM_NORMAL ); 07206 07207 abort: 07208 RETURN (flag); 07209 } |
|
Definition at line 6285 of file mri_dicom_hdr.c. References BYTEORDER_SAME, COND_PopCondition(), COND_PushCondition(), CONDITION, CTNBOOLEAN, ctxSensitiveLookup(), DCM_CloseObject(), DCM_CTX, DCM_DumpElements(), DCM_FILEACCESSERROR, DCM_ILLEGALSTREAMLENGTH, DCM_LookupElement(), DCM_MAKETAG, DCM_Message(), DCM_NORMAL, DCM_OBJECT, DCM_STREAMCOMPLETE, fd, GET_SHORT_REVERSE_ORDER, GET_SHORT_SAME_ORDER, name, object, read(), DCM_ELEMENT::representation, DCM_ELEMENT::tag, and U32.
06290 { 06291 unsigned char *localPtr; 06292 unsigned char buf[4]; 06293 int nBytes; 06294 CONDITION cond; 06295 unsigned short group, 06296 element; 06297 06298 if (*size == 0) 06299 return DCM_STREAMCOMPLETE; 06300 06301 if ((*size < 4) && knownLength) { 06302 if (debug) 06303 (void) DCM_DumpElements((DCM_OBJECT **) object, 0); 06304 (void) DCM_CloseObject((DCM_OBJECT **) object); 06305 return COND_PushCondition(DCM_ILLEGALSTREAMLENGTH, 06306 DCM_Message(DCM_ILLEGALSTREAMLENGTH), *size, 06307 "readFile"); 06308 } 06309 if (*ptr == NULL) { 06310 if (fd != -1) { 06311 nBytes = read(fd, buf, 4); 06312 } else { 06313 cond = (*object)->rd((*object)->userCtx, buf, 4, &nBytes); 06314 } 06315 06316 if (nBytes != 4) 06317 return COND_PushCondition(DCM_FILEACCESSERROR, 06318 DCM_Message(DCM_FILEACCESSERROR), name, 06319 "readGroupElement"); 06320 localPtr = buf; 06321 } else { 06322 localPtr = *ptr; 06323 } 06324 06325 if (knownLength) 06326 *size -= 4; 06327 *fileOffset += (off_t) 4; 06328 if (scannedLength != NULL) 06329 (*scannedLength) += 4; 06330 (*object)->objectSize += 4; 06331 06332 if (byteOrder == BYTEORDER_SAME) { 06333 GET_SHORT_SAME_ORDER(localPtr, group); 06334 GET_SHORT_SAME_ORDER(localPtr + 2, element); 06335 e->tag = DCM_MAKETAG(group, element); 06336 } else { 06337 GET_SHORT_REVERSE_ORDER(localPtr, group); 06338 GET_SHORT_REVERSE_ORDER(localPtr + 2, element); 06339 e->tag = DCM_MAKETAG(group, element); 06340 } 06341 if (*ptr != NULL) 06342 *ptr += 4; 06343 06344 if (debug) 06345 fprintf(stderr, "%04x %04x ", group, element); 06346 06347 cond = DCM_LookupElement(e); 06348 if (cond != DCM_NORMAL) 06349 (void) COND_PopCondition(0); 06350 if (e->representation == DCM_CTX) 06351 ctxSensitiveLookup(object, e); 06352 06353 return DCM_NORMAL; 06354 } |
|
Definition at line 7455 of file mri_dicom_hdr.c. References COND_PushCondition(), CONDITION, DCM_ELEMENT::d, DCM_CloseObject(), DCM_FILEACCESSERROR, DCM_GetElementValue(), DCM_ImportStream(), DCM_MAKETAG, DCM_Message(), DCM_NORMAL, DCM_OBJECT, DCM_UL, fd, fileName, read(), and U32.
07457 { 07458 unsigned char buf[24]; 07459 DCM_OBJECT *obj; 07460 CONDITION cond; 07461 DCM_ELEMENT e = {DCM_MAKETAG(0x0008, 0x0001), DCM_UL, "", 1, 4, NULL}; 07462 void *ctx = NULL; 07463 U32 rtnLength = 0; 07464 07465 if (read(fd, buf, 24) != 24) 07466 return COND_PushCondition(DCM_FILEACCESSERROR, 07467 DCM_Message(DCM_FILEACCESSERROR), fileName, 07468 "(DCM)readLengthToEnd"); 07469 07470 cond = DCM_ImportStream(buf, 24, opt, &obj); 07471 if (cond != DCM_NORMAL) 07472 return cond; 07473 07474 e.d.ul = lengthToEnd; 07475 cond = DCM_GetElementValue(&obj, &e, &rtnLength, &ctx); 07476 07477 (void) DCM_CloseObject(&obj); 07478 07479 return cond; 07480 } |
|
Definition at line 6228 of file mri_dicom_hdr.c. References COND_PushCondition(), CONDITION, CTNBOOLEAN, DCM_CloseObject(), DCM_DumpElements(), DCM_FILEACCESSERROR, DCM_ILLEGALSTREAMLENGTH, DCM_Message(), DCM_NORMAL, DCM_OBJECT, DCM_PREAMBLELENGTH, DCM_STREAMCOMPLETE, fd, name, object, read(), and U32.
06231 { 06232 int nBytes, 06233 tmp; 06234 CONDITION cond; 06235 char label[4]; 06236 06237 if (*size == 0) 06238 return DCM_STREAMCOMPLETE; 06239 06240 if ((*size < DCM_PREAMBLELENGTH + 4) && knownLength) { 06241 if (debug) 06242 (void) DCM_DumpElements((DCM_OBJECT **) object, 0); 06243 (void) DCM_CloseObject((DCM_OBJECT **) object); 06244 return COND_PushCondition(DCM_ILLEGALSTREAMLENGTH, 06245 DCM_Message(DCM_ILLEGALSTREAMLENGTH), *size, 06246 "readPreamble"); 06247 } 06248 if (*ptr == NULL) { 06249 if (fd != -1) { 06250 nBytes = read(fd, (*object)->preamble, DCM_PREAMBLELENGTH); 06251 nBytes += read(fd, label, sizeof(label)); 06252 } else { 06253 cond = (*object)->rd((*object)->userCtx, (*object)->preamble, 06254 DCM_PREAMBLELENGTH, &nBytes); 06255 cond = (*object)->rd((*object)->userCtx, label, 06256 sizeof(label), &tmp); 06257 nBytes += tmp; 06258 } 06259 06260 if (nBytes != DCM_PREAMBLELENGTH + sizeof(label)) 06261 return COND_PushCondition(DCM_FILEACCESSERROR, 06262 DCM_Message(DCM_FILEACCESSERROR), name, 06263 "readPreamble"); 06264 } else { 06265 (void) memcpy((*object)->preamble, *ptr, DCM_PREAMBLELENGTH); 06266 (void) memcpy(label, (*ptr) + DCM_PREAMBLELENGTH, sizeof(label)); 06267 } 06268 06269 if (knownLength) 06270 *size -= DCM_PREAMBLELENGTH + sizeof(label); 06271 *fileOffset += (off_t) DCM_PREAMBLELENGTH + sizeof(label); 06272 if (*ptr != NULL) 06273 *ptr += DCM_PREAMBLELENGTH + sizeof(label); 06274 (*object)->objectSize += DCM_PREAMBLELENGTH + sizeof(label); 06275 06276 if (strncmp(label, "DICM", 4) != 0) 06277 return 0; 06278 06279 (*object)->preambleFlag = TRUE; 06280 return DCM_NORMAL; 06281 } |
|
Definition at line 6546 of file mri_dicom_hdr.c. References COND_PushCondition(), CONDITION, CTN_MALLOC, CTNBOOLEAN, DCM_DLMITEM, DCM_LISTFAILURE, DCM_MALLOCFAILURE, DCM_Message(), DCM_NORMAL, DCM_OBJECT, DCM_STREAMCOMPLETE, DCM_TAG_ELEMENT, DCM_TAG_GROUP, DCM_UNSPECIFIEDLENGTH, fd, DCM_ELEMENT::length, LST_Create(), LST_Enqueue(), LST_NORMAL, name, newElementItem(), DCM_SEQUENCE_ITEM::object, object, readFile1(), readGroupElement(), readVRLength(), DCM_ELEMENT::tag, U32, and PRIVATE_OBJECT::userCtx.
06553 { 06554 CTNBOOLEAN knownLength = TRUE; 06555 CONDITION cond; 06556 U32 sequenceLength; 06557 06558 U32 localLength; 06559 CTNBOOLEAN sequenceDone; 06560 DCM_ELEMENT tagE; 06561 DCM_OBJECT 06562 * sequenceObject; 06563 DCM_SEQUENCE_ITEM *sequenceItem; 06564 CONDITION flag; 06565 unsigned char *localPtr; 06566 off_t itemTagOffset; 06567 06568 if (*size == (long) DCM_UNSPECIFIEDLENGTH) 06569 knownLength = FALSE; 06570 06571 cond = newElementItem(e, FALSE, elementItem); 06572 if (cond != DCM_NORMAL) 06573 return cond; 06574 (*elementItem)->element.d.sq = LST_Create(); 06575 if ((*elementItem)->element.d.sq == NULL) 06576 return COND_PushCondition(DCM_LISTFAILURE, 06577 DCM_Message(DCM_LISTFAILURE), "readSequence"); 06578 06579 localLength = (*elementItem)->element.length; 06580 sequenceDone = (localLength == 0); 06581 06582 while (!sequenceDone) { 06583 if (debug) 06584 fprintf(stderr, "Sequence Length: %d %x\n", localLength, 06585 localLength); 06586 06587 sequenceLength = 0; 06588 itemTagOffset = *fileOffset; 06589 06590 flag = readGroupElement(name, ptr, fd, &localLength, fileOffset, knownLength, 06591 byteOrder, explicitVR, acceptVRMismatch, object, &sequenceLength, &tagE); 06592 if (flag == DCM_STREAMCOMPLETE) 06593 break; 06594 else if (flag != DCM_NORMAL) 06595 return flag; 06596 06597 flag = readVRLength(name, ptr, fd, &localLength, fileOffset, knownLength, 06598 byteOrder, explicitVR, acceptVRMismatch, object, 06599 &sequenceLength, &tagE); 06600 if (flag != DCM_NORMAL) 06601 return flag; 06602 06603 if (*size != (long) DCM_UNSPECIFIEDLENGTH) 06604 *size -= sequenceLength; 06605 if (scannedLength != NULL) 06606 *scannedLength += sequenceLength; 06607 06608 sequenceLength = 0; 06609 06610 06611 if (debug) 06612 fprintf(stderr, "Sequence item: %4x %4x %d (%x)\n", 06613 DCM_TAG_GROUP(tagE.tag), 06614 DCM_TAG_ELEMENT(tagE.tag), tagE.length, tagE.length); 06615 if (tagE.tag == DCM_DLMITEM) { 06616 localPtr = *ptr; 06617 cond = readFile1(name, 06618 localPtr, 06619 fd, tagE.length, 06620 fileOffset, recursionLevel + 1, opt, 06621 object, &sequenceObject, &sequenceLength, 06622 remainOpenFlag, (*object)->userCtx, (*object)->rd, 06623 (*object)->sk); 06624 *ptr = localPtr; 06625 if (cond == DCM_NORMAL) { 06626 sequenceItem = CTN_MALLOC(sizeof(*sequenceItem)); 06627 if (sequenceItem == NULL) 06628 return COND_PushCondition(DCM_MALLOCFAILURE, 06629 DCM_Message(DCM_MALLOCFAILURE), 06630 sizeof(*sequenceItem), "readFile"); 06631 06632 ((PRIVATE_OBJECT *) sequenceObject)->offset = itemTagOffset; 06633 sequenceItem->object = sequenceObject; 06634 cond = LST_Enqueue(&(*elementItem)->element.d.sq, 06635 (void *)sequenceItem); 06636 if (cond != LST_NORMAL) 06637 return COND_PushCondition(DCM_LISTFAILURE, 06638 DCM_Message(DCM_LISTFAILURE), "readFile"); 06639 if (*size != (long) DCM_UNSPECIFIEDLENGTH) 06640 *size -= sequenceLength; 06641 if (scannedLength != NULL) 06642 *scannedLength += sequenceLength; 06643 (*object)->objectSize += sequenceLength; 06644 if (localLength != DCM_UNSPECIFIEDLENGTH) 06645 localLength -= sequenceLength; 06646 } else 06647 return cond; 06648 } else { 06649 sequenceDone = TRUE; 06650 } 06651 if (localLength == 0) 06652 sequenceDone = TRUE; 06653 } 06654 return DCM_NORMAL; 06655 } |
|
Definition at line 6357 of file mri_dicom_hdr.c. References BYTEORDER_SAME, COND_PushCondition(), CONDITION, CTNBOOLEAN, DCM_CloseObject(), DCM_CTX, DCM_DLM, DCM_DumpElements(), DCM_ELEMENTLENGTHERROR, DCM_FILEACCESSERROR, DCM_ILLEGALSTREAMLENGTH, DCM_Message(), DCM_NORMAL, DCM_OB, DCM_OBJECT, DCM_OW, DCM_PXLPIXELDATA, DCM_RET, DCM_SQ, DCM_STREAMCOMPLETE, DCM_TAG_ELEMENT, DCM_TAG_GROUP, DCM_UN, DCM_UNEVENELEMENTLENGTH, DCM_UNRECOGNIZEDVRCODE, DCM_UNSPECIFIEDLENGTH, DCM_UT, DCM_VRMISMATCH, DCM_ELEMENT::description, ENTRY, fd, GET_LONG_REVERSE_ORDER, GET_LONG_SAME_ORDER, GET_SHORT_REVERSE_ORDER, GET_SHORT_SAME_ORDER, DCM_ELEMENT::length, lookupVRCode(), mapVRtoASCII(), name, object, read(), VRMAP::representation, DCM_ELEMENT::representation, RETURN, rwc_err, STATUS, DCM_ELEMENT::tag, and U32.
06362 { 06363 unsigned char *localPtr; 06364 unsigned char buf[4]; 06365 char vrCode[3]; 06366 VRMAP *vrPtr; 06367 int nBytes; 06368 CONDITION cond; 06369 CTNBOOLEAN calculatedLength = FALSE; 06370 06371 ENTRY("readVRLength") ; 06372 06373 if (*size == 0) 06374 RETURN( DCM_STREAMCOMPLETE ); 06375 06376 if ((*size < 4) && knownLength) { 06377 if (debug) 06378 (void) DCM_DumpElements((DCM_OBJECT **) object, 0); 06379 (void) DCM_CloseObject((DCM_OBJECT **) object); 06380 RETURN( COND_PushCondition(DCM_ILLEGALSTREAMLENGTH, 06381 DCM_Message(DCM_ILLEGALSTREAMLENGTH), *size, 06382 "readVRLength") ); 06383 } 06384 if (*ptr == NULL) { 06385 if (fd != -1) { 06386 nBytes = read(fd, buf, 4); 06387 } else { 06388 cond = (*object)->rd((*object)->userCtx, buf, 4, &nBytes); 06389 } 06390 06391 if (nBytes != 4) 06392 RETURN( COND_PushCondition(DCM_FILEACCESSERROR, 06393 DCM_Message(DCM_FILEACCESSERROR), name, 06394 "readVRLength") ) ; 06395 localPtr = buf; 06396 } else 06397 localPtr = *ptr; 06398 06399 if (knownLength) 06400 *size -= 4; 06401 *fileOffset += (off_t) 4; 06402 if (scannedLength != NULL) 06403 (*scannedLength) += 4; 06404 (*object)->objectSize += 4; 06405 06406 e->length = 0; 06407 if (e->representation == DCM_DLM) { 06408 explicitVR = FALSE; /* Special rule for delimitors */ 06409 } 06410 if (explicitVR) { 06411 vrCode[0] = buf[0]; 06412 vrCode[1] = buf[1]; 06413 vrCode[2] = '\0'; 06414 vrPtr = lookupVRCode(vrCode); 06415 if (vrPtr == NULL){ 06416 if( rwc_err ){ 06417 fprintf(stderr,"** DICOM ERROR: unknown VR code %s in element (%04x,%04x)\n", /* RWC */ 06418 vrCode,DCM_TAG_GROUP(e->tag), DCM_TAG_ELEMENT(e->tag) ) ; rwc_err-- ; 06419 } 06420 RETURN( COND_PushCondition(DCM_UNRECOGNIZEDVRCODE, 06421 DCM_Message(DCM_UNRECOGNIZEDVRCODE), vrCode, 06422 "readVRLength") ); 06423 } 06424 06425 if (vrPtr->representation != e->representation) { 06426 if (vrPtr->representation == DCM_OB) { 06427 /* This is probably from the waveform supplement where they */ 06428 /* transmit as OB and expect us to pull it out later */ 06429 /* We will just keep our VR which was based on context in */ 06430 /* the object */ 06431 e->representation = vrPtr->representation; 06432 } else if (e->representation == DCM_UN || 06433 e->representation == DCM_CTX || 06434 e->representation == DCM_RET || 06435 vrPtr->representation == DCM_OW || 06436 acceptVRMismatch) { /* Believe input */ 06437 e->representation = vrPtr->representation; 06438 } else { 06439 #if 0 06440 if (e->tag != DCM_PXLPIXELDATA){ 06441 STATUS("VR mismatch") ; 06442 RETURN( COND_PushCondition(DCM_VRMISMATCH, 06443 DCM_Message(DCM_VRMISMATCH), vrCode, e->tag)); 06444 } 06445 #else 06446 if( rwc_err ){ 06447 fprintf(stderr,"++ DICOM WARNING: VR mismatch in element (%04x,%04x)\n", /* RWC */ 06448 DCM_TAG_GROUP(e->tag), DCM_TAG_ELEMENT(e->tag) ) ; rwc_err-- ; 06449 } 06450 e->representation = vrPtr->representation; 06451 #endif 06452 } 06453 } 06454 if (vrPtr->representation != DCM_OW && 06455 vrPtr->representation != DCM_OB && 06456 vrPtr->representation != DCM_UN && 06457 vrPtr->representation != DCM_UT && 06458 vrPtr->representation != DCM_SQ) { 06459 unsigned short shortLength; 06460 if (byteOrder == BYTEORDER_SAME) { 06461 GET_SHORT_SAME_ORDER(localPtr + 2, shortLength); 06462 } else { 06463 GET_SHORT_REVERSE_ORDER(localPtr + 2, shortLength); 06464 } 06465 e->length = shortLength; 06466 if (*ptr != NULL) 06467 *ptr += 4; 06468 calculatedLength = TRUE; 06469 } else { 06470 if ((*size < 4) && knownLength) { 06471 if (debug) 06472 (void) DCM_DumpElements((DCM_OBJECT **) object, 0); 06473 (void) DCM_CloseObject((DCM_OBJECT **) object); 06474 RETURN( COND_PushCondition(DCM_ILLEGALSTREAMLENGTH, 06475 DCM_Message(DCM_ILLEGALSTREAMLENGTH), *size, 06476 "readVRLength")); 06477 } 06478 if (*ptr == NULL) { 06479 if (fd != -1) { 06480 nBytes = read(fd, buf, 4); 06481 } else { 06482 cond = (*object)->rd((*object)->userCtx, buf, 4, &nBytes); 06483 } 06484 06485 if (nBytes != 4) 06486 RETURN( COND_PushCondition(DCM_FILEACCESSERROR, 06487 DCM_Message(DCM_FILEACCESSERROR), name, 06488 "readVRLength")); 06489 localPtr = buf; 06490 } else 06491 localPtr = *ptr; 06492 06493 if (knownLength) 06494 *size -= 4; 06495 *fileOffset += (off_t) 4; 06496 if (scannedLength != NULL) 06497 (*scannedLength) += 4; 06498 (*object)->objectSize += 4; 06499 } 06500 } 06501 if (!calculatedLength) { 06502 if (byteOrder == BYTEORDER_SAME) { 06503 GET_LONG_SAME_ORDER(localPtr, e->length); 06504 } else { 06505 GET_LONG_REVERSE_ORDER(localPtr, e->length); 06506 } 06507 if (*ptr != NULL) 06508 *ptr += 4; 06509 } 06510 if (debug) { 06511 char localVR[10]; 06512 mapVRtoASCII(e->representation, localVR); 06513 fprintf(stderr, "%2s %6d %06x %s\n", localVR, e->length, 06514 (unsigned int)*fileOffset, e->description); 06515 } 06516 if (((e->length & 1) != 0) && (e->length != DCM_UNSPECIFIEDLENGTH)) { 06517 if (debug) 06518 (void) DCM_DumpElements((DCM_OBJECT **) object, 0); 06519 (void) DCM_CloseObject((DCM_OBJECT **) object); 06520 if( rwc_err ){ 06521 fprintf(stderr,"** DICOM ERROR: illegal odd length=%d in element (%04x,%04x)\n", /* RWC */ 06522 e->length,DCM_TAG_GROUP(e->tag), DCM_TAG_ELEMENT(e->tag) ) ; rwc_err-- ; 06523 } 06524 RETURN( COND_PushCondition(DCM_UNEVENELEMENTLENGTH, 06525 DCM_Message(DCM_UNEVENELEMENTLENGTH), 06526 DCM_TAG_GROUP(e->tag), DCM_TAG_ELEMENT(e->tag), 06527 e->length, "readFile")); 06528 } 06529 if ((e->length != (U32) DCM_UNSPECIFIEDLENGTH) && (e->length > (U32) (*size))) { 06530 if (debug) 06531 (void) DCM_DumpElements((DCM_OBJECT **) object, 0); 06532 (void) DCM_CloseObject((DCM_OBJECT **) object); 06533 if( rwc_err ){ 06534 fprintf(stderr,"** DICOM ERROR: oversize length=%d in element (%04x,%04x)\n", /* RWC */ 06535 e->length,DCM_TAG_GROUP(e->tag), DCM_TAG_ELEMENT(e->tag) ) ; rwc_err-- ; 06536 } 06537 RETURN( COND_PushCondition(DCM_ELEMENTLENGTHERROR, 06538 DCM_Message(DCM_ELEMENTLENGTHERROR), 06539 DCM_TAG_GROUP(e->tag), DCM_TAG_ELEMENT(e->tag), 06540 e->length, *size, "readFile")); 06541 } 06542 RETURN( DCM_NORMAL); 06543 } |
|
Definition at line 7640 of file mri_dicom_hdr.c.
|
|
Definition at line 114 of file mri_dicom_hdr.c. References free, npbuf, and pbuf. Referenced by mri_dicom_header().
|
|
Definition at line 119 of file mri_dicom_hdr.c. References AFMALL, AFREALL, npbuf, NPBUF, and pbuf.
00120 { 00121 static char *sbuf = NULL ; 00122 int nsbuf , nn , lpbuf ; 00123 va_list vararg_ptr ; 00124 00125 va_start( vararg_ptr , fmt ) ; 00126 00127 if( sbuf == NULL ) sbuf = AFMALL( char, NPBUF) ; /* 1st time in */ 00128 00129 sbuf[0] = '\0' ; 00130 nn = vsprintf( sbuf , fmt , vararg_ptr ) ; 00131 va_end( vararg_ptr ) ; 00132 nsbuf = strlen(sbuf) ; 00133 if( nsbuf == 0 ) return(0); 00134 00135 if( npbuf == 0 ){ 00136 pbuf = AFMALL(char,NPBUF) ; npbuf = NPBUF ; pbuf[0] = '\0' ; 00137 } 00138 00139 lpbuf = strlen(pbuf) ; 00140 if( lpbuf+nsbuf+8 > npbuf ){ 00141 npbuf += NPBUF; pbuf = AFREALL( pbuf, char, npbuf); 00142 } 00143 00144 strcat(pbuf,sbuf) ; 00145 return(nn); 00146 } |
|
Definition at line 86 of file mri_dicom_hdr.c. References BIG_ORDER, BYTEORDER_REVERSE, BYTEORDER_SAME, LITTLE_ENDIAN_ARCHITECTURE, and LITTLE_ORDER. Referenced by mri_dicom_header(), and mri_read_dicom().
00087 { 00088 union { unsigned char bb[2] ; 00089 short ss ; } fred ; 00090 00091 if( LITTLE_ENDIAN_ARCHITECTURE < 0 ){ 00092 fred.bb[0] = 1 ; fred.bb[1] = 0 ; 00093 00094 LITTLE_ENDIAN_ARCHITECTURE = (fred.ss == 1) ; 00095 00096 if( LITTLE_ENDIAN_ARCHITECTURE ){ 00097 LITTLE_ORDER = BYTEORDER_SAME ; 00098 BIG_ORDER = BYTEORDER_REVERSE ; 00099 } else { 00100 BIG_ORDER = BYTEORDER_SAME ; 00101 LITTLE_ORDER = BYTEORDER_REVERSE ; 00102 } 00103 } 00104 } |
|
Definition at line 6658 of file mri_dicom_hdr.c. References CONDITION, CTNBOOLEAN, DCM_DLMITEM, DCM_NORMAL, DCM_STREAMCOMPLETE, DCM_TAG_ELEMENT, DCM_TAG_GROUP, DCM_UNSPECIFIEDLENGTH, fd, DCM_ELEMENT::length, name, object, readGroupElement(), readVRLength(), DCM_ELEMENT::tag, and U32.
06666 { 06667 CTNBOOLEAN knownLength = TRUE; 06668 U32 sequenceLength; 06669 U32 scannedBytes = 0; 06670 06671 U32 localLength; 06672 CTNBOOLEAN sequenceDone; 06673 DCM_ELEMENT tagE; 06674 CONDITION flag; 06675 unsigned char *localPtr; 06676 06677 if (*size == (long) DCM_UNSPECIFIEDLENGTH) 06678 knownLength = FALSE; 06679 06680 localLength = (*elementItem)->element.length; 06681 sequenceDone = (localLength == 0); 06682 06683 while (!sequenceDone) { 06684 sequenceLength = 0; 06685 flag = readGroupElement(name, ptr, fd, &localLength, fileOffset, 06686 FALSE, byteOrder, explicitVR, acceptVRMismatch, 06687 object, &sequenceLength, &tagE); 06688 if (flag == DCM_STREAMCOMPLETE) 06689 break; 06690 else if (flag != DCM_NORMAL) 06691 return flag; 06692 06693 flag = readVRLength(name, ptr, fd, &localLength, fileOffset, knownLength, 06694 byteOrder, explicitVR, acceptVRMismatch, object, 06695 &sequenceLength, &tagE); 06696 if (flag != DCM_NORMAL) 06697 return flag; 06698 06699 if (*size != (long) DCM_UNSPECIFIEDLENGTH) 06700 *size -= sequenceLength; 06701 if (scannedLength != NULL) 06702 *scannedLength += sequenceLength; 06703 scannedBytes += sequenceLength; 06704 06705 if (debug) 06706 fprintf(stderr, "Sequence item: %4x %4x %d (%x)\n", 06707 DCM_TAG_GROUP(tagE.tag), 06708 DCM_TAG_ELEMENT(tagE.tag), tagE.length, tagE.length); 06709 if (tagE.tag == DCM_DLMITEM) { 06710 localPtr = *ptr; 06711 if (tagE.length != 0) { 06712 lseek(fd, tagE.length, SEEK_CUR); 06713 *fileOffset += tagE.length; 06714 if (*size != (long) DCM_UNSPECIFIEDLENGTH) 06715 *size -= tagE.length; 06716 if (scannedLength != NULL) 06717 *scannedLength += tagE.length; 06718 } 06719 } else { 06720 sequenceDone = TRUE; 06721 } 06722 if (localLength == 0) 06723 sequenceDone = TRUE; 06724 06725 if (debug) 06726 fprintf(stderr, "Scanned Bytes: %d\n", scannedBytes); 06727 } 06728 if ((scannedBytes & 1) != 0) { 06729 lseek(fd, 1, SEEK_CUR); 06730 *fileOffset += 1; 06731 if (*size != (long) DCM_UNSPECIFIEDLENGTH) 06732 *size -= 1; 06733 } 06734 return DCM_NORMAL; 06735 } |
|
Definition at line 5059 of file mri_dicom_hdr.c. References CONDITION, DCM_ELEMENT::d, DCM_ENCAPSULATEDPIXELS, DCM_EXPLICITBIGENDIAN, DCM_EXPLICITLITTLEENDIAN, DCM_METATRANSFERSYNTAX, DCM_NORMAL, DCM_OBJECT, DCM_ORDERLITTLEENDIAN, DCM_ParseObject(), DCM_UI, DICOM_TRANSFERBIGENDIANEXPLICIT, DICOM_TRANSFERLITTLEENDIAN, DICOM_TRANSFERLITTLEENDIANEXPLICIT, and DICOM_UI_LENGTH.
05060 { 05061 CONDITION cond; 05062 char xferSyntax[DICOM_UI_LENGTH + 1]; 05063 DCM_ELEMENT e = {DCM_METATRANSFERSYNTAX, DCM_UI, "", 1, sizeof(xferSyntax), 05064 NULL}; 05065 05066 e.d.string = xferSyntax; 05067 cond = DCM_ParseObject(obj, &e, 1, NULL, 0, NULL); 05068 if (cond != DCM_NORMAL) 05069 return cond; 05070 05071 *opt = 0; 05072 if (strcmp(xferSyntax, DICOM_TRANSFERLITTLEENDIAN) == 0) { 05073 *opt = DCM_ORDERLITTLEENDIAN; 05074 } else if (strcmp(xferSyntax, DICOM_TRANSFERLITTLEENDIANEXPLICIT) == 0) { 05075 *opt = DCM_EXPLICITLITTLEENDIAN; 05076 } else if (strcmp(xferSyntax, DICOM_TRANSFERBIGENDIANEXPLICIT) == 0) { 05077 *opt = DCM_EXPLICITBIGENDIAN; 05078 } else { /* Must be an encapsulated xfer syntax */ 05079 *opt = DCM_ENCAPSULATEDPIXELS; 05080 } 05081 05082 return DCM_NORMAL; 05083 } |
|
Definition at line 7483 of file mri_dicom_hdr.c. References DCM_ELEMENT::d, DCM_ELEMENT::length, and U32.
|
|
Definition at line 4924 of file mri_dicom_hdr.c. References DCM_ELEMENT::d, DCM_AT, DCM_OW, DCM_PXLPIXELDATA, DCM_SL, DCM_SS, DCM_UL, DCM_US, DCM_ELEMENT::length, object, DCM_ELEMENT::representation, DCM_ELEMENT::tag, and U32.
04925 { 04926 U32 04927 length; 04928 unsigned char 04929 tmp, 04930 *p1; 04931 04932 length = e->length; 04933 p1 = e->d.ot; 04934 if (e->representation == DCM_US || e->representation == DCM_SS || 04935 e->representation == DCM_OW || e->representation == DCM_AT) { 04936 if (e->tag == DCM_PXLPIXELDATA && 04937 (*object)->pixelBitsAllocated != 16) 04938 return; 04939 04940 while (length > 0) { 04941 tmp = p1[0]; 04942 p1[0] = p1[1]; 04943 p1[1] = tmp; 04944 p1 += 2; 04945 length -= 2; 04946 } 04947 } else if (e->representation == DCM_UL || e->representation == DCM_SL) { 04948 while (length > 0) { 04949 tmp = p1[0]; 04950 p1[0] = p1[3]; 04951 p1[3] = tmp; 04952 tmp = p1[1]; 04953 p1[1] = p1[2]; 04954 p1[2] = tmp; 04955 length -= 4; 04956 p1 += 4; 04957 } 04958 } 04959 } |
|
Definition at line 4040 of file mri_dicom_hdr.c. References DCM_GROUPCOMMAND, DCM_NORMAL, DCM_OBJECTCOMMAND, DCM_OBJECTELEMENTLIST, DCM_OBJECTIMAGE, DCM_OBJECTUNKNOWN, DCM_TAG_GROUP, object, and DCM_ELEMENT::tag.
04041 { 04042 switch ((*object)->objectType) { 04043 case DCM_OBJECTUNKNOWN: 04044 if (DCM_TAG_GROUP(element->tag) == DCM_GROUPCOMMAND) 04045 (*object)->objectType = DCM_OBJECTCOMMAND; 04046 else 04047 (*object)->objectType = DCM_OBJECTELEMENTLIST; 04048 break; 04049 case DCM_OBJECTCOMMAND: 04050 if (DCM_TAG_GROUP(element->tag) != DCM_GROUPCOMMAND) 04051 (*object)->objectType = DCM_OBJECTELEMENTLIST; 04052 break; 04053 case DCM_OBJECTELEMENTLIST: 04054 case DCM_OBJECTIMAGE: 04055 break; 04056 default: 04057 break; 04058 } 04059 return DCM_NORMAL; 04060 } |
|
Definition at line 4083 of file mri_dicom_hdr.c. References DCM_ELEMENT::d, DCM_EXPLICITBIGENDIAN, DCM_EXPLICITLITTLEENDIAN, DCM_IMGBITSALLOCATED, DCM_IMGPIXELREPRESENTATION, DCM_MAKETAG, DCM_METAGROUPLENGTH, DCM_METATRANSFERSYNTAX, DCM_NORMAL, DCM_ORDERLITTLEENDIAN, DICOM_TRANSFERBIGENDIANEXPLICIT, DICOM_TRANSFERLITTLEENDIAN, DICOM_TRANSFERLITTLEENDIANEXPLICIT, PRV_ELEMENT_ITEM::element, idx, DCM_ELEMENT::length, object, and DCM_ELEMENT::tag.
04085 { 04086 int idx; 04087 04088 switch (item->element.tag) { 04089 case DCM_IMGBITSALLOCATED: 04090 (*object)->pixelBitsAllocated = *item->element.d.us; 04091 break; 04092 case DCM_IMGPIXELREPRESENTATION: 04093 (*object)->pixelRepresentation = *item->element.d.us; 04094 break; 04095 case DCM_METAGROUPLENGTH: 04096 (*object)->metaHeaderLength = *item->element.d.ul; 04097 break; 04098 case DCM_METATRANSFERSYNTAX: 04099 if (strcmp(item->element.d.string, DICOM_TRANSFERLITTLEENDIAN) == 0) { 04100 (*object)->dataOptions = DCM_ORDERLITTLEENDIAN; 04101 } else if (strcmp(item->element.d.string, DICOM_TRANSFERLITTLEENDIANEXPLICIT) == 0) { 04102 (*object)->dataOptions = DCM_EXPLICITLITTLEENDIAN; 04103 } else if (strcmp(item->element.d.string, DICOM_TRANSFERBIGENDIANEXPLICIT) == 0) { 04104 (*object)->dataOptions = DCM_EXPLICITBIGENDIAN; 04105 } else { /* Must be an encapsulated transfer syntax */ 04106 (*object)->dataOptions = DCM_EXPLICITLITTLEENDIAN; 04107 } 04108 break; 04109 case DCM_MAKETAG(0x003a, 0x0103): 04110 strncpy((*object)->waveformDataVR, item->element.d.string, 04111 item->element.length); 04112 (*object)->waveformDataVR[item->element.length] = '\0'; 04113 idx = item->element.length - 1; 04114 while (idx >= 0 && (*object)->waveformDataVR[idx] == ' ') { 04115 (*object)->waveformDataVR[idx] = '\0'; 04116 idx--; 04117 } 04118 break; 04119 default: 04120 break; 04121 } 04122 return DCM_NORMAL; 04123 } |
|
Definition at line 11482 of file mri_dicom_hdr.c.
11483 { 11484 11485 char 11486 year[5], 11487 month[3], 11488 day[3]; 11489 11490 strncpy(year, date, 4); 11491 year[4] = '\000'; 11492 strncpy(month, date + 4, 2); 11493 month[2] = '\000'; 11494 strncpy(day, date + 6, 2); 11495 day[2] = '\000'; 11496 11497 return ((atol(year) * 10000) + (atol(month) * 100) + atol(day)); 11498 } |
|
Definition at line 11607 of file mri_dicom_hdr.c. References dt.
11608 { 11609 int 11610 hour, 11611 minute, 11612 second, 11613 fracsec; 11614 11615 hour = (int) (dt / 3600.0); 11616 dt -= (hour * 3600); 11617 11618 minute = (int) (dt / 60.); 11619 dt -= (minute * 60); 11620 11621 second = (int) dt; 11622 dt -= second; 11623 11624 fracsec = (int) ((dt * 1000000) + 0.5); 11625 11626 sprintf(time, "%02d%02d%02d.%06d", hour, minute, second, fracsec); 11627 11628 return; 11629 } |
|
Definition at line 11504 of file mri_dicom_hdr.c.
11505 { 11506 11507 int 11508 year, 11509 month, 11510 day; 11511 11512 year = ld / 10000; 11513 ld -= (year * 10000); 11514 month = ld / 100; 11515 ld -= (month * 100); 11516 day = ld; 11517 11518 sprintf(date, "%04d%02d%02d", year, month, day); 11519 11520 return; 11521 } |
|
Definition at line 11527 of file mri_dicom_hdr.c.
11528 { 11529 11530 size_t 11531 i; 11532 char 11533 hour[3], 11534 minute[3], 11535 second[3], 11536 fracsec[7]; 11537 const char *p; 11538 double 11539 divisor, 11540 hh, 11541 mm, 11542 ss, 11543 fs; 11544 11545 hh = mm = ss = fs = 0.0; 11546 hour[0] = minute[0] = second[0] = fracsec[0] = '\000'; 11547 11548 p = time; 11549 /* 11550 * Just a brute force way to tear down a Dicom time...not very pretty, 11551 * but it works... We are not guaranteed to have every field present as 11552 * we are in the date... 11553 */ 11554 hour[0] = *p++; 11555 hour[1] = *p++; 11556 hour[2] = '\000'; 11557 if (isdigit(*p)) { 11558 minute[0] = *p++; 11559 minute[1] = *p++; 11560 minute[2] = '\000'; 11561 if (isdigit(*p)) { 11562 second[0] = *p++; 11563 second[1] = *p++; 11564 second[2] = '\000'; 11565 if (*p == '.') { 11566 p++; 11567 fracsec[0] = *p++; 11568 if ((*p != '\000') && (isdigit(*p))) { 11569 fracsec[1] = *p++; 11570 if ((*p != '\000') && (isdigit(*p))) { 11571 fracsec[2] = *p++; 11572 if ((*p != '\000') && (isdigit(*p))) { 11573 fracsec[3] = *p++; 11574 if ((*p != '\000') && (isdigit(*p))) { 11575 fracsec[4] = *p++; 11576 if ((*p != '\000') && (isdigit(*p))) { 11577 fracsec[5] = *p++; 11578 fracsec[6] = '\000'; 11579 } else 11580 fracsec[5] = '\000'; 11581 } else 11582 fracsec[4] = '\000'; 11583 } else 11584 fracsec[3] = '\000'; 11585 } else 11586 fracsec[2] = '\000'; 11587 } else 11588 fracsec[1] = '\000'; 11589 } 11590 } 11591 } 11592 hh = atof(hour); 11593 mm = atof(minute); 11594 ss = atof(second); 11595 divisor = 1; 11596 for (i = 0; i < strlen(fracsec); i++) 11597 divisor *= 10; 11598 fs = atof(fracsec) / divisor; 11599 11600 return ((hh * 3600.0) + (mm * 60.0) + ss + fs); 11601 } |
|
Definition at line 11659 of file mri_dicom_hdr.c. References free, malloc, UTL_ConvertDatetoLong(), and UTL_SqueezeBlanks().
11660 { 11661 11662 int 11663 match; 11664 char 11665 *ndate; 11666 long 11667 start_date, 11668 end_date, 11669 date_in_question; 11670 11671 if ((ndate = (char *) malloc(strlen(datestring) + 1)) == (char *) NULL) 11672 return (UTL_NOMATCH); 11673 11674 strcpy(ndate, datestring); 11675 UTL_SqueezeBlanks(ndate); 11676 UTL_SqueezeBlanks(stm); 11677 11678 match = 0; 11679 if (strchr(ndate, (int) '-') == (char *) NULL) { 11680 if (strcmp(ndate, stm) == 0) 11681 match = 1; 11682 } else { 11683 date_in_question = UTL_ConvertDatetoLong(stm); 11684 if (ndate[0] == '-') { 11685 end_date = UTL_ConvertDatetoLong(ndate + 1); 11686 if (date_in_question <= end_date) 11687 match = 1; 11688 } else if (ndate[strlen(ndate) - 1] == '-') { 11689 start_date = UTL_ConvertDatetoLong(ndate); 11690 if (date_in_question >= start_date) 11691 match = 1; 11692 } else { 11693 start_date = UTL_ConvertDatetoLong(ndate); 11694 end_date = UTL_ConvertDatetoLong(strchr(ndate, (int) '-') + 1); 11695 if ((date_in_question >= start_date) && 11696 (date_in_question <= end_date)) 11697 match = 1; 11698 } 11699 } 11700 free(ndate); 11701 if (match) 11702 return (UTL_MATCH); 11703 else 11704 return (UTL_NOMATCH); 11705 } |
|
Definition at line 11826 of file mri_dicom_hdr.c.
11827 { 11828 struct timeval timeNow; 11829 UTL_TIMESTRUCTURE *t; 11830 double delta = 0.; 11831 11832 gettimeofday(&timeNow, NULL); 11833 11834 t = (UTL_TIMESTRUCTURE *) timeStamp; 11835 if (t == NULL) 11836 return -1.0; 11837 11838 if (strcmp(t->key, "UTL STAMP") != 0) 11839 return -1.0; 11840 11841 delta = timeNow.tv_sec - t->t.tv_sec; 11842 delta += (timeNow.tv_usec - t->t.tv_usec) / 1000000.; 11843 11844 return delta; 11845 } |
|
Definition at line 11762 of file mri_dicom_hdr.c.
11763 { 11764 11765 struct tm 11766 *tf; 11767 time_t 11768 loctime; 11769 11770 loctime = time((time_t *) NULL); 11771 tf = localtime(&loctime); 11772 11773 sprintf(datestr, "%04d%02d%02d", (tf->tm_year) + 1900, (tf->tm_mon) + 1, tf->tm_mday); 11774 return; 11775 11776 } |
|
Definition at line 11782 of file mri_dicom_hdr.c.
11783 { 11784 11785 struct tm 11786 *tf; 11787 time_t 11788 loctime; 11789 11790 loctime = time((time_t *) NULL); 11791 tf = localtime(&loctime); 11792 11793 sprintf(timestr, "%02d%02d%02d.%06d", (tf->tm_hour), (tf->tm_min), (tf->tm_sec), 0); 11794 return; 11795 } |
|
Definition at line 11810 of file mri_dicom_hdr.c. References AFMALL, UTL_TIMESTRUCTURE::key, and UTL_TIMESTRUCTURE::t.
11811 { 11812 UTL_TIMESTRUCTURE *t; 11813 11814 t = AFMALL( UTL_TIMESTRUCTURE, sizeof(*t)); 11815 if (t == NULL) 11816 return NULL; 11817 11818 strcpy(t->key, "UTL STAMP"); 11819 11820 gettimeofday(&t->t, NULL); 11821 11822 return t; 11823 } |
|
Definition at line 11953 of file mri_dicom_hdr.c. References CTNBOOLEAN, i, and S_ISDIR.
11954 { 11955 int i; 11956 #ifdef _MSC_VER 11957 struct _stat buf; 11958 #else 11959 struct stat buf; 11960 #endif 11961 11962 int flag = 0; 11963 11964 #ifdef _MSC_VER 11965 i = _stat(path, &buf); 11966 #else 11967 i = stat(path, &buf); 11968 #endif 11969 11970 11971 if (i == 0) { 11972 #ifdef _MSC_VER 11973 flag = ((buf.st_mode & _S_IFDIR) != 0); 11974 #else 11975 flag = (S_ISDIR(buf.st_mode)); 11976 #endif 11977 if (flag) 11978 return TRUE; 11979 } 11980 return FALSE; 11981 } |
|
Definition at line 11848 of file mri_dicom_hdr.c. References free, and UTL_TIMESTRUCTURE::key.
11849 { 11850 UTL_TIMESTRUCTURE *t; 11851 11852 t = (UTL_TIMESTRUCTURE *) timeStamp; 11853 if (t == NULL) 11854 return; 11855 11856 if (strcmp(t->key, "UTL STAMP") != 0) 11857 return; 11858 11859 free(timeStamp); 11860 } |
|
Definition at line 11636 of file mri_dicom_hdr.c.
11637 { 11638 11639 char 11640 *t1, 11641 *t2; 11642 11643 t1 = t2 = s; 11644 while (*t2 != '\000') { 11645 if (*t2 != ' ') { 11646 *t1 = *t2; 11647 t1++; 11648 } 11649 t2++; 11650 } 11651 *t1 = '\000'; 11652 11653 return; 11654 } |
|
Definition at line 11710 of file mri_dicom_hdr.c. References free, malloc, UTL_ConvertTimetoFloat(), and UTL_SqueezeBlanks().
11711 { 11712 11713 int 11714 match; 11715 char 11716 *ntime; 11717 double 11718 start_time, 11719 end_time, 11720 time_in_question; 11721 11722 if ((ntime = (char *) malloc(strlen(timestring) + 2)) == (char *) NULL) 11723 return (UTL_NOMATCH); 11724 11725 strcpy(ntime, timestring); 11726 UTL_SqueezeBlanks(ntime); 11727 UTL_SqueezeBlanks(stm); 11728 11729 match = 0; 11730 if (strchr(ntime, (int) '-') == (char *) NULL) { 11731 if (strcmp(ntime, stm) == 0) 11732 match = 1; 11733 } else { 11734 time_in_question = UTL_ConvertTimetoFloat(stm); 11735 if (ntime[0] == '-') { 11736 end_time = UTL_ConvertTimetoFloat(ntime + 1); 11737 if (time_in_question <= end_time) 11738 match = 1; 11739 } else if (ntime[strlen(ntime) - 1] == '-') { 11740 start_time = UTL_ConvertTimetoFloat(ntime); 11741 if (time_in_question >= start_time) 11742 match = 1; 11743 } else { 11744 start_time = UTL_ConvertTimetoFloat(ntime); 11745 end_time = UTL_ConvertTimetoFloat(strchr(ntime, (int) '-') + 1); 11746 if ((time_in_question >= start_time) && 11747 (time_in_question <= end_time)) 11748 match = 1; 11749 } 11750 } 11751 free(ntime); 11752 if (match) 11753 return (UTL_MATCH); 11754 else 11755 return (UTL_NOMATCH); 11756 } |
|
Definition at line 11863 of file mri_dicom_hdr.c. References i, p, S_ISDIR, UTL_FILECREATEFAILED, UTL_NORMAL, and UTL_PATHNOTDIR.
11864 { 11865 int i; 11866 #ifdef _MSC_VER 11867 struct _stat buf; 11868 #else 11869 struct stat buf; 11870 #endif 11871 char 11872 *p, 11873 temp[1024]; 11874 int flag = 0; 11875 static int statCount = 0; 11876 11877 #ifdef _MSC_VER 11878 statCount++; 11879 i = _stat(path, &buf); 11880 #else 11881 i = stat(path, &buf); 11882 #endif 11883 11884 11885 if (i == 0) { 11886 #ifdef _MSC_VER 11887 flag = ((buf.st_mode & _S_IFDIR) != 0); 11888 #else 11889 flag = (S_ISDIR(buf.st_mode)); 11890 #endif 11891 if (flag) 11892 return UTL_NORMAL; 11893 else 11894 return UTL_PATHNOTDIR; 11895 } 11896 p = temp; 11897 11898 while (*path != '\0') { 11899 *p++ = *path++; 11900 while (*path != '/' && *path != '\\' && *path != '\0') { 11901 #ifdef _MSC_VER 11902 if (*path == ':') { 11903 *p++ = *path++; 11904 if (*path == '\0') /* We should not get C:\0, but test 11905 * it */ 11906 break; 11907 } 11908 #endif 11909 *p++ = *path++; 11910 } 11911 11912 *p = '\0'; 11913 #ifdef _MSC_VER 11914 statCount++; 11915 i = _stat(temp, &buf); 11916 #else 11917 i = stat(temp, &buf); 11918 #endif 11919 11920 if (i == 0) { 11921 #ifdef _MSC_VER 11922 flag = ((buf.st_mode & _S_IFDIR) != 0); 11923 #else 11924 flag = (S_ISDIR(buf.st_mode)); 11925 #endif 11926 if (!flag) 11927 return UTL_PATHNOTDIR; 11928 } else { 11929 #ifdef _MSC_VER 11930 int e1; 11931 e1 = errno; 11932 memset(&buf, 0, sizeof(buf)); 11933 /*fprintf(stderr, "Stat Count = %d\n", statCount);*/ 11934 statCount++; 11935 i = _stat(temp, &buf); 11936 e1 = errno; 11937 i = _mkdir(temp); 11938 #else 11939 i = mkdir(temp, 0777); 11940 #endif 11941 if (i != 0) { 11942 int e1; 11943 e1 = errno; 11944 fprintf(stderr, "Stat Count = %d\n", statCount); 11945 perror(temp); 11946 return UTL_FILECREATEFAILED; 11947 } 11948 } 11949 } 11950 return UTL_NORMAL; 11951 } |
|
Definition at line 5528 of file mri_dicom_hdr.c. References CTNBOOLEAN, DCM_ELEMENT::d, DCM_AS, DCM_CS, DCM_DA, DCM_DS, DCM_IS, DCM_LO, DCM_LT, DCM_NORMAL, DCM_PN, DCM_SH, DCM_ST, DCM_TM, DCM_UI, DCM_UT, PRV_ELEMENT_ITEM::element, i, l, DCM_ELEMENT::length, p, PRV_ELEMENT_ITEM::paddedDataLength, and DCM_ELEMENT::representation.
05529 { 05530 int 05531 i, 05532 l; 05533 char 05534 *src, 05535 *dst, 05536 *p; 05537 DCM_ELEMENT 05538 * element; 05539 CTNBOOLEAN 05540 stopFlag = FALSE; 05541 05542 element = &item->element; 05543 if (element->length > 0) { 05544 switch (element->representation) { 05545 case DCM_DA: 05546 src = dst = element->d.string; 05547 l = (int) element->length; 05548 for (i = 0; i < l; i++) { 05549 if (isdigit(*src) || (*src == '-') || (*src == '\\')) { 05550 *dst++ = *src++; 05551 } else { 05552 src++; 05553 element->length--; 05554 } 05555 } 05556 item->paddedDataLength = element->length; 05557 if (element->length & 1) { 05558 *dst = ' '; 05559 item->paddedDataLength++; 05560 } 05561 break; 05562 case DCM_TM: 05563 l = (int) element->length; 05564 src = dst = element->d.string; 05565 for (i = 0; i < l; i++) { 05566 if (isdigit(*src) || (*src == '.') || (*src == '-') || (*src == '\\')) { 05567 *dst++ = *src++; 05568 } else { 05569 src++; 05570 element->length--; 05571 } 05572 } 05573 item->paddedDataLength = element->length; 05574 if (element->length & 1) { 05575 *dst = ' '; 05576 item->paddedDataLength++; 05577 } 05578 break; 05579 /* 05580 * Both the leading and trailing spaces are non-significant. 05581 */ 05582 case DCM_CS: 05583 case DCM_AS: 05584 case DCM_DS: 05585 case DCM_IS: 05586 case DCM_LO: 05587 case DCM_SH: 05588 case DCM_UT: 05589 l = (int) element->length; 05590 src = dst = element->d.string; 05591 for (i = 0; i < l; i++) { 05592 if ((*src == ' ') && !stopFlag) { 05593 src++; 05594 element->length--; 05595 } else { 05596 stopFlag = TRUE; 05597 *dst++ = *src++; 05598 } 05599 } 05600 /* 05601 * Right now, dst points to the char follows the last char in the 05602 * string. 05603 */ 05604 stopFlag = FALSE; 05605 l = (int) element->length; 05606 p = dst - 1; 05607 for (i = l; (i > 0) && !stopFlag; i--) { 05608 if ((*p == ' ') && !stopFlag) { 05609 p--; 05610 dst--; 05611 element->length--; 05612 } else 05613 stopFlag = TRUE; 05614 } 05615 item->paddedDataLength = element->length; 05616 if (element->length & 1) { 05617 *dst = ' '; 05618 item->paddedDataLength++; 05619 } 05620 break; 05621 /* 05622 * The trailing spaces are non-significant. 05623 */ 05624 case DCM_LT: 05625 case DCM_ST: 05626 l = (int) element->length; 05627 src = element->d.string + l - 1; 05628 for (i = l; (i > 0) && !stopFlag; i--) { 05629 if ((*src == ' ') && !stopFlag) { 05630 src--; 05631 element->length--; 05632 } else 05633 stopFlag = TRUE; 05634 } 05635 item->paddedDataLength = element->length; 05636 if (element->length & 1) { 05637 *++src = ' '; 05638 item->paddedDataLength++; 05639 } 05640 break; 05641 case DCM_PN: 05642 /* 05643 * Strip off the trailing spaces. 05644 */ 05645 l = (int) element->length; 05646 src = element->d.string + l - 1; 05647 for (i = l; (i > 0) && !stopFlag; i--) { 05648 if ((*src == ' ') && !stopFlag) { 05649 src--; 05650 element->length--; 05651 } else 05652 stopFlag = TRUE; 05653 } 05654 /* 05655 * Convert the name to the standard V3 format. 05656 */ 05657 src = dst = element->d.string; 05658 l = element->length; 05659 for (i = 0; i < l;) { 05660 if ((src[i] == ',') || (src[i] == '^')) { 05661 *dst++ = '^'; 05662 i++; 05663 while ((i < l) && (src[i] == ' ')) { 05664 element->length--; 05665 i++; 05666 } 05667 } else { 05668 *dst++ = src[i++]; 05669 } 05670 } 05671 05672 item->paddedDataLength = element->length; 05673 if (element->length & 1) { 05674 *dst = ' '; 05675 item->paddedDataLength++; 05676 } 05677 break; 05678 case DCM_UI: 05679 if (element->d.string[element->length - 1] == '\0') 05680 element->length--; 05681 if (element->d.string[element->length - 1] == ' ') { 05682 element->d.string[element->length - 1] = '\0'; 05683 element->length--; 05684 } 05685 break; 05686 default: 05687 break; 05688 } 05689 } 05690 return DCM_NORMAL; 05691 } |
|
Definition at line 5027 of file mri_dicom_hdr.c. References COND_PushCondition(), DCM_FILEIOERROR, DCM_Message(), DCM_NORMAL, fd, strerror(), U32, and write(). Referenced by DCM_WriteFile().
05029 { 05030 int 05031 bytesWritten; 05032 int *fd; 05033 05034 fd = (int *) fdPtr; 05035 05036 bytesWritten = write(*fd, buffer, (int) length); 05037 if (bytesWritten != (int) length) 05038 return COND_PushCondition(DCM_FILEIOERROR, 05039 DCM_Message(DCM_FILEIOERROR), "", strerror(errno), 05040 "writeFile"); 05041 else 05042 return DCM_NORMAL; 05043 } |
Variable Documentation
|
Definition at line 8658 of file mri_dicom_hdr.c. |
|
Initial value: { {DCM_BABGROUPLENGTH, DCM_UL, "BAB Group Length"}, {DCM_BABANNOTATIONPOSITION, DCM_US, "BAB posn of the annot. box in parent film box"}, {DCM_BABTEXTSTRING, DCM_LO, "BAB text string"} } Definition at line 9685 of file mri_dicom_hdr.c. |
|
Initial value: { {DCM_DIRFILESETID, DCM_CS, "DIR File-set ID"}, {DCM_DIRFILESETDESCRFILEID, DCM_CS, "DIR File-set descriptor ID"}, {DCM_DIRSPECIFICCHARACTER, DCM_CS, "DIR Specific character set"}, {DCM_DIRFIRSTOFFSET, DCM_UL, "DIR Offset of the first dir of root dir entity"}, {DCM_DIRLASTOFFSET, DCM_UL, "DIR Offset of the last dir of root dir entity"}, {DCM_DIRFILESETCONSISTENCY, DCM_US, "DIR File-set consistency flag"}, {DCM_DIRRECORDSEQUENCE, DCM_SQ, "DIR Directory record sequence"}, {DCM_DIRNEXTRECORDOFFSET, DCM_UL, "DIR Offset of next directory record"}, {DCM_DIRRECORDINUSE, DCM_US, "DIR Record in use flag"}, {DCM_DIRLOWERLEVELOFFSET, DCM_UL, "DIR Offset of referenced lower-level dir entity"}, {DCM_DIRRECORDTYPE, DCM_CS, "DIR Directory Record Type"}, {DCM_DIRPRIVATERECORDUID, DCM_UI, "DIR Private Record UID"}, {DCM_DIRREFERENCEDFILEID, DCM_CS, "DIR Referenced File ID"}, {DCM_DIRMRDRRECORDOFFSET, DCM_UL, "DIR Directory Record Offset"}, {DCM_DIRREFSOPCLASSUID, DCM_UI, "DIR Referenced SOP Class UID in File"}, {DCM_DIRREFSOPINSTANCEUID, DCM_UI, "DIR Referenced SOP Instance UID in File"}, {DCM_DIRREFTRANSFERSYNTAXUID, DCM_UI, "DIR Referenced Transfer Syntax in File"}, {DCM_DIRNUMREFERENCES, DCM_UL, "DIR Number of References"} } Definition at line 8470 of file mri_dicom_hdr.c. |
|
Initial value: { {DCM_BFBGROUPLENGTH, DCM_UL, "BFB Group Length"}, {DCM_BFBIMAGEDISPLAYFORMAT, DCM_ST, "BFB Type of image display format"}, {DCM_BFBANNOTATIONDISPLAYFORMAT, DCM_CS, "BFB Id of annotation display format"}, {DCM_BFBFILMORIENTATION, DCM_CS, "BFB Film orientation"}, {DCM_BFBFILMSIZEID, DCM_CS, "BFB Film size identification"}, {DCM_BFBMAGNIFICATIONTYPE, DCM_CS, "BFB Interpol. type by which printer mag image"}, {DCM_BFBSMOOTHINGTYPE, DCM_CS, "BFB Specifies type of interpolation function"}, {DCM_BFBBORDERDENSITY, DCM_CS, "BFB density of film areas around/between images"}, {DCM_BFBEMPTYIMAGEDENSITY, DCM_CS, "BFB density of image box area having no image"}, {DCM_BFBMINDENSITY, DCM_US, "BFB Minimum density of images on the film"}, {DCM_BFBMAXDENSITY, DCM_US, "BFB Maximum density of images on the film"}, {DCM_BFBTRIM, DCM_CS, "BFB specifies whether to trim or not"}, {DCM_BFBCONFIGURATIONINFO, DCM_ST, "BFB ID of configuration table"}, {DCM_BFBREFBASICFILMSESSIONSEQ, DCM_SQ, "BFB seq. of film session instance"}, {DCM_BFBREFBASICIMAGEBOXSEQ, DCM_SQ, "BFB seq. of basic image box SOP instance"}, {DCM_BFBREFBASICANNOTBOXSEQ, DCM_SQ, "BFB seq. of basic annotation box SOP instance"}, } Definition at line 9651 of file mri_dicom_hdr.c. |
|
Initial value: { {DCM_BFSGROUPLENGTH, DCM_UL, "BFS Group Length"}, {DCM_BFSCOPIES, DCM_IS, "BFS Number of copies printed for each film"}, {DCM_BFSPRINTPRIORITY, DCM_CS, "BFS Specifies priority of print job"}, {DCM_BFSMEDIUMTYPE, DCM_CS, "BFS Medium on which page will be printed"}, {DCM_BFSFILMDESTINATION, DCM_CS, "BFS Film destination"}, {DCM_BFSFILMSESSIONLABEL, DCM_LO, "BFS Human readable label to identify film"}, {DCM_BFSMEMORYALLOCATION, DCM_IS, "BFS Amount of mem allocated for film session"}, {DCM_BFSREFERENCEDFILMBOXSEQ, DCM_SQ, "BFS seq of UIDs of diff FILMBOX instances"} } Definition at line 9638 of file mri_dicom_hdr.c. |
|
Initial value: { {DCM_BIBGROUPLENGTH, DCM_UL, "BIB Group Length"}, {DCM_BIBIMAGEPOSITION, DCM_US, "BIB Specifies position of the image in the film"}, {DCM_BIBPOLARITY, DCM_CS, "BIB Specifies image polarity"}, {DCM_BIBREQUESTEDIMAGESIZE, DCM_DS, "BIB Requested image size"}, {DCM_BIBPREFORMATGREYSCALEIMAGESEQ, DCM_SQ, "BIB Preformatted Greyscale image"}, {DCM_BIBPREFORMATCOLORIMAGESEQ, DCM_SQ, "BIB Preformatted Color image"}, {DCM_BIBREFIMAGEOVERLAYBOXSEQ, DCM_SQ, "BIB Referenced Image Overlay Box seq"}, {DCM_BIBREFVOILUTSEQ, DCM_SQ, "BIB Referenced VOI LUT seq."} } Definition at line 9672 of file mri_dicom_hdr.c. |
|
Definition at line 83 of file mri_dicom_hdr.c. Referenced by DCM_GetCompressedValue(), exportStream(), extractFileOptions(), readFile(), readFile1(), and RWC_set_endianosity(). |
|
Definition at line 4436 of file mri_dicom_hdr.c. |
|
Initial value: { {DCM_CMDGROUPLENGTH, DCM_UL, "CMD Group Length"}, {DCM_CMDAFFECTEDCLASSUID, DCM_UI, "CMD Affected SOP Class UID"}, {DCM_CMDREQUESTEDCLASSUID, DCM_UI, "CMD Requested SOP Class UID"}, {DCM_CMDCOMMANDFIELD, DCM_US, "CMD Command Field"}, {DCM_CMDMSGID, DCM_US, "CMD Message ID"}, {DCM_CMDMSGIDRESPOND, DCM_US, "CMD Message ID Responded to"}, {DCM_CMDMOVEDESTINATION, DCM_AE, "CMD Move Destination"}, {DCM_CMDPRIORITY, DCM_US, "CMD Priority"}, {DCM_CMDDATASETTYPE, DCM_US, "CMD Data Set Type"}, {DCM_CMDSTATUS, DCM_US, "CMD Status"}, {DCM_CMDOFFENDINGELEMENT, DCM_AT, "CMD Offending Element"}, {DCM_CMDERRORCOMMENT, DCM_LO, "CMD Error Comment"}, {DCM_CMDERRORID, DCM_US, "CMD Error ID"}, {DCM_CMDREQUESTEDINSTANCEUID, DCM_UI, "CMD SOP Requested Instance UID"}, {DCM_CMDAFFECTEDINSTANCEUID, DCM_UI, "CMD SOP Affected Instance UID"}, {DCM_CMDEVENTTYPEID, DCM_US, "CMD Event Type ID"}, {DCM_CMDACTIONTYPEID, DCM_US, "CMD Action Type ID"}, {DCM_CMDREMAININGSUBOPERATIONS, DCM_US, "CMD Remaining Suboperations"}, {DCM_CMDCOMPLETEDSUBOPERATIONS, DCM_US, "CMD Completed Suboperations"}, {DCM_CMDFAILEDSUBOPERATIONS, DCM_US, "CMD Failed Suboperations"}, {DCM_CMDWARNINGSUBOPERATIONS, DCM_US, "CMD Warning Suboperations"}, {DCM_CMDMOVEAETITLE, DCM_AE, "CMD AE Title"}, {DCM_CMDMOVEMESSAGEID, DCM_US, "CMD Message ID"}, {DCM_CMDATTRIBUTEIDLIST, DCM_AT, "CMD Attribute Identifier List"}, } Definition at line 8424 of file mri_dicom_hdr.c. |
|
Initial value: { {DCM_CURVEGROUPLENGTH, DCM_UL, "CRV Group Length"}, {DCM_CURVEDIMENSIONS, DCM_US, "CRV Curve Dimensions"}, {DCM_CURVENUMBEROFPOINTS, DCM_US, "CRV Number of points"}, {DCM_CURVETYPEOFDATA, DCM_CS, "CRV Type of Data"}, {DCM_CURVEDESCRIPTION, DCM_LO, "CRV Curve Description"}, {DCM_CURVEAXISUNITS, DCM_SH, "CRV Axis Units"}, {DCM_CURVEAXISLABELS, DCM_SH, "CRV Axis Labels"}, {DCM_CURVEDATAVALUEREPRESENTATION, DCM_US, "CRV Data Value Representation"}, {DCM_CURVEMINCOORDINATEVALUE, DCM_US, "CRV Minimum Coordinate Value"}, {DCM_CURVEMAXCOORDINATEVALUE, DCM_US, "CRV Maximum Coordinate Value"}, {DCM_CURVERANGE, DCM_SH, "CRV Curve Range"}, {DCM_CURVEDATADESCRIPTOR, DCM_US, "CRV Data Descriptor"}, {DCM_CURVECOORDINATESTARTVALUE, DCM_US, "CRV Coordinate Start Value"}, {DCM_CURVECOORDINATESTEPVALUE, DCM_US, "CRV Coordinate Step Value"}, {DCM_CURVEAUDIOTYPE, DCM_US, "CRV Audio Type"}, {DCM_CURVEAUDIOSAMPLEFORMAT, DCM_US, "CRV Audio Sample Format"}, {DCM_CURVENUMBEROFCHANNELS, DCM_US, "CRV Number of Channels"}, {DCM_CURVENUMBEROFSAMPLES, DCM_UL, "CRV Number of Samples"}, {DCM_CURVESAMPLERATE, DCM_UL, "CRV Sample Rate"}, {DCM_CURVETOTALTIME, DCM_UL, "CRV Total Time"}, {DCM_CURVEAUDIOSAMPLEDATA, DCM_OW, "CRV Audio Sample Data"}, {DCM_CURVEAUDIOCOMMENTS, DCM_LT, "CRV Audio Comments"}, {DCM_CURVELABEL, DCM_LO, "CRV Curve Label"}, {DCM_CURVEREFOVERLAYSEQUENCE, DCM_SQ, "CRV Referenced Overlay Sequence"}, {DCM_CURVEREFOVERLAYGROUP, DCM_US, "CRV Referenced Overlay Group"}, {DCM_CURVEDATA, DCM_OW, "CRV Curve Data"} } Definition at line 9438 of file mri_dicom_hdr.c. |
|
Definition at line 864 of file mri_dicom_hdr.c. Referenced by DCM_Debug(). |
|
Initial value: { {DCM_DEVCALIBRATIONOBJECT, DCM_CS, "DEV Calibration Object"}, {DCM_DEVDEVICESEQUENCE, DCM_SQ, "DEV Device Sequence"}, {DCM_DEVDEVICELENGTH, DCM_DS, "DEV Device Length"}, {DCM_DEVDEVICEDIAMETER, DCM_DS, "DEV Device Diameter"}, {DCM_DEVDEVICEDIAMETERUNITS, DCM_CS, "DEV Device Diameter Units"}, {DCM_DEVDEVICEVOLUME, DCM_DS, "DEV Device Volume"}, {DCM_DEVINTERMARKERDISTANCE, DCM_DS, "DEV Inter-Marker Distance"}, {DCM_DEVDEVICEDESCRIPTION, DCM_LO, "DEV Device Description"}, } Definition at line 9393 of file mri_dicom_hdr.c. |
|
Initial value: { {DCM_DLMITEM, DCM_DLM, "DELIMITER Item"}, {DCM_DLMITEMDELIMITATIONITEM, DCM_DLM, "DELIMITER Item Delimitation Item"}, {DCM_DLMSEQUENCEDELIMITATIONITEM, DCM_DLM, "DELIMITER Sequence Delimitation Item"} } Definition at line 10128 of file mri_dicom_hdr.c. |
|
Initial value: { {DCM_MAKETAG(0x3004, 0x0000), DCM_UL, "DVH Group Length"}, {DCM_MAKETAG(0x3004, 0x0001), DCM_CS, "DVH Type"}, {DCM_MAKETAG(0x3004, 0x0002), DCM_CS, "DVH Dose Units"}, {DCM_MAKETAG(0x3004, 0x0004), DCM_CS, "DVH Dose Type"}, {DCM_MAKETAG(0x3004, 0x0006), DCM_LO, "DVH Dose Comment"}, {DCM_MAKETAG(0x3004, 0x0008), DCM_DS, "DVH Normalization Point"}, {DCM_MAKETAG(0x3004, 0x000a), DCM_CS, "DVH Dose Summation Type"}, {DCM_MAKETAG(0x3004, 0x000c), DCM_DS, "DVH Grid Frame Offset Vector"}, {DCM_MAKETAG(0x3004, 0x000e), DCM_DS, "DVH Dose Grid Scaling"}, {DCM_MAKETAG(0x3004, 0x0010), DCM_SQ, "DVH RT Dose ROI Sequence"}, {DCM_MAKETAG(0x3004, 0x0012), DCM_DS, "DVH Dose Value"}, {DCM_MAKETAG(0x3004, 0x0040), DCM_DS, "DVH Normalization Point"}, {DCM_MAKETAG(0x3004, 0x0042), DCM_DS, "DVH Normalization Dose Value"}, {DCM_MAKETAG(0x3004, 0x0050), DCM_SQ, "DVH Sequence"}, {DCM_MAKETAG(0x3004, 0x0052), DCM_DS, "DVH Dose Scaling"}, {DCM_MAKETAG(0x3004, 0x0054), DCM_CS, "DVH Volume Units"}, {DCM_MAKETAG(0x3004, 0x0056), DCM_IS, "DVH Number of Bins"}, {DCM_MAKETAG(0x3004, 0x0058), DCM_DS, "DVH Data"}, {DCM_MAKETAG(0x3004, 0x0060), DCM_SQ, "DVH Referenced ROI Sequence"}, {DCM_MAKETAG(0x3004, 0x0062), DCM_CS, "DVH ROI Contribution Type"}, {DCM_MAKETAG(0x3004, 0x0070), DCM_DS, "DVH Minimum Dose"}, {DCM_MAKETAG(0x3004, 0x0072), DCM_DS, "DVH Maximum Dose"}, {DCM_MAKETAG(0x3004, 0x0074), DCM_DS, "DVH Mean Dose"} } Definition at line 9762 of file mri_dicom_hdr.c. |
|
Definition at line 355 of file mri_dicom_hdr.c. |
|
Definition at line 356 of file mri_dicom_hdr.c. Referenced by COND_EstablishCallback(), and COND_PushCondition(). |
|
Initial value: { {DCM_MAKETAG(0x3002, 0x0000), DCM_UL, "RT Group Length"}, {DCM_MAKETAG(0x3002, 0x0002), DCM_SH, "RT Image Label"}, {DCM_MAKETAG(0x3002, 0x0003), DCM_LO, "RT Image Name"}, {DCM_MAKETAG(0x3002, 0x0004), DCM_ST, "RT Image Description"}, {DCM_MAKETAG(0x3002, 0x000a), DCM_CS, "RT Reported Values Origin"}, {DCM_MAKETAG(0x3002, 0x000c), DCM_CS, "RT Image Plane"}, {DCM_MAKETAG(0x3002, 0x000e), DCM_DS, "RT X-Ray Image Receptor Angle"}, {DCM_MAKETAG(0x3002, 0x0010), DCM_DS, "RT Image Orientation"}, {DCM_MAKETAG(0x3002, 0x0011), DCM_DS, "RT Image Plane Pixel Spacing"}, {DCM_MAKETAG(0x3002, 0x0012), DCM_DS, "RT Image Position"}, {DCM_MAKETAG(0x3002, 0x0020), DCM_SH, "RT Radiation Machine Name"}, {DCM_MAKETAG(0x3002, 0x0022), DCM_DS, "RT Radiation Machine SAD"}, {DCM_MAKETAG(0x3002, 0x0024), DCM_DS, "RT Radiation Machine SSD"}, {DCM_MAKETAG(0x3002, 0x0026), DCM_DS, "RT Image SID"}, {DCM_MAKETAG(0x3002, 0x0028), DCM_DS, "RT Source to Reference Object Distance"}, {DCM_MAKETAG(0x3002, 0x0029), DCM_IS, "RT Fraction Number"}, {DCM_MAKETAG(0x3002, 0x0030), DCM_SQ, "RT Exposure Sequence"}, {DCM_MAKETAG(0x3002, 0x0032), DCM_DS, "RT Meterset Exposure"} } Definition at line 9738 of file mri_dicom_hdr.c. |
|
Definition at line 9841 of file mri_dicom_hdr.c. |
|
Initial value: { {DCM_MAKETAG(0x300c, 0x0000), DCM_UL, " Group Length"}, {DCM_MAKETAG(0x300c, 0x0002), DCM_SQ, " Referenced RT Plan Sequence"}, {DCM_MAKETAG(0x300c, 0x0004), DCM_SQ, " Referenced Beam Sequence"}, {DCM_MAKETAG(0x300c, 0x0006), DCM_IS, " Referenced Beam Number"}, {DCM_MAKETAG(0x300c, 0x0007), DCM_IS, " Referenced Reference Image Number"}, {DCM_MAKETAG(0x300c, 0x0008), DCM_DS, " Start Cumulative Meterset Weight"}, {DCM_MAKETAG(0x300c, 0x0009), DCM_DS, " End Cumulative Meterset Weight"}, {DCM_MAKETAG(0x300c, 0x000a), DCM_SQ, " Referenced Brachy Application Setup Seq"}, {DCM_MAKETAG(0x300c, 0x000c), DCM_IS, " Referenced Brachy Application Setup Number"}, {DCM_MAKETAG(0x300c, 0x000e), DCM_IS, " Referenced Source Number"}, {DCM_MAKETAG(0x300c, 0x0020), DCM_SQ, " Referenced Fraction Group Sequence"}, {DCM_MAKETAG(0x300c, 0x0022), DCM_IS, " Referenced Fraction Group Number"}, {DCM_MAKETAG(0x300c, 0x0040), DCM_SQ, " Referenced Verification Image Sequence"}, {DCM_MAKETAG(0x300c, 0x0042), DCM_SQ, " Referenced Reference Image Sequence"}, {DCM_MAKETAG(0x300c, 0x0050), DCM_SQ, " Referenced Dose Reference Sequence"}, {DCM_MAKETAG(0x300c, 0x0051), DCM_IS, " Referenced Dose Reference Numer"}, {DCM_MAKETAG(0x300c, 0x0055), DCM_SQ, " Brachy Referenced Dose Reference Sequence"}, {DCM_MAKETAG(0x300c, 0x0060), DCM_SQ, " Referenced Structure Set Sequence"}, {DCM_MAKETAG(0x300c, 0x006a), DCM_IS, " Referenced Patient Setup Number"}, {DCM_MAKETAG(0x300c, 0x0080), DCM_SQ, " Referenced Dose Sequence"}, {DCM_MAKETAG(0x300c, 0x00a0), DCM_IS, " Referenced Tolerance Table Number"}, {DCM_MAKETAG(0x300c, 0x00b0), DCM_SQ, " Referenced Bolus Sequence"}, {DCM_MAKETAG(0x300c, 0x00c0), DCM_IS, " Referenced Wedge Number"}, {DCM_MAKETAG(0x300c, 0x00d0), DCM_IS, " Referenced Compensator Number"}, {DCM_MAKETAG(0x300c, 0x00e0), DCM_IS, " Referenced Block Number"}, {DCM_MAKETAG(0x300c, 0x00f0), DCM_IS, " Referenced Control Point Index"} } Definition at line 10071 of file mri_dicom_hdr.c. |
|
Initial value: { {DCM_MAKETAG(0x300e, 0x0000), DCM_UL, " Group Length"}, {DCM_MAKETAG(0x300e, 0x0002), DCM_CS, " Approval Status"}, {DCM_MAKETAG(0x300e, 0x0004), DCM_DA, " Review Date"}, {DCM_MAKETAG(0x300e, 0x0005), DCM_TM, " Review Time"}, {DCM_MAKETAG(0x300e, 0x0008), DCM_PN, " Reviewer Name"} } Definition at line 10103 of file mri_dicom_hdr.c. |
|
Definition at line 10138 of file mri_dicom_hdr.c. |
|
Referenced by exportData(). |
|
Definition at line 10315 of file mri_dicom_hdr.c. |
|
Initial value: { {DCM_MAKETAG(0x0070, 0x0000), DCM_UL, "GRP Group Length"}, {DCM_MAKETAG(0x0070, 0x0022), DCM_FL, "GRP Graphic Data"}, {DCM_MAKETAG(0x0070, 0x0023), DCM_CS, "GRP Graphic Type"}, {DCM_MAKETAG(0x0070, 0x0024), DCM_CS, "GRP Graphic Filled"}, {DCM_MAKETAG(0x0070, 0x0041), DCM_CS, "GRP Image Horizontal Flip"}, {DCM_MAKETAG(0x0070, 0x0042), DCM_US, "GRP Image Rotation"}, {DCM_MAKETAG(0x0070, 0x0052), DCM_SL, "GRP Displayed Area Top LH Corner"}, {DCM_MAKETAG(0x0070, 0x0053), DCM_SL, "GRP Displayed Area Bottom RH Corner"}, {DCM_MAKETAG(0x0070, 0x005a), DCM_SQ, "GRP Display Area Selection Seq"}, {DCM_MAKETAG(0x0070, 0x0060), DCM_SQ, "GRP Graphic Layer Sequence"}, {DCM_MAKETAG(0x0070, 0x0062), DCM_IS, "GRP Graphic Layer Order"}, {DCM_MAKETAG(0x0070, 0x0066), DCM_US, "GRP Graphic Layer Rec Disp GS Val"}, {DCM_MAKETAG(0x0070, 0x0067), DCM_US, "GRP Graphic Layer Rec Disp RGB Val"}, {DCM_MAKETAG(0x0070, 0x0068), DCM_LO, "GRP Graphic Layer Description"}, {DCM_MAKETAG(0x0070, 0x0080), DCM_CS, "GRP Presentation Label"}, {DCM_MAKETAG(0x0070, 0x0081), DCM_LO, "GRP Presentation Description"}, {DCM_MAKETAG(0x0070, 0x0082), DCM_DA, "GRP Presentation Creation Date"}, {DCM_MAKETAG(0x0070, 0x0083), DCM_TM, "GRP Presentation Creation Time"}, {DCM_MAKETAG(0x0070, 0x0084), DCM_PN, "GRP Presentation Creators Name"}, {DCM_MAKETAG(0x0070, 0x0100), DCM_CS, "GRP Presentation Size Mode"}, {DCM_MAKETAG(0x0070, 0x0101), DCM_DS, "GRP Presentation Pixel Spacing"}, {DCM_MAKETAG(0x0070, 0x0102), DCM_IS, "GRP Presentation Pixel Aspect Ratio"}, {DCM_MAKETAG(0x0070, 0x0103), DCM_FL, "GRP Presentation Pixel Magnification Ratio"}, } Definition at line 9556 of file mri_dicom_hdr.c. |
|
Definition at line 8493 of file mri_dicom_hdr.c. |
|
Definition at line 9015 of file mri_dicom_hdr.c. |
|
Initial value: { {DCM_IOBGROUPLENGTH, DCM_UL, "IOB Group Length"}, {DCM_IOBREFOVERLAYPLANESEQ, DCM_SQ, "IOB Ref Overlay Plane Sequence"}, {DCM_IOBREFOVERLAYPLANEGROUPS, DCM_US, "IOB Ref Overlay Plane Groups"}, {DCM_IOBOVERLAYMAGNIFICATIONTYPE, DCM_CS, "IOB Overlay Magnification Type"}, {DCM_IOBOVERLAYSMOOTHINGTYPE, DCM_CS, "IOB Overlay Smoothing Type"}, {DCM_IOBOVERLAYFOREGROUNDDENSITY, DCM_CS, "IOB Overlay Foreground Density"}, {DCM_IOBOVERLAYMODE, DCM_CS, "IOB Overlay Mode"}, {DCM_IOBTHRESHOLDDENSITY, DCM_CS, "IOB Threshold Density"}, {DCM_IOBREFIMAGEBOXSEQUENCE, DCM_SQ, "IOB Ref Image Box Sequence (RET)"} } Definition at line 9693 of file mri_dicom_hdr.c. |
|
Definition at line 84 of file mri_dicom_hdr.c. Referenced by RWC_set_endianosity(). |
|
Definition at line 82 of file mri_dicom_hdr.c. Referenced by DCM_GetCompressedValue(), exportEncapsulatedPixels(), exportStream(), extractFileOptions(), readFile(), readFile1(), and RWC_set_endianosity(). |
|
Initial value: { {DCM_MEDIAGROUPLENGTH, DCM_UL, "MED Media Group Length "}, {DCM_MEDIASTORAGEFILESETID, DCM_SH, "MED Storage Media File-set ID"}, {DCM_MEDIASTORAGEFILESETUID, DCM_UI, "MED Storage Media File-setUID"}, {DCM_MEDIAICONIMAGE, DCM_SQ, "MED Icon Image Sequence"}, {DCM_MEDIATOPICTITLE, DCM_LO, "MED Topic Title"}, {DCM_MEDIATOPICSUBJECT, DCM_ST, "MED Topic Subject"}, {DCM_MEDIATOPICAUTHOR, DCM_LO, "MED Topic Author"}, {DCM_MEDIATOPICKEYWORD, DCM_LO, "MED Topic Keywords"} } Definition at line 9625 of file mri_dicom_hdr.c. |
|
Definition at line 8243 of file mri_dicom_hdr.c. |
|
Initial value: { {DCM_METAGROUPLENGTH, DCM_UL, "META Group Length"}, {DCM_METAINFORMATIONVERSION, DCM_OB, "META File Meta Information Version"}, {DCM_METAMEDIASTORAGESOPCLASS, DCM_UI, "META Media Stored SOP Class UID"}, {DCM_METAMEDIASTORAGESOPINSTANCE, DCM_UI, "META Media Stored SOP Instance UID"}, {DCM_METATRANSFERSYNTAX, DCM_UI, "META Transfer Syntax UID"}, {DCM_METAIMPLEMENTATIONCLASS, DCM_UI, "META Implementation Class UID"}, {DCM_METAIMPLEMENTATIONVERSION, DCM_SH, "META Implementation Version Name"}, {DCM_METASOURCEAETITLE, DCM_AE, "META Source Application Entity Title"}, {DCM_METAPRIVATEINFORMATIONCREATOR, DCM_UI, "META Private Information Creator"}, {DCM_METAPRIVATEINFORMATION, DCM_OB, "META Private Information"} } Definition at line 8455 of file mri_dicom_hdr.c. |
|
Definition at line 9468 of file mri_dicom_hdr.c. |
|
Definition at line 110 of file mri_dicom_hdr.c. Referenced by RWC_clear_pbuf(), and RWC_printf(). |
|
Definition at line 9584 of file mri_dicom_hdr.c. |
|
Initial value: { {DCM_PADITEM, DCM_OB, "Pad item"} } Definition at line 10121 of file mri_dicom_hdr.c. |
|
Definition at line 8619 of file mri_dicom_hdr.c. |
|
Definition at line 109 of file mri_dicom_hdr.c. Referenced by mri_dicom_header(), RWC_clear_pbuf(), and RWC_printf(). |
|
Initial value: { {DCM_PJGROUPLENGTH, DCM_UL, "PJ Group Length"}, {DCM_PJEXECUTIONSTATUS, DCM_CS, "PJ execution status of print job"}, {DCM_PJEXECUTIONSTATUSINFO, DCM_CS, "PJ additional information"}, {DCM_PJCREATIONDATE, DCM_DA, "PJ date of print job creation"}, {DCM_PJCREATIONTIME, DCM_TM, "PJ time of print job creation"}, {DCM_PJORIGINATOR, DCM_AE, "PJ Appln entity title that issued the print opn"}, {DCM_PJREFPRINTJOBSEQ, DCM_SQ, "PJ Referenced print job seq."} } Definition at line 9716 of file mri_dicom_hdr.c. |
|
Initial value: { {DCM_MAKETAG(0x2050, 0x0000), DCM_UL, "PLUT Group Length"}, {DCM_MAKETAG(0x2050, 0x0010), DCM_SQ, "PLUT Presentation LUT Sequence"}, {DCM_MAKETAG(0x2050, 0x0020), DCM_CS, "PLUT Presentation LUT Shape"}, {DCM_MAKETAG(0x2050, 0x0500), DCM_SQ, "PLUT Referenced Presentation LUT Sequence"} } Definition at line 9707 of file mri_dicom_hdr.c. |
|
Definition at line 9205 of file mri_dicom_hdr.c. |
|
Initial value: { {DCM_PRINTERGROUPLENGTH, DCM_UL, "PRINTER Group Length"}, {DCM_PRINTERSTATUS, DCM_CS, "PRINTER printer device status"}, {DCM_PRINTERSTATUSINFO, DCM_CS, "PRINTER additional information"}, {DCM_PRINTERNAME, DCM_LO, "PRINTER printer name"}, {DCM_PRINTERQUEUEID, DCM_SH, "Printer Queue ID"} } Definition at line 9728 of file mri_dicom_hdr.c. |
|
Initial value: { {DCM_PXLGROUPLENGTH, DCM_UL, "PXL Group Length"}, {DCM_PXLPIXELDATA, DCM_OT, "PXL Pixel Data"} } Definition at line 9619 of file mri_dicom_hdr.c. |
|
Definition at line 151 of file mri_dicom_hdr.c. Referenced by mri_dicom_header(), mri_dicom_pxlarr(), and readData(). |
|
Definition at line 150 of file mri_dicom_hdr.c. Referenced by mri_dicom_header(), mri_dicom_pxlarr(), and readData(). |
|
Definition at line 8952 of file mri_dicom_hdr.c. |
|
Initial value: { {DCM_RESGROUPLENGTH, DCM_UL, "RES Group Length"}, {DCM_RESID, DCM_SH, "RES Results ID"}, {DCM_RESIDISSUER, DCM_LO, "RES Results ID Issuer"}, {DCM_RESREFERENCEDINTERPSEQ, DCM_SQ, "RES Referenced Interpretation Sequence"}, {DCM_RESINTERPRECORDEDDATE, DCM_DA, "RES Interpretation Recorded Date"}, {DCM_RESINTERPRECORDEDTIME, DCM_TM, "RES Interpretation Recorded Time"}, {DCM_RESINTERPRECORDER, DCM_PN, "RES Interpretation Recorder"}, {DCM_RESREFERENCETORECORDEDSOUND, DCM_LO, "RES Reference to Recorded Sound"}, {DCM_RESINTERPTRANSCRIPTIONDATE, DCM_DA, "RES Interpretation Transcription Date"}, {DCM_RESINTERPTRANSCRIPTIONTIME, DCM_TM, "RES Interpretation Transcription Time"}, {DCM_RESINTERPTRANSCRIBER, DCM_PN, "RES Interpretation Transcriber"}, {DCM_RESINTERPTEXT, DCM_ST, "RES Interpretation Text"}, {DCM_RESINTERPAUTHOR, DCM_PN, "RES Interpretation Author"}, {DCM_RESINTERPAPPROVERSEQUENCE, DCM_SQ, "RES Interpretation Approver Sequence"}, {DCM_RESINTERPAPPROVALDATE, DCM_DA, "RES Interpretation Approval Date"}, {DCM_RESINTERPAPPROVALTIME, DCM_TM, "RES Interpretation Approval Time"}, {DCM_RESPHYSICIANAPPROVINGINTERP, DCM_PN, "RES Physician Approving Interpretation"}, {DCM_RESDIAGNOSIS, DCM_LT, "RES Diagnosis"}, {DCM_RESDIAGNOSISCODESEQ, DCM_SQ, "RES Diagnosis Code Sequence"}, {DCM_RESDISTRIBUTIIONLISTSEQUENCE, DCM_SQ, "RES Results Distribution List Sequence"}, {DCM_RESDISTRIBUTIONNAME, DCM_PN, "RES Distribution Name"}, {DCM_RESDISTRIBUTIONADDRESS, DCM_LO, "RES Distribution Address"}, {DCM_RESINTERPID, DCM_SH, "RES Interpretation ID"}, {DCM_RESINTERPIDISSUER, DCM_LO, "RES Interpretation ID Issuer"}, {DCM_RESINTERPTYPEID, DCM_CS, "RES Interpretation Type ID"}, {DCM_RESINTERPSTATUSID, DCM_CS, "RES Interpretation Status ID"}, {DCM_RESIMPRESSIONS, DCM_ST, "RES Impressions"}, {DCM_RESCOMMENTS, DCM_ST, "RES Comments"} } Definition at line 9406 of file mri_dicom_hdr.c. |
|
Definition at line 192 of file mri_dicom_hdr.c. Referenced by mri_dicom_seterr(), and readVRLength(). |
|
Definition at line 201 of file mri_dicom_hdr.c. Referenced by DCM_OpenFile(), and mri_dicom_header(). |
|
Definition at line 160 of file mri_dicom_hdr.c. Referenced by DCM_DumpElements(), mri_dicom_nohex(), and mri_dicom_noname(). |
|
Definition at line 183 of file mri_dicom_hdr.c. Referenced by DCM_DumpElements(), mri_dicom_header(), and mri_dicom_setvm(). |
|
Initial value: { {DCM_SDYGROUPLENGTH, DCM_UL, "SDY Study Group length"}, {DCM_SDYSTATUSID, DCM_CS, "SDY Study Status ID"}, {DCM_SDYPRIORITYID, DCM_CS, "SDY Study Priority ID"}, {DCM_SDYIDISSUER, DCM_LO, "SDY Study ID Issuer"}, {DCM_SDYVERIFIEDDATE, DCM_DA, "SDY Study Verified Date"}, {DCM_SDYVERIFIEDTIME, DCM_TM, "SDY Study Verified Time"}, {DCM_SDYREADDATE, DCM_DA, "SDY Study Read Date"}, {DCM_SDYREADTIME, DCM_TM, "SDY Study Read Time"}, {DCM_SDYSCHEDULEDSTARTDATE, DCM_DA, "SDY Scheduled Study Start Date"}, {DCM_SDYSCHEDULEDSTARTTIME, DCM_TM, "SDY Scheduled Study Start Time"}, {DCM_SDYSCHEDULEDSTOPDATE, DCM_DA, "SDY Scheduled Study Stop Date"}, {DCM_SDYSCHEDULEDSTOPTIME, DCM_TM, "SDY Scheduled Study Stop Time"}, {DCM_SDYSCHEDULEDLOCATION, DCM_LO, "SDY Scheduled Study Location"}, {DCM_SDYSCHEDULEDLOCATIONAETITLE, DCM_AE, "SDY Scheduled Study Location AE Title(s)"}, {DCM_SDYREASON, DCM_LO, "SDY Study Reason"}, {DCM_SDYREQUESTINGPHYSICIAN, DCM_PN, "SDY Requesting Physician "}, {DCM_SDYREQUESTINGSERVICE, DCM_LO, "SDY Requesting Service"}, {DCM_SDYARRIVALDATE, DCM_DA, "SDY Study Arrival Date"}, {DCM_SDYARRIVALTIME, DCM_TM, "SDY Study Arrival Time"}, {DCM_SDYCOMPLETIONDATE, DCM_DA, "SDY Study Completion Date"}, {DCM_SDYCOMPLETIONTIME, DCM_TM, "SDY Study Completion Time"}, {DCM_SDYSTUDYCOMPONENTSTATUSID, DCM_CS, "SDY Study Component Status ID"}, {DCM_SDYREQUESTEDPRODESCRIPTION, DCM_LO, "SDY Requested Procedure Description"}, {DCM_SDYREQUESTEDPROCODESEQ, DCM_SQ, "SDY Requested Procedure Code Seq"}, {DCM_SDYREQUESTEDCONTRASTAGENT, DCM_LO, "SDY Requested Contrast Agent"}, {DCM_SDYCOMMENTS, DCM_LT, "SDY Comments"} } Definition at line 9110 of file mri_dicom_hdr.c. |
|
Definition at line 4435 of file mri_dicom_hdr.c. |
|
Definition at line 9791 of file mri_dicom_hdr.c. |
|
Definition at line 354 of file mri_dicom_hdr.c. Referenced by COND_CopyText(), COND_DumpConditions(), COND_ExtractConditions(), COND_PopCondition(), COND_PushCondition(), COND_TopCondition(), COND_WriteConditions(), and dumpstack(). |
|
Initial value: { {DCM_VISGROUPLENGTH, DCM_UL, "VIS Group Length"}, {DCM_VISREFERENCEDPATALIASSEQ, DCM_SQ, "VIS Referenced Patient Alias Sequence"}, {DCM_VISSTATUSID, DCM_CS, "VIS Visit Status ID"}, {DCM_VISADMISSIONID, DCM_LO, "VIS Admission ID"}, {DCM_VISISSUEROFADMISSIONID, DCM_LO, "VIS Issuer of Admission ID"}, {DCM_VISROUTEOFADMISSION, DCM_LO, "VIS Route of Admission"}, {DCM_VISSCHEDULEDADMISSIONDATE, DCM_DA, "VIS Scheduled Admission Date"}, {DCM_VISSCHEDULEDADMISSIONTIME, DCM_TM, "VIS Scheduled Admission Time"}, {DCM_VISSCHEDULEDDISCHARGEDATE, DCM_DA, "VIS Scheduled Discharge Date"}, {DCM_VISSCHEDULEDDISCHARGETIME, DCM_TM, "VIS Scheduled Discharge Time"}, {DCM_VISSCHEDULEDPATINSTRESIDENCE, DCM_LO, "VIS Scheduled Patient Institution Residence"}, {DCM_VISADMITTINGDATE, DCM_DA, "VIS Admitting Date"}, {DCM_VISADMITTINGTIME, DCM_TM, "VIS Admitting Time"}, {DCM_VISDISCHARGEDATE, DCM_DA, "VIS Discharge Date"}, {DCM_VISDISCHARGETIME, DCM_TM, "VIS Discharge Time"}, {DCM_VISDISCHARGEDIAGDESCRIPTION, DCM_LO, "VIS Discharge Diagnosis Description"}, {DCM_VISDISCHARGEDIAGNOSISCODESEQ, DCM_SQ, "VIS Discharge Diagnosis Code Sequence"}, {DCM_VISSPECIALNEEDS, DCM_LO, "VIS Special Needs"}, {DCM_VISCURRENTPATIENTLOCATION, DCM_LO, "VIS Current Patient Location"}, {DCM_VISPATIENTSINSTRESIDENCE, DCM_LO, "VIS Patient's Institution Residence"}, {DCM_VISPATIENTSTATE, DCM_LO, "VIS Patient State"}, {DCM_VISCOMMENTS, DCM_LT, "VIS Comments"} } Definition at line 9142 of file mri_dicom_hdr.c. |
|
Definition at line 4130 of file mri_dicom_hdr.c. |
|
Definition at line 9169 of file mri_dicom_hdr.c. |