home *** CD-ROM | disk | FTP | other *** search
- EXTERNAL LINEAR::INITIAL(2);
-
- Procedure INITIAL;
- {$E+}
- VAR Rcd, {Record counter}
- I,J : integer;
- sum : real;
- XEOF, {End of File flag for a NON text File}
- firstin : boolean;
- B : ROW;
- C : COL;
- begin
- For I:=1 to maxrow do
- For J:=1 to maxcol do ABAR[I,J] := 0.0 ;
- firstin := false;
- Rcd := 0;{start at the beginning}
- READ(fa:Rcd+bias, F);
- XEOF := (F.tag=99);
- If F.tag=0 then
- begin
- firstin := true;
- Pname := F.name;
- M := F.num1; {No. Rows}
- N := F.num2; {No. Columns}
- MP := M + 2;
- M1 := M + 1;
- PRINTH
- end(* IF *)
- Else
- begin
- writeln;
- writeln(' Bad file format');
- writeln;
- Result := 2
- end(* ELSE *);
- While (firstin) AND (NOT XEOF) do
- begin
- With F do
- CASE TAG of
- 1: begin(* heading *)
- heading := header;
- hdrflag := true
- end;
- 2: begin(* row_name & RHS *)
- Rowname[Rindex] := Rname;
- B[Rindex] := RHS
- end;
- 4: begin(* col_name & OBJ *)
- Colname[Cindex] := Cname;
- C[Cindex] := OBJ
- end;
- 6: ABAR[R,S] := T;
- 99: (* NULL *)
- End{With/Case};
- Rcd := Rcd + 1;
- READ(fa:Rcd+bias, F);
- XEOF := (F.tag=99);
- end(* While *);
- If firstin then
- begin
- PRINTC(B,C);
- For J:=1 to N do ABAR[M1,J] := C[J];
- For I:=1 to M do
- If B[I]<0.0 then
- begin
- B[I] := -B[I];
- For J:=1 to N do ABAR[I,J] := -ABAR[I,J]
- end;
- For J:=1 to N do
- begin
- SUM := 0.0;
- For I:=1 to M do SUM := SUM - ABAR[I,J];
- ABAR[MP,J] := SUM
- end;
- B[M1] := 0.0;
- SUM := 0.0;
- For I:=1 to M do SUM := SUM - B[I];
- B[MP] := SUM;
- For I:=1 to MP do
- begin
- X[I] := B[I];
- list[I] := N +I;
- For J:=1 to MP do U[I,J] := 0.0
- end;
- For I:=1 to MP do U[I,I] := 1.0;
- PRINTD;
- Rowname[M1] := ' M+1 ';
- Rowname[MP] := ' M+2 ';
- {PRINTX OMITTED FOR LINPROG}
- end(* If firstin *);
- Writeln
- end(*---of INITIAL---*);
- .
-