| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- IMPLEMENTATION MODULE ImpLists;
- (*
- * REPERTOIRE
- * Release 1.6
- * By Charles Bradford and Cole Brecheen
- * (c) Copyright 1985-1992 PMI
- * Green Bay, Wisconsin
- * All rights reserved
- * (414) 468-6040
- *
- * $Header:
- *)
- IMPORT ErrorManager;
- IMPORT GenLists;
- IMPORT M2Strings;
- IMPORT Parser;
- IMPORT PosUtils;
- IMPORT StrEdit;
- PROCEDURE ExtractImportList( VAR TextList, Imports: GenLists.GenList;
- VAR StartOfImpList, EndOfImpList: CARDINAL );
- VAR
- x, CurrentWord, LastWord: ARRAY [0..79] OF CHAR;
- Terminator: CHAR;
- LineCnt, ColCnt: CARDINAL;
- PROCEDURE LastWordWas( TheStr: ARRAY OF CHAR ): BOOLEAN;
- BEGIN
- RETURN M2Strings.CompareStr( TheStr, LastWord ) = 0;
- END LastWordWas;
- PROCEDURE CurrentWordIs( TheStr: ARRAY OF CHAR ): BOOLEAN;
- BEGIN
- RETURN M2Strings.CompareStr( TheStr, CurrentWord ) = 0;
- END CurrentWordIs;
- PROCEDURE NextWord( VAR TheStr: ARRAY OF CHAR );
- BEGIN
- Parser.GetNextWord( TextList, LineCnt, ColCnt, TheStr, Terminator );
- M2Strings.Assign( CurrentWord, LastWord );
- M2Strings.Assign( TheStr, CurrentWord );
- END NextWord;
- PROCEDURE EndOfImports(): BOOLEAN;
- BEGIN
- IF CurrentWordIs( 'CONST' ) THEN
- RETURN TRUE;
- ELSIF CurrentWordIs( 'VAR' ) THEN
- RETURN TRUE;
- ELSIF CurrentWordIs( 'EXPORT' ) THEN
- RETURN TRUE;
- ELSIF CurrentWordIs( 'PROCEDURE' ) THEN
- RETURN TRUE;
- ELSIF CurrentWordIs( 'TYPE' ) THEN
- RETURN TRUE;
- ELSIF CurrentWordIs( 'BEGIN' ) THEN
- RETURN TRUE;
- ELSIF CurrentWordIs( 'END' ) THEN
- RETURN TRUE;
- ELSIF (LineCnt >= GenLists.ListLength(TextList)) THEN
- RETURN TRUE;
- ELSE
- RETURN FALSE;
- END;
- END EndOfImports;
- PROCEDURE EndOfStatement(): BOOLEAN;
- BEGIN
- RETURN PosUtils.Equal( x, 'FROM' ) OR PosUtils.Equal( x, 'IMPORT' ) OR
- EndOfImports();
- END EndOfStatement;
- VAR
- SubList: GenLists.GenList;
- BEGIN
- StrEdit.SetLength( Parser.TheLine, 0 );
- GenLists.NewList( Imports );
- LineCnt := 1;
- ColCnt := 0;
- StartOfImpList := 0;
- EndOfImpList := 0;
- LastWord := '';
- CurrentWord := '';
- REPEAT
- NextWord( x );
- IF EndOfImports() THEN
- RETURN;
- END;
- UNTIL EndOfStatement();
- StartOfImpList := LineCnt;
- REPEAT
- NextWord( x );
- IF LastWordWas( 'FROM' ) THEN
- GenLists.ListInsert( x, GenLists.StrCode, Imports, 65535 );
- (* Append module name to Imports. *)
- GenLists.NewList( SubList );
- NextWord( x );
- (* skip the 'IMPORT' *)
- LOOP
- NextWord( x );
- IF EndOfStatement() THEN
- EXIT;
- ELSE
- GenLists.ListInsert( x, GenLists.StrCode, SubList, 65535 );
- END;
- END;
- GenLists.ListInsert( SubList, GenLists.ListCode, Imports, 65535 );
- ELSIF LastWordWas( 'IMPORT' ) THEN
- GenLists.ListInsert( x, GenLists.StrCode, Imports, 65535 );
- (* Append module name to Imports. *)
- GenLists.NilList( SubList );
- GenLists.ListInsert( SubList, GenLists.ListCode, Imports, 65535 );
- (* Append nil SubList to indicated that this is a
- FromLess import. *)
- REPEAT
- NextWord( x );
- UNTIL EndOfStatement();
- END;
- UNTIL EndOfImports();
- (*We've reached the end of the import list.*)
- EndOfImpList := LineCnt - 1;
- END ExtractImportList;
- END ImpLists.
|