@@ -299,6 +299,7 @@ int f_nc_table(ARG1)
299
299
g2nc_conv * old_nct ;
300
300
char * tptr ;
301
301
float min , max , range , ftmp ;
302
+ int search_lev ;
302
303
303
304
if (mode == -1 )
304
305
{
@@ -533,42 +534,53 @@ wgib2_name:wgrib2_level|*:nc_name|ignore[:ignore|no|float|deflate{0-9}|[short|by
533
534
534
535
for (i = 0 ; i < nc_table -> nlev ; i ++ )
535
536
{
536
- search_lev : ir = strcspn (prd ,"+-.0123456789" );
537
- itmp = strcspn (prd ,"#" ); /* inline comment */
538
- if ( ir < 0 || ir >= strlen (prd ) || itmp < ir )
539
- { /* read next line */
540
- prd = fgets (input , _MAX_PATH , fl );
541
- if (prd == NULL )
537
+ search_lev = 1 ;
538
+ while (search_lev == 1 ) {
539
+ // search_lev: ir = strcspn(prd,"+-.0123456789");
540
+ ir = strcspn (prd ,"+-.0123456789" );
541
+ itmp = strcspn (prd ,"#" ); /* inline comment */
542
+ if ( ir < 0 || ir >= strlen (prd ) || itmp < ir )
543
+ { /* read next line */
544
+ prd = fgets (input , _MAX_PATH , fl );
545
+ if (prd == NULL )
546
+ {
547
+ fprintf (stderr ,"nc_table: error reading multy line $levs \n" );
548
+ ierr = -7 ;
549
+ search_lev = 1 ;
550
+ continue ;
551
+ }
552
+ continue ;
553
+ }
554
+ itmp = strcspn (prd ,":" ); /* second important fields separator before number */
555
+ if (itmp <= ir )
542
556
{
543
- fprintf (stderr ,"nc_table: error reading multy line $levs \n" );
544
- ierr = -7 ;
545
- break ;
557
+ fprintf (stderr ,"nc_table: error entering $levs, check that there are $nlev values defined\n" );
558
+ ierr = -8 ;
559
+ search_lev = 1 ;
560
+ continue ;
546
561
}
547
- goto search_lev ;
548
- }
549
- itmp = strcspn (prd ,":" ); /* second important fields separator before number */
550
- if (itmp <= ir )
551
- {
552
- fprintf (stderr ,"nc_table: error entering $levs, check that there are $nlev values defined\n" );
553
- ierr = -8 ;
554
- break ;
555
- }
556
- prd += ir ;
557
- ir = sscanf (prd ,"%g" ,& nc_table -> lv [i ]);
558
- if ( ir < 1 )
559
- {
560
- fprintf (stderr ,"nc_table: $levs formatted input error\n" );
561
- ierr = -9 ;
562
- break ;
563
- }
564
- ir = strcspn (prd ," ,;:\n" );
565
- if (ir <= strlen (prd ) ) prd += ir ;
566
- else
567
- {
568
- fprintf (stderr ,"nc_table: $levs parsing error, do no found fields separator\n" );
569
- ierr = -10 ;
570
- break ;
562
+ prd += ir ;
563
+ ir = sscanf (prd ,"%g" ,& nc_table -> lv [i ]);
564
+ if ( ir < 1 )
565
+ {
566
+ fprintf (stderr ,"nc_table: $levs formatted input error\n" );
567
+ ierr = -9 ;
568
+ search_lev = 1 ;
569
+ continue ;
570
+ }
571
+ ir = strcspn (prd ," ,;:\n" );
572
+ if (ir <= strlen (prd ) ) prd += ir ;
573
+ else
574
+ {
575
+ fprintf (stderr ,"nc_table: $levs parsing error, do no found fields separator\n" );
576
+ ierr = -10 ;
577
+ search_lev = 1 ;
578
+ continue ;
579
+ }
580
+ search_lev = 0 ;
571
581
}
582
+ /* end of search lev */
583
+ if (ierr ) break ;
572
584
}
573
585
if ( ierr ) break ;
574
586
}
@@ -881,6 +893,7 @@ int f_nc_time(ARG1)
881
893
const char * p ;
882
894
int year ,month ,day ,hour ,minute ,second ,dt_val ,dt_conv ,err_code ;
883
895
char dt_type [25 ];
896
+ int skip_date ;
884
897
885
898
if (mode == -1 )
886
899
{
@@ -890,54 +903,56 @@ int f_nc_time(ARG1)
890
903
nc_date0_type = 0 ;
891
904
nc_date0 = 0 ;
892
905
nc_dt = 0 ;
906
+ skip_date = 0 ;
893
907
894
908
sscanf (arg1 ,"%c" ,& chr );
895
909
896
910
p = arg1 ;
897
911
if (chr == ':' )
898
912
{ /* separator symbol is first, time step only, any long string*/
899
913
p ++ ;
900
- goto get_time_step ;
914
+ skip_date = 1 ;
901
915
}
902
916
if (strlen (p ) < 14 )
903
917
{ /* time step only */
904
- goto get_time_step ;
918
+ skip_date = 1 ;
905
919
}
906
- /* include date */
907
- nc_date0_type = 1 ; /*absolute */
908
- if (chr == '-' )
909
- {
910
- p ++ ;
911
- nc_date0_type = -1 ; /* relative*/
912
- }
913
- else if (chr == '+' )
914
- {
915
- p ++ ;
916
- }
917
- if (sscanf (p ,"%4d%2d%2d%2d%2d%2d" ,& year ,& month ,& day ,& hour ,& minute ,& second ) != 6 )
918
- fatal_error ("nc_time: bad format of yyyymmddhhnnss value in nc_time: %s" , arg1 );
920
+ if (skip_date == 0 ) {
921
+ /* include date */
922
+ nc_date0_type = 1 ; /*absolute */
923
+ if (chr == '-' )
924
+ {
925
+ p ++ ;
926
+ nc_date0_type = -1 ; /* relative*/
927
+ }
928
+ else if (chr == '+' )
929
+ {
930
+ p ++ ;
931
+ }
932
+ if (sscanf (p ,"%4d%2d%2d%2d%2d%2d" ,& year ,& month ,& day ,& hour ,& minute ,& second ) != 6 )
933
+ fatal_error ("nc_time: bad format of yyyymmddhhnnss value in nc_time: %s" , arg1 );
919
934
920
- if (year < 0 || year > 9999 || month < 1 || month > 12 || day < 1 || day > 31 ||
921
- hour < 0 || hour > 23 || minute < 0 || minute > 59 || second < 0 || second > 59 )
922
- fatal_error ("nc_time: bad value of yyyymmddhhnnss value in nc_time: %s" , arg1 );
935
+ if (year < 0 || year > 9999 || month < 1 || month > 12 || day < 1 || day > 31 ||
936
+ hour < 0 || hour > 23 || minute < 0 || minute > 59 || second < 0 || second > 59 )
937
+ fatal_error ("nc_time: bad value of yyyymmddhhnnss value in nc_time: %s" , arg1 );
923
938
924
939
#ifdef DEBUG_NC
925
940
printf ("nc_time: date0_type=%d date0=%d.%d.%d %d:%d:%d\n" ,nc_date0_type ,year ,month ,day ,hour ,minute ,second );
926
941
#endif
927
- nc_date0 = get_unixtime (year , month , day , hour , minute , second , & err_code );
928
- if (err_code )
929
- fatal_error ("nc_time: time [sec] is out of range for this OS" ,"" );
942
+ nc_date0 = get_unixtime (year , month , day , hour , minute , second , & err_code );
943
+ if (err_code )
944
+ fatal_error ("nc_time: time [sec] is out of range for this OS" ,"" );
930
945
931
- p += 14 ;
932
- if (strlen (p ) <= 1 )
933
- {
934
- if (nc_date0_type > 0 ) return 0 ;
935
- fatal_error ("nc_time: negative yyyymmddhhnnss (relative date) need time step in -nc_time option: %s" , arg1 );
946
+ p += 14 ;
947
+ if (strlen (p ) <= 1 )
948
+ {
949
+ if (nc_date0_type > 0 ) return 0 ;
950
+ fatal_error ("nc_time: negative yyyymmddhhnnss (relative date) need time step in -nc_time option: %s" , arg1 );
951
+ }
952
+ p ++ ; /*pass separator symbol ':' or other*/
936
953
}
937
- p ++ ; /*pass separator symbol ':' or other*/
938
-
939
- get_time_step :
940
-
954
+
955
+ /* now for the time step */
941
956
if (sscanf (p ,"%d%s" ,& dt_val ,dt_type ) != 2 )
942
957
fatal_error ("nc_time: bad time step in nc_time: %s" , p );
943
958
0 commit comments