home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
549a.lha
/
M2P_v1.0
/
mods.lzh
/
SymTab.mod
< prev
Wrap
Text File
|
1991-08-10
|
2KB
|
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.