;+ ;NAME: ; idl2cdftype ;PURPOSE: ; Given an IDL variable, return the appropriate CDF type code ;CALLING SEQUENCE: ; code = idl2cdftype(var, format_out=format_out, ; fillval_out=fillval_out, validmin_out=validmin_out, ; validmax_out=validmax_out) ;INPUT: ; var = an IDL variable ;OUTPUT: ; code = the CDF data type code for that variable, if applicable, for ; objects, complex, and similar vars a null string is returned. ; IDL_TYPE CDF_TYPE ; 1 (byte) 'CDF_UINT1' ; 2 (int) 'CDF_INT2' ; 3 (long) 'CDF_INT4' ; 4 (float) 'CDF_FLOAT' ; 5 (double) 'CDF_DOUBLE' ; 7 (string) 'CDF_CHAR' ; 12 (unsigned int) 'CDF_UINT2' ; 13 (unsigned long) 'CDF_UINT4' ; 14 (long64) 'CDF_INT8' ; 15 (unsigned long64) 'CDF_UINT8' ;KEYWORDS: ; format_out = return a format code for the data type ; 1 (byte) 'I4' ; 2 (int) 'I6' ; 3 (long) 'I10' ; 4 (float) 'E13.6' ; 5 (double) 'E20.12' ; 7 (string) strlen(value) ; 12 (unsigned int) 'I6' ; 13 (unsigned long) 'I10' ; 14 (long64) 'I20' ; 15 (unsigned long64) 'I20' ; fillval_out = a fill value ; 1 (byte) 255 ; 2 (int) -32768 ; 3 (long) -2147483648 ; 4 (float) !values.f_nan ; 5 (double) !values.d_nan ; 7 (string) '' ; 12 (unsigned int) 65535 ; 13 (unsigned long) 4294967295 ; 14 (long64) -9223372036854775808 ; 15 (unsigned long64) 18446744073709551615 ; validmin_out = a min value ; 1 (byte) 0 ; 2 (int) -32768 ; 3 (long) -2147483648 ; 4 (float) -1.0e38 ; 5 (double) -1.0e308 ; 7 (string) 'NA' ; 12 (unsigned int) 0 ; 13 (unsigned long) 0 ; 14 (long64) -9223372036854775808 ; 15 (unsigned long64) 0 ; validmax_out = a max value ; 1 (byte) 255 ; 2 (int) 32767 ; 3 (long) 2147483647 ; 4 (float) 1.0e38 ; 5 (double) 1.0e308 ; 7 (string) 'NA' ; 12 (unsigned int) 65535 ; 13 (unsigned long) 4294967295 ; 14 (long64) -9223372036854775808 ; 15 (unsigned long64) 18446744073709551615 ;HISTORY: ; 26-nov-2013, jmm, jimm@ssl.berkeley.edu ; $LastChangedBy: jimm $ ; $LastChangedDate: 2014-10-14 11:39:46 -0700 (Tue, 14 Oct 2014) $ ; $LastChangedRevision: 15992 $ ; $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_5_0/general/CDF/idl2cdftype.pro $ ;- Function idl2cdftype, var, format_out=format_out, fillval_out=fillval_out, $ validmin_out=validmin_out, validmax_out=validmax_out, _extra=_extra ;INPUT: otp = '' Case(size(var, /type)) Of ;text code for type 1: Begin otp = 'CDF_UINT1' format_out = 'I4' fillval_out = 255 validmin_out = 0 validmax_out = 255 End 2: Begin otp = 'CDF_INT2' format_out = 'I6' fillval_out = fix(-32768) ;note that IDL changes -32768 to 4 bytes, CDF_INT4 validmin_out = -32767 validmax_out = 32767 End 3: Begin otp = 'CDF_INT4' format_out = 'I11' fillval_out = long(-2147483648) ;same here, validmin_out = -2147483647 validmax_out = 2147483647 End 4: Begin otp = 'CDF_FLOAT' format_out = 'E13.6' fillval_out = -1.0e31 validmin_out = -1.0e31 validmax_out = 1.0e31 End 5: Begin otp = 'CDF_DOUBLE' format_out = 'E25.18' fillval_out = double(-1.0d31) validmin_out = double(-1.0d31) validmax_out = double(1.0d31) End 7: Begin otp = 'CDF_CHAR' format_out = 'A'+strcompress(/remove_all, string(strlen(var[0])+1)) fillval_out = '' validmin_out = 'NA' validmax_out = 'NA' End 12: Begin otp = 'CDF_UINT2' format_out = 'I6' fillval_out = 65535 validmin_out = 0 validmax_out = 65535 End 13: Begin otp = 'CDF_UINT4' format_out = 'I11' fillval_out = 4294967295 validmin_out = 0 validmax_out = 4294967295 End 14: Begin otp = 'CDF_INT8' format_out = 'I21' fillval_out = long64(-9223372036854775808) validmin_out = -9223372036854775807 validmax_out = 9223372036854775807 End 15: Begin otp = 'CDF_UINT8' format_out = 'I21' fillval_out = 18446744073709551615 validmin_out = 0 validmax_out = 18446744073709551615 End Else: otp = '' Endcase Return, otp End