# HG changeset patch # User neelin # Date 858085848 0 # Node ID 733768d67f00d4094c17aa73b7e2435d66e4bfa5 # Parent 92de6278840edcb8ff6dd3a71b37c325a5a8f278 Working version of dicomserver. diff --git a/conversion/dicomserver/dicom_element_defs.h b/conversion/dicomserver/dicom_element_defs.h --- a/conversion/dicomserver/dicom_element_defs.h +++ b/conversion/dicomserver/dicom_element_defs.h @@ -57,63 +57,63 @@ #define ACR_MODALITY_MR "MR" /* Element id's for DICOM */ -GLOBAL_ELEMENT(ACR_Affected_SOP_class_UID , 0x0000, 0x0002); -GLOBAL_ELEMENT(ACR_Command , 0x0000, 0x0100); -GLOBAL_ELEMENT(ACR_Message_id , 0x0000, 0x0110); -GLOBAL_ELEMENT(ACR_Message_id_brt , 0x0000, 0x0120); -GLOBAL_ELEMENT(ACR_Priority , 0x0000, 0x0700); -GLOBAL_ELEMENT(ACR_Dataset_type , 0x0000, 0x0800); -GLOBAL_ELEMENT(ACR_Status , 0x0000, 0x0900); -GLOBAL_ELEMENT(ACR_Affected_SOP_instance_UID , 0x0000, 0x1000); -GLOBAL_ELEMENT(ACR_Move_originator_AE_title , 0x0000, 0x1031); +GLOBAL_ELEMENT(ACR_Affected_SOP_class_UID , 0x0000, 0x0002, UI); +GLOBAL_ELEMENT(ACR_Command , 0x0000, 0x0100, US); +GLOBAL_ELEMENT(ACR_Message_id , 0x0000, 0x0110, US); +GLOBAL_ELEMENT(ACR_Message_id_brt , 0x0000, 0x0120, US); +GLOBAL_ELEMENT(ACR_Priority , 0x0000, 0x0700, US); +GLOBAL_ELEMENT(ACR_Dataset_type , 0x0000, 0x0800, US); +GLOBAL_ELEMENT(ACR_Status , 0x0000, 0x0900, US); +GLOBAL_ELEMENT(ACR_Affected_SOP_instance_UID , 0x0000, 0x1000, UI); +GLOBAL_ELEMENT(ACR_Move_originator_AE_title , 0x0000, 0x1031, AE); -GLOBAL_ELEMENT(ACR_Study_date , 0x0008, 0x0020); -GLOBAL_ELEMENT(ACR_Acquisition_date , 0x0008, 0x0022); -GLOBAL_ELEMENT(ACR_Study_time , 0x0008, 0x0030); -GLOBAL_ELEMENT(ACR_Acquisition_time , 0x0008, 0x0032); -GLOBAL_ELEMENT(ACR_Modality , 0x0008, 0x0060); -GLOBAL_ELEMENT(ACR_Manufacturer , 0x0008, 0x0070); -GLOBAL_ELEMENT(ACR_Institution_id , 0x0008, 0x0080); -GLOBAL_ELEMENT(ACR_Referring_physician , 0x0008, 0x0090); -GLOBAL_ELEMENT(ACR_Station_id , 0x0008, 0x1010); -GLOBAL_ELEMENT(ACR_Procedure_description , 0x0008, 0x1030); -GLOBAL_ELEMENT(ACR_Manufacturer_model , 0x0008, 0x1090); +GLOBAL_ELEMENT(ACR_Study_date , 0x0008, 0x0020, DA); +GLOBAL_ELEMENT(ACR_Acquisition_date , 0x0008, 0x0022, DA); +GLOBAL_ELEMENT(ACR_Study_time , 0x0008, 0x0030, TM); +GLOBAL_ELEMENT(ACR_Acquisition_time , 0x0008, 0x0032, TM); +GLOBAL_ELEMENT(ACR_Modality , 0x0008, 0x0060, CS); +GLOBAL_ELEMENT(ACR_Manufacturer , 0x0008, 0x0070, LO); +GLOBAL_ELEMENT(ACR_Institution_id , 0x0008, 0x0080, LO); +GLOBAL_ELEMENT(ACR_Referring_physician , 0x0008, 0x0090, PN); +GLOBAL_ELEMENT(ACR_Station_id , 0x0008, 0x1010, SH); +GLOBAL_ELEMENT(ACR_Procedure_description , 0x0008, 0x1030, LO); +GLOBAL_ELEMENT(ACR_Manufacturer_model , 0x0008, 0x1090, LO); -GLOBAL_ELEMENT(ACR_Patient_name , 0x0010, 0x0010); -GLOBAL_ELEMENT(ACR_Patient_identification, 0x0010, 0x0020); -GLOBAL_ELEMENT(ACR_Patient_birth_date , 0x0010, 0x0030); -GLOBAL_ELEMENT(ACR_Patient_sex , 0x0010, 0x0040); -GLOBAL_ELEMENT(ACR_Patient_weight , 0x0010, 0x1030); +GLOBAL_ELEMENT(ACR_Patient_name , 0x0010, 0x0010, PN); +GLOBAL_ELEMENT(ACR_Patient_identification, 0x0010, 0x0020, LO); +GLOBAL_ELEMENT(ACR_Patient_birth_date , 0x0010, 0x0030, DA); +GLOBAL_ELEMENT(ACR_Patient_sex , 0x0010, 0x0040, CS); +GLOBAL_ELEMENT(ACR_Patient_weight , 0x0010, 0x1030, DS); -GLOBAL_ELEMENT(ACR_Scanning_sequence , 0x0018, 0x0020); -GLOBAL_ELEMENT(ACR_Slice_thickness , 0x0018, 0x0050); -GLOBAL_ELEMENT(ACR_Repetition_time , 0x0018, 0x0080); -GLOBAL_ELEMENT(ACR_Echo_time , 0x0018, 0x0081); -GLOBAL_ELEMENT(ACR_Inversion_time , 0x0018, 0x0082); -GLOBAL_ELEMENT(ACR_Nr_of_averages , 0x0018, 0x0083); -GLOBAL_ELEMENT(ACR_Imaging_frequency , 0x0018, 0x0084); -GLOBAL_ELEMENT(ACR_Imaged_nucleus , 0x0018, 0x0085); -GLOBAL_ELEMENT(ACR_Echo_number , 0x0018, 0x0086); -GLOBAL_ELEMENT(ACR_Flip_angle , 0x0018, 0x1314); -GLOBAL_ELEMENT(ACR_Acq_comments , 0x0018, 0x4000); +GLOBAL_ELEMENT(ACR_Scanning_sequence , 0x0018, 0x0020, CS); +GLOBAL_ELEMENT(ACR_Slice_thickness , 0x0018, 0x0050, DS); +GLOBAL_ELEMENT(ACR_Repetition_time , 0x0018, 0x0080, DS); +GLOBAL_ELEMENT(ACR_Echo_time , 0x0018, 0x0081, DS); +GLOBAL_ELEMENT(ACR_Inversion_time , 0x0018, 0x0082, DS); +GLOBAL_ELEMENT(ACR_Nr_of_averages , 0x0018, 0x0083, DS); +GLOBAL_ELEMENT(ACR_Imaging_frequency , 0x0018, 0x0084, DS); +GLOBAL_ELEMENT(ACR_Imaged_nucleus , 0x0018, 0x0085, SH); +GLOBAL_ELEMENT(ACR_Echo_number , 0x0018, 0x0086, IS); +GLOBAL_ELEMENT(ACR_Flip_angle , 0x0018, 0x1314, DS); +GLOBAL_ELEMENT(ACR_Acq_comments , 0x0018, 0x4000, LT); -GLOBAL_ELEMENT(ACR_Study , 0x0020, 0x0010); -GLOBAL_ELEMENT(ACR_Series , 0x0020, 0x0011); -GLOBAL_ELEMENT(ACR_Acquisition , 0x0020, 0x0012); -GLOBAL_ELEMENT(ACR_Image , 0x0020, 0x0013); -GLOBAL_ELEMENT(ACR_Acquisitions_in_series, 0x0020, 0x1001); +GLOBAL_ELEMENT(ACR_Study , 0x0020, 0x0010, SH); +GLOBAL_ELEMENT(ACR_Series , 0x0020, 0x0011, IS); +GLOBAL_ELEMENT(ACR_Acquisition , 0x0020, 0x0012, IS); +GLOBAL_ELEMENT(ACR_Image , 0x0020, 0x0013, IS); +GLOBAL_ELEMENT(ACR_Acquisitions_in_series, 0x0020, 0x1001, IS); -GLOBAL_ELEMENT(ACR_Rows , 0x0028, 0x0010); -GLOBAL_ELEMENT(ACR_Columns , 0x0028, 0x0011); -GLOBAL_ELEMENT(ACR_Pixel_size , 0x0028, 0x0030); -GLOBAL_ELEMENT(ACR_Bits_allocated , 0x0028, 0x0100); -GLOBAL_ELEMENT(ACR_Bits_stored , 0x0028, 0x0101); -GLOBAL_ELEMENT(ACR_Smallest_pixel_value , 0x0028, 0x0106); -GLOBAL_ELEMENT(ACR_Largest_pixel_value , 0x0028, 0x0107); -GLOBAL_ELEMENT(ACR_Image_location , 0x0028, 0x0200); -GLOBAL_ELEMENT(ACR_Window_centre , 0x0028, 0x1050); -GLOBAL_ELEMENT(ACR_Window_width , 0x0028, 0x1051); +GLOBAL_ELEMENT(ACR_Rows , 0x0028, 0x0010, US); +GLOBAL_ELEMENT(ACR_Columns , 0x0028, 0x0011, US); +GLOBAL_ELEMENT(ACR_Pixel_size , 0x0028, 0x0030, DS); +GLOBAL_ELEMENT(ACR_Bits_allocated , 0x0028, 0x0100, US); +GLOBAL_ELEMENT(ACR_Bits_stored , 0x0028, 0x0101, US); +GLOBAL_ELEMENT(ACR_Smallest_pixel_value , 0x0028, 0x0106, US); +GLOBAL_ELEMENT(ACR_Largest_pixel_value , 0x0028, 0x0107, US); +GLOBAL_ELEMENT(ACR_Image_location , 0x0028, 0x0200, US); +GLOBAL_ELEMENT(ACR_Window_centre , 0x0028, 0x1050, DS); +GLOBAL_ELEMENT(ACR_Window_width , 0x0028, 0x1051, DS); -GLOBAL_ELEMENT(ACR_Image_data, ACR_ACTUAL_IMAGE_GID, 0x0010); +GLOBAL_ELEMENT(ACR_Image_data, ACR_ACTUAL_IMAGE_GID, 0x0010, UNKNOWN); #include diff --git a/conversion/dicomserver/dicom_prototypes.h b/conversion/dicomserver/dicom_prototypes.h --- a/conversion/dicomserver/dicom_prototypes.h +++ b/conversion/dicomserver/dicom_prototypes.h @@ -1,3 +1,5 @@ +public void timeout_handler(int sig); +public Acr_Group skip_command_groups(Acr_Group group_list); public void cleanup_files(int num_files, char *file_list[]); public void free_list(int num_files, char **file_list, Data_Object_Info **file_info_list); @@ -60,6 +62,6 @@ public void sort_dimensions(General_Info *general_info); public int dimension_sort_function(const void *v1, const void *v2); public void string_to_filename(char *string, char *filename, int maxlen); -public void use_the_files(char *project_name, +public void use_the_files(char *project_name, int num_files, char *file_list[], Data_Object_Info *data_info[]); diff --git a/conversion/dicomserver/dicomserver.c b/conversion/dicomserver/dicomserver.c --- a/conversion/dicomserver/dicomserver.c +++ b/conversion/dicomserver/dicomserver.c @@ -4,9 +4,12 @@ @GLOBALS : @CREATED : January 28, 1997 (Peter Neelin) @MODIFIED : $Log: dicomserver.c,v $ -@MODIFIED : Revision 1.1 1997-03-04 20:56:47 neelin -@MODIFIED : Initial revision +@MODIFIED : Revision 1.2 1997-03-11 13:10:48 neelin +@MODIFIED : Working version of dicomserver. @MODIFIED : + * Revision 1.1 1997/03/04 20:56:47 neelin + * Initial revision + * @COPYRIGHT : Copyright 1997 Peter Neelin, McConnell Brain Imaging Centre, Montreal Neurological Institute, McGill University. @@ -20,11 +23,13 @@ ---------------------------------------------------------------------------- */ #ifndef lint -static char rcsid[]="$Header: /private-cvsroot/minc/conversion/dicomserver/dicomserver.c,v 1.1 1997-03-04 20:56:47 neelin Exp $"; +static char rcsid[]="$Header: /private-cvsroot/minc/conversion/dicomserver/dicomserver.c,v 1.2 1997-03-11 13:10:48 neelin Exp $"; #endif #include #include +#include +#include #include #include @@ -54,6 +59,10 @@ TRUE; #endif +/* Globals for handling connection timeouts */ +int Connection_timeout = FALSE; +Acr_File *Alarmed_afp = NULL; + int main(int argc, char *argv[]) { char *pname; @@ -82,6 +91,11 @@ Acr_VR_encoding_type vr_encoding; int pres_context_id; long maximum_length; + pid_t server_pid, child_pid; + int statptr; + + /* Get server process id */ + server_pid = getpid(); /* Change to tmp directory */ (void) chdir("/usr/tmp"); @@ -128,6 +142,7 @@ /* Create file prefix. Create the temporary file to avoid file name clashes */ + temp_dir = NULL; if (! Keep_files) { (void) tmpnam(file_prefix); if (mkdir(file_prefix, (mode_t) 0777)) { @@ -152,8 +167,20 @@ num_files = 0; while (continue_looping) { + /* Wait for any children that have finished */ + while ((child_pid=wait3(&statptr, WNOHANG, NULL)) > 0) {} + + /* If there are children, slow down the processing */ + if (child_pid == 0) { + (void) sleep((unsigned int) SERVER_SLEEP_TIME); + } + /* Read in the message */ + Alarmed_afp = afpin; + (void) signal(SIGALRM, timeout_handler); + (void) alarm(CONNECTION_TIMEOUT); status=acr_input_dicom_message(afpin, &input_message); + (void) alarm(0); /* Check for error */ if (status != ACR_OK) { @@ -226,7 +253,7 @@ case ACR_PDU_DATA_TF: /* Check command and state */ - acr_command = acr_find_short(group_list, ACR_Command, ACR_C_STORE_RQ); + acr_command = acr_find_short(group_list, ACR_Command, -1); if ((state != WAITING_FOR_DATA) || (acr_command != ACR_C_STORE_RQ)) { status = ACR_HIGH_LEVEL_ERROR; @@ -238,12 +265,42 @@ output_message = data_reply(input_message); /* Get rid of the command groups */ + group_list = skip_command_groups(group_list); while ((group_list != NULL) && ((acr_get_group_group(group_list) == DCM_PDU_GRPID) || (acr_get_group_group(group_list) == ACR_MESSAGE_GID))) { group_list = acr_get_group_next(group_list); } - if (group_list == NULL) break; + + /* Was the data attached to the command? If not, read in the next + message - it should contain the data */ + if (group_list == NULL) { + + /* Read the data and check the status */ + Alarmed_afp = afpin; + (void) signal(SIGALRM, timeout_handler); + (void) alarm(CONNECTION_TIMEOUT); + status=acr_input_dicom_message(afpin, &input_message); + (void) alarm(0); + if (status != ACR_OK) { + state = DISCONNECTING; + break; + } + + /* Check that we have a data PDU */ + group_list = acr_get_message_group_list(input_message); + if (acr_find_short(group_list, DCM_PDU_Type, ACR_PDU_DATA_TF) + != ACR_PDU_DATA_TF) { + status = ACR_HIGH_LEVEL_ERROR; + state = DISCONNECTING; + break; + } + + /* Skip command groups and check for no data */ + group_list = skip_command_groups(group_list); + if (group_list == NULL) break; + + } /* Extend file list if necessary */ if (num_files >= num_files_alloc) { @@ -304,17 +361,50 @@ /* Check for file from next acquisition */ if (have_extra_file) num_files--; - /* Do something with the files */ - use_the_files(project_name, num_files, file_list, - file_info_list); + /* Fork child to process the files */ + child_pid = fork(); + if (child_pid > 0) { /* Parent process */ + if (Do_logging >= LOW_LOGGING) { + (void) fprintf(stderr, + "Forked process to create minc files.\n"); + } + + } /* Error forking */ + else if (child_pid < 0) { + (void) fprintf(stderr, + "Error forking child to create minc file\n"); + return; + } + else { /* Child process */ + + /* Do something with the files */ + use_the_files(project_name, num_files, file_list, + file_info_list); + + /* Remove the temporary files */ + cleanup_files(num_files, file_list); + + /* Remove the temporary directory if the server has finished */ + if ((temp_dir != NULL) && (kill(server_pid, 0) != 0)) { + cleanup_files(1, &temp_dir); + } + + /* Print message about child finishing */ + if (Do_logging >= LOW_LOGGING) { + (void) fprintf(stderr, "Minc creation process finished.\n"); + } + + /* Exit from child */ + exit(EXIT_SUCCESS); + + } /* End of child process */ /* Put blank line in log file */ if (Do_logging >= LOW_LOGGING) { (void) fprintf(stderr, "\n"); } - /* Remove the temporary files and reset the lists */ - cleanup_files(num_files, file_list); + /* Reset the lists */ free_list(num_files, file_list, file_info_list); if (have_extra_file) { file_list[0] = file_list[num_files]; @@ -332,7 +422,11 @@ } /* Send reply */ + Alarmed_afp = afpout; + (void) signal(SIGALRM, timeout_handler); + (void) alarm(CONNECTION_TIMEOUT); status = acr_output_dicom_message(afpout, output_message); + (void) alarm(0); /* Delete output message */ acr_delete_message(output_message); @@ -366,10 +460,15 @@ FREE(file_list); FREE(file_info_list); - /* Remove the file prefix directory */ + /* Remove the file prefix directory (this only happens if it is empty). */ cleanup_files(1, &temp_dir); FREE(temp_dir); + /* Check for connection timeout */ + if (Connection_timeout) { + (void) fprintf(stderr, "Connection timed out.\n"); + } + /* Print final message */ switch (status) { case ACR_OK: @@ -432,6 +531,51 @@ } /* ----------------------------- MNI Header ----------------------------------- +@NAME : timeout_handler +@INPUT : +@OUTPUT : (none) +@RETURNS : +@DESCRIPTION: Routine to handle connection timeouts. +@METHOD : +@GLOBALS : +@CALLS : +@CREATED : March 10, 1997 (Peter Neelin) +@MODIFIED : +---------------------------------------------------------------------------- */ +/* ARGSUSED */ +public void timeout_handler(int sig) +{ + Connection_timeout = TRUE; + if (Alarmed_afp != NULL) { + acr_dicom_set_eof(Alarmed_afp); + } + return; +} +/* ----------------------------- MNI Header ----------------------------------- +@NAME : skip_command_groups +@INPUT : group_list +@OUTPUT : (none) +@RETURNS : Pointer to head of group list +@DESCRIPTION: Skips over command groups in a group list, returning the rest + of the list. +@METHOD : +@GLOBALS : +@CALLS : +@CREATED : March 7, 1997 (Peter Neelin) +@MODIFIED : +---------------------------------------------------------------------------- */ +public Acr_Group skip_command_groups(Acr_Group group_list) +{ + while ((group_list != NULL) && + ((acr_get_group_group(group_list) == DCM_PDU_GRPID) || + (acr_get_group_group(group_list) == ACR_MESSAGE_GID))) { + group_list = acr_get_group_next(group_list); + } + + return group_list; +} + +/* ----------------------------- MNI Header ----------------------------------- @NAME : cleanup_files @INPUT : num_files - number of files in list file_list - array of file names diff --git a/conversion/dicomserver/dicomserver.h b/conversion/dicomserver/dicomserver.h --- a/conversion/dicomserver/dicomserver.h +++ b/conversion/dicomserver/dicomserver.h @@ -5,9 +5,12 @@ @GLOBALS : @CREATED : January 28, 1997 (Peter Neelin) @MODIFIED : $Log: dicomserver.h,v $ -@MODIFIED : Revision 1.1 1997-03-04 20:56:47 neelin -@MODIFIED : Initial revision +@MODIFIED : Revision 1.2 1997-03-11 13:10:48 neelin +@MODIFIED : Working version of dicomserver. @MODIFIED : + * Revision 1.1 1997/03/04 20:56:47 neelin + * Initial revision + * @COPYRIGHT : Copyright 1997 Peter Neelin, McConnell Brain Imaging Centre, Montreal Neurological Institute, McGill University. @@ -53,6 +56,13 @@ #define FILE_ALLOC_INCREMENT 10 +/* Connection timeout length in seconds */ +#define CONNECTION_TIMEOUT (60*5) + +/* Time to sleep between image reads when a child process is running. + This prevents the server from outrunning its children. */ +#define SERVER_SLEEP_TIME 3 + /* Define logging constants */ #define NO_LOGGING 0 #define LOW_LOGGING 1 diff --git a/conversion/dicomserver/siemens_dicom_read.c b/conversion/dicomserver/siemens_dicom_read.c --- a/conversion/dicomserver/siemens_dicom_read.c +++ b/conversion/dicomserver/siemens_dicom_read.c @@ -6,9 +6,12 @@ @CALLS : @CREATED : January 28, 1997 (Peter Neelin) @MODIFIED : $Log: siemens_dicom_read.c,v $ -@MODIFIED : Revision 1.1 1997-03-04 20:56:47 neelin -@MODIFIED : Initial revision +@MODIFIED : Revision 1.2 1997-03-11 13:10:48 neelin +@MODIFIED : Working version of dicomserver. @MODIFIED : + * Revision 1.1 1997/03/04 20:56:47 neelin + * Initial revision + * @COPYRIGHT : Copyright 1997 Peter Neelin, McConnell Brain Imaging Centre, Montreal Neurological Institute, McGill University. @@ -626,11 +629,9 @@ acr_find_string(group_list, ACR_Referring_physician, ""), maxlen); (void) strncpy(general_info->study.procedure, acr_find_string(group_list, ACR_Procedure_description, ""), maxlen); - (void) sprintf(general_info->study.study_id, "%d", - acr_find_int(group_list, ACR_Study_date, 0)); + (void) sprintf(general_info->study.study_id, "%d", general_info->study_id); (void) sprintf(general_info->study.acquisition_id, "%d_%d", - acr_find_int(group_list, ACR_Series, 0), - acr_find_int(group_list, ACR_Study_time, 0)); + acr_find_int(group_list, ACR_Series, 0), general_info->acq_id); /* Get acquisition information */ string = acr_find_string(group_list, SPI_Sequence_file_name, ""); diff --git a/conversion/dicomserver/spi_element_defs.h b/conversion/dicomserver/spi_element_defs.h --- a/conversion/dicomserver/spi_element_defs.h +++ b/conversion/dicomserver/spi_element_defs.h @@ -30,14 +30,14 @@ #define SPI_CORONAL_ORIENTATION 3 /* Element id's for SPI */ -GLOBAL_ELEMENT(SPI_Sequence_file_name , 0x0019, 0x1511); -GLOBAL_ELEMENT(SPI_Image_position , 0x0021, 0x1160); -GLOBAL_ELEMENT(SPI_Image_normal , 0x0021, 0x1161); -GLOBAL_ELEMENT(SPI_Image_row , 0x0021, 0x116a); -GLOBAL_ELEMENT(SPI_Image_column , 0x0021, 0x116b); -GLOBAL_ELEMENT(SPI_Number_of_3D_raw_partitions_nominal, 0x0021, 0x1330); -GLOBAL_ELEMENT(SPI_Actual_3D_partition_number , 0x0021, 0x1336); -GLOBAL_ELEMENT(SPI_Number_of_slices_nominal , 0x0021, 0x1340); -GLOBAL_ELEMENT(SPI_Current_slice_number , 0x0021, 0x1342); -GLOBAL_ELEMENT(SPI_Number_of_echoes , 0x0021, 0x1370); +GLOBAL_ELEMENT(SPI_Sequence_file_name , 0x0019, 0x1511, LO); +GLOBAL_ELEMENT(SPI_Image_position , 0x0021, 0x1160, DS); +GLOBAL_ELEMENT(SPI_Image_normal , 0x0021, 0x1161, DS); +GLOBAL_ELEMENT(SPI_Image_row , 0x0021, 0x116a, DS); +GLOBAL_ELEMENT(SPI_Image_column , 0x0021, 0x116b, DS); +GLOBAL_ELEMENT(SPI_Number_of_3D_raw_partitions_nominal, 0x0021, 0x1330, IS); +GLOBAL_ELEMENT(SPI_Actual_3D_partition_number , 0x0021, 0x1336, IS); +GLOBAL_ELEMENT(SPI_Number_of_slices_nominal , 0x0021, 0x1340, IS); +GLOBAL_ELEMENT(SPI_Current_slice_number , 0x0021, 0x1342, IS); +GLOBAL_ELEMENT(SPI_Number_of_echoes , 0x0021, 0x1370, IS); diff --git a/conversion/dicomserver/use_the_files.c b/conversion/dicomserver/use_the_files.c --- a/conversion/dicomserver/use_the_files.c +++ b/conversion/dicomserver/use_the_files.c @@ -6,9 +6,12 @@ @CALLS : @CREATED : January 28, 1997 (Peter Neelin) @MODIFIED : $Log: use_the_files.c,v $ -@MODIFIED : Revision 1.1 1997-03-04 20:56:47 neelin -@MODIFIED : Initial revision +@MODIFIED : Revision 1.2 1997-03-11 13:10:48 neelin +@MODIFIED : Working version of dicomserver. @MODIFIED : + * Revision 1.1 1997/03/04 20:56:47 neelin + * Initial revision + * @COPYRIGHT : Copyright 1997 Peter Neelin, McConnell Brain Imaging Centre, Montreal Neurological Institute, McGill University. @@ -43,7 +46,7 @@ @CREATED : November 23, 1993 (Peter Neelin) @MODIFIED : ---------------------------------------------------------------------------- */ -public void use_the_files(char *project_name, +public void use_the_files(char *project_name, int num_files, char *file_list[], Data_Object_Info *data_info[]) { @@ -179,5 +182,4 @@ FREE(acq_file_list); FREE(used_file); - return; }