MODULE pi_deobfuscated;
(* computes pi truncated [rounded down] to N decimal digits *)

FROM Base10000IOBuffer IMPORT SquirtUnNormalizedBase10000Digit;
FROM BIO IMPORT PutLine;

CONST
  N = 800; (* should be a multiple of 4 *)
  count_max = N DIV 4 - 1;
  array_max = 14*(N DIV 4)-1;

VAR
  i     : [0..array_max];
  count : [0..count_max];
  array : ARRAY [0..array_max] OF CARDINAL;

BEGIN
  FOR i := 0 TO array_max DO array[i] := 2000 END (* FOR *);

  FOR count := count_max TO 0 BY -1 DO
    SquirtUnNormalizedBase10000Digit(array[0]);
    array[0] := 0;
    FOR i := 1 TO 14*count+13 DO array[i] := array[i]*10000 END (* FOR *);
    FOR i := 14*count+13 TO 1 BY -1 DO
      array[i-1] := array[i-1] + (array[i] DIV (2*i+1))*i;
      array[i]   :=               array[i] MOD (2*i+1)
    END (* FOR *)
  END (* FOR *);

  SquirtUnNormalizedBase10000Digit(array[0] DIV 10000 * 10000);
   (* instead of flushing, but avoiding 9999 logjam *)
  PutLine
END (* MAIN MODULE *) pi_deobfuscated.
