PROGRAM Set_Time; (* read d:Time.tmp and set system time *)

TYPE string80=string[80];
     register=RECORD
              ax,bx,cx,dx,bp,si,di,ds,es,flags :integer;
              END;

VAR  t :string80;
     mt :ARRAY[1..12] OF string[3];
     a :string[3];
     c :char;
     f :text;
     n :integer;
     day,month,year :integer;
     hour,minute: integer;

FUNCTION hacklead(a :string80) :string80;
VAR  n :integer;

begin;
      while a[1]=' ' do  delete(a,1,1);
      hacklead:=a;
end;

FUNCTION number12(a:string80) :integer;
VAR      n,m :integer;
begin;
      m:=0;
      for n:=1 to 12 do
      begin;
            if mt[n]=a then m:=n;
      end;
      number12:=m;
end;

PROCEDURE set_time(h,m :integer);
VAR reg :register;
BEGIN;
      WITH reg DO BEGIN
           ax:=$2D00; (* System call: set time *)
           cx:=256 * h + m ;
           dx:=0;
           msdos(reg);
      END;
END;

PROCEDURE set_date(d,m,y :integer);
VAR reg :register;
BEGIN;
      WITH reg DO BEGIN
           ax:=$2B00; (* System call: set date *)
           cx:=y + 1900 ;
           dx:=m * 256 + d ;
           msdos(reg);
      END;
END;

begin;
      mt[1]:='Jan'; mt[2]:='Feb'; mt[3]:='Mar'; mt[4]:='Apr';
      mt[5]:='May'; mt[6]:='Jun'; mt[7]:='Jul'; mt[8]:='Aug';
      mt[9]:='Sep'; mt[10]:='Oct'; mt[11]:='Nov'; mt[12]:='Dec';

      assign(f,'d:Time1.tmp'); reset(f);
      readln(f,t);
      close(f); erase(f);
      t:=hacklead(t); n:=pos(' ',t); delete(t,1,n);
      a:=copy(t,1,2); val(a,day,n);
      a:=copy(t,4,3); month:=number12(a);
      a:=copy(t,8,2); val(a,year,n);
      a:=copy(t,11,2); val(a,hour,n);
      a:=copy(t,14,2); val(a,minute,n);
      writeln(t);
      writeln(day:5,month:5,year:5);
      writeln(hour:5,minute:5);
      Set_time(hour,minute); set_date(day,month,year);
end.