Exemplo n.º 1
0
static CONDITION
deleteSCImageRecord(PRIVATE_HANDLE * h, FIS_DATA_TYPE criteriaType, char *uid)
{
    CONDITION
    cond;
    TBL_CRITERIA
	criteria[2];

    if (criteriaType == FIS_K_STUDYCOMPONENT) {
	TBL_CRITERIA_LOAD_BYTE(criteria[0], "StuComUID", uid, TBL_STRING,
			       TBL_EQUAL);
    } else if (criteriaType == FIS_K_SCSERIES) {
	TBL_CRITERIA_LOAD_BYTE(criteria[0], "SerInsUID", uid, TBL_STRING,
			       TBL_EQUAL);
    } else if (criteriaType == FIS_K_SCIMAGE) {
	TBL_CRITERIA_LOAD_BYTE(criteria[0], "SOPInsUID", uid, TBL_STRING,
			       TBL_EQUAL);
    } else
	return COND_PushCondition(FIS_COND(FIS_ILLEGALDELETECRITERIA),
				  "study", "(FIS)deleteSCImageRecord");

    criteria[1].FieldName = NULL;

    cond = TBL_Delete(&h->studyComponentImageHandle, criteria);
    if (cond != TBL_NORMAL)
	return COND_PushCondition(FIS_COND(FIS_DELETEFAILED),
				  "(FIS)deleteSCImageRecord");

    return FIS_NORMAL;
}
Exemplo n.º 2
0
CONDITION
FIS_SelectOne(FIS_HANDLE ** handle, FIS_DATA_TYPE type,
	      FIS_CRITERIA_TYPE criteriaType, const char *criteriaString,
	      long listFlag, void *r)
{
    CONDITION cond = FIS_NORMAL;
    PRIVATE_HANDLE *h;
    long count = 0;

    h = *(PRIVATE_HANDLE **) handle;

    switch (type) {
    case FIS_K_PATIENT:
	cond = 0;
	break;
    case FIS_K_VISIT:
	cond = 0;
	break;
    case FIS_K_STUDY:
	cond = selectStudyRecord(h, criteriaType, criteriaString, listFlag, NULL,
				 (FIS_STUDYRECORD *) r, &count);
	break;
    case FIS_K_STUDYCOMPONENT:
	cond = 0;
	break;
    case FIS_K_SCSERIES:
	cond = 0;
	break;
    case FIS_K_SCIMAGE:
	cond = 0;
	break;
    case FIS_K_RESULTS:
	cond = 0;
	break;
    case FIS_K_INTERPRETATION:
	cond = 0;
	break;
    case FIS_K_COMMITSOPREF:
	cond = 0;
	break;
    case FIS_K_STORAGECOMMITREQ:
	cond = 0;
	break;
    }
    if (cond != FIS_NORMAL)
	return COND_PushCondition(FIS_COND(FIS_GETFAILED),
				  "FIS_SelectOne");
    if (count != 1)
	return COND_PushCondition(FIS_COND(FIS_SINGLEGETFAILED),
				  criteriaString, "FIS_SelectOne");
    return cond;
}
Exemplo n.º 3
0
static CONDITION
deleteInterpretationRecord(PRIVATE_HANDLE * h, FIS_DATA_TYPE criteriaType,
			   char *uid)
{
    CONDITION
    cond;
    TBL_CRITERIA
	criteria[2];

    if (criteriaType == FIS_K_RESULTS) {
	TBL_CRITERIA_LOAD_BYTE(criteria[0], "ResUID", uid, TBL_STRING,
			       TBL_EQUAL);
    } else if (criteriaType == FIS_K_INTERPRETATION) {
	TBL_CRITERIA_LOAD_BYTE(criteria[0], "IntUID", uid, TBL_STRING,
			       TBL_EQUAL);
    } else
	return COND_PushCondition(FIS_COND(FIS_ILLEGALDELETECRITERIA),
		       "interpretation", "(FIS)deleteInterpretationRecord");

    criteria[1].FieldName = NULL;

    cond = TBL_Delete(&h->interpretationHandle, criteria);
    if (cond != TBL_NORMAL)
	return FIS_DELETEFAILED;

    return FIS_NORMAL;
}
Exemplo n.º 4
0
CONDITION
FIS_Delete(FIS_HANDLE ** handle, FIS_DATA_TYPE type,
	   FIS_DATA_TYPE criteriaType, char *uid)
{
    CONDITION
	cond = FIS_NORMAL;
    PRIVATE_HANDLE
	* h;

    if (uid == NULL)
	return COND_PushCondition(FIS_COND(FIS_NULLSTRING), "UID", "FIS_Delete");
    if (uid[0] == '\0')
	return COND_PushCondition(FIS_COND(FIS_NULLSTRING), "UID", "FIS_Delete");

    h = *(PRIVATE_HANDLE **) handle;

    switch (type) {
    case FIS_K_PATIENT:
	cond = deletePatientRecord(h, criteriaType, uid);
	break;
    case FIS_K_VISIT:
	break;
    case FIS_K_STUDY:
	cond = deleteStudyRecord(h, criteriaType, uid);
	break;
    case FIS_K_STUDYCOMPONENT:
	cond = deleteStudyComponentRecord(h, criteriaType, uid);
	break;
    case FIS_K_SCSERIES:
	cond = deleteSCSeriesRecord(h, criteriaType, uid);
	break;
    case FIS_K_SCIMAGE:
	cond = deleteSCImageRecord(h, criteriaType, uid);
	break;
    case FIS_K_RESULTS:
	cond = deleteResultsRecord(h, criteriaType, uid);
	break;
    case FIS_K_INTERPRETATION:
	cond = deleteInterpretationRecord(h, criteriaType, uid);
	break;
    }
    if (cond != FIS_NORMAL)
	return COND_PushCondition(FIS_COND(FIS_DELETEFAILED),
				  "FIS_Get");
    else
	return FIS_NORMAL;
}
Exemplo n.º 5
0
CONDITION
FIS_Get(FIS_HANDLE ** handle, FIS_DATA_TYPE type,
   FIS_DATA_TYPE criteriaType, char *uid, long listFlag, LST_HEAD * getList)
{
    CONDITION
	cond = FIS_NORMAL;
    PRIVATE_HANDLE
	* h;

    h = *(PRIVATE_HANDLE **) handle;
    FIS_ClearList(getList);

    switch (type) {
    case FIS_K_PATIENT:
	cond = getPatientRecord(h, criteriaType, uid, listFlag, getList, NULL, NULL);
	break;
    case FIS_K_VISIT:
	cond = getVisitRecord(h, criteriaType, uid, listFlag, getList, NULL, NULL);
	break;
    case FIS_K_STUDY:
	cond = getStudyRecord(h, criteriaType, uid, listFlag, getList, NULL, NULL);
	break;
    case FIS_K_STUDYCOMPONENT:
	cond = getStudyComponentRecord(h, criteriaType, uid, listFlag, getList, NULL, NULL);
	break;
    case FIS_K_SCSERIES:
	cond = getSCSeriesRecord(h, criteriaType, uid, listFlag, getList, NULL, NULL);
	break;
    case FIS_K_SCIMAGE:
	cond = getSCImageRecord(h, criteriaType, uid, listFlag, getList, NULL, NULL);
	break;
    case FIS_K_RESULTS:
	cond = getResultsRecord(h, criteriaType, uid, listFlag, getList, NULL, NULL);
	break;
    case FIS_K_INTERPRETATION:
	cond = getInterpretationRecord(h, criteriaType, uid, listFlag, getList, NULL, NULL);
	break;
    case FIS_K_STORAGECOMMITREQ:
	cond = getStorageCommitReq(h, criteriaType, uid, listFlag, getList, NULL, NULL);
	break;
    case FIS_K_COMMITSOPREF:
	cond = getCommitSOPRecord(h, criteriaType, uid, listFlag, getList,
				  NULL, NULL);
	break;
    }
    if (cond != FIS_NORMAL)
	return COND_PushCondition(FIS_COND(FIS_GETFAILED),
				  "FIS_Get");
    return cond;
}
Exemplo n.º 6
0
static CONDITION
deletePatientRecord(PRIVATE_HANDLE * h, FIS_DATA_TYPE criteriaType, char *uid)
{
    CONDITION
    cond;
    TBL_CRITERIA
	criteria[2];

    if (criteriaType == FIS_K_PATIENT) {
	TBL_CRITERIA_LOAD_BYTE(criteria[0], "PatUID", uid, TBL_STRING,
			       TBL_EQUAL);
    } else
	return COND_PushCondition(FIS_COND(FIS_ILLEGALDELETECRITERIA),
				  "patient", "(FIS)deletePatientRecord");

    criteria[1].FieldName = NULL;

    cond = TBL_Delete(&h->patientHandle, criteria);
    if (cond != TBL_NORMAL)
	return COND_PushCondition(FIS_COND(FIS_PATIENTDELETEFAILED),
				  "(FIS)deletePatientRecord");

    return FIS_NORMAL;
}
Exemplo n.º 7
0
static CONDITION
getSCImageRecord(PRIVATE_HANDLE * h,
   FIS_DATA_TYPE criteriaType, char *uid, long listFlag, LST_HEAD * getList,
		 FIS_SCIMAGERECORD * r, long *count)
{
    CONDITION cond;
    TBL_CRITERIA criteria[2];
    FIS_SCIMAGERECORD *p;

    static TBL_FIELD fields[] = {
	{TBL_FIELD_STRING("SOPInsUID", scImage.SOPInsUID)},
	{TBL_FIELD_STRING("SerInsUID", scImage.SerInsUID)},
	{TBL_FIELD_STRING("StuComUID", scImage.StuComUID)},
	{TBL_FIELD_STRING("SOPClaUID", scImage.SOPClaUID)},
	{TBL_FIELD_STRING("RetAETit", scImage.RetAETit)},
	{TBL_FIELD_STRING("StoMedFilSetID", scImage.StoMedFilSetID)},
	{TBL_FIELD_STRING("StoMedFilSetUID", scImage.StoMedFilSetUID)},
	{NULL},
    };

    criteria[0].FieldName = criteria[1].FieldName = NULL;
    if (uid != NULL) {
	if (uid[0] != '\0') {
	    if (criteriaType == FIS_K_SCSERIES) {
		TBL_CRITERIA_LOAD_BYTE(criteria[0], "SerInsUID", uid, TBL_STRING, TBL_EQUAL);
	    } else if (criteriaType == FIS_K_STUDYCOMPONENT) {
		TBL_CRITERIA_LOAD_BYTE(criteria[0], "StuComUID", uid, TBL_STRING, TBL_EQUAL);
	    } else {
		TBL_CRITERIA_LOAD_BYTE(criteria[0], "SOPInsUID", uid, TBL_STRING, TBL_EQUAL);
	    }
	}
    }
    (void) memset(&scImage, 0, sizeof(scImage));
    scImage.Type = FIS_K_SCIMAGE;
    cond = TBL_Select(&h->studyComponentImageHandle, criteria, fields, count,
		      scImageCallback, getList);
    if (cond != TBL_NORMAL)
	return COND_PushCondition(FIS_COND(FIS_STUDYGETFAILED),
				  "(FIS)getSCImageRecord");

    if (r != NULL)
	*r = scImage;

    return FIS_NORMAL;
}
Exemplo n.º 8
0
CONDITION
FIS_DeleteWorkQueueRecord(FIS_HANDLE ** handle, char *taskID)
{
    CONDITION cond;
    TBL_CRITERIA criteria[2];
    PRIVATE_HANDLE *h;

    h = *(PRIVATE_HANDLE **) handle;

    TBL_CRITERIA_LOAD_BYTE(criteria[0], "TasID", taskID, TBL_STRING, TBL_EQUAL);
    criteria[1].FieldName = NULL;

    cond = TBL_Delete(&h->workQueueHandle, criteria);
    if (cond != TBL_NORMAL)
	return COND_PushCondition(FIS_COND(FIS_WORKQUEUERECORDDELETEFAILED),
				  "FIS_DeleteWorkQueueRecord");

    return FIS_NORMAL;
}
Exemplo n.º 9
0
static CONDITION
getSCSeriesRecord(PRIVATE_HANDLE * h,
   FIS_DATA_TYPE criteriaType, char *uid, long listFlag, LST_HEAD * getList,
		  FIS_SCSERIESRECORD * r, long *count)
{
    CONDITION cond;
    TBL_CRITERIA criteria[2];
    FIS_SCSERIESRECORD *p;

    static TBL_FIELD fields[] = {
	{TBL_FIELD_STRING("SerInsUID", scSeries.SerInsUID)},
	{TBL_FIELD_STRING("StuComUID", scSeries.StuComUID)},
	{TBL_FIELD_STRING("SerDat", scSeries.SerDat)},
	{TBL_FIELD_STRING("SerTim", scSeries.SerTim)},
	{TBL_FIELD_STRING("RetAETit", scSeries.RetAETit)},
	{TBL_FIELD_STRING("StoMedFilSetID", scSeries.StoMedFilSetID)},
	{TBL_FIELD_STRING("StoMedFilSetUID", scSeries.StoMedFilSetUID)},
	{NULL},
    };

    criteria[0].FieldName = criteria[1].FieldName = NULL;
    if (uid != NULL) {
	if (uid[0] != '\0') {
	    if (criteriaType == FIS_K_STUDYCOMPONENT) {
		TBL_CRITERIA_LOAD_BYTE(criteria[0], "StuComUID", uid, TBL_STRING, TBL_EQUAL);
	    } else {
		TBL_CRITERIA_LOAD_BYTE(criteria[0], "SerInsUID", uid, TBL_STRING, TBL_EQUAL);
	    }
	}
    }
    (void) memset(&scSeries, 0, sizeof(scSeries));
    scSeries.Type = FIS_K_SCSERIES;
    cond = TBL_Select(&h->studyComponentSeriesHandle, criteria, fields, count,
		      scSeriesCallback, getList);
    if (cond != TBL_NORMAL)
	return COND_PushCondition(FIS_COND(FIS_STUDYGETFAILED),
				  "(FIS)getSCSeriesRecord");

    if (r != NULL)
	*r = scSeries;


    if (listFlag & FIS_K_SCSERIES_IMAGELIST) {
	if (getList != NULL) {
	    p = LST_Head(&getList);
	    (void) LST_Position(&getList, p);
	} else
	    p = r;
	while (p != NULL) {
	    p->ImageList = LST_Create();
	    cond = getSCImageRecord(h, FIS_K_SCSERIES, p->SerInsUID, 0,
				    p->ImageList, NULL, NULL);
	    if (cond != FIS_NORMAL)
		return cond;
	    if (getList != NULL)
		p = LST_Next(&getList);
	    else
		p = NULL;
	}
    }
    return FIS_NORMAL;
}
Exemplo n.º 10
0
static CONDITION
getStudyComponentRecord(PRIVATE_HANDLE * h,
   FIS_DATA_TYPE criteriaType, char *uid, long listFlag, LST_HEAD * getList,
			FIS_STUDYCOMPONENTRECORD * r, long *count)
{
    CONDITION cond;
    TBL_CRITERIA criteria[2];
    FIS_STUDYCOMPONENTRECORD *p;

    static TBL_FIELD fields[] = {
	{TBL_FIELD_STRING("StuComUID", studyComponent.StuComUID)},
	{TBL_FIELD_STRING("StuInsUID", studyComponent.StuInsUID)},
	{TBL_FIELD_STRING("Mod", studyComponent.Mod)},
	{TBL_FIELD_STRING("StuDes", studyComponent.StuDes)},
	{TBL_FIELD_STRING("ProCodVal", studyComponent.ProCodVal)},
	{TBL_FIELD_STRING("ProCodSchDes", studyComponent.ProCodSchDes)},
	{TBL_FIELD_STRING("ProCodMea", studyComponent.ProCodMea)},
	{TBL_FIELD_STRING("StuComStaID", studyComponent.StuComStaID)},
	{TBL_FIELD_STRING("StuID", studyComponent.StuID)},
	{NULL},
    };

    criteria[0].FieldName = criteria[1].FieldName = NULL;
    if (uid != NULL) {
	if (uid[0] != '\0') {
	    if (criteriaType == FIS_K_STUDY) {
		TBL_CRITERIA_LOAD_BYTE(criteria[0], "StuInsUID", uid, TBL_STRING, TBL_EQUAL);
	    } else {
		TBL_CRITERIA_LOAD_BYTE(criteria[0], "StuComUID", uid, TBL_STRING, TBL_EQUAL);
	    }
	}
    }
    (void) memset(&studyComponent, 0, sizeof(studyComponent));
    studyComponent.Type = FIS_K_STUDYCOMPONENT;
    cond = TBL_Select(&h->studyComponentHandle, criteria, fields, count,
		      studyComponentCallback, getList);
    if (cond != TBL_NORMAL)
	return COND_PushCondition(FIS_COND(FIS_STUDYGETFAILED),
				  "(FIS)getStudyRecord");

    if (r != NULL)
	*r = studyComponent;

    if (listFlag & FIS_K_STUDYCOMP_SERIESLIST) {
	if (getList != NULL) {
	    p = LST_Head(&getList);
	    (void) LST_Position(&getList, p);
	} else
	    p = r;
	while (p != NULL) {
	    p->SeriesList = LST_Create();
	    p->Flag |= FIS_K_STUDYCOMP_SERIESLIST;
	    cond = getSCSeriesRecord(h, FIS_K_STUDYCOMPONENT, p->StuComUID,
				     FIS_K_SCSERIES_IMAGELIST, p->SeriesList,
				     NULL, NULL);
	    if (cond != FIS_NORMAL)
		return cond;
	    if (getList != NULL)
		p = LST_Next(&getList);
	    else
		p = NULL;
	}
    }
    return FIS_NORMAL;
}
Exemplo n.º 11
0
static CONDITION
selectStudyRecord(PRIVATE_HANDLE * h,
		  FIS_CRITERIA_TYPE criteriaType, const char *criteriaString,
		  long listFlag, LST_HEAD * getList,
		  FIS_STUDYRECORD * r, long *count)
{
    CONDITION cond = FIS_NORMAL;
    TBL_CRITERIA criteria[2];
    char localString[1024];
    FIS_STUDYRECORD *p;

    static TBL_FIELD fields[] = {
	{TBL_FIELD_STRING("PatUID", study.PatUID)},
	{TBL_FIELD_STRING("StuInsUID", study.StuInsUID)},
	{TBL_FIELD_STRING("VisUID", study.VisUID)},
	{TBL_FIELD_STRING("AccNum", study.AccNum)},
	{TBL_FIELD_STRING("StuID", study.StuID)},
	{"SchStuStaDat", TBL_SIGNED4, sizeof(studyDate), sizeof(studyDate),
	0, (void *) &studyDate},
	{"SchStuStaTim", TBL_FLOAT4, sizeof(studyTime), sizeof(studyTime),
	0, (void *) &studyTime},
	{TBL_FIELD_STRING("SchStuLoc", study.SchStuLoc)},
	{TBL_FIELD_STRING("ProDes", study.ProDes)},
	{TBL_FIELD_STRING("StuStaID", study.StuStaID)},
	{NULL},
    };

    criteria[0].FieldName = criteria[1].FieldName = NULL;
    strcpy(localString, criteriaString);
    switch (criteriaType) {
    case FIS_K_ACCESSION:
	TBL_CRITERIA_LOAD_BYTE(criteria[0], "AccNum", localString, TBL_STRING, TBL_EQUAL);
	break;
    default:
	cond = 0;		/* Repair */
    }

    if (cond != FIS_NORMAL)
	return cond;

    (void) memset(&study, 0, sizeof(study));
    study.Type = FIS_K_STUDY;
    cond = TBL_Select(&h->studyHandle, criteria, fields, count, studyCallback,
		      getList);
    if (cond != TBL_NORMAL)
	return COND_PushCondition(FIS_COND(FIS_STUDYGETFAILED),
				  "(FIS)getStudyRecord");

    if (r != NULL)
	*r = study;

    if (listFlag & FIS_K_STU_STUDYCOMPONENTLIST) {
	if (getList != NULL) {
	    p = LST_Head(&getList);
	    (void) LST_Position(&getList, p);
	} else
	    p = r;
	while (p != NULL) {
	    p->StudyComponentList = LST_Create();
	    p->Flag |= FIS_K_STU_STUDYCOMPONENTLIST;
	    cond = getStudyComponentRecord(h, FIS_K_STUDY, p->StuInsUID,
				      0, p->StudyComponentList, NULL, NULL);
	    if (cond != FIS_NORMAL)
		return cond;
	    if (getList != NULL)
		p = LST_Next(&getList);
	    else
		p = NULL;
	}
    }
    if (listFlag & FIS_K_STU_RESULTSLIST) {
	if (getList != NULL) {
	    p = LST_Head(&getList);
	    (void) LST_Position(&getList, p);
	} else
	    p = r;
	while (p != NULL) {
	    p->ResultsList = LST_Create();
	    p->Flag |= FIS_K_STU_RESULTSLIST;
	    cond = getResultsRecord(h, FIS_K_STUDY, p->StuInsUID, 0,
				    p->ResultsList, NULL, NULL);
	    if (cond != FIS_NORMAL)
		return cond;
	    if (getList != NULL)
		p = LST_Next(&getList);
	    else
		p = NULL;
	}
    }
    return FIS_NORMAL;
}
Exemplo n.º 12
0
CONDITION
FIS_GetOne(FIS_HANDLE ** handle, FIS_DATA_TYPE type,
	FIS_DATA_TYPE criteriaType, const char *uid, long listFlag, void *r)
{
    CONDITION cond = FIS_NORMAL;
    PRIVATE_HANDLE *h;
    long count = 0;
    char localUID[DICOM_UI_LENGTH + 1];
    char *uidPtr = NULL;

    h = *(PRIVATE_HANDLE **) handle;
    if (uid != NULL) {
	strcpy(localUID, uid);
	uidPtr = localUID;
    }
    switch (type) {
    case FIS_K_PATIENT:
	cond = getPatientRecord(h, criteriaType, uidPtr, listFlag, NULL,
				(FIS_PATIENTRECORD *) r, &count);
	break;
    case FIS_K_VISIT:
	cond = getVisitRecord(h, criteriaType, uidPtr, listFlag, NULL,
			      (FIS_VISITRECORD *) r, &count);
	break;
    case FIS_K_STUDY:
	cond = getStudyRecord(h, criteriaType, uidPtr, listFlag, NULL,
			      (FIS_STUDYRECORD *) r, &count);
	break;
    case FIS_K_STUDYCOMPONENT:
	cond = getStudyComponentRecord(h, criteriaType, uidPtr, listFlag, NULL,
				    (FIS_STUDYCOMPONENTRECORD *) r, &count);
	break;
    case FIS_K_SCSERIES:
	cond = getSCSeriesRecord(h, criteriaType, uidPtr, listFlag, NULL,
				 (FIS_SCSERIESRECORD *) r, &count);
	break;
    case FIS_K_SCIMAGE:
	cond = getSCImageRecord(h, criteriaType, uidPtr, listFlag, NULL,
				(FIS_SCIMAGERECORD *) r, &count);
	break;
    case FIS_K_RESULTS:
	cond = getResultsRecord(h, criteriaType, uidPtr, listFlag, NULL,
				(FIS_RESULTSRECORD *) r, &count);
	break;
    case FIS_K_INTERPRETATION:
	cond = getInterpretationRecord(h, criteriaType, uidPtr, listFlag, NULL,
				    (FIS_INTERPRETATIONRECORD *) r, &count);
	break;
    case FIS_K_COMMITSOPREF:
	cond = getCommitSOPRecord(h, criteriaType, uidPtr, listFlag, NULL,
				  (FIS_COMMITSOPREFRECORD *) r, &count);
	break;
    case FIS_K_STORAGECOMMITREQ:
	cond = getStorageCommitReq(h, criteriaType, uidPtr, listFlag, NULL,
				   (FIS_STORAGECOMMITREQRECORD *) r, &count);
	break;
    }
    if (cond != FIS_NORMAL)
	return COND_PushCondition(FIS_COND(FIS_GETFAILED),
				  "FIS_GetOne");
    if (count != 1)
	return COND_PushCondition(FIS_COND(FIS_SINGLEGETFAILED),
				  localUID, "FIS_GetOne");
    return cond;
}
Exemplo n.º 13
0
static CONDITION
getPatientRecord(PRIVATE_HANDLE * h,
   FIS_DATA_TYPE criteriaType, char *uid, long listFlag, LST_HEAD * getList,
		 FIS_PATIENTRECORD * r, long *count)
{
    CONDITION
    cond;
    TBL_CRITERIA
	criteria[2];
    FIS_PATIENTRECORD
	* p;

    static TBL_FIELD fields[] = {
	{"PatID", TBL_STRING, sizeof(patient.PatID), sizeof(patient.PatID),
	0, (void *) &patient.PatID[0]},
	{"PatUID", TBL_STRING, sizeof(patient.PatUID), sizeof(patient.PatUID),
	0, (void *) &patient.PatUID[0]},
	{"PatNam", TBL_STRING, sizeof(patient.PatNam), sizeof(patient.PatNam),
	0, (void *) &patient.PatNam[0]},
	{"PatSex", TBL_STRING, sizeof(patient.PatSex), sizeof(patient.PatSex),
	0, (void *) &patient.PatSex[0]},
	{"PatBirDat", TBL_SIGNED4, sizeof(patientBD), sizeof(patientBD),
	0, (void *) &patientBD},
	{NULL},
    };

    criteria[0].FieldName = criteria[1].FieldName = NULL;
    if (uid != NULL) {
	if (uid[0] != '\0') {
	    TBL_CRITERIA_LOAD_BYTE(criteria[0], "PatUID", uid, TBL_STRING, TBL_EQUAL);
	}
    }
    memset(&patient, 0, sizeof(patient));
    patient.Type = FIS_K_PATIENT;
    cond = TBL_Select(&h->patientHandle, criteria, fields, count, patientCallback,
		      getList);
    if (cond != TBL_NORMAL)
	return COND_PushCondition(FIS_COND(FIS_PATIENTGETFAILED),
				  "(FIS)getPatientRecord");

    if (r != NULL)
	*r = patient;

    if (listFlag & FIS_K_PAT_STUDYLIST) {
	if (getList != NULL) {
	    p = LST_Head(&getList);
	    (void) LST_Position(&getList, p);
	} else
	    p = r;
	while (p != NULL) {
	    p->StudyList = LST_Create();
	    p->Flag |= FIS_K_PAT_STUDYLIST;
	    cond = getStudyRecord(h, FIS_K_PATIENT, p->PatUID, 0, p->StudyList, NULL, NULL);
	    if (cond != FIS_NORMAL)
		return cond;
	    if (getList != NULL)
		p = LST_Next(&getList);
	    else
		p = NULL;
	}
    }
/*
    if (listFlag & FIS_K_PAT_VISITLIST) {
	if (getList != NULL) {
	    p = LST_Head(&getList);
	    (void) LST_Position(&getList, p);
	} else
	    p = r;
	while (p != NULL) {
	    p->VisitList = LST_Create();
	    p->Flag |= FIS_K_PAT_VISITLIST;
	    cond = getVisitRecord(h, FIS_K_PATIENT, p->PatUID, 0, p->VisitList, NULL, NULL);
	    if (cond != FIS_NORMAL)
		return cond;
	    if (getList != NULL)
		p = LST_Next(&getList);
	    else
		p = NULL;
	}
    }
*/
    return FIS_NORMAL;
}