aboutsummaryrefslogtreecommitdiff
path: root/math/slalib/wait.f__win
blob: b018650c35340d9a106682f8b08d3feaf8e6864d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
SUBROUTINE sla_WAIT (DELAY)
*+
*     - - - - -
*      W A I T
*     - - - - -
*
*  Interval wait
*
*  !!! PC only - Microsoft Fortran specific !!!
*
*  Given:
*     DELAY     real      delay in seconds
*
*  A delay of up to 10000 seconds occurs.
*
*  Called:  GETTIM (Microsoft Fortran run-time library)
*
*  P.T.Wallace   Starlink   14 October 1991
*
*  Copyright (C) 1995 Rutherford Appleton Laboratory
*
*  License:
*    This program is free software; you can redistribute it and/or modify
*    it under the terms of the GNU General Public License as published by
*    the Free Software Foundation; either version 2 of the License, or
*    (at your option) any later version.
*
*    This program is distributed in the hope that it will be useful,
*    but WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*    GNU General Public License for more details.
*
*    You should have received a copy of the GNU General Public License
*    along with this program (see SLA_CONDITIONS); if not, write to the
*    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
*    Boston, MA  02110-1301  USA
*
*-

      IMPLICIT NONE

      REAL DELAY

      INTEGER IDELAY,IH,IM,IS,I,IT,IT0,IDT
      LOGICAL FIRST,LOOP




*  Convert requested delay to 0.01 second ticks
      IDELAY=NINT(MAX(MIN(DELAY,1E4),0.0)*1E2)

*  Set "note start time" flag
      FIRST=.TRUE.

*  Set "wait in progress" flag
      LOOP=.TRUE.

*  Main loop
      DO WHILE (LOOP)

*     Get the current time and convert to 0.01 second ticks
         CALL GETTIM(IH,IM,IS,I)
         IT=((IH*60+IM)*60+IS)*100+I

*     First time through the loop?
         IF (FIRST) THEN

*        Yes: note the time and reset the flag
            IT0=IT
            FIRST=.FALSE.
         ELSE

*        No: subtract the start time, handling 0 hours wrap
            IDT=IT-IT0
            IF (IDT.LT.0) IDT=IDT+8640000

*        If the requested delay has elapsed, stop looping
            LOOP=IDT.LT.IDELAY
         END IF
      END DO

      END