home *** CD-ROM | disk | FTP | other *** search
- Program A86ErrorFilter;
-
- { you MUST run A86 with the +E command line option! }
-
- Var
- Source : Text;
- FileName : String;
- Index : Integer;
- SymbolError : Boolean;
- LastLine : String;
- LineNo : Integer;
- Column : Integer;
-
- Function Trim(Line : String) : String;
-
- Begin
- While (Line[1] = ' ') AND (Length(Line) > 0) Do Delete(Line,1,1);
- While Line[Length(Line)] = ' ' Do Dec(Line[0]);
- Trim := Line;
- End;
-
- Procedure FindFileName(Var Source : Text;Var Line : String;Var Symbols : Boolean);
-
- Var
- Index : Integer;
-
- Begin
- Line := '';
- While Not Eof(Source) do
- Begin
- LastLine := Line;
- ReadLn(Source,Line);
- If Pos('Error messages inserted into',Line) > 0 Then
- Begin
- Symbols := False;
- Line := Trim(Line);
- Index := Length(Line);
- While(Line[Index]) <> ' ' Do Dec(Index);
- Delete(Line,1,Index);
- Exit;
- End;
- If Pos('Undefined symbols are listed in',Line) > 0 Then
- Begin
- Symbols := TRUE;
- Line := Trim(Line);
- Index := Length(Line);
- While(Line[Index]) <> ' ' Do Dec(Index);
- Delete(Line,1,Index);
- Exit;
- End;
- End;
- End;
-
- Function NextLine(Var Source : Text) : String;
-
- Var
- L : String;
-
- Begin
- If Not Eof(Source) Then
- Begin
- ReadLn(Source,L);
- NextLine := L;
- Inc(LineNo);
- End;
- End;
-
- Procedure ParseSymbolErrors(FileName : String);
-
- Var
- Line : String;
- Message : String;
-
- Begin
- Assign(Source,FileName);
- Reset(Source);
- While Not Eof(Source) Do
- Begin
- ReadLn(Source,Line);
- Line := Trim(Line);
- Index := Pos(' ',Line);
- If Index > 0 Then
- Begin
- Message := 'Undefined symbol: '+Copy(Line,1,Pred(Index));
- Delete(Line,1,Index+3);
- WriteLn(Line,', 0, 0, ',Message);
- End;
- End;
- Close(Source);
- Erase(Source);
- End;
-
- Procedure ParseOtherErrors(FileName : String);
-
- Var
- Line : String;
-
- Begin
- Assign(Source,FileName);
- Reset(Source);
- LineNo := 0;
- Line := NextLine(Source);
- If Pos('~',Line) = 1 Then Dec(LineNo);
- While Not Eof(Source) Do
- Begin
- Line := NextLine(Source);
- If Line[Length(Line)] = '~' Then
- Begin
- Dec(LineNo); { adjust for inserted error message }
- Index := Pred(Length(Line));
- While Line[Index] <> '~' Do Dec(Index);
- Column := Index;
- Delete(Line,1,Index);
- Dec(Line[0]);
- WriteLn(Trim(LastLine),', ',Succ(LineNo),', ',Column,', ','Error #',Line);
- End;
- End;
- Close(Source);
- Erase(Source);
- End;
-
- Begin
- Assign(Source,ParamStr(1));
- Reset(Source);
- FindFileName(Source,FileName,SymbolError);
- Close(Source);
- If FileName = '' Then Exit;
- If SymbolError
- Then ParseSymbolErrors(FileName)
- Else ParseOtherErrors(FileName);
- End.
-