00001 /*-------------------------------------------------------------------- 00002 * suif_viewer.h 00003 * 00004 * The "suif_viewer" displays SUIF codes of a procedure. 00005 * 00006 */ 00007 00008 #ifndef SUIF_VIEWER_H 00009 #define SUIF_VIEWER_H 00010 00011 //#include <pyg.h> 00012 #include "base_viewer.h" 00013 #include "code_tree.h" 00014 00015 bool tag_prefix_match(LString tag, char *prefix); 00016 typedef list<LString> string_list; 00017 00018 /*---------------------------------------------------------------------- 00019 * suif_viewer 00020 */ 00021 class suif_viewer : public text_base_viewer { 00022 typedef text_base_viewer inherited; 00023 00024 bool show_mark_instructions; 00025 string_list* annotation_names; 00026 00027 vmessage* info_bar; 00028 ProcedureDefinition* current_proc; 00029 00030 struct { 00031 char* tag; 00032 } find_info; 00033 00034 /* menu */ 00035 virtual void create_proc_menu(); 00036 virtual void create_edit_menu(); 00037 virtual void create_view_menu(); 00038 virtual void create_find_menu(); 00039 00040 /* display */ 00041 virtual void clear(); 00042 virtual void update_info_bar(); 00043 00044 00045 /* find */ 00046 void find_helper( void *client_data, bool search_forward ); 00047 00048 virtual void show_node( SuifObject* tn ); 00049 00050 virtual void select_node( vnode* ); 00051 00052 static void find_node_cmd( event& e, suif_viewer* viewer, char* tag ); 00053 static void find_instr_cmd( event& e, suif_viewer* viewer ); 00054 00055 static void find_cmd( const event&, suif_viewer* viewer, 00056 void* search_forward ); 00057 00058 static void collapse_all_cmd(event& e, suif_viewer* viewer); 00059 static void expand_all_cmd(event& e, suif_viewer* viewer); 00060 static void filter_mrk_cmd(event& e, suif_viewer* viewer); 00061 public: 00062 suif_viewer(); 00063 virtual ~suif_viewer(); 00064 00065 virtual void create_window(); 00066 virtual char *class_name() { return "Suif Viewer"; } 00067 virtual void handle_event( event& e ); 00068 00069 virtual void select( code_fragment* f ); 00070 virtual void select( SuifObject* ); 00071 00072 virtual void view( code_fragment* f ); 00073 virtual void view( SuifObject* ); 00074 00075 virtual void refresh(); 00076 virtual void refresh_menu(); 00077 00078 static window *constructor() { 00079 return new suif_viewer; 00080 } 00081 }; 00082 00083 #endif