# (C) Copyright 2005- ECMWF. section_length[3] section4Length; unsigned[1] reserved=0 : hidden; flags[1] missingDataFlag 'grib1/1.table'; unsigned[1] numberOfBytesPerInteger ; unsigned[2] reserved=0 : hidden; unsigned[3] numberOfChars; unsigned[3] numberOfFloats; unsigned[3] numberOfInts; unsigned[3] numberOfLogicals; unsigned[3] numberOfReservedBytes; unsigned[4] reserved=0 : hidden; unsigned[4] reserved=0 : hidden; unsigned[1] reserved=0 : hidden; ibmfloat floatVal[numberOfFloats]; if(numberOfBytesPerInteger == 1) { signed[1] integerValues[numberOfInts]; } if(numberOfBytesPerInteger == 2) { signed[2] integerValues[numberOfInts]; } if(numberOfBytesPerInteger == 3) { signed[3] integerValues[numberOfInts]; } if(numberOfBytesPerInteger == 4) { signed[4] integerValues[numberOfInts]; } if(numberOfChars >= 12) { ascii[2] marsClass; ascii[2] dummy1; ascii[2] marsType; ascii[2] dummy2; ascii[4] marsExpver; constant numberOfRemaininChars = numberOfChars - 12; charValues list(numberOfRemaininChars) { ascii[1] char; } constant zero = 0; concept isEps(zero) { 1 = { marsType = "pf"; } } concept isSens(zero) { 1 = { marsType = "sf"; } } constant oper = "oper"; concept marsStream(oper) { "enfo" = { marsType = "pf"; } "enfo" = { marsType = "cf"; } "sens" = { marsType = "sf"; } } if(isEps) { constant perturbationNumber = 0; alias mars.number = perturbationNumber; } if(isSens) { constant iterationNumber = 0; constant diagnosticNumber = 0; alias mars.iteration = iterationNumber; alias mars.diagnostic = diagnosticNumber; } # This is commented out because some of the BUDG have the wrong info there alias mars.stream = marsStream; alias mars.class = marsClass; alias mars.type = marsType; alias mars.expver = marsExpver; } else { charValues list(numberOfChars) { ascii[1] char; } } #reservedBytes list (numberOfReservedBytes){ # unsigned[1] byte; #}