.help pdsread 2 "Program Structure" .sh PDSREAD Structure Chart .nf t_pdsread() # Returns when file list is satified or if EOT is encountered. read_pds (pdsfile, iraffile) # Returns OK or EOF read_header (pds_fd, im, parameters) # Returns OK or EOF read_image (pds_fd, im, parameters) set_image_header (im) init_read_scan (parameters) # Returns OK read_scan (fd, scanbuf) # Returns EOF or number of points in a scan .fi .sh PDSREAD Structure Summary .ls t_pdsread The main procedure reads the control parameters. The files to be read and converted are calculated from the specified source and file list. A loop through the files determines the specific input source names and output file names and calls READ_PDS for each conversion. .ls read_pds The input source is opened and the output image header file is created. If only the PDS header is to be listed then a temporary image header file is created. The PDS header is read and decoded into the IRAF image header bye READ_HEADER. If the image is to be read then READ_IMAGE is called. Finally all files are closed. If a temporary image file was created it is deleted. .ls read_header The 120 byte PDS header is read into an integer array. The ID string in the first 80 bytes is unpacked into a text string using the MIIUP routine and stored in the IRAF image header. The 12 bit PDP values are converted to SPP short data valuese using the routine APDP8S. The PDP 059 text code is converted to ASCII using the routine APDP059. The remaining header quantities are unpacked into short or long SPP integers using the MIIUP, APDP8S, UNPACKS and UNPACKL and the image dimensions are stored in the IRAF image header. Finally the PRINT_HEADER is called to print a long or short version of the header. .le .le .le .ls read_image The PDS image pixels are converted to an IRAF image file. The image file header is set. The lines of the image are converted one at a time. .ls set_image_header The pixel type for the IRAF image is set to the user specified type. If no type has been specified then the type is determined from the number of bits per pixel given in pds.h. .le .ls init_read_scan Initializes the scan parameters. Input is a long integer array containing the decoded header parameters. The procedure uses the number of data points per scan, the number of records per scan and the number of points per full records, calculates and allocates the buffer space required and determines the size of each record in chars. If the tape is an old 7 track tape the size of the record must be rounded up till it holds an integral number of Cyber words in length. For example a record containing 1001 real data points will actually be 1005 data points long with junk in the last 4 spaces. .le .ls read_scan Reads an entire PDS scan a record at a time looping over the number of records per scan. The procedure uses the MIIUP routine which is machine dependent. The bitpix must correspond to an MII type. READ_SCAN returns the number of data points per scan or EOF. READ_SCAN calls APDP8S to convert the 10 or 12 bit data values to short integers and calls AFLIPS to flip every other scan if the PDS scan is a raster scan. .le .endhelp