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   
Text File  |  1991-08-10  |  2KB  |  136 lines

  1. (*======================================================================*)
  2. (*                      Symbol Table Routines                           *)
  3. (*======================================================================*)
  4. (*  Version:  1.00              Author:   Dennis Brueni                 *)
  5. (*  Date:     07-08-91          Changes:  Original                      *)
  6. (*======================================================================*)
  7.  
  8. IMPLEMENTATION MODULE SymTab;
  9.  
  10. IMPORT
  11.     SYSTEM;
  12. IMPORT
  13.     Strings,FStorage,FIO;
  14. IMPORT
  15.     HashTab,SymLists,MacLists;
  16.  
  17. VAR
  18.     ST: HashTab.HashTable;
  19.  
  20.  
  21.  
  22.  
  23.  
  24. (*----------------------------------------------------------------------*)
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43. (*----------------------------------------------------------------------*)
  44.  
  45. PROCEDURE Initialize;
  46.  
  47. VAR
  48.     list: SymLists.SymList;
  49.     lptr: SymLists.SymList;
  50.     temp: SymRecPtr;
  51. BEGIN
  52.     list:=HashTab.Listify(ST);
  53.     lptr:=list;
  54.     WHILE NOT SymLists.Empty(lptr) DO
  55.         temp:=SymLists.First(lptr);
  56.         WITH temp^ DO
  57.             IF mac THEN
  58.                 MacLists.Destroy(mcl);
  59.                 MacLists.Destroy(mca);
  60.             END;
  61.  
  62.             FStorage.DEALLOCATE(temp,LONGCARD(SymRecSize+len));
  63.         END;
  64.         lptr:=SymLists.Next(lptr);
  65.     END;
  66.     SymLists.Destroy(list);
  67.     HashTab.Destroy(ST);
  68.     HashTab.Create(ST,297);
  69. END Initialize;
  70.  
  71. (*----------------------------------------------------------------------*)
  72.  
  73.  
  74.  
  75. PROCEDURE Insert(symbol : ARRAY OF CHAR; macro : BOOLEAN; mlist,margs: SymLists.SymList);
  76.  
  77. VAR
  78.     temp: SymRecPtr;
  79.     leng: CARDINAL;
  80.  
  81. BEGIN
  82.  
  83.     leng:=Strings.Length(symbol)+2;
  84.     FStorage.ALLOCATE(temp,LONGCARD(SymRecSize+leng));
  85.     WITH temp^ DO
  86.         sym:=SYSTEM.ADDRESS(temp)+SYSTEM.ADDRESS(SymRecSize);
  87.         len:=leng;
  88.         mac:=macro;
  89.         mcl:=mlist;
  90.         mca:=margs;
  91.         Strings.Assign(symbol,sym^);
  92.     END;
  93.     HashTab.Insert(ST,temp);
  94. END Insert;
  95.  
  96. (*----------------------------------------------------------------------*)
  97.  
  98.  
  99.  
  100. PROCEDURE Delete(symbol: ARRAY OF CHAR);
  101.  
  102. VAR
  103.     temp: SymRecPtr;
  104. BEGIN
  105.  
  106.     temp:=LookUp(symbol);
  107.     IF (temp#NIL) THEN
  108.         WITH temp^ DO
  109.             IF mac THEN
  110.                 MacLists.Destroy(mcl);
  111.                 MacLists.Destroy(mca);
  112.             END;
  113.             HashTab.Delete(ST,symbol);
  114.             FStorage.DEALLOCATE(temp,LONGCARD(len+SymRecSize));
  115.         END;
  116.     END;
  117. END Delete;
  118.  
  119. (*----------------------------------------------------------------------*)
  120.  
  121.  
  122.  
  123. PROCEDURE LookUp(sym: ARRAY OF CHAR):SymRecPtr;
  124.  
  125. BEGIN
  126.  
  127.     RETURN HashTab.Search(ST,sym);
  128. END LookUp;
  129.  
  130. (************************************************************************)
  131.  
  132. BEGIN
  133.  
  134.     HashTab.Create(ST,297);
  135. END SymTab.
  136.