Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

  1. #ifndef _ASMITREE_H
  2. #define _ASMITREE_H
  3. /* asmitree.h */
  4. /*****************************************************************************/
  5. /* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only                     */
  6. /*                                                                           */
  7. /* AS-Portierung                                                             */
  8. /*                                                                           */
  9. /* Opcode-Abfrage als Binaerbaum                                             */
  10. /*                                                                           */
  11. /* Historie: 30.10.1996 Grundsteinlegung                                     */
  12. /*            6.12.1998 dynamische Variante                                  */
  13. /*                                                                           */
  14. /*****************************************************************************/
  15.  
  16. #include "datatypes.h"
  17.  
  18. typedef void (*InstProc)(
  19. #ifdef __PROTOS__
  20. Word Index
  21. #endif
  22. );
  23.  
  24. typedef Boolean (*inst_fnc_t)(
  25. #ifdef __PROTOS__
  26. Word index
  27. #endif
  28. );
  29.  
  30. typedef struct _TInstTreeNode
  31. {
  32.   struct _TInstTreeNode *Left,*Right;
  33.   InstProc Proc;
  34.   char *Name;
  35.   Word Index;
  36.   ShortInt Balance;
  37. } TInstTreeNode,*PInstTreeNode;
  38.  
  39. typedef struct _TInstTableEntry
  40. {
  41.   InstProc Proc;
  42.   char *Name;
  43.   Word Index;
  44.   int Coll;
  45. }
  46. TInstTableEntry, *PInstTableEntry;
  47.  
  48. typedef struct inst_fnc_table_entry
  49. {
  50.   inst_fnc_t fnc;
  51.   char *p_name;
  52.   Word index;
  53.   int coll;
  54. } inst_fnc_table_entry_t;
  55.  
  56. struct sInstTable
  57. {
  58.   int Fill,Size;
  59.   Boolean Dynamic;
  60.   PInstTableEntry Entries;
  61. };
  62. typedef struct sInstTable TInstTable;
  63. typedef struct sInstTable *PInstTable;
  64.  
  65. typedef struct inst_fnc_table
  66. {
  67.   int fill, size;
  68.   Boolean dynamic;
  69.   inst_fnc_table_entry_t *p_entries;
  70. } inst_fnc_table_t;
  71.  
  72. extern void AddInstTree(PInstTreeNode *Root, char *NName, InstProc NProc, Word NIndex);
  73.  
  74. extern void ClearInstTree(PInstTreeNode *Root);
  75.  
  76. extern Boolean SearchInstTree(PInstTreeNode Root, char *OpPart);
  77.  
  78. extern void PrintInstTree(PInstTreeNode Root);
  79.  
  80.  
  81. extern PInstTable CreateInstTable(int TableSize);
  82. extern inst_fnc_table_t *inst_fnc_table_create(int table_size);
  83.  
  84. extern void SetDynamicInstTable(PInstTable Table);
  85.  
  86. extern void DestroyInstTable(PInstTable tab);
  87. extern void inst_fnc_table_destroy(inst_fnc_table_t *p_table);
  88.  
  89. extern void AddInstTable(PInstTable tab, const char *Name, Word Index, InstProc Proc);
  90. extern void inst_fnc_table_add(inst_fnc_table_t *p_table, const char *p_name, Word index, inst_fnc_t fnc);
  91.  
  92. extern void RemoveInstTable(PInstTable tab, const char *Name);
  93.  
  94. extern Boolean LookupInstTable(PInstTable tab, const char *Name);
  95. extern Boolean inst_fnc_table_lookup(const inst_fnc_table_t *p_table, const char *p_name);
  96.  
  97. extern void PrintInstTable(FILE *stream, PInstTable tab);
  98.  
  99. extern void asmitree_init(void);
  100.  
  101. #endif /* _ASMITREE_H */
  102.