#include #include #define UPSIZE 2000 #define DCSIZE 2000 long ibuff [UPSIZE]; long docsec[DCSIZE]; int dyofyr (int day, long imon, int year); long bword (char *, int , int ); extern int bug; /* controls the amount of print */ void gidents(void) { #include "type_l.h" int locpds, lenpds, grid_id, flag_gds_bms, i_type, i_level; int genr_id; /* generating process id number */ int minit, f_time_unit, p1, p2, time_range; int i; /* index */ int year,month,day,hour,date; static int init = 1; /* initialize flag */ const long msl = 'MSL '; const long sfc = 'SFC '; static long sigma; static long tro, mb, pascals; const long meter = 'M '; long type = ' '; int level = 0; /* level value if any */ if (init) {init = 0; strncpy((char *)&tro, "TRO ",4); strncpy((char *)&mb , "MB ",4); strncpy((char *)&sigma , "SIGM",4); strncpy((char *)&pascals , "Pa ",4); } ibuff[9] = 0; ibuff[6] = ' '; ibuff[11] = ibuff[6]; if (bug>1) {for(i=0;i<8;i++){printf("%08x ",docsec[i]);} printf("\n");} locpds = 8; lenpds = bword ( (char *)docsec, locpds, 3); genr_id = bword ( (char *)docsec, locpds+5, 1); grid_id = bword ( (char *)docsec, locpds+6, 1); flag_gds_bms = bword ( (char *)docsec, locpds+7, 1); i_type = bword ( (char *)docsec, locpds+8, 1); /* indicator of type */ i_level = bword ( (char *)docsec, locpds+9, 1); /* indicator of level */ year = bword ( (char *)docsec, locpds+12, 1); /* year */ month = bword ( (char *)docsec, locpds+13, 1); day = bword ( (char *)docsec, locpds+14, 1); hour = bword ( (char *)docsec, locpds+15, 1); minit = bword ( (char *)docsec, locpds+16, 1); f_time_unit = bword ( (char *)docsec, locpds+17, 1); p1 = bword ( (char *)docsec, locpds+18, 1); p2 = bword ( (char *)docsec, locpds+19, 1); time_range = bword ( (char *)docsec, locpds+20, 1); date = dyofyr (day,month,year); ibuff[3] = date; ibuff[4] = hour * 10000 + minit*100; if (time_range < 2) {ibuff[5] = p1;} if (time_range == 10) {p1 = bword ( (char *)docsec, locpds+18, 2); ibuff[5] = p1;} if (bug>1) printf("time range %d %d %d %d\n", time_range,p1,p2,f_time_unit); ibuff[42] = grid_id; ibuff[43] = genr_id; if (ibuff[42] != 0) {ibuff[32] = grid_id;} /* grid orgin */ /* ibuff[6] gets type [9] gets level */ ibuff[6] = type; for (i=0; i 1) {printf ("type: %4d %08x %4d %08x %.4s %08x", i_type,ibuff[6], i_level,level,&ibuff[6],ibuff[9]); printf("%d %d %d %d %d %d \n",hour,minit,f_time_unit,p1,p2,time_range);} }