subroutine cg_clup(lenb, bulltn, iret) C************************************************************************ C* CG_CLUP * C* * C* This subroutine cleans up the CGR data before decoding. It attempts * C* to standardize such text as the report header line, missing char * C* indicators, etc. * C* * C* CG_CLUP ( lenb, bulltn, iret ) * C* * C* Input parameters: * C* LENB INTEGER Length of bulletin in bytes * C* BULLTN CHAR* Bulletin * C* * C* Output parameters: * C* IRET INTEGER Return code * C* 0 = Normal return * C** * C* Log: * C* C. Caruso Magee/NCEP 4/00 Original Author * C************************************************************************ INCLUDE 'GEMPRM.PRM' include 'cgcmn.cmn' character*(*) bulltn integer lenb, iret c c* check raw bulletin for unusual formats in header line, which c* should look like: c* ID WXVSB /WIND /WAV /SEA/AIR/PRES REMARKS STATION c* and for different formats within report lines. Replace ids c* encoded as missing ('///') with '???' to keep from confusing c* the slashes with field separators. Replace various forms of c* missing data indicators with a single 'M'. Replace bad data c* formats with standard characters (e.g. replace 'OVC' with ' CY') c* Replace various forms of 'NO RPT' with blanks. This subroutine c* DOES NOT change the length of the bulletin (very important!). c iret = 0 DO i = 1,lenb IF ( index(bulltn(i:i+2),'///').ne.0 ) THEN bulltn(i:i+2) = '???' ELSEIF ( index(bulltn(i:i+6),'/ PRESS').ne.0 ) THEN bulltn(i:i+6) = '/PRES ' ELSEIF ( index(bulltn(i:i+5),'/PRESS').ne.0 ) THEN bulltn(i:i+5) = '/PRES ' ELSEIF ( index(bulltn(i:i+6),' PRESS ').ne.0 ) THEN bulltn(i:i+6) = '/PRES ' ELSEIF ( index(bulltn(i:i+5),'/ PRES').ne.0 ) THEN bulltn(i:i+5) = '/PRES ' ELSEIF ( index(bulltn(i:i+5),' PRES ').ne.0 ) THEN bulltn(i:i+5) = '/PRES ' ELSEIF ( index(bulltn(i:i+5),'/ BARO').ne.0 ) THEN bulltn(i:i+5) = '/PRES ' ELSEIF ( index(bulltn(i:i+4),'/BARO').ne.0 ) THEN bulltn(i:i+4) = '/PRES' ELSEIF ( index(bulltn(i:i+4),'/WAVE').ne.0 ) THEN bulltn(i:i+4) = '/WAV ' ELSEIF ( index(bulltn(i:i+6),'/ WAVE').ne.0 ) THEN bulltn(i:i+6) = '/WAV ' ELSEIF ( index(bulltn(i:i+5),'/ WAVE').ne.0 ) THEN bulltn(i:i+5) = '/WAV ' ELSEIF ( index(bulltn(i:i+5),' WAVE ').ne.0 ) THEN bulltn(i:i+5) = '/WAV ' ELSEIF ( index(bulltn(i:i+6),'/ WAVES').ne.0 ) THEN bulltn(i:i+6) = '/WAV ' ELSEIF ( index(bulltn(i:i+6),' WAVES ').ne.0 ) THEN bulltn(i:i+6) = '/WAV ' ELSEIF ( index(bulltn(i:i+5),'/WAVES').ne.0 ) THEN bulltn(i:i+5) = '/WAV ' ELSEIF ( index(bulltn(i:i+6),'/ WIND').ne.0 ) THEN bulltn(i:i+6) = '/WIND ' ELSEIF ( index(bulltn(i:i+5),'/ WIND').ne.0 ) THEN bulltn(i:i+5) = '/WIND ' ELSEIF ( index(bulltn(i:i+6),'/ WINDS').ne.0 ) THEN bulltn(i:i+6) = '/WIND ' ELSEIF ( index(bulltn(i:i+6),' WINDS ').ne.0 ) THEN bulltn(i:i+6) = '/WIND ' ELSEIF ( index(bulltn(i:i+5),'/WINDS').ne.0 ) THEN bulltn(i:i+5) = '/WIND ' ELSEIF ( index(bulltn(i:i+4),'/WIN0').ne.0 ) THEN bulltn(i:i+4) = '/WIND' ELSEIF ( index(bulltn(i:i+5),' WIND ').ne.0 ) THEN bulltn(i:i+5) = '/WIND ' ELSEIF ( index(bulltn(i:i+4),' WIND').ne.0 ) THEN bulltn(i:i+4) = '/WIND' ELSEIF ( index(bulltn(i:i+4),'/ AIR').ne.0 ) THEN bulltn(i:i+4) = '/AIR ' ELSEIF ( index(bulltn(i:i+4),' AIR ').ne.0 ) THEN bulltn(i:i+4) = '/AIR ' ELSEIF ( index(bulltn(i:i+4),'/ SEA').ne.0 ) THEN bulltn(i:i+4) = '/SEA ' ELSEIF ( index(bulltn(i:i+4),' SEA ').ne.0 ) THEN bulltn(i:i+4) = '/SEA ' ELSEIF ( index(bulltn(i:i+4),'/ SST').ne.0 ) THEN bulltn(i:i+4) = '/SEA ' ELSEIF ( index(bulltn(i:i+4),' SST ').ne.0 ) THEN bulltn(i:i+4) = '/SEA ' ELSEIF ( index(bulltn(i:i+3),'/SST').ne.0 ) THEN bulltn(i:i+3) = '/SEA' ELSEIF ( index(bulltn(i:i+8),'/ REMARKS').ne.0 ) THEN bulltn(i:i+8) = '/REMARKS ' ELSEIF ( index(bulltn(i:i+7),' REMARKS').ne.0 ) THEN bulltn(i:i+7) = '/REMARKS' ELSEIF ( index(bulltn(i:i+5),'WX VIS').ne.0 ) THEN bulltn(i:i+5) = 'WXVSB ' ELSEIF ( index(bulltn(i:i+4),'WXVIS').ne.0 ) THEN bulltn(i:i+4) = 'WXVSB' ELSEIF ( index(bulltn(i:i+3),' VIS').ne.0 ) THEN bulltn(i:i+3) = 'VSB ' ELSEIF ( index(bulltn(i:i+2),'VIS').ne.0 ) THEN bulltn(i:i+2) = 'VSB' ELSEIF ( index(bulltn(i:i+4),'OXVSB').ne.0 ) THEN bulltn(i:i+4) = 'WXVSB' ELSEIF ( index(bulltn(i:i+15),'WX VSB').ne.0 ) THEN bulltn(i:i+15) = 'WXVSB ' ELSEIF ( index(bulltn(i:i+14),'WX VSB').ne.0 ) THEN bulltn(i:i+14) = 'WXVSB ' ELSEIF ( index(bulltn(i:i+13),'WX VSB').ne.0 ) THEN bulltn(i:i+13) = 'WXVSB ' ELSEIF ( index(bulltn(i:i+12),'WX VSB').ne.0 ) THEN bulltn(i:i+12) = 'WXVSB ' ELSEIF ( index(bulltn(i:i+11),'WX VSB').ne.0 ) THEN bulltn(i:i+11) = 'WXVSB ' ELSEIF ( index(bulltn(i:i+10),'WX VSB').ne.0 ) THEN bulltn(i:i+10) = 'WXVSB ' ELSEIF ( index(bulltn(i:i+9),'WX VSB').ne.0 ) THEN bulltn(i:i+9) = 'WXVSB ' ELSEIF ( index(bulltn(i:i+8),'WX VSB').ne.0 ) THEN bulltn(i:i+8) = 'WXVSB ' ELSEIF ( index(bulltn(i:i+7),'WX VSB').ne.0 ) THEN bulltn(i:i+7) = 'WXVSB ' ELSEIF ( index(bulltn(i:i+6),'WX VSB').ne.0 ) THEN bulltn(i:i+6) = 'WXVSB ' ELSEIF ( index(bulltn(i:i+5),'WX VSB').ne.0 ) THEN bulltn(i:i+5) = 'WXVSB ' ELSEIF ( index(bulltn(i:i+3),'MISG').ne.0 ) THEN bulltn(i:i+3) = 'M ' ELSEIF ( index(bulltn(i:i+2),'MSG').ne.0 ) THEN bulltn(i:i+2) = 'M ' ELSEIF ( index(bulltn(i:i+2),'UNK').ne.0 ) THEN bulltn(i:i+2) = 'M ' ELSEIF ( index(bulltn(i:i+2),'MMM').ne.0 ) THEN bulltn(i:i+2) = 'M ' ELSEIF ( index(bulltn(i:i+1),'MM').ne.0 ) THEN bulltn(i:i+1) = 'M ' ELSEIF ( index(bulltn(i:i+1),'XX').ne.0 ) THEN bulltn(i:i+1) = 'M ' ELSEIF ( index(bulltn(i:i+3),'SAR ').ne.0 ) THEN bulltn(i:i+3) = ' ' ELSEIF ( index(bulltn(i:i+3),'INOP').ne.0 ) THEN bulltn(i:i+3) = 'M ' ELSEIF ( index(bulltn(i:i+3),'NRPT').ne.0 ) THEN bulltn(i:i+3) = 'M ' ELSEIF ( index(bulltn(i:i+3),'NONE').ne.0 ) THEN bulltn(i:i+3) = ' ' ELSEIF ( index(bulltn(i:i+8),'NO REPORT').ne.0 ) THEN bulltn(i:i+8) = ' ' ELSEIF ( index(bulltn(i:i+6),'NO RPT/').ne.0 ) THEN bulltn(i:i+6) = 'M/ ' ELSEIF ( index(bulltn(i:i+5),'NO RPT').ne.0 ) THEN bulltn(i:i+5) = ' ' ELSEIF ( index(bulltn(i:i+12),'NOT AVAILABLE').ne.0 ) THEN bulltn(i:i+12) = ' ' ELSEIF ( index(bulltn(i:i+10),'UNAVAILABLE').ne.0 ) THEN bulltn(i:i+10) = ' ' ELSEIF ( index(bulltn(i:i+6),'UNAVAIL').ne.0 ) THEN bulltn(i:i+6) = ' ' ELSEIF ( index(bulltn(i:i+5),'UNAVIL').ne.0 ) THEN bulltn(i:i+5) = ' ' ELSEIF ( index(bulltn(i:i+4),'UNAVL').ne.0 ) THEN bulltn(i:i+4) = ' ' ELSEIF ( index(bulltn(i:i+3),'UNAV').ne.0 ) THEN bulltn(i:i+3) = ' ' ELSEIF ( index(bulltn(i:i+4),'--.--').ne.0 ) THEN bulltn(i:i+4) = 'M ' ELSEIF ( index(bulltn(i:i+5),'------').ne.0 ) THEN bulltn(i:i+5) = 'M ' ELSEIF ( index(bulltn(i:i+4),'-----').ne.0 ) THEN bulltn(i:i+4) = 'M ' ELSEIF ( index(bulltn(i:i+3),'----').ne.0 ) THEN bulltn(i:i+3) = 'M ' ELSEIF ( index(bulltn(i:i+2),'---').ne.0 ) THEN bulltn(i:i+2) = 'M ' ELSEIF ( index(bulltn(i:i+1),'--').ne.0 ) THEN bulltn(i:i+1) = 'M ' ELSEIF ( index(bulltn(i:i+2),'/-/').ne.0 ) THEN bulltn(i:i+2) = '/M/' ELSEIF ( index(bulltn(i:i+3),' OVC').ne.0 ) THEN bulltn(i:i+3) = ' CY' ELSEIF ( index(bulltn(i:i+3),' CYC').ne.0 ) THEN bulltn(i:i+3) = ' CY' ELSEIF ( index(bulltn(i:i+3),' PCC').ne.0 ) THEN bulltn(i:i+3) = ' PC' ELSEIF ( index(bulltn(i:i+1),'C/').ne.0 ) THEN bulltn(i:i+1) = 'C ' ELSEIF ( index(bulltn(i:i+5),'GROUP ').ne.0 ) THEN bulltn(i:i+5) = ' ' ELSEIF ( index(bulltn(i:i+4),' STN ').ne.0 ) THEN bulltn(i:i+4) = ' ' ELSEIF ( index(bulltn(i:i+5),'S C A ').ne.0 ) THEN bulltn(i:i+5) = 'SCA ' END IF END DO RETURN END