C ===================================================================== C pgm: SH2LOC .. Adjust local to zulu time depending on daylight svgs C C use: CALL SH2LOC(KHAR,KHPOS,NY,NM,ND,NH,NN,NS,IADJ,II) C C i/o: KHAR ...... last buffer char obtained - CHAR*1 C i/o: KHPOS ..... last char loc: 2=eol,1=err-eol,0=eof,neg=err - INT C in: NY ........ year number (1753-2199) and may be altered - INT C in: NM ........ month number (1-12), else unchanged - INT C in: ND ........ day number (1-31), else unchanged - INT C in: NH ........ hour number (0-24), else unchanged - INT C in: NN ........ minute number (0-59), else unchanged - INT C in: NS ........ second number (0-59), else unchanged - INT C out: IADJ ...... adjusted time in minutes output - INT C in: II ........ incoming time flag, 0 for local, 1 for zulu - INT C C rqd: SHERR,SHSAVA,SHSAVS C C cmt: This rtn good for years 1976 thru 2040. C ===================================================================== SUBROUTINE SH2LOC(KHAR,KHPOS,NY,NM,ND,NH,NN,NS,IADJ,II) EXTERNAL SHERR,SHSAVA,SHSAVS CHARACTER*1 KHAR INTEGER KHPOS,NY,NM,ND,NH,NN,NS INTEGER LADJ,LSVG,IADJ,II,IY,ID,IA,III,ITABLE(2,65) C C ================================= RCS keyword statements ========== CHARACTER*68 RCSKW1,RCSKW2 DATA RCSKW1,RCSKW2 / ' .$Source: /fs/hseb/ob5/rfc/ofs/src/shefpars_driv/RCS/sh2loc.f,v $ . $', ' .$Id: sh2loc.f,v 1.3 1998/04/07 19:08:41 page Exp $ . $' / C =================================================================== C C ITABLE(1,I) IS THE CHANGE OVER DATE IN APRIL TO DAYLIGHT TIME. C ITABLE(2,I) IS THE CHANGE OVER DATE IN OCTOBER TO STANDARD TIME. C THE CHANGE IS ASSUMED TO OCCUR AT 2AM. DATA ITABLE $ / 26,31, 24,30, 30,29, 29,28, 27,26, 26,25, $ 25,31, 24,30, 29,28, 28,27, 27,26, 5,25, $ 3,30, 2,29, 1,28, 7,27, 5,25, 4,31, $ 3,30, 2,29, 7,27, 6,26, 5,25, 4,31, $ 2,29, 1,28, 7,27, 6,26, 4,31, 3,30, $ 2,29, 1,28, 6,26, 5,25, 4,31, 3,30, $ 1,28, 7,27, 6,26, 5,25, 3,30, 2,29, $ 1,28, 7,27, 5,25, 4,31, 3,30, 2,29, $ 7,27, 6,26, 5,25, 4,31, 2,29, 1,28, $ 7,27, 6,26, 4,31, 3,30, 2,29, 1,28, $ 6,26, 5,25, 4,31, 3,30, 1,28 / C TEST IF ADJUSTMENT NECESSARY CALL SHSAVA('G',III,LADJ) CALL SHSAVS('G',III,LSVG) IADJ = LADJ IF (KHPOS.NE.1 .AND. LSVG.EQ.1) THEN IF (NM.GT.4 .AND. NM.LT.10) THEN IADJ = IADJ - 60 ELSEIF (NM.EQ.4 .OR. NM.EQ.10) THEN IF (NY.GE.1976 .AND. NY.LE.2040) THEN IY = NY-1975 ELSEIF (NY.GE.76 .AND. NY.LE.99) THEN IY = NY-75 ELSEIF (NY.GE.0 .AND. NY.LE.40) THEN IY = NY+25 ELSE CALL SHERR('E',48,KHPOS,KHAR) ENDIF IF (KHPOS .NE. 1) THEN IF (NM .EQ. 4) THEN ID = ITABLE(1,IY) IF (ND .GT. ID) THEN IADJ = IADJ - 60 ELSEIF (ND .EQ. ID) THEN IF (II .EQ. 0) THEN IF (NH .EQ. 2) THEN IF(NN.GT.0.OR.NS.GT.0) CALL SHERR('E',44,KHPOS,KHAR) ELSEIF (NH .GT. 2) THEN IADJ = IADJ - 60 ENDIF ELSE IA = 2 + (IADJ/60) IF (NH .EQ. IA) THEN IF(NN.GT.0.OR.NS.GT.0) IADJ = IADJ - 60 ELSEIF (NH .GT. IA) THEN IADJ = IADJ - 60 ENDIF ENDIF ENDIF ELSE ID = ITABLE(2,IY) IF (ND .LT. ID) THEN IADJ = IADJ - 60 ELSEIF (ND .EQ. ID) THEN IF (II .EQ. 0) THEN IF (NH .EQ. 2) THEN IF(NN.EQ.0.AND.NS.EQ.0) IADJ = IADJ - 60 ELSEIF (NH .LT. 2) THEN IADJ = IADJ - 60 ENDIF ELSE IA = 1 + (IADJ/60) IF (NH .EQ. IA) THEN IF(NN.EQ.0.AND.NS.EQ.0) IADJ = IADJ - 60 ELSEIF (NH .LT. IA) THEN IADJ = IADJ - 60 ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF RETURN END