decl
int merge(str out, str in1, str in2);
enddecl
int merge(str out, str in1, str in2)
{
decl
int fp, fp1, fp2;
int x, a, b, w1, w2;
enddecl
begin
x=exposcall("Create", out, 1);
fp=exposcall("Open", out);
fp1=exposcall("Open", in1);
fp2=exposcall("Open", in2);
a=exposcall("Read", fp1, w1);
b=exposcall("Read", fp2, w2);
while(a!=-2 AND b!=-2) do
if(w1<=w2) then
x=exposcall("Write", fp, w1);
a=exposcall("Read", fp1, w1);
else
x=exposcall("Write", fp, w2);
b=exposcall("Read", fp2, w2);
endif;
endwhile;
while(a!=-2) do
x=exposcall("Write", fp, w1);
a=exposcall("Read", fp1, w1);
endwhile;
while(b!=-2) do
x=exposcall("Write", fp, w2);
b=exposcall("Read", fp2, w2);
endwhile;
x=exposcall("Close", fp);
x=exposcall("Close", fp1);
x=exposcall("Close", fp2);
x=exposcall("Delete", in1);
x=exposcall("Delete", in2);
return 0;
end
}
int main()
{
decl
int x, pid, pid1, pid2;
enddecl
begin
x=initialize();
pid1=exposcall("Fork");
if(pid1!=0) then
pid2=exposcall("Fork");
if(pid2!=0) then
x=merge("temp12.dat", "temp1.dat", "temp2.dat");
x=exposcall("Wait", pid2);
else
x=merge("temp34.dat", "temp3.dat", "temp4.dat");
x=exposcall("Exit");
endif;
x=merge("temp14.dat", "temp12.dat", "temp34.dat");
x=exposcall("Wait", pid1);
else
pid2=exposcall("Fork");
if(pid2!=0) then
x=merge("temp56.dat", "temp5.dat", "temp6.dat");
x=exposcall("Wait", pid2);
else
x=merge("temp78.dat", "temp7.dat", "temp8.dat");
x=exposcall("Exit");
endif;
x=merge("temp58.dat", "temp56.dat", "temp78.dat");
x=exposcall("Exit");
endif;
x=merge("merge.dat", "temp14.dat", "temp58.dat");
write("Merged");
return 1;
end
}