module dipprint; %/* printing routines for distributive polynomials*/
% Authors: R. Gebauer, A. C. Hearn, H. Kredel
symbolic procedure diplprint u;
% Prints a list of distributive polynomials using dipprint
for each v in u do dipprint v;
symbolic procedure dipprint u;
% Prints a distributive polynomial in infix form
<<terpri(); dipprint1(u,nil); terpri(); terpri()>>;
symbolic procedure dipprint1(u,v);
% Prints a distributive polynomial in infix form.
% U is a distributive form. V is a flag which is true if a term
% has preceded current form
if dipzero!? u then if null v then dipprin2 0 else nil
else begin scalar bool,w;
w := diplbc u;
if bcminus!? w then <<bool := t; w := bcneg w>>;
if bool then dipprin2 " - " else if v then dipprin2 " + ";
(if not bcone!? w or evzero!? x then <<bcprin w; dipevlpri(x,t)>>
else dipevlpri(x,nil))
where x = dipevlmon u;
dipprint1(dipmred u,t) end;
symbolic procedure dipprin2 u;
% Prints u, preceding by two EOL's if we have reached column 70
<<if posn()>69 then <<terpri(); terpri()>>; prin2 u>>;
endmodule;;end;