113 lines
2.1 KiB
Plaintext
113 lines
2.1 KiB
Plaintext
|
type
|
|||
|
timetype = record h, m, s, l : integer; end;
|
|||
|
regpac = record
|
|||
|
ax,bx,cx,dx,bp,si,di,ds,es,flags: integer;
|
|||
|
end;
|
|||
|
tustr = string[30];
|
|||
|
|
|||
|
procedure time_difference( var tStart, tEnd, tDiff : timetype );
|
|||
|
var
|
|||
|
startSecond, startMinute, startHour : integer;
|
|||
|
|
|||
|
begin { time_difference }
|
|||
|
startSecond := tStart.s;
|
|||
|
startMinute := tStart.m;
|
|||
|
startHour := tStart.h;
|
|||
|
|
|||
|
tDiff.l := tEnd.l - tStart.l;
|
|||
|
if ( tDiff.l < 0 ) then
|
|||
|
begin
|
|||
|
tDiff.l := tDiff.l + 100;
|
|||
|
startSecond := startSecond + 1;
|
|||
|
end;
|
|||
|
|
|||
|
tDiff.s := tEnd.s - startSecond;
|
|||
|
if ( tDiff.s < 0 ) then
|
|||
|
begin
|
|||
|
tDiff.s := tDiff.s + 60;
|
|||
|
startMinute := startMinute + 1;
|
|||
|
end;
|
|||
|
|
|||
|
tDiff.m := tEnd.m - startMinute;
|
|||
|
if ( tDiff.m < 0 ) then
|
|||
|
begin
|
|||
|
tDiff.m := tDiff.m + 60;
|
|||
|
startHour := startHour + 1;
|
|||
|
end;
|
|||
|
|
|||
|
tDiff.h := tEnd.h - startHour;
|
|||
|
if ( tDiff.h < 0 ) then
|
|||
|
tDiff.h := tDiff.h + 12;
|
|||
|
end;
|
|||
|
|
|||
|
procedure oc( var c : char );
|
|||
|
var
|
|||
|
recpack: regpac;
|
|||
|
ah,al,ch,cl,dh: byte;
|
|||
|
|
|||
|
begin
|
|||
|
ah := $8;
|
|||
|
with recpack do
|
|||
|
begin
|
|||
|
ax := ah shl 8 + al;
|
|||
|
dx := ord( c );
|
|||
|
end;
|
|||
|
intr( $21, recpack );
|
|||
|
end;
|
|||
|
|
|||
|
procedure ostr( var s: tustr );
|
|||
|
var
|
|||
|
i, l : integer;
|
|||
|
begin { ostr }
|
|||
|
l := Length( s );
|
|||
|
for i := 1 to l do begin
|
|||
|
oc( s[ i ] );
|
|||
|
end;
|
|||
|
end;
|
|||
|
|
|||
|
procedure onum( var n: integer );
|
|||
|
var
|
|||
|
s : tustr;
|
|||
|
begin { onum }
|
|||
|
Str( n, s );
|
|||
|
ostr( s );
|
|||
|
end;
|
|||
|
|
|||
|
procedure print_time_part( num : integer );
|
|||
|
var c : char;
|
|||
|
begin
|
|||
|
c := '0';
|
|||
|
if ( num < 10 ) then oc( c );
|
|||
|
onum( num );
|
|||
|
end;
|
|||
|
|
|||
|
procedure print_time( var t: timetype );
|
|||
|
var c : char;
|
|||
|
begin
|
|||
|
print_time_part( t.h );
|
|||
|
c := ':';
|
|||
|
oc( c );
|
|||
|
print_time_part( t.m );
|
|||
|
oc( c );
|
|||
|
print_time_part( t.s );
|
|||
|
c := '.';
|
|||
|
oc( c );
|
|||
|
print_time_part( t.l );
|
|||
|
end;
|
|||
|
|
|||
|
procedure print_elapsed_time( var timeStart, timeEnd: timetype );
|
|||
|
var
|
|||
|
timeDiff: timetype;
|
|||
|
s : tustr;
|
|||
|
c : char;
|
|||
|
begin
|
|||
|
time_difference( timeStart, timeEnd, timeDiff );
|
|||
|
s := 'elapsed time: ';
|
|||
|
ostr( s );
|
|||
|
print_time( timeDiff );
|
|||
|
c := Chr( 10 );
|
|||
|
oc( c );
|
|||
|
c := Char( 13 );
|
|||
|
oc( c );
|
|||
|
end;
|
|||
|
|