```PROGRAM Fitfile;
{ solution by Gauss-Jordan elimination }
{ Read data from disk file }
{ From Borland Pascal Programs for Scientists and Engineers }
{ by Alan R. Miller, Copyright C 1993, SYBEX Inc }
USES WinCrt;  {Crt for non-windows version}

CONST
Maxr = 8;
Maxc = 8;

TYPE
FltPt = Real;
Arys  = ARRAY[1..Maxc] OF FltPt;
Ary2s = ARRAY[1..Maxr, 1..Maxc] OF FltPt;

VAR
Y, Coef: Arys;
A, B: Ary2s;
N, M, I, J: Integer;
Error: Boolean;
Filename: STRING[14];
Filvar: Text;
YesNo: Char;

PROCEDURE Get_Data(VAR A: Ary2s;
VAR Y: Arys;
VAR N, M: Integer);
{ Get values for N and arrays A, Y }

VAR
I, J: Integer;

BEGIN { Get_Data }
WriteLn;
REPEAT
Write(' Name of file: ');
Assign(Filvar,Filename);
{\$I-}  {Turn off Error checking}
Reset(Filvar);
{\$I+}  {Turn it back on}
UNTIL IOresult = 0;
ReadLn(Filvar, N);  { number of equations }
M := N;
WriteLn;
WriteLn
(' Simultaneous solution by Gauss-Jordan elimination');
WriteLn('  ',N,' equations ');
IF N > 1 THEN
BEGIN
FOR I := 1 TO N DO
BEGIN
FOR J := 1 TO N DO
ReadLn(Filvar, Y[I])   { clear line }
END;
FOR I:= 1 TO N  DO
BEGIN
FOR J:= 1 TO M DO
Write(A[I,J]:7:4, '  ');
WriteLn(' : ', Y[I]:7:4)
END;
WriteLn
END  { if N>1 }
END; { procedure Get_Data }

PROCEDURE Write_Data;
{ print out the answers }

VAR
I: Integer;

BEGIN
FOR I := 1 TO M DO
Write(Coef[I]:9:5);
WriteLn
END; { Write_Data }

{\$I GAUSSJ}   {Listing 4.4}

BEGIN  { main program }
WriteLn;
REPEAT
Get_Data(A, Y, N, M);
IF N > 1 THEN
BEGIN
FOR I := 1 TO N DO
FOR J := 1 TO N DO
B[I,J] := A[I,J]; { Setup work array }
Gaussj(B, Y, Coef, N, Error);
IF NOT Error THEN Write_Data
END;
WriteLn; Write(' More? '); ReadLn( YesNo)
UNTIL (UpCase(YesNo) <> 'Y');
DoneWinCrt  { for Windows version only }
END.

```