! Non-MSF version

include  "inc:util.imp"
begin 
   print line (date."  ".time)
end  of  program 

! MSF version

!Time of Day utility.  This version asks filestore 'B' for MSF time from its
!clock card.  See bottom of file for non-MSF version (e.g. Appleton Tower)

option  "-ass-check-diag"
include  "clock:msftime.inc"
{APM}include  "INC:UTIL.IMP"
!VAX!%include "imp_include:pam.inc"
!VAX!!** link with sys$library:ether/lib,imp_include:pam
begin 
constant  integer  full time    = 2_1000 0000 0000 0000 0000 0000 0000 0000,
                   compact time = 2_0100 0000 0000 0000 0000 0000 0000 0000,
                   raw time     = 2_0010 0000 0000 0000 0000 0000 0000 0000,
                   last update  = 2_0001 0000 0000 0000 0000 0000 0000 0000,
                   bootproc time= 2_0000 1000 0000 0000 0000 0000 0000 0000,
                   all of them  = 2_0000 0100 0000 0000 0000 0000 0000 0000
record  (msf fm) t ;!Time record
string (31) server
string (55) crap1, crap2
integer  flags

routine  printstring(string (255)s)
integer  i,j
  for  i = 1,1,length(s) cycle 
    j = charno(s,i)
    printsymbol(j) unless  j>=128
  repeat 
end 

integer  function  htoi (string (31) h)
  !** convert string of hex to an integer
  integer  i, j, k
  result  = 0 if  length(h) = 0
  j = 0
  for  i = 1,1,length(h) cycle 
    k = charno(h,i) - '0'
    k = k-7 if  k > 9
    j = j*16 + k
  repeat 
  result  = j
end 

server="15"
flags = 0
define param ("Server address",server,0)
define boolean params ("Full,Compact,Raw,Updated,Bootproc,All",flags,0)
process parameters (cliparam)
!** now got all parameter information

t = msf time (htoi(server))
flags=full time if  flags = 0
flags=flags!full time!compact time!last update!bootproc time if  flags&all of them # 0

if  t_state = 0 start 
  printstring (t_full time.SNL) if  flags&full time # 0

  if  flags&compact time # 0 start 
    if  flags&full time # 0 and  t_full time -> crap1.("  ").crap2 then  c 
      spaces(length(crap1)-8)
    printstring (t_compact time)
    if  t_current time_BST = 1 then  printstring(" BST") c 
                                  else  printstring(" GMT")
    printstring(" (compact format)")
    newline
  finish 

  if  flags&last update # 0 start 
    if  flags&full time # 0 and  t_full time -> crap1.("  ").crap2 then  c 
      spaces(length(crap1)-8)
    printsymbol('0') if  t_last updated_day of month < 10
    write (t_last updated_day of month,0)
    printsymbol('/')
    printsymbol('0') if  t_last updated_month < 10
    write (t_last updated_month,0)
    printsymbol('/')
    printsymbol('0') if  t_last updated_year < 10
    write (t_last updated_year,0)
    printstring("  ")
    printsymbol('0') if  t_last updated_hour < 10
    write (t_last updated_hour,0)
    printsymbol(':')
    printsymbol('0') if  t_last updated_minute < 10
    write (t_last updated_minute,0)
    printstring("       MSF updated") if  flags # last update
    newline
  finish 

  if  flags&raw time # 0 start 
    write (t_current time_BST,2);         write (t_current time_century,2)
    write (t_current time_year,2);        write (t_current time_month,2)
    write (t_current time_day of month,2);write (t_current time_day of week,2)
    write (t_current time_hour,2);        write (t_current time_minute,2)
    write (t_current time_second,2);      write (t_current time_hundred,2)
    newline
  finish 

  if  flags&bootproc time # 0 start 
    if  flags&full time # 0 and  t_full time -> crap1.("  ").crap2 then  c 
      spaces(length(crap1)-8)
    printstring (date."  ".time)
    printstring("       Boot processor time") if  flags # bootproc time
    newline
  finish 
finish  else  start 
  printstring ("Error")
  write(t_state,1)
  printstring (" - ".t_full time.snl)
finish 
  
end  of  program