Parse a expanded descriptor with X = 20.
- Parameters
-
It returns 0 if success, 1 if problems when processing. If a descriptor is not processed returns 0 anyway
Definition at line 298 of file bufr2tac_x20.c.
299{
300 char aux[16];
301
303 {
304 case 1:
306 {
307 return 0;
308 }
310 break;
311
312 case 3:
313
314
315
316
317
318
319
320
321
323 {
324
326 {
327 return 0;
328 }
329
330 if ( s->
ival == 100 || s->
ival == 508 )
331 {
332 return 0;
333 }
334
335
337 {
338
340 {
341 return 0;
342 }
345 }
346 else if ( s->
itval == 0 && s->
jtval == -3600 && syn->
s1.
ww[0] ==
'2' )
347 {
348
350 {
351 return 0;
352 }
355 }
356 else
357 {
359 {
360 return 0;
361 }
370 }
371
372
374 {
377 }
378 else if ( s->
ival < 200 )
379 {
382 }
384 }
385
386
387
388
389 else if ( syn->
s1.
ww[0] && s->
itval == 0 )
390 {
391
393 {
394 return 0;
395 }
398
400 {
401 return 0;
402 }
404 {
407 }
408 else if ( s->
ival < 200 )
409 {
412 }
414 }
415 else
416 {
417
419 {
421 return 0;
422 }
424 {
426 {
427 strcpy ( syn->
s1.
ix,
"1" );
428 }
429 else if ( s->
type == 1 || s->
type == 2 )
430 {
431 strcpy ( syn->
s1.
ix,
"1" );
432 }
433 else if ( s->
type == 0 )
434 {
435 strcpy ( syn->
s1.
ix,
"4" );
436 }
437 sprintf ( syn->
s1.
ww,
"%02d", s->
ival );
439 }
440 else if ( s->
ival == 100 )
441 {
442 strcpy ( syn->
s1.
ix,
"5" );
445 }
446 else if ( s->
ival < 200 )
447 {
449 {
450 strcpy ( syn->
s1.
ix,
"7" );
451 }
452 else if ( s->
type == 0 || s->
type == 2 )
453 {
454 strcpy ( syn->
s1.
ix,
"7" );
455 }
456 sprintf ( syn->
s1.
ww,
"%02d", s->
ival % 100 );
458 }
459 else if ( s->
ival == 508 )
460 {
462 {
463 strcpy ( syn->
s1.
ix,
"5" );
464 }
465 else if ( s->
type == 0 || s->
type == 2 )
466 {
467 strcpy ( syn->
s1.
ix,
"5" );
468 }
470 }
471 else if ( s->
ival == 509 )
472 {
474 {
475 strcpy ( syn->
s1.
ix,
"6" );
476 }
477 else if ( s->
type == 0 || s->
type == 2 )
478 {
479 strcpy ( syn->
s1.
ix,
"6" );
480 }
482 }
483
484
485 }
486 break;
487
488 case 4:
490 {
492 return 0;
493 }
494
495
498 {
500 {
501 strcpy ( syn->
s1.
ix,
"1" );
502 }
503 else if ( syn->
s1.
ix[0] ==
'/' )
504 {
506 {
507 strcpy ( syn->
s1.
ix,
"1" );
508 }
509 else if ( s->
type == 0 )
510 {
511 strcpy ( syn->
s1.
ix,
"4" );
512 }
513 }
514 sprintf ( syn->
s1.
W1,
"%d", s->
ival );
516 }
517 else if ( s->
ival == 10 )
518 {
520 {
522 {
523 strcpy ( syn->
s1.
ix,
"2" );
524 }
525 else if ( s->
type == 0 )
526 {
527 strcpy ( syn->
s1.
ix,
"5" );
528 }
529 }
531 }
532 else
533 {
535 {
536 strcpy ( syn->
s1.
ix,
"7" );
537 }
538 else if ( s->
type == 0 || s->
type == 2 )
539 {
540 strcpy ( syn->
s1.
ix,
"7" );
541 }
542 sprintf ( syn->
s1.
W1,
"%d", abs ( s->
ival ) % 10 );
544 }
545 break;
546
547 case 5:
549 {
551 return 0;
552 }
554 {
556 {
557 strcpy ( syn->
s1.
ix,
"1" );
558 }
559 else if ( syn->
s1.
ix[0] ==
'/' )
560 {
562 {
563 strcpy ( syn->
s1.
ix,
"1" );
564 }
565 else if ( s->
type == 0 )
566 {
567 strcpy ( syn->
s1.
ix,
"4" );
568 }
569 }
570 sprintf ( syn->
s1.
W2,
"%d", s->
ival );
572 }
573 else if ( s->
ival == 10 )
574 {
576 {
578 {
579 strcpy ( syn->
s1.
ix,
"2" );
580 }
581 else if ( s->
type == 0 )
582 {
583 strcpy ( syn->
s1.
ix,
"5" );
584 }
585 }
587 }
588 else
589 {
591 {
592 strcpy ( syn->
s1.
ix,
"7" );
593 }
594 else if ( s->
type == 0 || s->
type == 2 )
595 {
596 strcpy ( syn->
s1.
ix,
"7" );
597 }
598 sprintf ( syn->
s1.
W2,
"%d", abs ( s->
ival ) % 10 );
600 }
601 break;
602
603 case 10:
605 {
606 return 0;
607 }
609 break;
610
611 case 11:
613 {
614 return 0;
615 }
617 {
619 {
620 sprintf ( syn->
s1.
Nh,
"%1d", abs(s->
ival) % 10 );
621 }
622 else if ( s->
ival <= 10 )
623 {
624 sprintf ( syn->
s1.
Nh,
"9" );
625 }
626 else if ( s->
ival == 15 )
627 {
628 sprintf ( syn->
s1.
Nh,
"/" );
629 }
631 }
633 {
635 {
636 sprintf ( syn->
s4.
N1,
"%1d", abs(s->
ival) % 10 );
637 }
638 else if ( s->
ival <= 10 )
639 {
640 sprintf ( syn->
s4.
N1,
"9" );
641 }
642 else if ( s->
ival == 15 )
643 {
644 sprintf ( syn->
s4.
N1,
"/" );
645 }
647 }
649 {
651 {
653 }
654 else if ( s->
ival <= 10 )
655 {
657 }
658 else if ( s->
ival == 15 )
659 {
661 }
663 }
664 break;
665
666 case 12:
668 {
670 {
671 return 0;
672 }
674 {
675 sprintf ( syn->
s3.
C,
"%d", abs(s->
ival) % 10 );
677 }
678 else if ( s->
ival >= 10 && s->
ival < 20 )
679 {
680 sprintf ( syn->
s1.
Ch,
"%1d", s->
ival % 10 );
682 }
683 else if ( s->
ival >= 20 && s->
ival < 30 )
684 {
685 sprintf ( syn->
s1.
Cm,
"%1d", s->
ival % 10 );
687 }
688 else if ( s->
ival >= 30 && s->
ival < 40 )
689 {
690 sprintf ( syn->
s1.
Cl,
"%1d", s->
ival % 10 );
692 }
693 else if ( s->
ival == 59 )
694 {
695 sprintf ( syn->
s1.
Nh,
"/" );
697 }
698 else if ( s->
ival == 60 )
699 {
700 sprintf ( syn->
s1.
Ch,
"/" );
702 }
703 else if ( s->
ival == 61 )
704 {
705 sprintf ( syn->
s1.
Cm,
"/" );
707 }
708 else if ( s->
ival == 62 )
709 {
710 sprintf ( syn->
s1.
Cl,
"/" );
712 }
713 }
715 {
716
718 {
719 return 0;
720 }
722 {
723 sprintf ( syn->
s4.
C1,
"/" );
725 }
726 else if ( s->
ival < 10 )
727 {
728 sprintf ( syn->
s4.
C1,
"%1d", abs (s->
ival) % 10 );
730 }
731 }
733 {
735 {
737 return 0;
738 }
739 if ( s->
ival == 59 || s->
ival >= 10 )
740 {
742 }
743 else
744 {
745
747 }
749 }
750 break;
751
752 case 13:
754 {
755 return 0;
756 }
758 {
760 }
762 {
764 {
766 }
767 else
768 {
770 }
771 }
772 break;
773
774 case 14:
776 {
777 return 0;
778 }
780 {
783 }
784 break;
785
786 case 17:
788 {
789 return 0;
790 }
792 {
793 sprintf ( syn->
s4.
Ct,
"%d", abs(s->
ival) % 10 );
795 }
796 break;
797
798 case 21:
800 {
801 return 0;
802 }
803
804 if ( syn->
s0.
A1[0] ==
'6' )
805 {
806
807 if ( s->
ival & ( 1 << ( 30 - 15 ) ) &&
808 ( s->
ival & ( 1 << ( 30 - 16 ) ) ) == 0 &&
809 ( s->
ival & ( 1 << ( 30 - 20 ) ) ) == 0
810 )
811 {
812
815
817 }
818 else if ( s->
ival & ( 1 << ( 30 - 16 ) ) &&
819 ( s->
ival & ( 1 << ( 30 - 15 ) ) ) == 0 &&
820 ( s->
ival & ( 1 << ( 30 - 20 ) ) ) == 0
821 )
822 {
823
826
828 }
829 else if ( s->
ival & ( 1 << ( 30 - 20 ) ) &&
830 ( s->
ival & ( 1 << ( 30 - 15 ) ) ) == 0 &&
831 ( s->
ival & ( 1 << ( 30 - 16 ) ) ) == 0
832 )
833 {
834
837
839 }
840 else if ( s->
ival & ( 1 << ( 30 - 15 ) ) ||
841 s->
ival & ( 1 << ( 30 - 16 ) ) ||
842 s->
ival & ( 1 << ( 30 - 20 ) ) )
843 {
844
847
849 }
850 }
851 break;
852
853 case 23:
855 {
856 return 0;
857 }
858
859 if ( syn->
s0.
A1[0] ==
'6' )
860 {
861
862 if ( s->
ival & ( 1 << ( 18 - 1 ) ) )
863 {
864
869
871 }
872 else if ( ( s->
ival & ( 1 << ( 18 - 9 ) ) ) ||
873 ( s->
ival & ( 1 << ( 18 - 10 ) ) )
874 )
875 {
876
881
883 }
884 else if ( s->
ival & ( 1 << ( 18 - 12 ) ) )
885 {
890
892 }
893 else if ( s->
ival & ( 1 << ( 18 - 2 ) ) )
894 {
899
901 }
902 }
903 break;
904
905 case 24:
907 {
908 return 0;
909 }
910 if ( syn->
s0.
A1[0] ==
'6' )
911 {
912 if ( s->
SnSn == 919 )
913 {
915 {
917 {
919 }
920 else if ( s->
ival == 3 || s->
ival == 4 )
921 {
923 }
924 }
925 }
926 }
927 break;
928
929 case 25:
931 {
932 return 0;
933 }
934
935 if ( syn->
s0.
A1[0] ==
'6' )
936 {
937
938 if ( s->
ival & ( 1 << ( 21 - 1 ) ) )
939 {
940
944
946 }
947
948 }
949 break;
950
951 case 26:
953 {
954 return 0;
955 }
956 if ( syn->
s0.
A1[0] ==
'6' )
957 {
958 if ( s->
SnSn == 929 )
959 {
961 {
963 }
964 }
965 }
966 break;
967
968 case 27:
970 {
971 if ( syn->
s0.
A1[0] ==
'6' )
972 {
973
974 if ( s->
SnSn == 919 || s->
SnSn == 918 )
975 {
977 }
978 }
979 return 0;
980 }
981 if ( syn->
s0.
A1[0] ==
'6' )
982 {
983
984 if ( s->
SnSn == 919 || s->
SnSn == 918 )
985 {
986 if ( ( s->
ival & ( 1 << ( 9 - 3 ) ) ) == 0 )
987 {
989 }
990 }
991 }
992 break;
993
994 case 40:
996 {
997 return 0;
998 }
999 if ( syn->
s0.
A1[0] ==
'6' )
1000 {
1001 if ( s->
SnSn == 929 )
1002 {
1003 sprintf ( aux,
"%d", s->
ival % 10 );
1005 }
1006 }
1007 break;
1008
1009 case 54:
1011 {
1012 return 0;
1013 }
1014 if ( syn->
s0.
A1[0] ==
'6' )
1015 {
1017 if ( s->
SnSn == 919 || s->
SnSn == 918 )
1018 {
1020 }
1021 else if ( s->
clayer == 7 )
1022 {
1024 }
1025 else if ( s->
clayer == 8 )
1026 {
1028 }
1029 else if ( s->
clayer == 9 )
1030 {
1032 }
1034 }
1035 else if ( syn->
s0.
A1[0] ==
'4' )
1036 {
1039 {
1041 }
1042 else if ( s->
clayer == 8 )
1043 {
1045 }
1046 else if ( s->
clayer == 9 )
1047 {
1049 }
1051 }
1052 else
1053 {
1055 {
1057 }
1058 else if ( s->
clayer == 8 )
1059 {
1061 }
1062 else if ( s->
clayer == 9 )
1063 {
1065 }
1067 }
1068 break;
1069
1070 case 55:
1072 {
1073 return 0;
1074 }
1075 if ( strcmp ( syn->
s0.
A1,
"4" ) == 0 )
1076 {
1077
1079 {
1080 sprintf ( aux,
"%d", s->
ival );
1082 }
1083 else
1084 {
1086 }
1087
1088 if ( syn->
s3.
Dl[0] )
1089 {
1091 }
1092 if ( syn->
s3.
Dm[0] )
1093 {
1095 }
1096 if ( syn->
s3.
Dh[0] )
1097 {
1099 }
1101 }
1102 break;
1103
1104 case 62:
1106 {
1107 return 0;
1108 }
1109 if ( strcmp ( syn->
s0.
A1,
"2" ) == 0 )
1110 {
1111
1113 {
1114 sprintf ( aux,
"%d", s->
ival );
1115 sprintf ( syn->
s3.
E,
"%d", s->
ival );
1117 }
1118 else if ( s->
ival < 20 )
1119 {
1121 sprintf ( syn->
s3.
E1,
"%d", s->
ival % 10 );
1122 }
1124 {
1125
1129 }
1130 }
1131 else
1132 {
1133
1135 {
1136 sprintf ( syn->
s3.
E,
"%d", abs(s->
ival) % 10 );
1137 }
1138 else if ( s->
ival < 20 )
1139 {
1140 sprintf ( syn->
s3.
E1,
"%d", s->
ival % 10 );
1141 }
1142 }
1144 break;
1145
1146 case 66:
1148 {
1149 return 0;
1150 }
1151 if ( strcmp ( syn->
s0.
A1,
"1" ) == 0 )
1152 {
1156
1158 }
1159 break;
1160
1161 case 67:
1163 {
1164 return 0;
1165 }
1166 if ( strcmp ( syn->
s0.
A1,
"1" ) == 0 )
1167 {
1169 }
1170 break;
1171
1172 case 101:
1174 {
1175 return 0;
1176 }
1177 if ( strcmp ( syn->
s0.
A1,
"1" ) == 0 )
1178 {
1180 {
1181 sprintf ( aux,
"%d", s->
ival );
1182 syn->
s3.
R8[0][0] = aux[0];
1184 }
1185 }
1186 break;
1187
1188 case 102:
1190 {
1191 return 0;
1192 }
1193 if ( strcmp ( syn->
s0.
A1,
"1" ) == 0 )
1194 {
1196 {
1197 sprintf ( aux,
"%d", s->
ival );
1198 syn->
s3.
R8[0][1] = aux[0];
1200 }
1201 }
1202 break;
1203
1204 case 103:
1206 {
1207 return 0;
1208 }
1209 if ( strcmp ( syn->
s0.
A1,
"1" ) == 0 )
1210 {
1212 {
1213 sprintf ( aux,
"%d", s->
ival );
1214 syn->
s3.
R8[0][2] = aux[0];
1216 }
1217 }
1218 break;
1219
1220 case 104:
1222 {
1223 return 0;
1224 }
1225 if ( strcmp ( syn->
s0.
A1,
"1" ) == 0 )
1226 {
1228 {
1229 sprintf ( aux,
"%d", s->
ival );
1230 syn->
s3.
R8[0][3] = aux[0];
1232 }
1233 }
1234 break;
1235
1236 case 105:
1237
1239 {
1240 return 0;
1241 }
1242 if ( strcmp ( syn->
s0.
A1,
"1" ) == 0 )
1243 {
1245 {
1246 sprintf ( aux,
"%d", s->
ival );
1247 syn->
s3.
R8[1][0] = aux[0];
1249 }
1250 }
1251 break;
1252
1253 case 106:
1255 {
1256 return 0;
1257 }
1258 if ( strcmp ( syn->
s0.
A1,
"1" ) == 0 )
1259 {
1261 {
1262 sprintf ( aux,
"%d", s->
ival );
1263 syn->
s3.
R8[1][1] = aux[0];
1265 }
1266 }
1267 break;
1268
1269 case 107:
1271 {
1272 return 0;
1273 }
1274 if ( strcmp ( syn->
s0.
A1,
"1" ) == 0 )
1275 {
1277 {
1278 sprintf ( aux,
"%d", s->
ival );
1279 syn->
s3.
R8[1][1] = aux[0];
1281 }
1282 }
1283 break;
1284
1285 case 108:
1287 {
1288 return 0;
1289 }
1290 if ( strcmp ( syn->
s0.
A1,
"1" ) == 0 )
1291 {
1293 {
1294 sprintf ( aux,
"%d", s->
ival );
1295 syn->
s3.
R8[1][1] = aux[0];
1297 }
1298 }
1299 break;
1300
1301 default:
1304 break;
1305 }
1306
1307
1308 if ( syn->
s1.
h[0] ==
'/' && syn->
s1.
N[0] ==
'0' )
1309 {
1311 }
1312
1313 return 0;
1314}
#define SUBSET_MASK_HAVE_NO_SIGNIFICANT_WW
Bit mask to mark a struct bufr_subset_sequence_data without WW information.
char * grad_to_D(char *D, double grad)
Converts true direction in grads to D (code table 0700)
char * secs_to_tt(char *tt, int secs)
get tt code from seconds
#define SUBSET_MASK_HAVE_TYPE_STATION
Bit mask to mark a struct bufr_subset_sequence_data having type station information.
#define SUBSET_MASK_HAVE_NO_SIGNIFICANT_W1
Bit mask to mark a struct bufr_subset_sequence_data without W1 information.
#define SUBSET_MASK_HAVE_NO_SIGNIFICANT_W2
Bit mask to mark a struct bufr_subset_sequence_data without W1 information.
char * m_to_9h(char *target, double h)
converts the altitude of cloud layer into 9h string code
char * percent_to_okta(char *target, double perc)
Converts percent cloud cover into okta.
char * vism_to_VV(char *target, double V)
Convert horizontal visibilty in meters to a VV string.
char * m_to_hh(char *target, double h)
converts the altitude of cloud layer into hh string code
char * m_to_RR(char *target, double m)
Convert distance (m) in RR code (3570)
char * m_to_h(char *target, double h)
converts the altitude of cloud layer into h string code
#define SYNOP_SEC3_8
mask bit meaning optional/regional 8 part, section 3 for synop is solicited to or parsed with success
#define SYNOP_NMISC
number of misc3 struct to store the parsed results of 9SpSpspsp groups
#define SYNOP_SEC1
mask bit meaning section 1 or synop is solicited to or parsed with success
#define SYNOP_SEC3
mask bit meaning section 3 or synop is solicited to or parsed with success
#define SYNOP_SEC4
mask bit meaning section 4 or synop is solicited to or parsed with success
struct misc3 misc[SYNOP_NMISC]
struct nub3 nub[SYNOP_NNUB]
References bufr2tac_subset_state::a, synop_sec0::A1, BUFR2TAC_DEBUG_LEVEL, bufr2tac_set_error(), nub3::C, synop_sec3::C, synop_sec4::C1, synop_sec1::Ch, synop_sec1::Cl, bufr2tac_subset_state::clayer, synop_sec1::Cm, synop_sec4::Ct, synop_sec3::d9, bufr_atom_data::desc, DESCRIPTOR_VALUE_MISSING, synop_sec3::Dh, synop_sec3::Dl, synop_sec3::Dm, synop_sec3::E, synop_sec3::E1, grad_to_D(), synop_sec1::h, synop_sec4::H1H1, nub3::hshs, bufr2tac_subset_state::i, bufr2tac_subset_state::itval, bufr2tac_subset_state::ival, synop_sec1::ix, bufr2tac_subset_state::jtval, bufr2tac_subset_state::k_itval, bufr2tac_subset_state::k_jtval, m_to_9h(), m_to_h(), m_to_hh(), m_to_RR(), bufr_atom_data::mask, bufr2tac_subset_state::mask, synop_chunks::mask, data9::misc, synop_sec1::N, data9::n, synop_sec4::N1, synop_sec1::Nh, nub3::Ns, synop_sec3::nub, percent_to_okta(), synop_sec3::R8, synop_chunks::s0, synop_chunks::s1, synop_chunks::s3, synop_chunks::s4, secs_to_tt(), bufr2tac_subset_state::SnSn, misc3::SpSp, misc3::spsp, SUBSET_MASK_HAVE_NO_SIGNIFICANT_W1, SUBSET_MASK_HAVE_NO_SIGNIFICANT_W2, SUBSET_MASK_HAVE_NO_SIGNIFICANT_WW, SUBSET_MASK_HAVE_TYPE_STATION, SYNOP_NMISC, SYNOP_SEC1, SYNOP_SEC3, SYNOP_SEC3_8, SYNOP_SEC4, bufr2tac_subset_state::tw1w2, bufr2tac_subset_state::type, bufr2tac_subset_state::val, vism_to_VV(), synop_sec1::VV, synop_sec1::W1, synop_sec1::W2, synop_sec1::ww, synop_sec3::XoXoXoXo, and bufr_descriptor::y.
Referenced by parse_subset_as_synop().