PROC dum$format_microsecond_clock, format_microsecond_clock, formc (
 microsecond_clock,mc: integer = $required
 formatted_clock: var of string = $required
 status)

  bst = $sa(osv$base_system_time)
  bst_second = $mem(bst, 1)
  bst_minute = $mem(bst+1, 1)
  bst_hour = $mem(bst+2, 1)
  bst_day = $mem(bst+3, 1)
  bst_month = $mem(bst+4, 1)
  bst_year = $mem(bst+5, 2)
  disv bst

"pmp$get_compact_date_time

 " Complete failure time
    disv $value(microsecond_clock)
    elapsed_time "ms" = ($value(microsecond_clock))/1000

    millisecond = $MOD(elapsed_time "ms" , 1000)

    elapsed_time "sec" = elapsed_time "ms" / 1000 "ms/sec"

    second = bst_second + $MOD(elapsed_time "sec" , 60 "sec" )
    IF second >= 60 "sec" THEN
      second = second - 60 "sec"
      minute = 1 "min"
    ELSE
      minute = 0 "min"
    IFEND

    elapsed_time "min" = elapsed_time "sec" / 60 "sec/min"

    minute = minute + bst_minute + $MOD(elapsed_time "min" , 60 "min" )
    IF minute >= 60 "min" THEN
      minute = minute - 60 "min"
      hour = 1 "hr"
    ELSE
      hour = 0 "hr"
    IFEND

    elapsed_time "hr" = elapsed_time "min" / 60 "min/hr"

    hour = hour + bst_hour + $MOD(elapsed_time "hr" , 24 "hr" )
    IF hour >= 24 "hr" THEN
      hour = hour - 24 "hr"
      day = 1 "day"
    ELSE
      day = 0 "day"
    IFEND;

    create_variable days_in_the_month k=integer d=1..12
    days_in_the_month(1) = 31
    days_in_the_month(3) = 31
    days_in_the_month(4) = 30
    days_in_the_month(5) = 31
    days_in_the_month(6) = 30
    days_in_the_month(7) = 31
    days_in_the_month(8) = 31
    days_in_the_month(9) = 30
    days_in_the_month(10) = 31
    days_in_the_month(11) = 30
    days_in_the_month(12) = 31

    year = bst_year

    b1 = ($MOD(year, 4) = 0)
    b2 = ($MOD(year, 100) <> 0)
    b3 = ($MOD(year, 400) = 0)

    this_is_a_leap_year = (b1 AND b2) OR b3
    IF this_is_a_leap_year THEN
      days_in_the_month(2) = 29
    ELSE
      days_in_the_month(2) = 28
    IFEND

    elapsed_time "day" = elapsed_time "hr" / 24 "hr/day"

    day = day + bst_day + elapsed_time "day"
    month = bst_month

    WHILE day > days_in_the_month(month) DO
      day = day - days_in_the_month(month)
      month = month + 1 "mo"

      IF month > 12 "mo" THEN

        month = 1 "mo"
        year = year + 1 "yr"

        b1 = ($MOD(year, 4) = 0)
        b2 = ($MOD(year, 100) <> 0)
        b3 = ($MOD(year, 400) = 0)

        this_is_a_leap_year = (b1 AND b2) OR b3
        IF this_is_a_leap_year THEN
          days_in_the_month(2) = 29
        ELSE
          days_in_the_month(2) = 28
        IFEND

      IFEND;
    WHILEND;

  ms = $strrep(millisecond, 10)
  ms = $substr('00'//ms, $strlen(ms), 3)
  h = $strrep(hour, 10)
  h = $substr('0'//h, $strlen(h), 2)
  m = $strrep(minute, 10)
  m = $substr('0'//m, $strlen(m), 2)
  se = $strrep(second, 10)
  se = $substr('0'//se, $strlen(se), 2)
  y = $strrep(year, 10)
  mo = $strrep(month, 10)
  mo = $substr('0'//mo, $strlen(mo), 2)
  d = $strrep(day, 10)
  d = $substr('0'//d, $strlen(d), 2)

  $value(formatted_clock)  = h//':'//m//':'//se//'.'//ms//..
', '//y//'.'//mo//'.'//d

 PROCEND
