home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1991-08-10 | 2.4 KB | 136 lines |
- (*======================================================================*)
- (* Symbol Table Routines *)
- (*======================================================================*)
- (* Version: 1.00 Author: Dennis Brueni *)
- (* Date: 07-08-91 Changes: Original *)
- (*======================================================================*)
-
- IMPLEMENTATION MODULE SymTab;
-
- IMPORT
- SYSTEM;
- IMPORT
- Strings,FStorage,FIO;
- IMPORT
- HashTab,SymLists,MacLists;
-
- VAR
- ST: HashTab.HashTable;
-
-
-
-
-
- (*----------------------------------------------------------------------*)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- (*----------------------------------------------------------------------*)
-
- PROCEDURE Initialize;
-
- VAR
- list: SymLists.SymList;
- lptr: SymLists.SymList;
- temp: SymRecPtr;
- BEGIN
- list:=HashTab.Listify(ST);
- lptr:=list;
- WHILE NOT SymLists.Empty(lptr) DO
- temp:=SymLists.First(lptr);
- WITH temp^ DO
- IF mac THEN
- MacLists.Destroy(mcl);
- MacLists.Destroy(mca);
- END;
-
- FStorage.DEALLOCATE(temp,LONGCARD(SymRecSize+len));
- END;
- lptr:=SymLists.Next(lptr);
- END;
- SymLists.Destroy(list);
- HashTab.Destroy(ST);
- HashTab.Create(ST,297);
- END Initialize;
-
- (*----------------------------------------------------------------------*)
-
-
-
- PROCEDURE Insert(symbol : ARRAY OF CHAR; macro : BOOLEAN; mlist,margs: SymLists.SymList);
-
- VAR
- temp: SymRecPtr;
- leng: CARDINAL;
-
- BEGIN
-
- leng:=Strings.Length(symbol)+2;
- FStorage.ALLOCATE(temp,LONGCARD(SymRecSize+leng));
- WITH temp^ DO
- sym:=SYSTEM.ADDRESS(temp)+SYSTEM.ADDRESS(SymRecSize);
- len:=leng;
- mac:=macro;
- mcl:=mlist;
- mca:=margs;
- Strings.Assign(symbol,sym^);
- END;
- HashTab.Insert(ST,temp);
- END Insert;
-
- (*----------------------------------------------------------------------*)
-
-
-
- PROCEDURE Delete(symbol: ARRAY OF CHAR);
-
- VAR
- temp: SymRecPtr;
- BEGIN
-
- temp:=LookUp(symbol);
- IF (temp#NIL) THEN
- WITH temp^ DO
- IF mac THEN
- MacLists.Destroy(mcl);
- MacLists.Destroy(mca);
- END;
- HashTab.Delete(ST,symbol);
- FStorage.DEALLOCATE(temp,LONGCARD(len+SymRecSize));
- END;
- END;
- END Delete;
-
- (*----------------------------------------------------------------------*)
-
-
-
- PROCEDURE LookUp(sym: ARRAY OF CHAR):SymRecPtr;
-
- BEGIN
-
- RETURN HashTab.Search(ST,sym);
- END LookUp;
-
- (************************************************************************)
-
- BEGIN
-
- HashTab.Create(ST,297);
- END SymTab.
-