00001
00002
00003
00004
00005
00006 #include "cddefines.h"
00007 #include "path.h"
00008 #include "cddrive.h"
00009
00010
00011 long int cdGetLineList(
00012
00013
00014 char chFile[] ,
00015
00016 char ***chLabels ,
00017
00018 float **wl )
00019 {
00020 long int i ,
00021 nLines;
00022 bool lgDONE;
00023 FILE *ioData;
00024
00025 char chFile1[FILENAME_PATH_LENGTH_2];
00026
00027 char chLine[FILENAME_PATH_LENGTH_2] , chFilename[FILENAME_PATH_LENGTH_2];
00028
00029 DEBUG_ENTRY( "cdGetLineList()" );
00030
00031
00032
00033 if( !lgcdInitCalled )
00034 {
00035 fprintf(stderr," cdInit must be called before cdGetLineList.\n");
00036 cdEXIT(EXIT_FAILURE);
00037 }
00038
00039
00040 if( strlen( chFile )==0 )
00041 {
00042
00043 strcpy( chFile1 , "LineList_BLR.dat" );
00044 }
00045 else
00046 {
00047
00048 strcpy( chFile1 , chFile );
00049 }
00050
00051
00052
00053
00054 strcpy( chFilename , chFile1 );
00055
00056 if( ( ioData = fopen( chFilename , "r" ) ) == NULL )
00057 {
00058
00059 if( lgDataPathSet )
00060 {
00061
00062 strcpy( chFilename , chDataPath );
00063 strcat( chFilename , chFile1 );
00064 if( ( ioData = fopen( chFilename , "r" ) ) == NULL )
00065 {
00066 if( lgDataPathSet )
00067 {
00068 fprintf( ioQQQ, " even tried path\n" );
00069 fprintf( ioQQQ, " cdGetLineList could not open line list\n");
00070 fprintf( ioQQQ, " path is ==%s==\n",chDataPath );
00071 fprintf( ioQQQ, " final path is ==%s==\n",chFilename );
00072 }
00073
00074 return( -1 );
00075 }
00076 }
00077 }
00078
00079
00080
00081 nLines = 0;
00082 lgDONE = false;
00083
00084 while( (fgets( chLine , (int)sizeof(chLine) , ioData ) != NULL) && !lgDONE )
00085 {
00086 if( chLine[0] == '\n')
00087 {
00088 lgDONE = true;
00089 continue;
00090 }
00091
00092
00093
00094 if( (chLine[0] != '#') )
00095 ++nLines;
00096 }
00097
00098
00099 *wl = (float *)MALLOC( (size_t)(nLines+1)*sizeof(float ) );
00100
00101
00102
00103 *chLabels = (char**)MALLOC((size_t)(nLines+1)*sizeof(char *) );
00104
00105
00106 if( fseek( ioData , 0 , SEEK_SET ) != 0 )
00107 {
00108 fprintf( ioQQQ, " cdGetLineList could not rewind line list.\n");
00109 return( -1 );
00110 }
00111
00112
00113 i = 0;
00114 lgDONE = false;
00115 while( (fgets( chLine , (int)sizeof(chLine) , ioData ) != NULL) && !lgDONE)
00116 {
00117 long j;
00118 bool lgEOL;
00119
00120 if( chLine[0] == '\n')
00121 {
00122 lgDONE = true;
00123 continue;
00124 }
00125
00126 if( chLine[0] == '#')
00127 continue;
00128
00129
00130 (*chLabels)[i] = (char*)MALLOC(5*sizeof(char) );
00131
00132 strncpy( (*chLabels)[i] , chLine , 4);
00133 (*chLabels)[i][4] = 0;
00134
00135
00136 j = 5;
00137 (*wl)[i] = (float)FFmtRead(chLine,&j,INPUT_LINE_LENGTH,&lgEOL);
00138
00139
00140 if( chLine[j-1] == 'M' || chLine[j-1] == 'm')
00141 {
00142
00143 (*wl)[i] *= 1e4;
00144 }
00145 else if( chLine[j-1] == 'C' || chLine[j-1] == 'c')
00146 {
00147
00148 (*wl)[i] *= 1e8;
00149 }
00150
00151 ++i;
00152 }
00153
00154 DEBUG_EXIT( "cdGetLineList()" );
00155
00156
00157 return nLines;
00158 }
00159