Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. (*
  2.     BSD 2-Clause License
  3.  
  4.     Copyright (c) 2018, Anton Krotov
  5.     All rights reserved.
  6. *)
  7.  
  8. MODULE UNIXTIME;
  9.  
  10.  
  11. VAR
  12.  
  13.     days: ARRAY 12, 31, 2 OF INTEGER;
  14.  
  15.  
  16. PROCEDURE init;
  17. VAR
  18.     i, j, k, n0, n1: INTEGER;
  19. BEGIN
  20.  
  21.     FOR i := 0 TO 11 DO
  22.         FOR j := 0 TO 30 DO
  23.             days[i, j, 0] := 0;
  24.             days[i, j, 1] := 0;
  25.         END
  26.     END;
  27.  
  28.     days[ 1, 28, 0] := -1;
  29.  
  30.     FOR k := 0 TO 1 DO
  31.         days[ 1, 29, k] := -1;
  32.         days[ 1, 30, k] := -1;
  33.         days[ 3, 30, k] := -1;
  34.         days[ 5, 30, k] := -1;
  35.         days[ 8, 30, k] := -1;
  36.         days[10, 30, k] := -1;
  37.     END;
  38.  
  39.     n0 := 0;
  40.     n1 := 0;
  41.     FOR i := 0 TO 11 DO
  42.         FOR j := 0 TO 30 DO
  43.             IF days[i, j, 0] = 0 THEN
  44.                 days[i, j, 0] := n0;
  45.                 INC(n0)
  46.             END;
  47.             IF days[i, j, 1] = 0 THEN
  48.                 days[i, j, 1] := n1;
  49.                 INC(n1)
  50.             END
  51.         END
  52.     END
  53.  
  54. END init;
  55.  
  56.  
  57. PROCEDURE time* (year, month, day, hour, min, sec: INTEGER): INTEGER;
  58. VAR
  59.     d, s: INTEGER;
  60. BEGIN
  61.     d := (year - 1970) * 365 + days[month - 1, day - 1, ORD(year DIV 4 = 0)] + (year - 1969) DIV 4;
  62.     s := d * 86400 + hour * 3600 + min * 60 + sec
  63.     RETURN s
  64. END time;
  65.  
  66.  
  67. BEGIN
  68.     init
  69. END UNIXTIME.