gnusim8085-1.4.1/0000755000175000017500000000000013327663074013237 5ustar carstencarstengnusim8085-1.4.1/src/0000755000175000017500000000000013327663073014025 5ustar carstencarstengnusim8085-1.4.1/src/gui-list-message.c0000644000175000017500000000607313266555003017351 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "config.h" #include "gui-list-message.h" #include "gui-app.h" static GtkListStore *store = NULL; static GtkTreeView *view = NULL; enum { C_NO, C_MESG, N_COLS }; static void _add_column (GtkTreeView * view, gint id, gchar * title) { GtkCellRenderer *renderer; GtkTreeViewColumn *column; g_assert (view); renderer = gtk_cell_renderer_text_new (); g_object_set (renderer, "wrap-mode", PANGO_WRAP_WORD, "wrap-width", 250, NULL); column = gtk_tree_view_column_new_with_attributes (title, renderer, "text", id, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); } static void cb_clicked (GtkTreeView * listview, gpointer user_data) { GtkTreeIter iter; GtkTreeSelection *selection; gint ln; g_assert (view); /* get selected */ selection = gtk_tree_view_get_selection (view); g_assert (selection); g_assert (gtk_tree_selection_get_selected (selection, (GtkTreeModel **)&store, &iter)); /* get */ gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, C_NO, &ln, -1); if (ln == 0) return; gtk_widget_grab_focus (app->editor->widget); gui_editor_goto_line (app->editor, ln); gui_editor_clear_all_highlights (app->editor); gui_editor_set_highlight (app->editor, ln, TRUE); } static void create_me (void) { /* create store */ store = gtk_list_store_new (N_COLS, G_TYPE_INT, G_TYPE_STRING); g_assert (store); /* create view */ view = GTK_TREE_VIEW (gtk_tree_view_new_with_model (GTK_TREE_MODEL (store))); g_assert (view); gtk_widget_show (GTK_WIDGET (view)); /* add column */ _add_column (view, C_NO, _("Line No")); _add_column (view, C_MESG, _("Assembler Message")); /* connect signals */ g_signal_connect (view, "cursor-changed", (GCallback) cb_clicked, NULL); } void gui_list_message_attach_me (void) { GtkWidget *cont; cont = lookup_widget (app->window_main, "vbox_data"); g_assert (cont); create_me (); gtk_box_pack_end (GTK_BOX (cont), GTK_WIDGET (view), TRUE, TRUE, 0); } void gui_list_message_clear (void) { gtk_list_store_clear (store); } void gui_list_message_add (const char *msg, gint ln, gint attr) { GtkTreeIter iter; g_assert (store); g_assert (msg); gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, C_NO, ln, C_MESG, msg, -1); } gnusim8085-1.4.1/src/asm-source.c0000644000175000017500000002327513266554333016260 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "asm-source.h" #include "asm-err-comm.h" #include "asm-token.h" #include "asm-id.h" #include "asm-ds-symtable.h" #include "config.h" void disp_list (AsmSource * self) { gint cnt = 0; /* for each line */ while (cnt < self->listing_buffer_total) { /* listing */ cnt++; } } static void asm_source_create_listing_buffer (AsmSource * self, const gchar * text) { gchar **lines; gint cnt = 0; g_assert (text); lines = g_strsplit (text, "\n", -1); g_assert (lines); /* for each line */ while (lines[cnt]) { /* listing */ self->listing_buffer[cnt] = g_string_new (lines[cnt]); self->listing_buffer_total = cnt + 1; cnt++; } g_strfreev (lines); } static void asm_source_add_to_table (AsmSource * self, AsmSourceEntry * entry) { self->entries[self->entries_total++] = entry; } static void util_remove_comment (gchar * str) { gchar *p = str; g_assert (str); while (*p && *p != ';') p++; *p = '\0'; } static gboolean asm_source_parse_from_listing (AsmSource * self) { int i; gchar *line = NULL; AsmSourceEntry *sl; for (i = 0; i < self->listing_buffer_total; i++) { line = g_strdup (self->listing_buffer[i]->str); /* remove unwanted stuffs */ g_strstrip (line); g_strdelimit (line, " \t", ' '); util_remove_comment (line); /* skip if not source code */ if (!line[0] || line[0] == ';') { g_free (line); continue; } sl = asm_source_entry_new (line, i); if (!sl) { asm_err_comm_send (0, _("Assembling Aborted"), ASM_ERR_MESSAGE); return FALSE; } asm_source_add_to_table (self, sl); g_free (line); } return TRUE; } /* str is stripped to maximum. only spaces and commas */ AsmSourceEntry * asm_source_entry_new (gchar * str, gint line_no) { AsmSourceEntry *entry = NULL; AsmTokenizer *tokenizer; gchar *nstr = NULL; IdOpcode *id_opcode; IdPseudo *id_pseudo; gboolean need_operand = FALSE; #define SEND_ERR(errstr) \ { \ asm_err_comm_send (line_no + 1, errstr, ASM_ERR_ERROR); \ entry = NULL; \ goto CLEAN_UP; \ } #define GET_TK(del, asrt) \ g_free (nstr); \ nstr = asm_tokenizer_next (tokenizer, del); \ if ( asrt ) \ g_assert (nstr); \ \ /* assert */ g_assert (str); g_assert (line_no >= 0); /* create */ entry = g_malloc (sizeof (AsmSourceEntry)); g_assert (entry); entry->listing_buffer_line_no = line_no; entry->s_id[0] = '\0'; entry->s_opnd[0] = '\0'; entry->s_op_id_opcode = NULL; entry->s_op_id_pseudo = NULL; tokenizer = asm_tokenizer_new (str); g_assert (tokenizer); /* ready */ asm_tokenizer_ready (tokenizer); GET_TK (' ', 1); /* if label */ if (nstr[strlen (nstr) - 1] == ':') { nstr[strlen (nstr) - 1] = '\0'; g_stpcpy (entry->s_id, nstr); GET_TK (' ', 0); if (nstr == NULL) { SEND_ERR (_("Label should be given to a code line")); } } /* this must be a op */ id_pseudo = asm_id_pseudo_lookup (nstr); if (id_pseudo) { /* pseudo */ entry->s_op = id_pseudo->op_num; entry->s_op_id_pseudo = id_pseudo; entry->s_opnd_size = id_pseudo->user_args; if (id_pseudo->user_args) need_operand = TRUE; } else if (id_opcode = asm_id_opcode_lookup (nstr, NULL, NULL), id_opcode) { /* opcode */ if (id_opcode->num_args) { /* need args for complete op info */ gchar *arg1, *arg2 = NULL; /* get first before comma */ arg1 = asm_tokenizer_next (tokenizer, ','); if (!arg1) SEND_ERR (_("Incomplete opcode")); if (id_opcode->num_args == 2) { arg2 = asm_tokenizer_next (tokenizer, ' '); /* last stuff */ if (!arg2) SEND_ERR (_("Incomplete opcode")); } id_opcode = asm_id_opcode_lookup (nstr, arg1, arg2); if (!id_opcode) { SEND_ERR (_("Incomplete opcode")); } } entry->s_op = id_opcode->op_num; entry->s_op_id_opcode = id_opcode; entry->s_opnd_size = id_opcode->user_args; entry->b_op = id_opcode->op_num; if (id_opcode->user_args) need_operand = TRUE; } else { /* debug */ g_print (_("\nNeither Op not PsOp: [%s]"), nstr); SEND_ERR (_("Invalid Opcode or Pseudo op")); } /* assign remaining as operand */ if (need_operand) { GET_TK (' ', 0); if (nstr == NULL) { SEND_ERR (_("Opcode needs an user argument")); } g_stpcpy (entry->s_opnd, nstr); } /* if any extra str */ GET_TK (' ', 0); if (nstr) SEND_ERR (_("Extra characters in line")); CLEAN_UP: g_free (nstr); asm_tokenizer_destroy (tokenizer); return entry; } /* returns the ds */ AsmSource * asm_source_new (const gchar * text) { AsmSource *as; g_assert (text); as = g_malloc (sizeof (AsmSource)); g_assert (as); /* init data */ as->listing_buffer_total = 0; as->entries_total = 0; /* create listing */ asm_source_create_listing_buffer (as, text); /* parse */ if (!asm_source_parse_from_listing (as)) return FALSE; return as; } void asm_source_entry_destroy (AsmSourceEntry * entry) { g_return_if_fail (entry); //g_free ( entry->s_id ); //g_free ( entry->s_opnd ); g_free (entry); } void asm_source_destroy (AsmSource * src) { int i = 0; g_return_if_fail (src); for (i = 0; i < src->listing_buffer_total; i++) { g_string_free (src->listing_buffer[i], TRUE); } for (i = 0; i < src->entries_total; i++) { asm_source_entry_destroy (src->entries[i]); } g_free (src); } static gboolean asm_util_str_to_int (gchar * str, gint * value, int base) { gchar *err = ""; *value = strtol (str, &err, base); if (strlen (err)) return FALSE; return TRUE; } gboolean asm_util_parse_number (gchar * str, gint * value) { g_assert (str); if (!g_ascii_isdigit (str[0])) return FALSE; if (str[strlen (str) - 1] == 'h' || str[strlen (str) - 1] == 'H') { str[strlen (str) - 1] = '\0'; return asm_util_str_to_int (str, value, 16); } if (str[strlen (str) -1] == 'b' || str[strlen (str) - 1] == 'B') { str[strlen (str) - 1] = '\0'; return asm_util_str_to_int (str,value, 2); } if (str[strlen (str) - 1] == 'o' || str[strlen (str) - 1] == 'O') { str[strlen (str) - 1] = '\0'; return asm_util_str_to_int (str, value, 8); } return asm_util_str_to_int (str, value, 10); } static gboolean util_symbol_validate_and_get_num_after_sign (gchar * str, gint * val) { gchar *p; g_assert (str); g_assert (*str); g_assert (val); *val = 0; p = str; while (*p && !(*p == '+' || *p == '-')) p++; if (*p == '\0') return TRUE; if (!asm_util_parse_number (p + 1, val)) return FALSE; if (*p == '-') { *val *= -1; } *p = '\0'; return TRUE; } gboolean asm_source_entry_parse_not_operand_but_this (AsmSourceEntry * entry, gint * value, gchar * symbol) { //gchar *symbol; //g_assert (entry); //g_return_val_if_fail (entry->s_opnd, FALSE); g_assert (symbol); g_assert (value); //symbol = entry->s_opnd; g_assert (symbol[0]); if (g_ascii_isdigit (symbol[0])) { /* absolute number in some base */ return asm_util_parse_number (symbol, value); } else { /* should be a symbol */ AsmSymEntry *sym; gchar *good_sym; gint val; good_sym = g_strdup (symbol); if (!util_symbol_validate_and_get_num_after_sign (good_sym, &val)) { if (entry) { asm_err_comm_send (entry-> listing_buffer_line_no+1, _("Expression error in symbol"), ASM_ERR_ERROR); } return FALSE; } sym = asm_sym_query (good_sym); if (!sym) { if (entry) { asm_err_comm_send (entry-> listing_buffer_line_no+1, _("Undefined symbol"), ASM_ERR_ERROR); } return FALSE; } // This code is disabled to fix the bug #1683342 // See http://lustymonk.livejournal.com/1997.html /* if (sym->data == NULL) return FALSE;*/ *value = GPOINTER_TO_INT (sym->data) + val; return TRUE; } g_assert_not_reached (); return FALSE; } gboolean asm_source_entry_parse_operand (AsmSourceEntry * entry, gint * value) { g_assert (entry); return asm_source_entry_parse_not_operand_but_this (entry, value, entry->s_opnd); } static gint asm_util_no_of_occr (gchar * str, gchar c) { gchar *p = str; gint cnt = 0; g_assert (str); while (*p) { if (*p == c) cnt++; p++; } return cnt; } gboolean asm_source_entry_get_size (AsmSourceEntry * entry, gint * size) { g_assert (entry); g_assert (size); *size = 0; if (entry->s_op < 256) /* opcode */ { *size = entry->s_opnd_size + 1; return TRUE; } else /* pseudo op */ { if (entry->s_op == ID_PSEUDO_DB) { if (entry->s_opnd == NULL) *size = 0; else *size = asm_util_no_of_occr (entry->s_opnd, ',') + 1; } else if (entry->s_op == ID_PSEUDO_DS) { if (entry->s_opnd == NULL) *size = 0; else { //asm_util_parse_number ( entry->s_opnd, size); asm_source_entry_parse_operand (entry, size); } } return TRUE; } g_assert_not_reached (); return FALSE; } gnusim8085-1.4.1/src/interface.c0000644000175000017500000017375313326665347016156 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "callbacks.h" #include "config.h" #include "interface.h" #include "support.h" #define GLADE_HOOKUP_OBJECT(component,widget,name) \ g_object_set_data_full (G_OBJECT (component), name, \ g_object_ref (widget), (GDestroyNotify) g_object_unref) #define GLADE_HOOKUP_ACTION_OBJECT(component,widget,name) \ g_object_set_data_full (G_OBJECT (component), name, \ g_object_ref (widget), (GDestroyNotify) g_object_unref) #define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \ g_object_set_data (G_OBJECT (component), name, widget) static const GtkActionEntry entries[] = { { "FileMenu", NULL, N_("_File") }, { "ResetMenu", NULL, N_("_Reset") }, { "AssemblerMenu", NULL, N_("_Assembler") }, { "DebugMenu", NULL, N_("_Debug") }, { "BreakPointMenu", NULL, N_("_Breakpoints") }, { "HelpMenu", NULL, N_("_Help") }, { "New", GTK_STOCK_NEW, NULL, NULL, N_("New source file"), G_CALLBACK(on_new1_activate) }, { "Open", GTK_STOCK_OPEN, NULL, NULL, N_("Open a file"), G_CALLBACK(on_open1_activate) }, { "Save", GTK_STOCK_SAVE, NULL, NULL, N_("Save file"), G_CALLBACK(on_save1_activate) }, { "SaveAs", GTK_STOCK_SAVE_AS, NULL, "S", N_("Save file as"), G_CALLBACK(on_save_as1_activate) }, { "Print", GTK_STOCK_PRINT, NULL, "P", N_("Print program"), G_CALLBACK(on_print_activate) }, { "Font", GTK_STOCK_SELECT_FONT, NULL, "f", N_("Select font"), G_CALLBACK(on_font_select_activate) }, { "Quit", GTK_STOCK_QUIT, NULL, NULL, NULL, G_CALLBACK(on_quit1_activate) }, { "Registers", NULL, N_("_Registers"), NULL, N_("Reset Registers"), G_CALLBACK(on_registers1_activate) }, { "Flags", NULL, N_("_Flags"), NULL, N_("Reset Flags"), G_CALLBACK(on_flags1_activate) }, { "IOPorts", NULL, N_("_IO Ports"), NULL, N_("Reset IO Ports"), G_CALLBACK(on_io_ports1_activate) }, { "Memory", NULL, N_("_Memory"), NULL, N_("Reset Memory"), G_CALLBACK(on_main_memory1_activate) }, { "ResetAll", GTK_STOCK_REFRESH, N_("Reset _All"), "R", N_("Reset All"), G_CALLBACK(on_reset_all1_activate) }, { "Assemble", GTK_STOCK_CONVERT, N_("A_ssemble"), "F8", N_("Only assemble program"), G_CALLBACK(on_assemble1_activate) }, { "Execute", GTK_STOCK_EXECUTE, NULL, "F9", N_("Execute assembled and loaded program"), G_CALLBACK(on_execute1_activate) }, { "Listing", GTK_STOCK_EDIT, N_("Show _listing"), "L", N_("Show the source code along with opcodes and operands in hex numbers"), G_CALLBACK(on_show_listing1_activate) }, { "StepIn", GTK_STOCK_GO_FORWARD, N_("Step _in"), "F5", N_("Step in the code"), G_CALLBACK(on_step_in1_activate) }, { "StepOver", GTK_STOCK_GO_UP, N_("Step o_ver"), "F6", N_("Step over the code without calling functions"), G_CALLBACK(on_step_over1_activate) }, { "StepOut", GTK_STOCK_GO_BACK, N_("Step _out"), "F7", N_("Step out of the current function"), G_CALLBACK(on_step_out1_activate) }, { "ToggleBreak", GTK_STOCK_MEDIA_RECORD, N_("Toggle _breakpoint"), "B", N_("Toggles breakpoint at current line"), G_CALLBACK(on_toggle_breakpoint1_activate) }, { "ClearBreak", NULL, N_("_Clear all breakpoints"), "B", N_("Remove all breakpoints"), G_CALLBACK(on_clear_all_breakpoints1_activate) }, { "StopExec", GTK_STOCK_STOP, N_("Stop execution"), NULL, N_("Stop debugging"), G_CALLBACK(on_stop_execution1_activate) }, { "Help", GTK_STOCK_HELP, N_("_Contents"), "F1", NULL, G_CALLBACK(on_help_activate) }, { "Tutorial", GTK_STOCK_DIALOG_INFO, N_("Assembler _Tutorial"), "T", NULL, G_CALLBACK(on_assembler_tutorial1_activate) }, { "About", GTK_STOCK_ABOUT, NULL, NULL, NULL, G_CALLBACK(on_about1_activate) } }; static const GtkToggleActionEntry toggle_entries[] = { { "SidePane", GTK_STOCK_FULLSCREEN, NULL, NULL, N_("Show/Hide side pane"), G_CALLBACK (show_hide_side_pane) } }; static const char *ui_description = "" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " ""; GtkWidget* create_window_main (void) { GtkWidget *window_main; GdkPixbuf *window_main_icon_pixbuf; GtkWidget *vbox_main; GtkWidget *menubar1; GtkWidget *toolbar1; GtkWidget *hbox_main; GtkWidget *vbox_left; GtkWidget *hbox15; GtkWidget *frame_registers; GtkWidget *table_registers; GtkWidget *label107; GtkWidget *label108; GtkWidget *label109; GtkWidget *label110; GtkWidget *label111; GtkWidget *label112; GtkWidget *label113; GtkWidget *main_reg_a; GtkWidget *main_reg_b; GtkWidget *main_reg_c; GtkWidget *main_reg_d; GtkWidget *main_reg_e; GtkWidget *main_reg_h; GtkWidget *main_reg_l; GtkWidget *main_reg_pswh; GtkWidget *main_reg_pswl; GtkWidget *main_reg_pch; GtkWidget *main_reg_pcl; GtkWidget *main_reg_sph; GtkWidget *main_reg_spl; GtkWidget *main_reg_int_reg; GtkWidget *label106; GtkWidget *label96; GtkWidget *frame_flags; GtkWidget *table_flags; GtkWidget *label129; GtkWidget *label130; GtkWidget *label131; GtkWidget *label132; GtkWidget *label133; GtkWidget *main_flag_s; GtkWidget *main_flag_z; GtkWidget *main_flag_ac; GtkWidget *main_flag_p; GtkWidget *main_flag_c; GtkWidget *label163; GtkWidget *frame_dec_hex; GtkWidget *hbox29; GtkWidget *vbox13; GtkWidget *label154; GtkWidget *main_entry_dec; GtkWidget *main_but_to_hex; GtkWidget *vbox14; GtkWidget *label155; GtkWidget *main_entry_hex; GtkWidget *main_but_to_dec; GtkWidget *hbox38; GtkWidget *image369; GtkWidget *label153; GtkWidget *frame_io_ports; GtkWidget *vbox11; GtkWidget *hbox13; GtkWidget *main_io_spin; GtkWidget *main_io_entry; GtkWidget *main_io_update; GtkWidget *hbox36; GtkWidget *image367; GtkWidget *label164; GtkWidget *frame_memory; GtkWidget *vbox12; GtkWidget *hbox14; GtkWidget *main_mem_spin; GtkWidget *main_mem_entry; GtkWidget *main_mem_update; GtkWidget *hbox37; GtkWidget *image368; GtkWidget *label165; GtkWidget *vbox_data; GtkWidget *main_vbox_center; GtkWidget *hbox24; GtkWidget *label147; GtkWidget *main_entry_sa; GtkWidget *notebook5; GtkWidget *main_data_scroll; GtkWidget *hbox25; GtkWidget *image232; GtkWidget *label148; GtkWidget *main_stack_scroll; GtkWidget *hbox26; GtkWidget *image233; GtkWidget *label149; GtkWidget *main_keypad_scroll; GtkWidget *hbox40; GtkWidget *image371; GtkWidget *label168; GtkWidget *main_progressbar; GtkWidget *main_statusbar; GtkWidget *status_box; GtkWidget *main_memory_scroll; GtkWidget *vbox19; GtkWidget *hbox48; GtkWidget *label179; GtkWidget *mem_list_start; GtkWidget *button12; GtkWidget *main_io_scroll; GtkWidget *vbox20; GtkWidget *hbox49; GtkWidget *label182; GtkWidget *io_list_start; GtkWidget *button13; GtkActionGroup *action_group; GtkUIManager *ui_manager; GtkAccelGroup *accel_group; GError *error; window_main = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window_main), _("GNUSim8085 - 8085 Microprocessor Simulator")); gtk_window_set_position (GTK_WINDOW (window_main), GTK_WIN_POS_CENTER); gtk_window_set_default_size (GTK_WINDOW (window_main), 500, 400); window_main_icon_pixbuf = create_pixbuf ("gnusim8085.svg"); if (!window_main_icon_pixbuf) window_main_icon_pixbuf = create_pixbuf ("gnusim8085.ico"); if (window_main_icon_pixbuf) { gtk_window_set_icon (GTK_WINDOW (window_main), window_main_icon_pixbuf); g_object_unref (window_main_icon_pixbuf); } vbox_main = VBOX (0); gtk_widget_show (vbox_main); gtk_container_add (GTK_CONTAINER (window_main), vbox_main); action_group = gtk_action_group_new ("MenuActions"); gtk_action_group_set_translation_domain (action_group, NULL); gtk_action_group_add_actions (action_group, entries, G_N_ELEMENTS (entries), window_main); gtk_action_group_add_toggle_actions (action_group, toggle_entries, G_N_ELEMENTS (toggle_entries), window_main); ui_manager = gtk_ui_manager_new (); gtk_ui_manager_insert_action_group (ui_manager, action_group, 0); accel_group = gtk_ui_manager_get_accel_group (ui_manager); gtk_window_add_accel_group (GTK_WINDOW (window_main), accel_group); error = NULL; if (!gtk_ui_manager_add_ui_from_string (ui_manager, ui_description, -1, &error)) { g_message ("building menus failed: %s", error->message); g_error_free (error); exit (-1); // EXIT_FAILURE); } menubar1 = gtk_ui_manager_get_widget (ui_manager, "/MainMenu"); gtk_box_pack_start (GTK_BOX (vbox_main), menubar1, FALSE, FALSE, 0); gtk_widget_show (menubar1); toolbar1 = gtk_ui_manager_get_widget (ui_manager, "/MainToolBar"); gtk_widget_show (toolbar1); gtk_box_pack_start (GTK_BOX (vbox_main), toolbar1, FALSE, FALSE, 0); gtk_toolbar_set_style (GTK_TOOLBAR (toolbar1), GTK_TOOLBAR_ICONS); hbox_main = HBOX (0); gtk_widget_show (hbox_main); gtk_box_pack_start (GTK_BOX (vbox_main), hbox_main, TRUE, TRUE, 0); vbox_left = VBOX (0); gtk_widget_show (vbox_left); gtk_box_pack_start (GTK_BOX (hbox_main), vbox_left, FALSE, FALSE, 0); hbox15 = HBOX (0); gtk_widget_show (hbox15); gtk_box_pack_start (GTK_BOX (vbox_left), hbox15, FALSE, FALSE, 0); frame_registers = gtk_frame_new (NULL); gtk_widget_show (frame_registers); gtk_box_pack_start (GTK_BOX (hbox15), frame_registers, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame_registers), 5); table_registers = gtk_grid_new (); gtk_grid_set_column_homogeneous (GTK_GRID (table_registers), TRUE); gtk_grid_set_row_homogeneous (GTK_GRID (table_registers), TRUE); gtk_widget_show (table_registers); gtk_container_add (GTK_CONTAINER (frame_registers), table_registers); gtk_container_set_border_width (GTK_CONTAINER (table_registers), 5); TABLE_SET_ROW_SPACING (table_registers, 10); TABLE_SET_COLUMN_SPACING (table_registers, 6); label107 = gtk_label_new ("BC"); gtk_widget_show (label107); TABLE_ATTACH (table_registers, label107, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0); gtk_label_set_use_markup (GTK_LABEL (label107), TRUE); label108 = gtk_label_new ("DE"); gtk_widget_show (label108); TABLE_ATTACH (table_registers, label108, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0); gtk_label_set_use_markup (GTK_LABEL (label108), TRUE); label109 = gtk_label_new ("HL"); gtk_widget_show (label109); TABLE_ATTACH (table_registers, label109, 0, 1, 3, 4, GTK_FILL, GTK_FILL, 0, 0); gtk_label_set_use_markup (GTK_LABEL (label109), TRUE); label110 = gtk_label_new ("PSW"); gtk_widget_show (label110); TABLE_ATTACH (table_registers, label110, 0, 1, 4, 5, GTK_FILL, GTK_FILL, 0, 0); gtk_label_set_use_markup (GTK_LABEL (label110), TRUE); label111 = gtk_label_new ("PC"); gtk_widget_show (label111); TABLE_ATTACH (table_registers, label111, 0, 1, 5, 6, GTK_FILL, GTK_FILL, 0, 0); gtk_label_set_use_markup (GTK_LABEL (label111), TRUE); label112 = gtk_label_new ("SP"); gtk_widget_show (label112); TABLE_ATTACH (table_registers, label112, 0, 1, 6, 7, GTK_FILL, GTK_FILL, 0, 0); gtk_label_set_use_markup (GTK_LABEL (label112), TRUE); label113 = gtk_label_new ("Int-Reg"); gtk_widget_show (label113); TABLE_ATTACH (table_registers, label113, 0, 1, 7, 8, GTK_FILL, GTK_FILL, 0, 0); gtk_label_set_use_markup (GTK_LABEL (label113), TRUE); main_reg_a = gtk_label_new ("00"); gtk_widget_show (main_reg_a); TABLE_ATTACH (table_registers, main_reg_a, 1, 3, 0, 1, GTK_FILL, GTK_FILL, 0, 0); main_reg_b = gtk_label_new ("00"); gtk_widget_show (main_reg_b); TABLE_ATTACH (table_registers, main_reg_b, 1, 2, 1, 2, GTK_FILL, GTK_FILL, 0, 0); main_reg_c = gtk_label_new ("00"); gtk_widget_show (main_reg_c); TABLE_ATTACH (table_registers, main_reg_c, 2, 3, 1, 2, GTK_FILL, GTK_FILL, 0, 0); main_reg_d = gtk_label_new ("00"); gtk_widget_show (main_reg_d); TABLE_ATTACH (table_registers, main_reg_d, 1, 2, 2, 3, GTK_FILL, GTK_FILL, 0, 0); main_reg_e = gtk_label_new ("00"); gtk_widget_show (main_reg_e); TABLE_ATTACH (table_registers, main_reg_e, 2, 3, 2, 3, GTK_FILL, GTK_FILL, 0, 0); main_reg_h = gtk_label_new ("00"); gtk_widget_show (main_reg_h); TABLE_ATTACH (table_registers, main_reg_h, 1, 2, 3, 4, GTK_FILL, GTK_FILL, 0, 0); main_reg_l = gtk_label_new ("00"); gtk_widget_show (main_reg_l); TABLE_ATTACH (table_registers, main_reg_l, 2, 3, 3, 4, GTK_FILL, GTK_FILL, 0, 0); main_reg_pswh = gtk_label_new ("00"); gtk_widget_show (main_reg_pswh); TABLE_ATTACH (table_registers, main_reg_pswh, 1, 2, 4, 5, GTK_FILL, GTK_FILL, 0, 0); main_reg_pswl = gtk_label_new ("00"); gtk_widget_show (main_reg_pswl); TABLE_ATTACH (table_registers, main_reg_pswl, 2, 3, 4, 5, GTK_FILL, GTK_FILL, 0, 0); main_reg_pch = gtk_label_new ("00"); gtk_widget_show (main_reg_pch); TABLE_ATTACH (table_registers, main_reg_pch, 1, 2, 5, 6, GTK_FILL, GTK_FILL, 0, 0); main_reg_pcl = gtk_label_new ("00"); gtk_widget_show (main_reg_pcl); TABLE_ATTACH (table_registers, main_reg_pcl, 2, 3, 5, 6, GTK_FILL, GTK_FILL, 0, 0); main_reg_sph = gtk_label_new ("00"); gtk_widget_show (main_reg_sph); TABLE_ATTACH (table_registers, main_reg_sph, 1, 2, 6, 7, GTK_FILL, GTK_FILL, 0, 0); main_reg_spl = gtk_label_new ("00"); gtk_widget_show (main_reg_spl); TABLE_ATTACH (table_registers, main_reg_spl, 2, 3, 6, 7, GTK_FILL, GTK_FILL, 0, 0); main_reg_int_reg = gtk_label_new ("00"); gtk_widget_show (main_reg_int_reg); TABLE_ATTACH (table_registers, main_reg_int_reg, 1, 3, 7, 8, GTK_FILL, GTK_FILL, 0, 0); label106 = gtk_label_new ("A"); gtk_widget_show (label106); TABLE_ATTACH (table_registers, label106, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0); gtk_label_set_use_markup (GTK_LABEL (label106), TRUE); label96 = gtk_label_new (g_strconcat("", _("Registers"), "", NULL)); gtk_widget_show (label96); gtk_label_set_use_markup (GTK_LABEL (label96), TRUE); gtk_label_set_justify (GTK_LABEL (label96), GTK_JUSTIFY_LEFT); gtk_frame_set_label_widget (GTK_FRAME (frame_registers), label96); frame_flags = gtk_frame_new (NULL); gtk_widget_show (frame_flags); gtk_box_pack_start (GTK_BOX (hbox15), frame_flags, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame_flags), 5); table_flags = gtk_grid_new (); gtk_grid_set_column_homogeneous (GTK_GRID (table_flags), TRUE); gtk_grid_set_row_homogeneous (GTK_GRID (table_flags), TRUE); gtk_widget_show (table_flags); gtk_container_add (GTK_CONTAINER (frame_flags), table_flags); gtk_container_set_border_width (GTK_CONTAINER (table_flags), 5); TABLE_SET_ROW_SPACING (table_flags, 10); TABLE_SET_COLUMN_SPACING (table_flags, 5); label129 = gtk_label_new ("S"); gtk_widget_show (label129); TABLE_ATTACH (table_flags, label129, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0); gtk_label_set_use_markup (GTK_LABEL (label129), TRUE); label130 = gtk_label_new ("Z"); gtk_widget_show (label130); TABLE_ATTACH (table_flags, label130, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0); gtk_label_set_use_markup (GTK_LABEL (label130), TRUE); label131 = gtk_label_new ("AC"); gtk_widget_show (label131); TABLE_ATTACH (table_flags, label131, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0); gtk_label_set_use_markup (GTK_LABEL (label131), TRUE); label132 = gtk_label_new ("P"); gtk_widget_show (label132); TABLE_ATTACH (table_flags, label132, 0, 1, 3, 4, GTK_FILL, GTK_FILL, 0, 0); gtk_label_set_use_markup (GTK_LABEL (label132), TRUE); label133 = gtk_label_new ("C"); gtk_widget_show (label133); TABLE_ATTACH (table_flags, label133, 0, 1, 4, 5, GTK_FILL, GTK_FILL, 0, 0); gtk_label_set_use_markup (GTK_LABEL (label133), TRUE); main_flag_s = gtk_label_new ("0"); gtk_widget_show (main_flag_s); TABLE_ATTACH (table_flags, main_flag_s, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 0, 0); main_flag_z = gtk_label_new ("0"); gtk_widget_show (main_flag_z); TABLE_ATTACH (table_flags, main_flag_z, 1, 2, 1, 2, GTK_FILL, GTK_FILL, 0, 0); main_flag_ac = gtk_label_new ("0"); gtk_widget_show (main_flag_ac); TABLE_ATTACH (table_flags, main_flag_ac, 1, 2, 2, 3, GTK_FILL, GTK_FILL, 0, 0); main_flag_p = gtk_label_new ("0"); gtk_widget_show (main_flag_p); TABLE_ATTACH (table_flags, main_flag_p, 1, 2, 3, 4, GTK_FILL, GTK_FILL, 0, 0); main_flag_c = gtk_label_new ("0"); gtk_widget_show (main_flag_c); TABLE_ATTACH (table_flags, main_flag_c, 1, 2, 4, 5, GTK_FILL, GTK_FILL, 0, 0); label163 = gtk_label_new (g_strconcat("", _("Flag"), "", NULL)); gtk_widget_show (label163); gtk_label_set_use_markup (GTK_LABEL (label163), TRUE); gtk_label_set_justify (GTK_LABEL (label163), GTK_JUSTIFY_LEFT); gtk_frame_set_label_widget (GTK_FRAME (frame_flags), label163); frame_dec_hex = gtk_frame_new (NULL); gtk_widget_show (frame_dec_hex); gtk_box_pack_start (GTK_BOX (vbox_left), frame_dec_hex, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame_dec_hex), 5); hbox29 = HBOX (0); gtk_widget_show (hbox29); gtk_container_add (GTK_CONTAINER (frame_dec_hex), hbox29); vbox13 = VBOX (5); gtk_widget_show (vbox13); gtk_box_pack_start (GTK_BOX (hbox29), vbox13, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (vbox13), 5); label154 = gtk_label_new (_("Decimal")); gtk_widget_show (label154); gtk_box_pack_start (GTK_BOX (vbox13), label154, FALSE, FALSE, 0); gtk_label_set_justify (GTK_LABEL (label154), GTK_JUSTIFY_LEFT); main_entry_dec = gtk_entry_new (); gtk_widget_show (main_entry_dec); gtk_box_pack_start (GTK_BOX (vbox13), main_entry_dec, FALSE, FALSE, 0); gtk_entry_set_width_chars (GTK_ENTRY (main_entry_dec), 12); gtk_widget_set_tooltip_text (main_entry_dec, _("Enter a decimal number")); gtk_entry_set_text (GTK_ENTRY (main_entry_dec), "0"); main_but_to_hex = button_from_stock_img_custom_label (_("To Hex"), IMG_STOCK_GO_FORWARD); gtk_widget_show (main_but_to_hex); gtk_box_pack_start (GTK_BOX (vbox13), main_but_to_hex, FALSE, FALSE, 0); gtk_widget_set_tooltip_text (main_but_to_hex, _("Convert this number to hexadecimal")); vbox14 = VBOX (5); gtk_widget_show (vbox14); gtk_box_pack_start (GTK_BOX (hbox29), vbox14, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (vbox14), 5); label155 = gtk_label_new (_("Hex")); gtk_widget_show (label155); gtk_box_pack_start (GTK_BOX (vbox14), label155, FALSE, FALSE, 0); gtk_label_set_justify (GTK_LABEL (label155), GTK_JUSTIFY_LEFT); main_entry_hex = gtk_entry_new (); gtk_widget_show (main_entry_hex); gtk_box_pack_start (GTK_BOX (vbox14), main_entry_hex, FALSE, FALSE, 0); gtk_entry_set_width_chars (GTK_ENTRY (main_entry_hex), 12); gtk_widget_set_tooltip_text (main_entry_hex, _("Enter a hexadecimal number")); gtk_entry_set_text (GTK_ENTRY (main_entry_hex), "0"); main_but_to_dec = button_from_stock_img_custom_label (_("To Dec"), IMG_STOCK_GO_BACK); gtk_widget_show (main_but_to_dec); gtk_box_pack_start (GTK_BOX (vbox14), main_but_to_dec, FALSE, FALSE, 0); gtk_widget_set_tooltip_text (main_but_to_dec, _("Convert this number to decimal")); hbox38 = HBOX (5); gtk_widget_show (hbox38); gtk_frame_set_label_widget (GTK_FRAME (frame_dec_hex), hbox38); image369 = IMAGE_FROM_STOCK (IMG_STOCK_DIALOG_INFO, GTK_ICON_SIZE_BUTTON); gtk_widget_show (image369); gtk_box_pack_start (GTK_BOX (hbox38), image369, FALSE, FALSE, 0); label153 = gtk_label_new (g_strconcat("", _("Decimal - Hex Convertion"), "", NULL)); gtk_widget_show (label153); gtk_box_pack_start (GTK_BOX (hbox38), label153, FALSE, FALSE, 0); gtk_label_set_use_markup (GTK_LABEL (label153), TRUE); gtk_label_set_justify (GTK_LABEL (label153), GTK_JUSTIFY_LEFT); frame_io_ports = gtk_frame_new (NULL); gtk_widget_show (frame_io_ports); gtk_box_pack_start (GTK_BOX (vbox_left), frame_io_ports, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame_io_ports), 5); vbox11 = VBOX (5); gtk_widget_show (vbox11); gtk_container_add (GTK_CONTAINER (frame_io_ports), vbox11); gtk_container_set_border_width (GTK_CONTAINER (vbox11), 5); hbox13 = HBOX (5); gtk_widget_show (hbox13); gtk_box_pack_start (GTK_BOX (vbox11), hbox13, FALSE, FALSE, 0); main_io_spin = gtk_spin_button_new_with_range (0, 255, 1); gtk_widget_show (main_io_spin); gtk_box_pack_start (GTK_BOX (hbox13), main_io_spin, FALSE, FALSE, 0); gtk_entry_set_width_chars (GTK_ENTRY (main_io_spin), 5); gtk_widget_set_tooltip_text (main_io_spin, _("Change the port address to view here")); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (main_io_spin), TRUE); gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (main_io_spin), TRUE); main_io_entry = gtk_entry_new (); gtk_widget_show (main_io_entry); gtk_box_pack_start (GTK_BOX (hbox13), main_io_entry, FALSE, FALSE, 0); gtk_widget_set_tooltip_text (main_io_entry, _("Enter new port value and click Update")); gtk_entry_set_text (GTK_ENTRY (main_io_entry), "0"); gtk_entry_set_width_chars (GTK_ENTRY (main_io_entry), 12); main_io_update = button_from_stock_img_custom_label (_("Update Port Value"), IMG_STOCK_REFRESH); gtk_widget_show (main_io_update); gtk_box_pack_start (GTK_BOX (vbox11), main_io_update, FALSE, FALSE, 0); gtk_widget_set_tooltip_text (main_io_update, _("Update the port value")); hbox36 = HBOX (5); gtk_widget_show (hbox36); gtk_frame_set_label_widget (GTK_FRAME (frame_io_ports), hbox36); image367 = IMAGE_FROM_STOCK (IMG_STOCK_JUSTIFY_FILL, GTK_ICON_SIZE_BUTTON); gtk_widget_show (image367); gtk_box_pack_start (GTK_BOX (hbox36), image367, FALSE, FALSE, 0); label164 = gtk_label_new (g_strconcat("", _("I/O Ports"), "", NULL)); gtk_widget_show (label164); gtk_box_pack_start (GTK_BOX (hbox36), label164, FALSE, FALSE, 0); gtk_label_set_use_markup (GTK_LABEL (label164), TRUE); gtk_label_set_justify (GTK_LABEL (label164), GTK_JUSTIFY_LEFT); frame_memory = gtk_frame_new (NULL); gtk_widget_show (frame_memory); gtk_box_pack_start (GTK_BOX (vbox_left), frame_memory, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame_memory), 5); vbox12 = VBOX (5); gtk_widget_show (vbox12); gtk_container_add (GTK_CONTAINER (frame_memory), vbox12); gtk_container_set_border_width (GTK_CONTAINER (vbox12), 5); hbox14 = HBOX (5); gtk_widget_show (hbox14); gtk_box_pack_start (GTK_BOX (vbox12), hbox14, FALSE, FALSE, 0); main_mem_spin = gtk_spin_button_new_with_range (0, 65535, 1); gtk_widget_show (main_mem_spin); gtk_box_pack_start (GTK_BOX (hbox14), main_mem_spin, FALSE, FALSE, 0); gtk_entry_set_width_chars (GTK_ENTRY (main_mem_spin), 5); gtk_widget_set_tooltip_text (main_mem_spin, _("Change the memory location to view here")); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (main_mem_spin), TRUE); gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (main_mem_spin), TRUE); main_mem_entry = gtk_entry_new (); gtk_widget_show (main_mem_entry); gtk_box_pack_start (GTK_BOX (hbox14), main_mem_entry, FALSE, FALSE, 0); gtk_widget_set_tooltip_text (main_mem_entry, _("Edit new value and click Update")); gtk_entry_set_text (GTK_ENTRY (main_mem_entry), "0"); gtk_entry_set_width_chars (GTK_ENTRY (main_mem_entry), 12); main_mem_update = button_from_stock_img_custom_label (_("Update Memory"), IMG_STOCK_REFRESH); gtk_widget_show (main_mem_update); gtk_box_pack_start (GTK_BOX (vbox12), main_mem_update, FALSE, FALSE, 0); gtk_widget_set_tooltip_text (main_mem_update, _("Update the current memory location")); hbox37 = HBOX (5); gtk_widget_show (hbox37); gtk_frame_set_label_widget (GTK_FRAME (frame_memory), hbox37); image368 = IMAGE_FROM_STOCK (IMG_STOCK_JUSTIFY_FILL, GTK_ICON_SIZE_BUTTON); gtk_widget_show (image368); gtk_box_pack_start (GTK_BOX (hbox37), image368, FALSE, FALSE, 0); label165 = gtk_label_new (g_strconcat("", _("Memory"), "", NULL)); gtk_widget_show (label165); gtk_box_pack_start (GTK_BOX (hbox37), label165, FALSE, FALSE, 0); gtk_label_set_use_markup (GTK_LABEL (label165), TRUE); gtk_label_set_justify (GTK_LABEL (label165), GTK_JUSTIFY_LEFT); vbox_data = VBOX (0); gtk_widget_show (vbox_data); gtk_box_pack_end (GTK_BOX (hbox_main), vbox_data, FALSE, FALSE, 0); main_vbox_center = VBOX (0); gtk_widget_show (main_vbox_center); gtk_box_pack_start (GTK_BOX (hbox_main), main_vbox_center, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (main_vbox_center), 5); hbox24 = HBOX (0); gtk_widget_show (hbox24); gtk_box_pack_start (GTK_BOX (main_vbox_center), hbox24, FALSE, FALSE, 5); label147 = gtk_label_new (_("Load me at")); gtk_widget_show (label147); gtk_box_pack_start (GTK_BOX (hbox24), label147, FALSE, FALSE, 5); gtk_label_set_justify (GTK_LABEL (label147), GTK_JUSTIFY_LEFT); main_entry_sa = gtk_entry_new (); gtk_widget_show (main_entry_sa); gtk_box_pack_start (GTK_BOX (hbox24), main_entry_sa, TRUE, TRUE, 0); gtk_widget_set_tooltip_text (main_entry_sa, _("Enter the program address. End with a 'h' if it is a hex address.")); gtk_entry_set_max_length (GTK_ENTRY (main_entry_sa), 100); notebook5 = gtk_notebook_new (); gtk_widget_show (notebook5); gtk_box_pack_start (GTK_BOX (vbox_data), notebook5, TRUE, TRUE, 0); main_data_scroll = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (main_data_scroll); gtk_container_add (GTK_CONTAINER (notebook5), main_data_scroll); gtk_container_set_border_width (GTK_CONTAINER (main_data_scroll), 5); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (main_data_scroll), GTK_SHADOW_OUT); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (main_data_scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); hbox25 = HBOX (5); gtk_widget_show (hbox25); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook5), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook5), 0), hbox25); image232 = IMAGE_FROM_STOCK (IMG_STOCK_EXECUTE, GTK_ICON_SIZE_BUTTON); gtk_widget_show (image232); gtk_box_pack_start (GTK_BOX (hbox25), image232, TRUE, TRUE, 0); label148 = gtk_label_new (_("Data")); gtk_widget_show (label148); gtk_box_pack_start (GTK_BOX (hbox25), label148, FALSE, FALSE, 0); gtk_label_set_justify (GTK_LABEL (label148), GTK_JUSTIFY_LEFT); main_stack_scroll = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (main_stack_scroll); gtk_container_add (GTK_CONTAINER (notebook5), main_stack_scroll); gtk_container_set_border_width (GTK_CONTAINER (main_stack_scroll), 5); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (main_stack_scroll), GTK_SHADOW_OUT); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (main_stack_scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); hbox26 = HBOX (5); gtk_widget_show (hbox26); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook5), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook5), 1), hbox26); image233 = IMAGE_FROM_STOCK (IMG_STOCK_EXECUTE, GTK_ICON_SIZE_BUTTON); gtk_widget_show (image233); gtk_box_pack_start (GTK_BOX (hbox26), image233, TRUE, TRUE, 0); label149 = gtk_label_new (_("Stack")); gtk_widget_show (label149); gtk_box_pack_start (GTK_BOX (hbox26), label149, FALSE, FALSE, 0); gtk_label_set_justify (GTK_LABEL (label149), GTK_JUSTIFY_LEFT); main_keypad_scroll = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (main_keypad_scroll); gtk_container_add (GTK_CONTAINER (notebook5), main_keypad_scroll); gtk_container_set_border_width (GTK_CONTAINER (main_keypad_scroll), 5); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (main_keypad_scroll), GTK_SHADOW_OUT); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (main_keypad_scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); hbox40 = HBOX (5); gtk_widget_show (hbox40); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook5), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook5), 2), hbox40); image371 = IMAGE_FROM_STOCK (IMG_STOCK_KEYPAD, GTK_ICON_SIZE_BUTTON); gtk_widget_show (image371); gtk_box_pack_start (GTK_BOX (hbox40), image371, TRUE, TRUE, 0); label168 = gtk_label_new (_("KeyPad")); gtk_widget_show (label168); gtk_box_pack_start (GTK_BOX (hbox40), label168, FALSE, FALSE, 0); gtk_label_set_justify (GTK_LABEL (label168), GTK_JUSTIFY_LEFT); vbox19 = VBOX (5); gtk_widget_show (vbox19); gtk_container_add (GTK_CONTAINER (notebook5), vbox19); gtk_container_set_border_width (GTK_CONTAINER (vbox19), 5); gtk_notebook_set_tab_label_text (GTK_NOTEBOOK (notebook5), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook5), 3), _("Memory")); hbox48 = HBOX (3); gtk_widget_show (hbox48); gtk_box_pack_start (GTK_BOX (vbox19), hbox48, FALSE, TRUE, 0); label179 = gtk_label_new (_("Start")); gtk_widget_show (label179); gtk_box_pack_start (GTK_BOX (hbox48), label179, FALSE, FALSE, 3); mem_list_start = gtk_entry_new (); gtk_widget_show (mem_list_start); gtk_box_pack_start (GTK_BOX (hbox48), mem_list_start, TRUE, TRUE, 5); button12 = button_from_stock (LABEL_STOCK_OK, NULL); gtk_widget_show (button12); gtk_box_pack_start (GTK_BOX (hbox48), button12, FALSE, FALSE, 5); main_memory_scroll = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (main_memory_scroll); gtk_box_pack_start (GTK_BOX (vbox19), main_memory_scroll, TRUE, TRUE, 0); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (main_memory_scroll), GTK_SHADOW_OUT); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (main_memory_scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); vbox20 = VBOX (5); gtk_widget_show (vbox20); gtk_container_add (GTK_CONTAINER (notebook5), vbox20); gtk_container_set_border_width (GTK_CONTAINER (vbox20), 5); gtk_notebook_set_tab_label_text (GTK_NOTEBOOK (notebook5), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook5), 4), _("I/O Ports")); hbox49 = HBOX (3); gtk_widget_show (hbox49); gtk_box_pack_start (GTK_BOX (vbox20), hbox49, FALSE, TRUE, 0); label182 = gtk_label_new (_("Start")); gtk_widget_show (label182); gtk_box_pack_start (GTK_BOX (hbox49), label182, FALSE, FALSE, 3); io_list_start = gtk_entry_new (); gtk_widget_show (io_list_start); gtk_box_pack_start (GTK_BOX (hbox49), io_list_start, TRUE, TRUE, 5); button13 = button_from_stock (LABEL_STOCK_OK, NULL); gtk_widget_show (button13); gtk_box_pack_start (GTK_BOX (hbox49), button13, FALSE, FALSE, 5); main_io_scroll = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (main_io_scroll); gtk_box_pack_start (GTK_BOX (vbox20), main_io_scroll, TRUE, TRUE, 0); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (main_io_scroll), GTK_SHADOW_OUT); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (main_io_scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); main_progressbar = gtk_progress_bar_new(); main_statusbar = gtk_statusbar_new(); gtk_widget_show (main_progressbar); gtk_widget_show (main_statusbar); status_box = HBOX (2); gtk_widget_show (status_box); gtk_box_pack_end (GTK_BOX (vbox_main), status_box, FALSE, TRUE, 0); gtk_box_pack_start (GTK_BOX (status_box), main_progressbar, FALSE, TRUE, 2); gtk_box_pack_start (GTK_BOX (status_box), main_statusbar, TRUE, TRUE, 2); g_signal_connect ((gpointer) window_main, "delete_event", G_CALLBACK (on_window_main_delete_event), NULL); g_signal_connect ((gpointer) main_entry_dec, "activate", G_CALLBACK (on_main_entry_dec_activate), NULL); g_signal_connect ((gpointer) main_but_to_hex, "clicked", G_CALLBACK (on_main_but_to_hex_clicked), NULL); g_signal_connect ((gpointer) main_entry_hex, "activate", G_CALLBACK (on_main_entry_hex_activate), NULL); g_signal_connect ((gpointer) main_but_to_dec, "clicked", G_CALLBACK (on_main_but_to_dec_clicked), NULL); g_signal_connect ((gpointer) main_io_spin, "changed", G_CALLBACK (on_main_io_spin_changed), NULL); g_signal_connect ((gpointer) main_io_update, "clicked", G_CALLBACK (on_main_io_update_clicked), NULL); g_signal_connect ((gpointer) main_mem_spin, "changed", G_CALLBACK (on_main_mem_spin_changed), NULL); g_signal_connect ((gpointer) main_mem_update, "clicked", G_CALLBACK (on_main_mem_update_clicked), NULL); g_signal_connect ((gpointer) button12, "clicked", G_CALLBACK (on_mem_list_start_clicked), NULL); g_signal_connect ((gpointer) mem_list_start, "activate", G_CALLBACK (on_mem_list_start_changed), NULL); g_signal_connect ((gpointer) button13, "clicked", G_CALLBACK (on_io_list_start_clicked), NULL); g_signal_connect ((gpointer) io_list_start, "activate", G_CALLBACK (on_io_list_start_changed), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (window_main, window_main, "window_main"); GLADE_HOOKUP_OBJECT (window_main, vbox_main, "vbox_main"); GLADE_HOOKUP_OBJECT (window_main, menubar1, "menubar1"); GLADE_HOOKUP_OBJECT (window_main, toolbar1, "toolbar1"); GLADE_HOOKUP_OBJECT (window_main, hbox_main, "hbox_main"); GLADE_HOOKUP_OBJECT (window_main, vbox_left, "vbox_left"); GLADE_HOOKUP_OBJECT (window_main, hbox15, "hbox15"); GLADE_HOOKUP_OBJECT (window_main, frame_registers, "frame_registers"); GLADE_HOOKUP_OBJECT (window_main, table_registers, "table_registers"); GLADE_HOOKUP_OBJECT (window_main, label107, "label107"); GLADE_HOOKUP_OBJECT (window_main, label108, "label108"); GLADE_HOOKUP_OBJECT (window_main, label109, "label109"); GLADE_HOOKUP_OBJECT (window_main, label110, "label110"); GLADE_HOOKUP_OBJECT (window_main, label111, "label111"); GLADE_HOOKUP_OBJECT (window_main, label112, "label112"); GLADE_HOOKUP_OBJECT (window_main, label113, "label113"); GLADE_HOOKUP_OBJECT (window_main, main_reg_a, "main_reg_a"); GLADE_HOOKUP_OBJECT (window_main, main_reg_b, "main_reg_b"); GLADE_HOOKUP_OBJECT (window_main, main_reg_c, "main_reg_c"); GLADE_HOOKUP_OBJECT (window_main, main_reg_d, "main_reg_d"); GLADE_HOOKUP_OBJECT (window_main, main_reg_e, "main_reg_e"); GLADE_HOOKUP_OBJECT (window_main, main_reg_h, "main_reg_h"); GLADE_HOOKUP_OBJECT (window_main, main_reg_l, "main_reg_l"); GLADE_HOOKUP_OBJECT (window_main, main_reg_pswh, "main_reg_pswh"); GLADE_HOOKUP_OBJECT (window_main, main_reg_pswl, "main_reg_pswl"); GLADE_HOOKUP_OBJECT (window_main, main_reg_pch, "main_reg_pch"); GLADE_HOOKUP_OBJECT (window_main, main_reg_pcl, "main_reg_pcl"); GLADE_HOOKUP_OBJECT (window_main, main_reg_sph, "main_reg_sph"); GLADE_HOOKUP_OBJECT (window_main, main_reg_spl, "main_reg_spl"); GLADE_HOOKUP_OBJECT (window_main, main_reg_int_reg, "main_reg_int_reg"); GLADE_HOOKUP_OBJECT (window_main, label106, "label106"); GLADE_HOOKUP_OBJECT (window_main, label96, "label96"); GLADE_HOOKUP_OBJECT (window_main, frame_flags, "frame_flags"); GLADE_HOOKUP_OBJECT (window_main, table_flags, "table_flags"); GLADE_HOOKUP_OBJECT (window_main, label129, "label129"); GLADE_HOOKUP_OBJECT (window_main, label130, "label130"); GLADE_HOOKUP_OBJECT (window_main, label131, "label131"); GLADE_HOOKUP_OBJECT (window_main, label132, "label132"); GLADE_HOOKUP_OBJECT (window_main, label133, "label133"); GLADE_HOOKUP_OBJECT (window_main, main_flag_s, "main_flag_s"); GLADE_HOOKUP_OBJECT (window_main, main_flag_z, "main_flag_z"); GLADE_HOOKUP_OBJECT (window_main, main_flag_ac, "main_flag_ac"); GLADE_HOOKUP_OBJECT (window_main, main_flag_p, "main_flag_p"); GLADE_HOOKUP_OBJECT (window_main, main_flag_c, "main_flag_c"); GLADE_HOOKUP_OBJECT (window_main, label163, "label163"); GLADE_HOOKUP_OBJECT (window_main, frame_dec_hex, "frame_dec_hex"); GLADE_HOOKUP_OBJECT (window_main, hbox29, "hbox29"); GLADE_HOOKUP_OBJECT (window_main, vbox13, "vbox13"); GLADE_HOOKUP_OBJECT (window_main, label154, "label154"); GLADE_HOOKUP_OBJECT (window_main, main_entry_dec, "main_entry_dec"); GLADE_HOOKUP_OBJECT (window_main, main_but_to_hex, "main_but_to_hex"); GLADE_HOOKUP_OBJECT (window_main, vbox14, "vbox14"); GLADE_HOOKUP_OBJECT (window_main, label155, "label155"); GLADE_HOOKUP_OBJECT (window_main, main_entry_hex, "main_entry_hex"); GLADE_HOOKUP_OBJECT (window_main, main_but_to_dec, "main_but_to_dec"); GLADE_HOOKUP_OBJECT (window_main, hbox38, "hbox38"); GLADE_HOOKUP_OBJECT (window_main, image369, "image369"); GLADE_HOOKUP_OBJECT (window_main, label153, "label153"); GLADE_HOOKUP_OBJECT (window_main, frame_io_ports, "frame_io_ports"); GLADE_HOOKUP_OBJECT (window_main, vbox11, "vbox11"); GLADE_HOOKUP_OBJECT (window_main, hbox13, "hbox13"); GLADE_HOOKUP_OBJECT (window_main, main_io_spin, "main_io_spin"); GLADE_HOOKUP_OBJECT (window_main, main_io_entry, "main_io_entry"); GLADE_HOOKUP_OBJECT (window_main, main_io_update, "main_io_update"); GLADE_HOOKUP_OBJECT (window_main, hbox36, "hbox36"); GLADE_HOOKUP_OBJECT (window_main, image367, "image367"); GLADE_HOOKUP_OBJECT (window_main, label164, "label164"); GLADE_HOOKUP_OBJECT (window_main, frame_memory, "frame_memory"); GLADE_HOOKUP_OBJECT (window_main, vbox12, "vbox12"); GLADE_HOOKUP_OBJECT (window_main, hbox14, "hbox14"); GLADE_HOOKUP_OBJECT (window_main, main_mem_spin, "main_mem_spin"); GLADE_HOOKUP_OBJECT (window_main, main_mem_entry, "main_mem_entry"); GLADE_HOOKUP_OBJECT (window_main, main_mem_update, "main_mem_update"); GLADE_HOOKUP_OBJECT (window_main, hbox37, "hbox37"); GLADE_HOOKUP_OBJECT (window_main, image368, "image368"); GLADE_HOOKUP_OBJECT (window_main, label165, "label165"); GLADE_HOOKUP_OBJECT (window_main, vbox_data, "vbox_data"); GLADE_HOOKUP_OBJECT (window_main, main_vbox_center, "main_vbox_center"); GLADE_HOOKUP_OBJECT (window_main, hbox24, "hbox24"); GLADE_HOOKUP_OBJECT (window_main, label147, "label147"); GLADE_HOOKUP_OBJECT (window_main, main_entry_sa, "main_entry_sa"); GLADE_HOOKUP_OBJECT (window_main, notebook5, "notebook5"); GLADE_HOOKUP_OBJECT (window_main, main_data_scroll, "main_data_scroll"); GLADE_HOOKUP_OBJECT (window_main, hbox25, "hbox25"); GLADE_HOOKUP_OBJECT (window_main, image232, "image232"); GLADE_HOOKUP_OBJECT (window_main, label148, "label148"); GLADE_HOOKUP_OBJECT (window_main, main_stack_scroll, "main_stack_scroll"); GLADE_HOOKUP_OBJECT (window_main, hbox26, "hbox26"); GLADE_HOOKUP_OBJECT (window_main, image233, "image233"); GLADE_HOOKUP_OBJECT (window_main, label149, "label149"); GLADE_HOOKUP_OBJECT (window_main, main_keypad_scroll, "main_keypad_scroll"); GLADE_HOOKUP_OBJECT (window_main, hbox40, "hbox40"); GLADE_HOOKUP_OBJECT (window_main, image371, "image371"); GLADE_HOOKUP_OBJECT (window_main, label168, "label168"); GLADE_HOOKUP_OBJECT (window_main, vbox19, "vbox19"); GLADE_HOOKUP_OBJECT (window_main, hbox48, "hbox48"); GLADE_HOOKUP_OBJECT (window_main, label179, "label179"); GLADE_HOOKUP_OBJECT (window_main, mem_list_start, "mem_list_start"); GLADE_HOOKUP_OBJECT (window_main, button12, "button12"); GLADE_HOOKUP_OBJECT (window_main, main_memory_scroll, "main_memory_scroll"); GLADE_HOOKUP_OBJECT (window_main, vbox20, "vbox20"); GLADE_HOOKUP_OBJECT (window_main, hbox49, "hbox49"); GLADE_HOOKUP_OBJECT (window_main, label182, "label182"); GLADE_HOOKUP_OBJECT (window_main, io_list_start, "io_list_start"); GLADE_HOOKUP_OBJECT (window_main, button13, "button13"); GLADE_HOOKUP_OBJECT (window_main, main_io_scroll, "main_io_scroll"); GLADE_HOOKUP_OBJECT (window_main, main_progressbar, "main_progressbar"); GLADE_HOOKUP_OBJECT (window_main, main_statusbar, "main_statusbar"); GLADE_HOOKUP_ACTION_OBJECT (window_main, gtk_ui_manager_get_action (ui_manager, "/MainMenu/FileMenu/New"), "newfile"); GLADE_HOOKUP_ACTION_OBJECT (window_main, gtk_ui_manager_get_action (ui_manager, "/MainMenu/FileMenu/Open"), "openfile"); GLADE_HOOKUP_ACTION_OBJECT (window_main, gtk_ui_manager_get_action (ui_manager, "/MainMenu/FileMenu/Save"), "savefile"); GLADE_HOOKUP_ACTION_OBJECT (window_main, gtk_ui_manager_get_action (ui_manager, "/MainMenu/FileMenu/SaveAs"), "savefileas"); GLADE_HOOKUP_ACTION_OBJECT (window_main, gtk_ui_manager_get_action (ui_manager, "/MainMenu/ResetMenu/Registers"), "resetregisters"); GLADE_HOOKUP_ACTION_OBJECT (window_main, gtk_ui_manager_get_action (ui_manager, "/MainMenu/ResetMenu/Flags"), "resetflags"); GLADE_HOOKUP_ACTION_OBJECT (window_main, gtk_ui_manager_get_action (ui_manager, "/MainMenu/ResetMenu/IOPorts"), "resetports"); GLADE_HOOKUP_ACTION_OBJECT (window_main, gtk_ui_manager_get_action (ui_manager, "/MainMenu/ResetMenu/Memory"), "resetmemory"); GLADE_HOOKUP_ACTION_OBJECT (window_main, gtk_ui_manager_get_action (ui_manager, "/MainMenu/ResetMenu/ResetAll"), "resetall"); GLADE_HOOKUP_ACTION_OBJECT (window_main, gtk_ui_manager_get_action (ui_manager, "/MainMenu/AssemblerMenu/Assemble"), "assemble"); GLADE_HOOKUP_ACTION_OBJECT (window_main, gtk_ui_manager_get_action (ui_manager, "/MainMenu/AssemblerMenu/Listing"), "listing"); GLADE_HOOKUP_ACTION_OBJECT (window_main, gtk_ui_manager_get_action (ui_manager, "/MainMenu/DebugMenu/StopExec"), "stop_debug"); gtk_widget_grab_focus (main_entry_sa); return window_main; } void create_dialog_about (void) { gchar **authors = read_authors(); const gchar *documenters[] = { "Sridhar Ratnakumar (srid@srid.ca)", NULL }; gchar *name = "GNUSim8085"; gchar *copyright = "Copyright (C) 2003 Sridhar Ratnakumar"; gchar *comments = "8085 Microprocessor Simulator"; // TRANSLATORS: Replace this string with your names, one name per line. gchar *translators = _("translator_credits"); GdkPixbuf *dialog_about_logo_pixbuf; GdkPixbuf *dialog_about_icon_pixbuf; if (!strcmp (translators, "translator_credits")) translators = NULL; dialog_about_logo_pixbuf = create_pixbuf ("gnusim8085.svg"); if (!dialog_about_logo_pixbuf) dialog_about_logo_pixbuf = create_pixbuf ("gnusim8085.ico"); dialog_about_icon_pixbuf = create_pixbuf ("gnusim8085.svg"); if (!dialog_about_icon_pixbuf) dialog_about_icon_pixbuf = create_pixbuf ("gnusim8085.ico"); gtk_show_about_dialog (NULL, "name", name, "version", VERSION, "comments", comments, "copyright", copyright, "website", PACKAGE_URL, "logo", dialog_about_logo_pixbuf, "icon", dialog_about_icon_pixbuf, "authors", authors, "documenters", documenters, "translator-credits", translators, "border-width", 5, "license-type", GTK_LICENSE_GPL_2_0, NULL); if (dialog_about_icon_pixbuf) g_object_unref (dialog_about_icon_pixbuf); if (dialog_about_logo_pixbuf) g_object_unref (dialog_about_logo_pixbuf); } GtkWidget* create_window_listing (void) { GtkWidget *window_listing; GdkPixbuf *window_listing_icon_pixbuf; GtkWidget *listing_vbox; GtkWidget *hbuttonbox1; GtkWidget *listing_save; GtkWidget *listing_print; window_listing = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window_listing), _("Assembler Listing")); gtk_window_set_position (GTK_WINDOW (window_listing), GTK_WIN_POS_CENTER); gtk_window_set_default_size (GTK_WINDOW (window_listing), 500, 400); window_listing_icon_pixbuf = create_pixbuf ("gnusim8085.svg"); if (!window_listing_icon_pixbuf) window_listing_icon_pixbuf = create_pixbuf ("gnusim8085.ico"); if (window_listing_icon_pixbuf) { gtk_window_set_icon (GTK_WINDOW (window_listing), window_listing_icon_pixbuf); g_object_unref (window_listing_icon_pixbuf); } listing_vbox = VBOX (2); gtk_widget_show (listing_vbox); gtk_container_add (GTK_CONTAINER (window_listing), listing_vbox); gtk_container_set_border_width (GTK_CONTAINER (listing_vbox), 5); hbuttonbox1 = HBUTTONBOX(); gtk_widget_show (hbuttonbox1); gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox1), GTK_BUTTONBOX_CENTER); gtk_box_pack_start (GTK_BOX (listing_vbox), hbuttonbox1, FALSE, FALSE, 0); listing_save = button_from_stock_img_custom_label (_("Save to file"), IMG_STOCK_SAVE_AS); gtk_widget_show (listing_save); gtk_box_pack_start (GTK_BOX (hbuttonbox1), listing_save, FALSE, FALSE, 0); gtk_widget_set_can_default (listing_save, TRUE); g_signal_connect ((gpointer) listing_save, "clicked", G_CALLBACK (on_listing_save_clicked), NULL); listing_print = button_from_stock (LABEL_STOCK_PRINT, IMG_STOCK_PRINT); gtk_widget_show (listing_print); gtk_box_pack_start (GTK_BOX (hbuttonbox1), listing_print, FALSE, FALSE, 0); gtk_widget_set_can_default (listing_print, TRUE); g_signal_connect ((gpointer) listing_print, "clicked", G_CALLBACK (on_listing_print_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (window_listing, window_listing, "window_listing"); GLADE_HOOKUP_OBJECT (window_listing, listing_vbox, "listing_vbox"); GLADE_HOOKUP_OBJECT (window_listing, hbuttonbox1, "hbuttonbox1"); GLADE_HOOKUP_OBJECT (window_listing, listing_save, "listing_save"); GLADE_HOOKUP_OBJECT (window_listing, listing_save, "listing_print"); return window_listing; } GtkWidget* create_window_tutorial (void) { GtkWidget *window_tutorial; GdkPixbuf *window_tutorial_icon_pixbuf; GtkWidget *tutorial_vbox; window_tutorial = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window_tutorial), _("Assembler Tutorial")); gtk_window_set_position (GTK_WINDOW (window_tutorial), GTK_WIN_POS_CENTER); gtk_window_set_default_size (GTK_WINDOW (window_tutorial), 500, 400); window_tutorial_icon_pixbuf = create_pixbuf ("gnusim8085.svg"); if (!window_tutorial_icon_pixbuf) window_tutorial_icon_pixbuf = create_pixbuf ("gnusim8085.ico"); if (window_tutorial_icon_pixbuf) { gtk_window_set_icon (GTK_WINDOW (window_tutorial), window_tutorial_icon_pixbuf); g_object_unref (window_tutorial_icon_pixbuf); } tutorial_vbox = VBOX (2); gtk_widget_show (tutorial_vbox); gtk_container_add (GTK_CONTAINER (window_tutorial), tutorial_vbox); gtk_container_set_border_width (GTK_CONTAINER (tutorial_vbox), 5); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (window_tutorial, window_tutorial, "window_tutorial"); GLADE_HOOKUP_OBJECT (window_tutorial, tutorial_vbox, "tutorial_vbox"); return window_tutorial; } GtkWidget* create_window_start (GtkWindow * parent) { GtkWidget *window_start; GdkPixbuf *window_start_icon_pixbuf; GtkWidget *vbox15; GtkWidget *frame13; GtkWidget *vbox16; GtkWidget *vbox17; GtkWidget *label159; GtkWidget *start_but_tutorial; GtkWidget *vbox18; GtkWidget *label161; GtkWidget *start_but_open; GtkWidget *label158; GtkWidget *start_but_close; GtkWidget *label166; window_start = gtk_dialog_new (); gtk_window_set_transient_for (GTK_WINDOW (window_start), parent); gtk_window_set_title (GTK_WINDOW (window_start), _("GNUSim8085 start with dialog")); gtk_window_set_position (GTK_WINDOW (window_start), GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (window_start), TRUE); gtk_window_set_resizable (GTK_WINDOW (window_start), FALSE); window_start_icon_pixbuf = create_pixbuf ("gnusim8085.svg"); if (!window_start_icon_pixbuf) window_start_icon_pixbuf = create_pixbuf ("gnusim8085.ico"); if (window_start_icon_pixbuf) { gtk_window_set_icon (GTK_WINDOW (window_start), window_start_icon_pixbuf); g_object_unref (window_start_icon_pixbuf); } vbox15 = gtk_dialog_get_content_area (GTK_DIALOG (window_start)); gtk_container_set_border_width (GTK_CONTAINER (vbox15), 5); frame13 = gtk_frame_new (NULL); gtk_widget_show (frame13); gtk_box_pack_start (GTK_BOX (vbox15), frame13, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame13), 5); vbox16 = VBOX (0); gtk_widget_show (vbox16); gtk_container_add (GTK_CONTAINER (frame13), vbox16); vbox17 = VBOX (5); gtk_widget_show (vbox17); gtk_box_pack_start (GTK_BOX (vbox16), vbox17, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (vbox17), 10); label159 = gtk_label_new (_("1. How to use this simulator?")); gtk_widget_show (label159); gtk_box_pack_start (GTK_BOX (vbox17), label159, FALSE, FALSE, 0); gtk_label_set_justify (GTK_LABEL (label159), GTK_JUSTIFY_LEFT); gtk_label_set_line_wrap (GTK_LABEL (label159), TRUE); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (label159), 0); gtk_label_set_yalign (GTK_LABEL (label159), 0.5); #else gtk_misc_set_alignment (GTK_MISC (label159), 0, 0.5); #endif start_but_tutorial = button_from_stock_img_custom_label (_("_Tutorial"), IMG_STOCK_HELP); gtk_widget_show (start_but_tutorial); gtk_box_pack_start (GTK_BOX (vbox17), start_but_tutorial, FALSE, FALSE, 0); gtk_widget_set_tooltip_text (start_but_tutorial, _("A short tutorial on writing assembly code!")); vbox18 = VBOX (5); gtk_widget_show (vbox18); gtk_box_pack_start (GTK_BOX (vbox16), vbox18, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (vbox18), 10); label161 = gtk_label_new (_("2. Open an existing assembly program.")); gtk_widget_show (label161); gtk_box_pack_start (GTK_BOX (vbox18), label161, FALSE, FALSE, 0); gtk_label_set_justify (GTK_LABEL (label161), GTK_JUSTIFY_LEFT); gtk_label_set_line_wrap (GTK_LABEL (label161), TRUE); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (label161), 0); gtk_label_set_yalign (GTK_LABEL (label161), 0.5); #else gtk_misc_set_alignment (GTK_MISC (label161), 0, 0.5); #endif start_but_open = button_from_stock_img_custom_label (_("_Open program"), IMG_STOCK_OPEN); gtk_widget_show (start_but_open); gtk_box_pack_start (GTK_BOX (vbox18), start_but_open, FALSE, FALSE, 0); gtk_widget_set_tooltip_text (start_but_open, _("Open an already saved program")); label158 = gtk_label_new (_("What do you want to do now?")); gtk_widget_show (label158); gtk_frame_set_label_widget (GTK_FRAME (frame13), label158); gtk_label_set_justify (GTK_LABEL (label158), GTK_JUSTIFY_LEFT); start_but_close = button_from_stock (LABEL_STOCK_CLOSE, IMG_STOCK_CLOSE); gtk_widget_show (start_but_close); gtk_box_pack_end (GTK_BOX (vbox15), start_but_close, FALSE, FALSE, 0); gtk_widget_set_can_default (GTK_WIDGET (start_but_close), TRUE); label166 = gtk_label_new (_("Don't forget to read the documentation \ngiven in \"doc\" directory.")); gtk_widget_show (label166); gtk_box_pack_start (GTK_BOX (vbox15), label166, FALSE, FALSE, 5); g_signal_connect ((gpointer) window_start, "delete_event", G_CALLBACK (gtk_widget_destroy), NULL); g_signal_connect ((gpointer) start_but_tutorial, "clicked", G_CALLBACK (on_start_but_tutorial_clicked), NULL); g_signal_connect ((gpointer) start_but_open, "clicked", G_CALLBACK (on_start_but_open_clicked), NULL); g_signal_connect ((gpointer) start_but_close, "clicked", G_CALLBACK (on_start_but_close_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (window_start, window_start, "window_start"); GLADE_HOOKUP_OBJECT (window_start, vbox15, "vbox15"); GLADE_HOOKUP_OBJECT (window_start, frame13, "frame13"); GLADE_HOOKUP_OBJECT (window_start, vbox16, "vbox16"); GLADE_HOOKUP_OBJECT (window_start, vbox17, "vbox17"); GLADE_HOOKUP_OBJECT (window_start, label159, "label159"); GLADE_HOOKUP_OBJECT (window_start, start_but_tutorial, "start_but_tutorial"); GLADE_HOOKUP_OBJECT (window_start, vbox18, "vbox18"); GLADE_HOOKUP_OBJECT (window_start, label161, "label161"); GLADE_HOOKUP_OBJECT (window_start, start_but_open, "start_but_open"); GLADE_HOOKUP_OBJECT (window_start, label158, "label158"); GLADE_HOOKUP_OBJECT (window_start, start_but_close, "start_but_close"); GLADE_HOOKUP_OBJECT (window_start, label166, "label166"); gtk_widget_grab_focus (start_but_close); return window_start; } GtkWidget* create_dialog_isymbol (void) { GtkWidget *dialog_isymbol; GdkPixbuf *dialog_isymbol_icon_pixbuf; GtkWidget *dialog_vbox1; GtkWidget *isymbol_vbox; GtkWidget *label170; GtkWidget *hbox44; GtkWidget *label171; GtkWidget *entry1; GtkWidget *hbox45; GtkWidget *label174; GtkWidget *isymbol_variables; GtkWidget *hbox46; GtkWidget *label175; GtkWidget *isymbol_labels; GtkWidget *hbox47; GtkWidget *label176; GtkWidget *isymbol_macros; dialog_isymbol = gtk_dialog_new_with_buttons (_("Choose a symbol"), NULL, GTK_DIALOG_MODAL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); gtk_window_set_position (GTK_WINDOW (dialog_isymbol), GTK_WIN_POS_MOUSE); gtk_window_set_resizable (GTK_WINDOW (dialog_isymbol), FALSE); dialog_isymbol_icon_pixbuf = create_pixbuf ("gnusim8085.svg"); if (!dialog_isymbol_icon_pixbuf) dialog_isymbol_icon_pixbuf = create_pixbuf ("gnusim8085.ico"); if (dialog_isymbol_icon_pixbuf) { gtk_window_set_icon (GTK_WINDOW (dialog_isymbol), dialog_isymbol_icon_pixbuf); g_object_unref (dialog_isymbol_icon_pixbuf); } dialog_vbox1 = gtk_dialog_get_content_area (GTK_DIALOG (dialog_isymbol)); gtk_widget_show (dialog_vbox1); isymbol_vbox = VBOX (2); gtk_widget_show (isymbol_vbox); gtk_box_pack_start (GTK_BOX (dialog_vbox1), isymbol_vbox, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (isymbol_vbox), 5); label170 = gtk_label_new (_("Enter a symbol or choose one from the lists")); gtk_widget_show (label170); gtk_box_pack_start (GTK_BOX (isymbol_vbox), label170, FALSE, FALSE, 0); gtk_label_set_justify (GTK_LABEL (label170), GTK_JUSTIFY_LEFT); hbox44 = HBOX (5); gtk_widget_show (hbox44); gtk_box_pack_start (GTK_BOX (isymbol_vbox), hbox44, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (hbox44), 2); label171 = gtk_label_new (_("Enter Symbol")); gtk_widget_show (label171); gtk_box_pack_start (GTK_BOX (hbox44), label171, FALSE, FALSE, 0); gtk_label_set_justify (GTK_LABEL (label171), GTK_JUSTIFY_LEFT); entry1 = gtk_entry_new (); gtk_widget_show (entry1); gtk_box_pack_start (GTK_BOX (hbox44), entry1, TRUE, TRUE, 0); hbox45 = HBOX (5); gtk_box_set_homogeneous (GTK_BOX (hbox45), TRUE); gtk_widget_show (hbox45); gtk_box_pack_start (GTK_BOX (isymbol_vbox), hbox45, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (hbox45), 2); label174 = gtk_label_new (_("Variables List")); gtk_widget_show (label174); gtk_box_pack_start (GTK_BOX (hbox45), label174, FALSE, FALSE, 0); gtk_label_set_justify (GTK_LABEL (label174), GTK_JUSTIFY_LEFT); isymbol_variables = gtk_combo_box_text_new (); gtk_widget_show (isymbol_variables); gtk_box_pack_start (GTK_BOX (hbox45), isymbol_variables, TRUE, TRUE, 0); hbox46 = HBOX (5); gtk_box_set_homogeneous (GTK_BOX (hbox46), TRUE); gtk_widget_show (hbox46); gtk_box_pack_start (GTK_BOX (isymbol_vbox), hbox46, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (hbox46), 2); label175 = gtk_label_new (_("Functions List")); gtk_widget_show (label175); gtk_box_pack_start (GTK_BOX (hbox46), label175, FALSE, FALSE, 0); gtk_label_set_justify (GTK_LABEL (label175), GTK_JUSTIFY_LEFT); isymbol_labels = gtk_combo_box_text_new (); gtk_widget_show (isymbol_labels); gtk_box_pack_start (GTK_BOX (hbox46), isymbol_labels, TRUE, TRUE, 0); hbox47 = HBOX (5); gtk_box_set_homogeneous (GTK_BOX (hbox47), TRUE); gtk_widget_show (hbox47); gtk_box_pack_start (GTK_BOX (isymbol_vbox), hbox47, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (hbox47), 2); label176 = gtk_label_new (_("Macros List")); gtk_widget_show (label176); gtk_box_pack_start (GTK_BOX (hbox47), label176, FALSE, FALSE, 0); gtk_label_set_justify (GTK_LABEL (label176), GTK_JUSTIFY_LEFT); isymbol_macros = gtk_combo_box_text_new (); gtk_widget_show (isymbol_macros); gtk_box_pack_start (GTK_BOX (hbox47), isymbol_macros, TRUE, TRUE, 0); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (dialog_isymbol, dialog_isymbol, "dialog_isymbol"); GLADE_HOOKUP_OBJECT_NO_REF (dialog_isymbol, dialog_vbox1, "dialog_vbox1"); GLADE_HOOKUP_OBJECT (dialog_isymbol, isymbol_vbox, "isymbol_vbox"); GLADE_HOOKUP_OBJECT (dialog_isymbol, label170, "label170"); GLADE_HOOKUP_OBJECT (dialog_isymbol, hbox44, "hbox44"); GLADE_HOOKUP_OBJECT (dialog_isymbol, label171, "label171"); GLADE_HOOKUP_OBJECT (dialog_isymbol, entry1, "entry1"); GLADE_HOOKUP_OBJECT (dialog_isymbol, hbox45, "hbox45"); GLADE_HOOKUP_OBJECT (dialog_isymbol, label174, "label174"); GLADE_HOOKUP_OBJECT (dialog_isymbol, isymbol_variables, "isymbol_variables"); GLADE_HOOKUP_OBJECT (dialog_isymbol, hbox46, "hbox46"); GLADE_HOOKUP_OBJECT (dialog_isymbol, label175, "label175"); GLADE_HOOKUP_OBJECT (dialog_isymbol, isymbol_labels, "isymbol_labels"); GLADE_HOOKUP_OBJECT (dialog_isymbol, hbox47, "hbox47"); GLADE_HOOKUP_OBJECT (dialog_isymbol, label176, "label176"); GLADE_HOOKUP_OBJECT (dialog_isymbol, isymbol_macros, "isymbol_macros"); gtk_widget_grab_focus (entry1); return dialog_isymbol; } GtkWidget* create_dialog_ireg (void) { GtkWidget *dialog_ireg; GdkPixbuf *dialog_ireg_icon_pixbuf; GtkWidget *dialog_vbox2; GtkWidget *ireg; dialog_ireg = gtk_dialog_new_with_buttons (_("Choose a register"), NULL, GTK_DIALOG_MODAL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); gtk_window_set_position (GTK_WINDOW (dialog_ireg), GTK_WIN_POS_MOUSE); gtk_window_set_resizable (GTK_WINDOW (dialog_ireg), FALSE); dialog_ireg_icon_pixbuf = create_pixbuf ("gnusim8085.svg"); if (!dialog_ireg_icon_pixbuf) dialog_ireg_icon_pixbuf = create_pixbuf ("gnusim8085.ico"); if (dialog_ireg_icon_pixbuf) { gtk_window_set_icon (GTK_WINDOW (dialog_ireg), dialog_ireg_icon_pixbuf); g_object_unref (dialog_ireg_icon_pixbuf); } dialog_vbox2 = gtk_dialog_get_content_area (GTK_DIALOG (dialog_ireg)); gtk_widget_show (dialog_vbox2); ireg = gtk_combo_box_text_new (); gtk_widget_show (ireg); gtk_box_pack_start (GTK_BOX (dialog_vbox2), ireg, FALSE, FALSE, 0); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (dialog_ireg, dialog_ireg, "dialog_ireg"); GLADE_HOOKUP_OBJECT_NO_REF (dialog_ireg, dialog_vbox2, "dialog_vbox2"); GLADE_HOOKUP_OBJECT (dialog_ireg, ireg, "ireg"); return dialog_ireg; } gnusim8085-1.4.1/src/asm-genobj.h0000644000175000017500000000222312767046204016215 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * Second Pass: generates object code * and return it as a memory block defined in 8085-memblock module * * R. Sridhar */ #ifndef __ASM_GENOBJ_H__ #define __ASM_GENOBJ_H__ #include #include "8085-memblock.h" #include "asm-source.h" G_BEGIN_DECLS EefMemBlock *asm_genobj_generate (AsmSource *src, gint sa); G_END_DECLS #endif /* __ASM_GENOBJ_H__ */ gnusim8085-1.4.1/src/gui-input-symbol.h0000644000175000017500000000240712767046204017423 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * Handles showing selection dialog for symbols * -used with KeyPad */ #ifndef __GUI_INPUT_SIGNAL_H__ #define __GUI_INPUT_SIGNAL_H__ #include G_BEGIN_DECLS /* shows a input dialog for getting code symbol * returns symbol name newly allocated */ gchar *gui_input_symbol (void); /* shows a input dialog for getting register name * returns symbol name newly allocated */ gchar *gui_input_reg (gchar * set); G_END_DECLS #endif /* __GUI_INPUT_SIGNAL_H__*/ gnusim8085-1.4.1/src/asm-gensym.c0000644000175000017500000000550113266554261016252 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "asm-gensym.h" #include "asm-ds-symtable.h" #include "asm-err-comm.h" #include "config.h" gboolean asm_gensym_generate (AsmSource * src, gint sa) { int i; gint address = sa; g_assert (src); #define SEND_ERR(ln, str) \ asm_err_comm_send (ln, str, ASM_ERR_ERROR); \ return FALSE; /* scan src */ for (i = 0; i < src->entries_total; i++) { gint sz; AsmSourceEntry *entry = src->entries[i]; /* Assign Label */ if (entry->s_id[0]) { AsmSymType type = ASM_SYM_NA; /* find type */ if (entry->s_op >= 256) { if (!g_ascii_strcasecmp ("EQU", entry->s_op_id_pseudo->op_str)) type = ASM_SYM_MACRO; else if (!g_ascii_strcasecmp ("DS", entry->s_op_id_pseudo->op_str) || !g_ascii_strcasecmp ("DB", entry-> s_op_id_pseudo-> op_str)) type = ASM_SYM_VARIABLE; } else type = ASM_SYM_LABEL; if (type == ASM_SYM_NA) { asm_err_comm_send (entry-> listing_buffer_line_no, _("Redundant label"), ASM_ERR_WARNING); } else { gint val; /* fetch data */ if (type == ASM_SYM_MACRO) { if (!asm_source_entry_parse_operand (entry, &val)) { SEND_ERR (entry-> listing_buffer_line_no, _("Invalid Operand in EQU")); } } else { val = address; } /* get size */ if (!asm_source_entry_get_size (entry, &sz)) { SEND_ERR (entry-> listing_buffer_line_no, _("Invalid operand")); } g_assert (entry->s_id[0]); /* add SYMBOL to table */ if (!asm_sym_add (type, entry->s_id, GINT_TO_POINTER (val), sz, entry->listing_buffer_line_no)) { SEND_ERR (entry-> listing_buffer_line_no, _("Redefinition of symbol")); } } } /* Finished - Assign Label */ /* inc size */ if (!asm_source_entry_get_size (entry, &sz)) { SEND_ERR (entry->listing_buffer_line_no, _("Invalid operand")); } address += sz; } return TRUE; } gnusim8085-1.4.1/src/Makefile.am0000644000175000017500000000316713325667323016070 0ustar carstencarsten## Process this file with automake to produce Makefile.in AM_CPPFLAGS = \ -I$(top_srcdir) \ $(GTK_CFLAGS) \ $(GTKSOURCEVIEW_CFLAGS) gnusim8085_CFLAGS =\ -DPACKAGE_DOC_DIR=\"$(docdir)\" if WIN32 gnusim8085_CFLAGS += \ -DLOCALEDIR=\"locale\"\ -mms-bitfields \ -mwindows else gnusim8085_CFLAGS += \ -DLOCALEDIR=\"$(localedir)\" endif bin_PROGRAMS = gnusim8085 gnusim8085_SOURCES = \ callbacks.c\ interface.c\ main.c\ support.c\ callbacks.h\ interface.h\ support.h\ 8085.c\ 8085-instructions.c\ 8085-memblock.c\ asm-ds-symtable.c\ asm-err-comm.c\ asm-source.c\ asm-token.c\ asm-id.c\ asm-gensym.c\ asm-genobj.c\ 8085-asm.c\ gui-app.c\ gui-editor.c\ 8085-link.c\ gui-view.c\ bridge.c\ gui-list-io.c\ gui-list-memory.c\ gui-list-message.c\ gui-list-data.c\ asm-listing.c\ gui-list-stack.c\ 8085-asm.h\ 8085-instructions.h\ 8085-link.h\ 8085-memblock.h\ 8085.h\ asm-ds-limits.h\ asm-ds-symtable.h\ asm-err-comm.h\ asm-genobj.h\ asm-gensym.h\ asm-id.h\ asm-listing.h\ asm-source.h\ asm-token.h\ bridge.h\ gui-app.h\ gui-editor.h\ gui-list-data.h\ gui-list-io.h\ gui-list-memory.h\ gui-list-message.h\ gui-list-stack.h\ gui-view.h\ gui-keypad.h\ gui-keypad.c\ gui-input-symbol.h\ gui-input-symbol.c\ asm-id-info.h\ asm-id-info.c gnusim8085_LDFLAGS = gnusim8085_LDADD = \ $(GTK_LIBS)\ $(GTKSOURCEVIEW_LIBS) if USE_GIO AM_CPPFLAGS += \ $(GIO_CFLAGS) gnusim8085_SOURCES += \ file-op-gio.h\ file-op-gio.c gnusim8085_LDADD += \ $(GIO_LIBS) else gnusim8085_SOURCES += \ file-op.h\ file-op.c endif LDADD = @LIBINTL@ gnusim8085-1.4.1/src/asm-ds-limits.h0000644000175000017500000000214012767046204016654 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * Assembler DataStructures: Limits * * R. Sridhar */ #ifndef __ASM_DS_LIMITS_H__ #define __ASM_DS_LIMITS_H__ #define ASM_DS_MAX_LINE_LENGTH 1024 #define ASM_DS_MAX_IDENTIFIER_LENGTH 32 #define ASM_DS_MAX_OPCODE_LENGTH 5 #define ASM_DS_MAX_OPERAND 100 #define ASM_SOURCE_MAX_LINES 5000 /* < 65536 */ #endif gnusim8085-1.4.1/src/gui-app.c0000644000175000017500000000504212773774265015546 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "gui-app.h" GUIApp *app = NULL; GtkWidget *container = NULL; void gui_app_new (void) { GtkBox *p_msg, *p_data; /*GdkScreen *screen;*/ g_assert (app == NULL); app = g_malloc0 (sizeof (GUIApp)); app->window_main = create_window_main (); gtk_window_maximize (GTK_WINDOW (app->window_main)); app->editor = gui_editor_new (); gui_editor_set_margin_toggle_mark (app->editor); gui_editor_show (app->editor); /* add editor */ container = lookup_widget (app->window_main, "main_vbox_center"); g_assert (container); gtk_box_pack_start (GTK_BOX (container), app->editor->scroll, TRUE, TRUE, 0); /* dim */ //gtk_window_get_size(app->window_main, &w, &h); p_msg = GTK_BOX (lookup_widget (app->window_main, "hbox_main")); g_assert (p_msg); p_data = GTK_BOX (lookup_widget (app->window_main, "vbox_data")); g_assert (p_data); /* get screen screen = gdk_screen_get_default (); w = gdk_screen_get_width (screen); h = gdk_screen_get_height (screen); g_message ("screen w = %d", w); g_message ("screen h = %d", h);*/ /* maximize window FIXME - not working in other wms say IceWM */ gtk_window_maximize (GTK_WINDOW (app->window_main)); } void gui_app_show (void) { gtk_widget_show (app->window_main); } void gui_app_destroy (void) { /* first hide */ gtk_widget_hide (app->window_main); /* destroy */ gtk_widget_destroy (app->window_main); /* quit main */ gtk_main_quit (); } void gui_app_show_msg (GtkMessageType type, gchar *msg) { GtkWidget *dialog; dialog = gtk_message_dialog_new (GTK_WINDOW(app->window_main), GTK_DIALOG_DESTROY_WITH_PARENT, type, GTK_BUTTONS_OK, "%s", msg); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } gnusim8085-1.4.1/src/asm-listing.c0000644000175000017500000001551013266553341016420 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "asm-listing.h" #include "asm-ds-limits.h" #include "config.h" static GString * get_hex_list (const gchar * str, gint * total) { gchar **slist, **p; GString *r; gint val; g_assert (str); g_assert (total); /* split */ slist = g_strsplit (str, ",", -1); r = g_string_new (" "); /* scan */ p = slist; *total = 0; while (*p) { if ( !asm_source_entry_parse_not_operand_but_this(NULL, &val, *p) ) { g_string_free (r, TRUE); r = NULL; break; } (*total)++; /* add hex */ if (val > 0x0f) g_string_append_printf (r, " %02X", val); else g_string_append_printf (r, " 0%X", val); p++; } g_strfreev (slist); return r; } /* get the listing of bin codes */ void asm_listing_get_binary_array (AsmSource *src, GString **listing) { int entry_i, listing_i = 0; for (entry_i =0; entry_ientries_total; entry_i++ ) { AsmSourceEntry *entry = src->entries[entry_i]; gint pto; GString *line; g_assert (entry); pto = entry->listing_buffer_line_no; listing[pto] = g_string_new (""); g_assert (pto>=listing_i); /* write listing before this entry */ while ( pto > listing_i ) { line = src->listing_buffer[listing_i]; g_assert (line); listing[listing_i] = g_string_new (""); //g_string_append (listing[listing_i], ""); listing_i++; } line = src->listing_buffer[listing_i++]; g_assert (line); g_assert (line->str); /* if opcode */ if ( entry->s_op < 256 ) { IdOpcode *ido = entry->s_op_id_opcode; g_assert (ido); if ( entry->s_op > 0x0f ) { g_string_append_printf (listing[pto], "%4X %2X", entry->address, entry->s_op); } else { g_string_append_printf (listing[pto], "%4X 0%X", entry->address, entry->s_op); } /* if args */ if ( ido->user_args ) { if ( entry->b_opnd1 > 0x0f ) { g_string_append_printf(listing[pto], " %2X", entry->b_opnd1); } else { g_string_append_printf(listing[pto], " 0%X", entry->b_opnd1); } if ( ido->user_args == 2 ) { if ( entry->b_opnd1 > 0x0f ) { g_string_append_printf(listing[pto], " %2X", entry->b_opnd2); } else { g_string_append_printf(listing[pto], " 0%X", entry->b_opnd2); } } } } else /* if pseudo */ { if ( entry->s_op == ID_PSEUDO_DS ) { g_string_append_printf (listing[pto], "%4X <%d bytes>", entry->address, entry->b_opnd1); } else if ( entry->s_op == ID_PSEUDO_DB ) { GString *olist; gint tot = 0; olist = get_hex_list (entry->s_opnd, &tot); g_string_append_printf (listing[pto], "%4X ",entry->address); g_string_append (listing[pto], olist->str); g_string_append_printf(listing[pto], " (%d bytes)", tot); g_string_free (olist, TRUE); } } /* append with ops */ //g_string_append (listing[entry_i], ""); //g_string_append (listing[entry_i], "\n"); } } gint asm_listing_binary_array_max_len (GString **array) { gint ml = 0; GString **line ; g_assert (array); line = array; while ( *line ) { gint len; len = strlen((*line)->str); ml = MAX(ml, len); line++; } return ml; } GString * asm_listing_generate (AsmSource * src) { GString *listing = NULL; gint entry_i = 0, listing_i=0; GString *bin[ASM_SOURCE_MAX_LINES] = { NULL }; gint i = 0; gint max_len = 0; g_assert (src); g_assert (src->entries); /* create binary first */ asm_listing_get_binary_array (src, bin); /* get max len */ max_len = asm_listing_binary_array_max_len (bin); listing = g_string_new(""); g_string_append (listing, _("; Assembler generated listing; Not editable.\n")); g_string_append_printf (listing, _("; Generated by GNUSim8085: %s\n"), PACKAGE_URL); while ( bin[i] ) { gint diff = 0; gint orilen; g_assert (bin[i]->str); /* append code */ g_string_append (listing, bin[i]->str); /* calculate diff */ orilen = strlen (bin[i]->str); diff = orilen/4; g_assert (diff >= 0); g_string_append_printf (listing, "%*s ", (max_len+1)%4 - diff + 1, "\t"); g_assert (src->listing_buffer[i]->str); g_string_append ( listing, src->listing_buffer[i]->str); g_string_append ( listing, "\n"); i++; } /* clean up */ { GString **p = bin; while ( *p ) g_string_free (*p++, TRUE); } return listing; //debug listing = g_string_new (_(";Assembler Listing (Do Not assemble)\n\n")); for (entry_i =0; entry_ientries_total; entry_i++ ) { AsmSourceEntry *entry = src->entries[entry_i]; gint pto; GString *line; g_assert (entry); pto = entry->listing_buffer_line_no; g_assert (pto>=listing_i); /* write listing before this entry */ while ( pto > listing_i ) { line = src->listing_buffer[listing_i++]; g_assert (line); g_string_append (listing, line->str); g_string_append (listing, "\n"); } line = src->listing_buffer[listing_i++]; g_assert (line); g_assert (line->str); /* if opcode */ if ( entry->s_op < 256 ) { IdOpcode *ido = entry->s_op_id_opcode; g_assert (ido); g_string_append_printf (listing, "%4X %2X", entry->address, entry->s_op); /* if args */ if ( ido->user_args ) { g_string_append_printf(listing, " %2X", entry->b_opnd1); if ( ido->user_args == 2 ) g_string_append_printf(listing, " %2X", entry->b_opnd2); } } else /* if pseudo */ { if ( entry->s_op == ID_PSEUDO_DS ) { g_string_append_printf (listing, "%4X <%d bytes>", entry->address, entry->b_opnd1); } else if ( entry->s_op == ID_PSEUDO_DB ) { GString *olist; gint tot = 0; olist = get_hex_list (entry->s_opnd, &tot); g_string_append_printf (listing, "%4X ",entry->address); g_string_append (listing, olist->str); g_string_append_printf(listing, " (%d bytes)", tot); g_string_free (olist, TRUE); } } /* append with ops */ g_string_append (listing, line->str); g_string_append (listing, "\n"); } return listing; } gnusim8085-1.4.1/src/file-op.h0000644000175000017500000000322412767046204015530 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * File operations are handled in this module * save, open, save as, save text.... * * R. Sridhar */ #ifndef __FILE_OP_H__ #define __FILE_OP_H__ #include //TODO: remove those non-glib funcs #include #include #include G_BEGIN_DECLS /* funcs related to main editor */ void file_op_editor_new (void); gboolean file_op_editor_save (void); void file_op_editor_save_as (void); void file_op_editor_open (void); /* -- related to listing window */ void file_op_listing_save (gchar *text); /* this is will be called from main.c passing argv[1] */ void ori_open (gchar * fn, gboolean replace); /* to confirm saving the file */ gboolean file_op_confirm_save (void); GtkWidget* create_file_dialog(const gchar *title, GtkFileChooserAction action, const gchar *stock); G_END_DECLS #endif /* __FILE_OP_H__*/ gnusim8085-1.4.1/src/gui-list-message.h0000644000175000017500000000215412767046204017355 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * Message List * * R. Sridhar */ #ifndef __GUI_LIST_MESSAGE_H__ #define __GUI_LIST_MESSAGE_H__ #include G_BEGIN_DECLS void gui_list_message_attach_me (void); void gui_list_message_clear(void); void gui_list_message_add(const char *msg, gint ln, gint attr); G_END_DECLS #endif /* __GUI_LIST_MESSAGE_H__*/ gnusim8085-1.4.1/src/gui-list-io.h0000644000175000017500000000241612767046204016341 0ustar carstencarsten/* Copyright (C) 2010 Debajit Biswas This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GUI_LIST_IO_H__ #define __GUI_LIST_IO_H__ #include #include "gui-app.h" #include "8085.h" #include "asm-source.h" #include "gui-view.h" G_BEGIN_DECLS #define IO_LIST_MAX_LEN 255 void gui_list_io_attach_me (void); void gui_list_io_clear (void); void gui_list_io_set_start (gint st); void gui_list_io_initialize (void); void gui_list_io_update (void); void gui_list_io_update_single (eef_data_t addr); G_END_DECLS #endif /* __GUI_LIST_IO_H__*/ gnusim8085-1.4.1/src/file-op.c0000644000175000017500000002460413266553264015534 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "config.h" #include "file-op.h" #include "gui-editor.h" #include "gui-app.h" #include "interface.h" #define MAX_ERR_MSG_SIZE 512 static GString *file_name = NULL; static const gchar *default_dir = NULL; static gchar *last_open_save_dir = NULL; static GtkRecentManager *recent_manager = NULL; static void _set_file_name (gchar * name) { if (file_name == NULL) file_name = g_string_new (name); else g_string_assign (file_name, name); } void ori_open (gchar * fn, gboolean replace) { GString *gstr; FILE *fp; char *nullstr = "NULLSTRING"; char *ret; if (!fn) fn = nullstr; fp = fopen (fn, "r"); if (fp == NULL) { gchar errmsg[MAX_ERR_MSG_SIZE + 1]; g_snprintf (errmsg, MAX_ERR_MSG_SIZE, _("Failed to open <%s>"), fn); gui_app_show_msg (GTK_MESSAGE_ERROR, errmsg); return; } gstr = g_string_new (""); while (!feof (fp)) { gchar buf[300] = { 0 }; // return value stored just to avoid compiler warnings. ret = fgets (buf, 100, fp); g_string_append (gstr, buf); } gui_editor_set_text (app->editor, gstr->str); gtk_text_buffer_set_modified ((GtkTextBuffer *)app->editor->buffer, FALSE); /* Set breakpoints as instructed in the source */ { gchar *str = gstr->str; gint ln = 0; gchar **lines = NULL; g_assert (str); lines = g_strsplit (str, "\n", -1); g_assert (lines); /* for each line */ while (lines[ln]) { /* check for ;@ */ if (strlen (lines[ln]) > 1) { if (lines[ln][0] == ';' && lines[ln][1] == '@') { /* add breakpoint */ gui_editor_set_mark (app->editor, ln + 1, TRUE); //exit(99); } } ln++; } g_strfreev (lines); } g_string_free (gstr, TRUE); if (replace) _set_file_name (fn); } static gboolean ori_save (gchar * fn, gboolean replace) { gchar *text; FILE *fp; char *nullstr = "NULLSTRING"; int ret; if (!fn) fn = nullstr; if (replace) { fp = fopen (fn, "r"); if (fp != NULL) { GtkWidget *dialog; GtkResponseType response; dialog = gtk_message_dialog_new (GTK_WINDOW(app->window_main), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _("File already exists; overwrite it?")); response = gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); if (response == GTK_RESPONSE_NO) return FALSE; fclose (fp); } } text = gui_editor_get_text (app->editor); fp = fopen (fn, "w"); if (fp == NULL) { gchar errmsg[MAX_ERR_MSG_SIZE + 1]; g_snprintf (errmsg, MAX_ERR_MSG_SIZE, _("Failed to save <%s>"), fn); gui_app_show_msg (GTK_MESSAGE_ERROR, errmsg); return TRUE; } // return value stored just to avoid compiler warnings. ret = fwrite (text, 1, strlen (text), fp); gtk_text_buffer_set_modified ((GtkTextBuffer *)app->editor->buffer, FALSE); /* debug */ fclose (fp); g_free (text); if (replace) _set_file_name (fn); return TRUE; } void file_op_editor_new (void) { gchar template[] = "\ \n\ ;\n\ \n\ jmp start\n\ \n\ ;data\n\ \n\ \n\ ;code\n\ start: nop\n\ \n\ \n\ hlt"; if (gtk_text_buffer_get_modified ((GtkTextBuffer *)app->editor->buffer)) { if (!file_op_confirm_save()) return; } if (G_UNLIKELY (file_name)) { g_string_free (file_name, TRUE); file_name = NULL; } /* Set template text */ gui_editor_set_text (app->editor, template); gui_editor_goto_line (app->editor, 13); gtk_text_buffer_set_modified ((GtkTextBuffer *)app->editor->buffer, FALSE); } /* funcs related to main editor */ gboolean file_op_editor_save (void) { if (file_name) return ori_save (file_name->str, FALSE); gchar *selected_filename; GtkWidget *file_selector; gboolean is_saved = FALSE; file_selector = create_file_dialog (_("Save file"), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_SAVE); while (!is_saved) { if (gtk_dialog_run (GTK_DIALOG (file_selector)) == GTK_RESPONSE_ACCEPT) { selected_filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (file_selector)); if (recent_manager == NULL) recent_manager = gtk_recent_manager_get_default (); gtk_recent_manager_add_item (recent_manager, g_strconcat ("file://", selected_filename, NULL)); is_saved = ori_save(selected_filename, TRUE); last_open_save_dir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (file_selector)); g_free (selected_filename); } else break; } gtk_widget_destroy (file_selector); return is_saved; } void file_op_editor_save_as (void) { gchar *selected_filename; GtkWidget *file_selector; gboolean is_saved = FALSE; file_selector = create_file_dialog (_("Save file as"), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_SAVE); while (!is_saved) { if (gtk_dialog_run (GTK_DIALOG (file_selector)) == GTK_RESPONSE_ACCEPT) { selected_filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (file_selector)); is_saved = ori_save(selected_filename, TRUE); if (recent_manager == NULL) recent_manager = gtk_recent_manager_get_default (); gtk_recent_manager_add_item (recent_manager, g_strconcat ("file://", selected_filename, NULL)); last_open_save_dir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (file_selector)); g_free (selected_filename); } else break; } gtk_widget_destroy (file_selector); } void file_op_editor_open (void) { if (gtk_text_buffer_get_modified ((GtkTextBuffer *)app->editor->buffer)) { if (!file_op_confirm_save()) return; } gchar *selected_filename; GtkWidget *file_selector; file_selector = create_file_dialog ("Open File", GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_OPEN); if (gtk_dialog_run (GTK_DIALOG (file_selector)) == GTK_RESPONSE_ACCEPT) { selected_filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (file_selector)); if (recent_manager == NULL) recent_manager = gtk_recent_manager_get_default (); gtk_recent_manager_add_item (recent_manager, g_strconcat ("file://", selected_filename, NULL)); ori_open(selected_filename, TRUE); last_open_save_dir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (file_selector)); g_free (selected_filename); } gtk_widget_destroy (file_selector); } /* -- related to listing window */ void file_op_listing_save (gchar * text) { gchar *selected_filename; GtkWidget *file_selector; int ret; FILE *fp; file_selector = create_file_dialog ("Save Op Listing", GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_SAVE); if (gtk_dialog_run (GTK_DIALOG (file_selector)) == GTK_RESPONSE_ACCEPT) { selected_filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (file_selector)); if (recent_manager == NULL) recent_manager = gtk_recent_manager_get_default (); gtk_recent_manager_add_item (recent_manager, g_strconcat ("file://", selected_filename, NULL)); fp = fopen (selected_filename, "w"); if (fp == NULL) { gui_app_show_msg (GTK_MESSAGE_ERROR, _("Failed to save listing file")); return; } // return value stored just to avoid compiler warnings. ret = fwrite (text, 1, strlen (text), fp); fclose (fp); last_open_save_dir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (file_selector)); g_free (selected_filename); } gtk_widget_destroy (file_selector); } GtkWidget * create_file_dialog(const gchar *title, GtkFileChooserAction action, const gchar *stock) { GtkWidget *file_selector; GtkFileFilter *file_filter; if (default_dir == NULL) { default_dir = g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS); } file_selector = gtk_file_chooser_dialog_new (title, NULL, action, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, stock, GTK_RESPONSE_ACCEPT, NULL); if (last_open_save_dir == NULL) gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(file_selector), default_dir); else gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(file_selector), last_open_save_dir); gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER(file_selector), TRUE); file_filter = gtk_file_filter_new(); gtk_file_filter_set_name (file_filter, "ASM Files"); gtk_file_filter_add_pattern(file_filter, "*.asm"); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(file_selector), GTK_FILE_FILTER(file_filter)); file_filter = gtk_file_filter_new(); gtk_file_filter_set_name (file_filter, "All Files"); gtk_file_filter_add_pattern(file_filter, "*"); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(file_selector), GTK_FILE_FILTER(file_filter)); return file_selector; } /* to confirm saving the file */ gboolean file_op_confirm_save (void) { GtkWidget *dialog; GtkResponseType response; gchar *primary_msg; gchar *secondary_msg; primary_msg = g_strdup_printf ("Close the file without saving?"); secondary_msg = g_strdup_printf ("All the changes made will be lost if unsaved." ); dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, "%s", primary_msg); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", secondary_msg); g_free (primary_msg); g_free (secondary_msg); gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_DISCARD, GTK_RESPONSE_CLOSE); gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_SAVE, GTK_RESPONSE_OK); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_CANCEL); response = gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); if (response == GTK_RESPONSE_CLOSE) return TRUE; if (response == GTK_RESPONSE_OK) return file_op_editor_save (); return FALSE; } gnusim8085-1.4.1/src/gui-list-stack.c0000644000175000017500000001310713266555051017031 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "config.h" #include "gui-list-stack.h" #include "gui-app.h" #include "gui-view.h" #include "8085.h" #include "asm-ds-limits.h" #include "asm-ds-symtable.h" static GtkTreeStore *store = NULL; static GtkTreeView *view = NULL; static gboolean child_position = FALSE; static GtkTreeIter last_iter; static GtkTreeIter mark_iter; enum { C_ADDR, C_NAME, C_VAL, C_VAL_HEX, N_COLS }; static void _add_column (GtkTreeView * view, gint id, gchar * title) { GtkCellRenderer *renderer; GtkTreeViewColumn *column; g_assert (view); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes (title, renderer, "text", id, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); } void stack_modified (eef_addr_t sp, gboolean pushed, gchar what); static void create_me (void) { /* create store */ store = gtk_tree_store_new (N_COLS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING); g_assert (store); /* create view */ view = GTK_TREE_VIEW (gtk_tree_view_new_with_model (GTK_TREE_MODEL (store))); g_assert (view); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (view), TRUE); gtk_widget_show (GTK_WIDGET (view)); /* add column */ _add_column (view, C_ADDR, _("Stack Loc")); _add_column (view, C_NAME, _("Proc/Reg")); _add_column (view, C_VAL_HEX, _("Value")); _add_column (view, C_VAL, g_strconcat(_("Value"), " (", _("Decimal"), ")", NULL)); } void gui_list_stack_attach_me (void) { GtkWidget *cont; cont = lookup_widget (app->window_main, "main_stack_scroll"); g_assert (cont); create_me (); gtk_container_add (GTK_CONTAINER (cont), GTK_WIDGET (view)); /* setup callback */ eef_set_stack_callback (stack_modified); } static eef_addr_t stack_addr[65536]; /* addr of pushed data locations */ static gchar stack_type[65536]; /* stack_type[i] contains type of [i] */ static int stack_addr_top = -1; void stack_modified (eef_addr_t sp, gboolean pushed, gchar what) { if (pushed) { /* check if stack size exceeds */ if (stack_addr_top == 65536 - 1) { gui_app_show_msg (GTK_MESSAGE_WARNING, _ ("Stack size exceeded. Stop the execution")); return; } /* push to stack */ stack_addr[++stack_addr_top] = sp; stack_type[stack_addr[stack_addr_top]] = what; } else { /* check of illegal pop */ if (stack_addr_top == -1) { gui_app_show_msg (GTK_MESSAGE_WARNING, _ ("More number of POP are executed than PUSH. Stop the execution and check the logic of your program")); return; } /* pop */ stack_addr_top--; } } void gui_list_stack_clear (void) { /* clear view */ gtk_tree_store_clear (store); child_position = FALSE; } void gui_list_stack_reset (void) { /* reset stack */ stack_addr_top = -1; } void gui_list_stack_add (guint16 addr, const char *sym_name, guint16 val) { GtkTreeIter iter; gchar str[] = "XXXXh"; gchar add_str[5] = "XXXX"; guint8 s1, s2; g_assert (store); g_assert (sym_name); gtk_tree_store_append (store, &iter, (child_position) ? &mark_iter : NULL); /* address */ eef_split16 (addr, &s1, &s2); gui_util_gen_hex (s1, add_str, add_str + 1); gui_util_gen_hex (s2, add_str + 2, add_str + 3); /* value */ eef_split16 (val, &s1, &s2); gui_util_gen_hex (s1, str, str + 1); gui_util_gen_hex (s2, str + 2, str + 3); gtk_tree_store_set (store, &iter, C_ADDR, add_str, C_NAME, sym_name, C_VAL, val, C_VAL_HEX, str, -1); last_iter = iter; } void gui_list_stack_child_state (gboolean yes) { child_position = yes; if (yes) mark_iter = last_iter; } void gui_list_stack_reload (void) { int i; gboolean prev_is_p = FALSE; /* for each stack content add it to list */ for (i = 0; i <= stack_addr_top; ++i) { gchar symbol[ASM_DS_MAX_IDENTIFIER_LENGTH] = ""; eef_addr_t sp = stack_addr[i]; gchar what = stack_type[sp]; eef_addr_t mem16 = eef_mem16_get (sp); /* setup symbol name */ if (what == 'P') { /* procedure address! */ eef_addr_t called_addr = eef_mem16_get (mem16 - 2); /* assuming call instr. */ /* find proc name */ g_snprintf (symbol, ASM_DS_MAX_IDENTIFIER_LENGTH - 1, "%s", asm_sym_symbol_at (called_addr, ASM_SYM_LABEL)); gui_list_stack_child_state (FALSE); prev_is_p = TRUE; } else { /* Register Pair contents */ g_snprintf (symbol, ASM_DS_MAX_IDENTIFIER_LENGTH - 1, "[%c%c]", what, eef_regpair_get_another (what)); if (prev_is_p) gui_list_stack_child_state (TRUE); prev_is_p = FALSE; } /* create children instead parent if approriate */ /*if (what != 'P') * gui_list_stack_child_state (TRUE); * else if (child_position) * gui_list_stack_child_state (FALSE); */ /* add to view */ gui_list_stack_add (sp, symbol, mem16); } } gnusim8085-1.4.1/src/8085-link.c0000644000175000017500000000244012767046204015526 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "8085-link.h" #define LINK_TOTAL 65536 static gint link_data[LINK_TOTAL] = { -1 }; /* clear stuff - call this before assembly */ void eef_link_clear (void) { int i; for (i=0; i= 0 ); link_data[addr] = lineno; } /* main func */ gint eef_link_get_line_no (gint addr) { g_assert (addr < LINK_TOTAL && addr >= 0 ); return link_data[addr]; } gnusim8085-1.4.1/src/callbacks.c0000644000175000017500000003773613327077752016133 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "callbacks.h" #include "config.h" #include "interface.h" #include "gui-app.h" #include "gui-editor.h" #include "8085-asm.h" #include "asm-source.h" #include "gui-view.h" #include "bridge.h" #include "asm-listing.h" #include "file-op.h" #include "gui-list-memory.h" #include "gui-list-io.h" #define DEFAULT_LOAD_ADDR 0x4200 gint start_addr = 0x4200; GUIEditor *edit = NULL; GtkWidget *wind = NULL; GtkWidget *tutorial = NULL; GtkWidget *filew = NULL; gboolean on_window_main_delete_event (GtkWidget * widget, GdkEvent * event, gpointer user_data) { if (gtk_text_buffer_get_modified ((GtkTextBuffer *)app->editor->buffer)) { if (!file_op_confirm_save()) return TRUE; } gui_app_destroy (); return FALSE; } gint conv_hex_to_dec (gchar * hex) { return strtoul ((const char *) hex, NULL, 16); } GString * conv_dec_to_hex (gint dec) { GString *hex; hex = g_string_new (""); if (dec == 0) { g_string_append (hex, "0"); return hex; } while (dec) { gint lfbits; gchar digit[2] = "X"; lfbits = dec & 0xF; if (lfbits < 10) digit[0] = '0' + lfbits; else digit[0] = 'A' + lfbits - 10; g_string_prepend (hex, digit); dec >>= 4; } return hex; } void on_new1_activate (GtkMenuItem * menuitem, gpointer user_data) { file_op_editor_new (); } void on_open1_activate (GtkMenuItem * menuitem, gpointer user_data) { file_op_editor_open (); } void on_save1_activate (GtkMenuItem * menuitem, gpointer user_data) { file_op_editor_save (); } void on_save_as1_activate (GtkMenuItem * menuitem, gpointer user_data) { file_op_editor_save_as (); } void on_print_activate (GtkAction * menuitem, gpointer user_data) { g_assert (app->editor); gui_editor_print (app->editor); } void on_font_select_activate (GtkAction * menuitem, gpointer user_data) { GtkWidget *font_selection_dialog = NULL; const gchar *font_name = gui_editor_get_font (app->editor); gint action = 0; g_assert (app->editor); font_selection_dialog = gtk_font_chooser_dialog_new (_("Select font"), NULL); gtk_font_chooser_set_font (GTK_FONT_CHOOSER (font_selection_dialog), font_name); action = gtk_dialog_run (GTK_DIALOG (font_selection_dialog)); switch (action) { case GTK_RESPONSE_OK: font_name = gtk_font_chooser_get_font (GTK_FONT_CHOOSER (font_selection_dialog)); if (font_name) { gui_editor_set_font (app->editor, font_name); } break; default: break; } gtk_widget_destroy(font_selection_dialog); } void on_quit1_activate (GtkMenuItem * menuitem, gpointer user_data) { if (gtk_text_buffer_get_modified ((GtkTextBuffer *)app->editor->buffer)) { if (!file_op_confirm_save()) return; } gtk_main_quit (); } void on_registers1_activate (GtkMenuItem * menuitem, gpointer user_data) { eef_reset_reg (); gui_view_update_reg_flag (FALSE); } void on_flags1_activate (GtkMenuItem * menuitem, gpointer user_data) { eef_reset_flag (); gui_view_update_reg_flag (FALSE); } void on_io_ports1_activate (GtkMenuItem * menuitem, gpointer user_data) { eef_reset_io (); gui_view_update_io_mem (); gui_list_io_update (); } void on_main_memory1_activate (GtkMenuItem * menuitem, gpointer user_data) { eef_reset_mem (); gui_view_update_io_mem (); gui_list_memory_update (); } void on_reset_all1_activate (GtkMenuItem * menuitem, gpointer user_data) { eef_reset_all (); gui_view_update_reg_flag (TRUE); gui_view_update_io_mem (); gui_list_io_update (); gui_list_memory_update (); } static void validate_start_addr (void) { gint la; GtkEntry *entry; entry = GTK_ENTRY (lookup_widget (app->window_main, "main_entry_sa")); g_assert (entry); /* get load address */ if (asm_util_parse_number ((gchar *) gtk_entry_get_text (entry), &la)) start_addr = la; else start_addr = DEFAULT_LOAD_ADDR; } gboolean asm_error = FALSE; void on_assemble1_activate (GtkMenuItem * menuitem, gpointer user_data) { /* assemble file */ gchar *a_text; /* la */ validate_start_addr (); /* get text */ a_text = gui_editor_get_text (app->editor); asm_error = b_assemble (a_text, start_addr); if (asm_error == FALSE) gui_app_show_msg (GTK_MESSAGE_WARNING, _("Program has errors. Check the Message pane.")); g_free (a_text); //disp_list( b_get_src() ); } void on_execute1_activate (GtkMenuItem * menuitem, gpointer user_data) { if (b_get_state () == B_STATE_IDLE) on_assemble1_activate (NULL, NULL); if (asm_error == FALSE) return; if (!b_execute ()) { gui_app_show_msg (GTK_MESSAGE_ERROR, _("Error executing program")); } /* update */ gui_view_update_all (); } void on_step_in1_activate (GtkMenuItem * menuitem, gpointer user_data) { if (b_get_state () == B_STATE_IDLE) on_assemble1_activate (NULL, NULL); if (asm_error == FALSE) return; if (!b_resume_execution (B_TRACE_IN)) { gui_app_show_msg (GTK_MESSAGE_ERROR, _("Error in step in")); } } void on_step_over1_activate (GtkMenuItem * menuitem, gpointer user_data) { if (b_get_state () == B_STATE_IDLE) on_assemble1_activate (NULL, NULL); if (asm_error == FALSE) return; if (!b_resume_execution (B_TRACE_OVER)) { gui_app_show_msg (GTK_MESSAGE_ERROR, _("Error in step over")); } } void on_step_out1_activate (GtkMenuItem * menuitem, gpointer user_data) { if (b_get_state () == B_STATE_IDLE) on_assemble1_activate (NULL, NULL); if (asm_error == FALSE) return; if (!b_resume_execution (B_TRACE_OUT)) { gui_app_show_msg (GTK_MESSAGE_ERROR, _("Error in step out")); } } void on_toggle_breakpoint1_activate (GtkMenuItem * menuitem, gpointer user_data) { b_toggle_breakpoint (); } void on_clear_all_breakpoints1_activate (GtkMenuItem * menuitem, gpointer user_data) { gui_editor_clear_all_marks (app->editor); } void on_stop_execution1_activate (GtkMenuItem * menuitem, gpointer user_data) { b_debug_stop (); } void on_help_activate (GtkMenuItem * menuitem, gpointer user_data) { // Show the HTML help. #ifdef G_OS_WIN32 gchar * html_file_name = g_build_filename (g_win32_get_package_installation_directory_of_module (NULL), "help", "userguide.htm", NULL); #else gchar * html_file_name = g_build_filename (PACKAGE_HELP_DIR, "userguide.htm", NULL); #endif gchar * html_help_uri = g_filename_to_uri(html_file_name, NULL, NULL); g_debug ("HTML Help URI: %s\n", html_help_uri); gtk_show_uri (gdk_screen_get_default(), html_help_uri, GDK_CURRENT_TIME, NULL); g_free (html_file_name); g_free (html_help_uri); } void on_assembler_tutorial1_activate (GtkMenuItem * menuitem, gpointer user_data) { show_tutorial (); } void on_about1_activate (GtkMenuItem * menuitem, gpointer user_data) { /* create about box */ create_dialog_about (); } void show_hide_side_pane (GtkToggleAction * menuitem, gpointer user_data) { GtkWidget *side_pane; side_pane = lookup_widget (app->window_main, "vbox_data"); if (gtk_toggle_action_get_active (menuitem)) gtk_widget_hide (side_pane); else gtk_widget_show (side_pane); } void on_main_io_set_clicked (GtkButton * button, gpointer user_data) { } static void entry_to_mm (gchar * entry_name, gchar * spin_name, guint8 * base) { GtkSpinButton *sb; GtkEntry *entry; const gchar *s; gint val; g_assert (spin_name); g_assert (base); sb = GTK_SPIN_BUTTON (lookup_widget (app->window_main, spin_name)); g_assert (sb); entry = GTK_ENTRY (lookup_widget (app->window_main, entry_name)); g_assert (entry); s = gtk_entry_get_text (entry); if (!asm_util_parse_number ((gchar *) s, &val)) { gui_app_show_msg (GTK_MESSAGE_INFO, _("Enter a valid number within range")); return; } base[(gint) gtk_spin_button_get_value (sb)] = val; if (!strcmp (entry_name,"main_mem_entry")) gui_list_memory_update_single (gtk_spin_button_get_value_as_int (sb)); if (!strcmp (entry_name,"main_io_entry")) gui_list_io_update_single (gtk_spin_button_get_value_as_int (sb)); } static void spin_to_entry (GtkSpinButton * sb, gchar * entry_name, guint8 * base) { GtkEntry *entry; gint val, addr; gchar s[10] = ""; g_assert (base); g_assert (sb); g_assert (entry_name); /* set the value to text box */ entry = GTK_ENTRY (lookup_widget (app->window_main, entry_name)); g_assert (entry); addr = gtk_spin_button_get_value (GTK_SPIN_BUTTON (sb)); g_assert (0 <= addr && addr < 65536); val = base[addr]; g_ascii_dtostr (s, 10, val); gtk_entry_set_text (entry, s); } void on_main_io_spin_changed (GtkEditable * editable, gpointer user_data) { spin_to_entry (GTK_SPIN_BUTTON (editable), "main_io_entry", sys.io); } void on_main_io_update_clicked (GtkButton * button, gpointer user_data) { entry_to_mm ("main_io_entry", "main_io_spin", sys.io); } void on_main_mem_spin_changed (GtkEditable * editable, gpointer user_data) { spin_to_entry (GTK_SPIN_BUTTON (editable), "main_mem_entry", sys.mem); } void on_main_mem_update_clicked (GtkButton * button, gpointer user_data) { entry_to_mm ("main_mem_entry", "main_mem_spin", sys.mem); } void on_show_listing1_activate (GtkMenuItem * menuitem, gpointer user_data) { GString *list; GtkWidget *cont; /* assemble */ on_assemble1_activate (NULL, NULL); if (asm_error == FALSE) return; list = asm_listing_generate (b_get_src ()); //gui_editor_set_text (app->editor, list->str); /* show */ wind = create_window_listing (); cont = lookup_widget (wind, "listing_vbox"); g_assert (cont); edit = gui_editor_new (); g_assert (edit); gui_editor_show (edit); gui_editor_set_text (edit, list->str); gui_editor_set_readonly (edit, TRUE); gtk_box_pack_end (GTK_BOX (cont), edit->scroll, TRUE, TRUE, 0); gtk_window_maximize (GTK_WINDOW (wind)); gtk_widget_show_all (wind); /* TODO clean up of listing window editor on delete event */ /* clean up */ g_string_free (list, TRUE); } void on_listing_save_clicked (GtkButton * button, gpointer user_data) { gchar *ltext; //i_save (); /* FIXME : the save dialog is getting hung in listing window! */ g_assert (edit); ltext = gui_editor_get_text (edit); file_op_listing_save (ltext); } void on_listing_print_clicked (GtkButton * button, gpointer user_data) { g_assert (edit); gui_editor_print (edit); } void on_main_but_to_hex_clicked (GtkButton * button, gpointer user_data) { GtkWidget *hex_entry, *dec_entry; GString *hex; gint dec; hex_entry = lookup_widget (app->window_main, "main_entry_hex"); g_assert (hex_entry); dec_entry = lookup_widget (app->window_main, "main_entry_dec"); g_assert (dec_entry); asm_util_parse_number ((gchar *) gtk_entry_get_text (GTK_ENTRY (dec_entry)), &dec); hex = conv_dec_to_hex (dec); gtk_entry_set_text (GTK_ENTRY (hex_entry), hex->str); g_string_free (hex, TRUE); } void on_main_but_to_dec_clicked (GtkButton * button, gpointer user_data) { GtkWidget *hex_entry, *dec_entry; gchar *hex; gint dec; GString *dec_t; hex_entry = lookup_widget (app->window_main, "main_entry_hex"); g_assert (hex_entry); dec_entry = lookup_widget (app->window_main, "main_entry_dec"); g_assert (dec_entry); hex = (gchar *) gtk_entry_get_text (GTK_ENTRY (hex_entry)); dec = conv_hex_to_dec (hex); dec_t = g_string_new (""); g_string_printf (dec_t, "%d", dec); gtk_entry_set_text (GTK_ENTRY (dec_entry), dec_t->str); g_string_free (dec_t, TRUE); } void on_main_entry_dec_activate (GtkEntry * entry, gpointer user_data) { on_main_but_to_hex_clicked (NULL, NULL); } void on_main_entry_hex_activate (GtkEntry * entry, gpointer user_data) { on_main_but_to_dec_clicked (NULL, NULL); } void on_start_but_tutorial_clicked (GtkButton * button, gpointer user_data) { show_tutorial (); on_start_but_close_clicked (button, NULL); } void on_start_but_open_clicked (GtkButton * button, gpointer user_data) { on_open1_activate (NULL, NULL); on_start_but_close_clicked (button, NULL); } void on_start_but_close_clicked (GtkButton * button, gpointer user_data) { GtkWidget *swd; swd = lookup_widget (GTK_WIDGET (button), "window_start"); gtk_widget_destroy (swd); } void on_mem_list_start_clicked (GtkButton * button, gpointer user_data) { GtkWidget *start_entry; gint start_addr; gchar *text; start_entry = lookup_widget (app->window_main, "mem_list_start"); g_assert (start_entry); if (!asm_util_parse_number (text = (gchar *)gtk_entry_get_text (GTK_ENTRY (start_entry)), &start_addr)) { gui_app_show_msg (GTK_MESSAGE_INFO, _("Enter a valid number within range (0-65535 or 0h-FFFFh)")); return; } gui_list_memory_set_start (start_addr); gui_list_memory_update (); text[strlen (text)] = 'h'; gtk_entry_set_text (GTK_ENTRY (start_entry), text); } void on_mem_list_start_changed (GtkEntry *entry, gpointer user_data) { gint start_addr; gchar *text; g_assert (entry); if (!asm_util_parse_number (text = (gchar *)gtk_entry_get_text (GTK_ENTRY (entry)),&start_addr)) { gui_app_show_msg (GTK_MESSAGE_INFO, _("Enter a valid number within range (0-65535 or 0h-FFFFh)")); return; } gui_list_memory_set_start (start_addr); gui_list_memory_update (); text[strlen (text)] = 'h'; gtk_entry_set_text (GTK_ENTRY (entry), text); } void on_io_list_start_clicked (GtkButton * button, gpointer user_data) { GtkWidget *start_entry; gint start_addr; gchar *text; start_entry = lookup_widget (app->window_main, "io_list_start"); g_assert (start_entry); if (!asm_util_parse_number (text = (gchar *)gtk_entry_get_text (GTK_ENTRY (start_entry)), &start_addr)) { gui_app_show_msg (GTK_MESSAGE_INFO, _("Enter a valid number within range (0-255 / 0h-00FFh)")); return; } gui_list_io_set_start (start_addr); gui_list_io_update (); text[strlen (text)] = 'h'; gtk_entry_set_text (GTK_ENTRY (start_entry), text); } void on_io_list_start_changed (GtkEntry *entry, gpointer user_data) { gint start_addr; gchar *text; g_assert (entry); if (!asm_util_parse_number (text = (gchar *)gtk_entry_get_text (GTK_ENTRY (entry)),&start_addr)) { gui_app_show_msg (GTK_MESSAGE_INFO, _("Enter a valid number within range (0-255 / 0h-00FFh)")); return; } gui_list_io_set_start (start_addr); gui_list_io_update (); text[strlen (text)] = 'h'; gtk_entry_set_text (GTK_ENTRY (entry), text); } void show_tutorial () { GString* tutorial_text = read_tutorial (); GtkWidget *cont; /* show */ tutorial = create_window_tutorial (); cont = lookup_widget (tutorial, "tutorial_vbox"); g_assert (cont); edit = gui_editor_new (); g_assert (edit); gui_editor_show (edit); if (tutorial_text == NULL) { tutorial_text = g_string_new (_("The tutorial file, asm-guide.txt, was not found. It should be present in directory - ")); g_string_append (tutorial_text, PACKAGE_DOC_DIR); } gui_editor_set_text (edit, tutorial_text->str); gui_editor_set_readonly (edit, TRUE); gui_editor_set_show_line_numbers (edit, FALSE); gtk_box_pack_end (GTK_BOX (cont), edit->scroll, TRUE, TRUE, 0); gtk_window_maximize (GTK_WINDOW (tutorial)); gtk_widget_show_all (tutorial); /* clean up */ g_string_free (tutorial_text, TRUE); } void on_line_mark_activated (GtkSourceView *view, GtkTextIter *iter, GdkEventButton *event, gpointer editor) { if ((event->button == 1) && (event->type == GDK_BUTTON_PRESS)) { gint line_no = gtk_text_iter_get_line (iter); gui_editor_toggle_mark_at_line ((GUIEditor *) editor, line_no); } } gnusim8085-1.4.1/src/asm-source.h0000644000175000017500000000576212767046204016264 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * Assembler Input table * This is very imp. ds. * It represents source file in table form * The fields in this data structure will be descriptive * * R. Sridhar */ #ifndef __ASM_SOURCE_H__ #define __ASM_SOURCE_H__ #include #include #include #include #include "asm-ds-limits.h" #include "asm-id.h" #define _(String) gettext (String) G_BEGIN_DECLS typedef struct { /* point to actual source line no - used in generating listing */ gint listing_buffer_line_no; /* generated during first scan */ gchar s_id[ASM_DS_MAX_IDENTIFIER_LENGTH]; /* identifier in first column */ gint16 s_op; /* < 256 - opcode, otherwise pseudo op */ IdOpcode *s_op_id_opcode; IdPseudo *s_op_id_pseudo; gint s_opnd_size; /* 0, 1, 2 */ gchar s_opnd[ASM_DS_MAX_OPERAND]; /* = one of s_id (or) number */ /* generated after final assembling - binary */ guint8 b_op; guint8 b_opnd1; guint8 b_opnd2; /* address in memory */ gint address; } AsmSourceEntry; /* parses "str", whose line_no is "line_no" , returns new */ AsmSourceEntry *asm_source_entry_new (gchar * str, gint line_no); void asm_source_entry_destroy (AsmSourceEntry * entry); typedef struct { /* actual source code */ GString *listing_buffer[ASM_SOURCE_MAX_LINES]; guint listing_buffer_total; /* table - used by assembler */ AsmSourceEntry *entries[ASM_SOURCE_MAX_LINES]; guint entries_total; /* 0 - entries_total-1 in entries */ } AsmSource; /* returns the ds */ AsmSource *asm_source_new (const gchar * text); void asm_source_destroy (AsmSource * src); /* util */ /* very common func * parse the user opnd, query systab if necessary * or parse user number and store it in integer form in "value" */ gboolean asm_source_entry_parse_operand (AsmSourceEntry * entry, gint * value); gboolean asm_source_entry_parse_not_operand_but_this (AsmSourceEntry * entry, gint * value, gchar *symbol); /* returns the length instruction * retunrs 0 if a pseudo op, * exception ( for DB-returns no. of comma+1 and DS value of opnd ) */ gboolean asm_source_entry_get_size (AsmSourceEntry * entry, gint * size); gboolean asm_util_parse_number (gchar * str, gint * value); G_END_DECLS #endif /* __ASM_SOURCE_H__ */ gnusim8085-1.4.1/src/asm-ds-symtable.h0000644000175000017500000000421012767046204017173 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * Assembler DataStructures: Symbol Table * * R. Sridhar */ #ifndef __ASM_DS_SYMTABLE_H__ #define __ASM_DS_SYMTABLE_H__ #include #include "asm-ds-limits.h" G_BEGIN_DECLS typedef enum { ASM_SYM_MACRO, ASM_SYM_VARIABLE, ASM_SYM_LABEL, ASM_SYM_NA } AsmSymType; typedef struct { AsmSymType type; /* type of sym */ char name[ASM_DS_MAX_IDENTIFIER_LENGTH]; /* name of sym */ gpointer data; /* other needed data - value */ gint no_of_data; /* if variable, no. of bytes allocated * for ds, = operand, for db = no. of commas + 1 */ gint listing_no; /* line number of src file(listing) where this symbol is defined */ } AsmSymEntry; /* init */ void asm_sym_init (void); /* destroy */ void asm_sym_clear (void); /* clear sym table */ //void asm_sym_clear (void); /* add symbols, data should be allocated by caller and deallocated by me * returns NULL if a symbol is redifined */ AsmSymEntry *asm_sym_add (AsmSymType type, char *name, gpointer data, gint no_of_data, gint listing_no); /* query symbol */ AsmSymEntry *asm_sym_query (char *name); /* scanning the symtab */ void asm_sym_scan (GHFunc cb, gpointer userdata); /* given a line no, type search for a symbol and return it * returns internal string, don't delete! */ gchar *asm_sym_symbol_at (guint16 mem, AsmSymType type); G_END_DECLS #endif /* __ASM_DS_SYMTABLE_H__ */ gnusim8085-1.4.1/src/gui-keypad.h0000644000175000017500000000217212767046204016235 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * Keypad GUI * * Contains functions related to handling of keypad features * This module will communicate with gui-editor module for * inserting code into editor */ #ifndef __GUI_KEYPAD_H__ #define __GUI_KEYPAD_H__ #include G_BEGIN_DECLS void gui_keypad_attach_me (void); G_END_DECLS #endif /* __GUI_KEYPAD_H__ */ gnusim8085-1.4.1/src/asm-token.h0000644000175000017500000000340312767046204016072 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This module accepts a line of code * and do some stripping * and returns tokens depending upon the delimiters. * Before tokenizing you can filter the string to the maximum * extent. like "label1: mvi a,34h" * * This module is very specific to the assembler syntax * * R. Sridhar */ #ifndef __ASM_TOKEN_H__ #define __ASM_TOKEN_H__ #include G_BEGIN_DECLS typedef struct { gchar *full_string; gchar *next; }AsmTokenizer; /* allocation */ AsmTokenizer *asm_tokenizer_new(gchar *str); void asm_tokenizer_destroy(AsmTokenizer *self); /* call these funcs in order... */ void asm_tokenizer_remove_comment(AsmTokenizer *self); void asm_tokenizer_strip(AsmTokenizer *self); void asm_tokenizer_compress(AsmTokenizer *self); /* ....or call this once */ void asm_tokenizer_ready (AsmTokenizer *self); /* returns next token * caller should free the string */ gchar *asm_tokenizer_next (AsmTokenizer *self, gchar delimiter); G_END_DECLS #endif /* __ASM_TOKEN_H__ */ gnusim8085-1.4.1/src/interface.h0000644000175000017500000000531413325707352016136 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include GtkWidget* create_window_main (void); void create_dialog_about (void); GtkWidget* create_window_listing (void); GtkWidget* create_window_start (GtkWindow *); GtkWidget* create_window_tutorial (void); GtkWidget* create_dialog_isymbol (void); GtkWidget* create_dialog_ireg (void); #define HBOX(spacing) \ gtk_box_new (GTK_ORIENTATION_HORIZONTAL, spacing) #define VBOX(spacing) \ gtk_box_new (GTK_ORIENTATION_VERTICAL, spacing) #define HBUTTONBOX() \ gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL) #define TABLE_ATTACH(table, widget, left, right, top, bottom, xoptions, yoptions, xpadding, ypadding) \ gtk_grid_attach (GTK_GRID (table), widget, left, top, right - left, bottom - top) #define TABLE_ATTACH_DEFAULTS(table, widget, left, right, top, bottom) \ gtk_grid_attach (GTK_GRID (table), widget, left, top, right - left, bottom - top) #define TABLE_SET_ROW_SPACING(table, spacing) \ gtk_grid_set_row_spacing (GTK_GRID (table), spacing) #define TABLE_SET_COLUMN_SPACING(table, spacing) \ gtk_grid_set_column_spacing (GTK_GRID (table), spacing) #define IMAGE_FROM_STOCK(name, size) \ gtk_image_new_from_icon_name (name, size) #define LABEL_STOCK_CLOSE GTK_("_Close") #define LABEL_STOCK_OK GTK_("_OK") #define LABEL_STOCK_PRINT GTK_("_Print") #define IMG_STOCK_CLOSE "window-close" #define IMG_STOCK_DIALOG_INFO "dialog-information" #define IMG_STOCK_EXECUTE "system-run" #define IMG_STOCK_GO_BACK "go-previous" #define IMG_STOCK_GO_FORWARD "go-next" #define IMG_STOCK_HELP "help-browser" #define IMG_STOCK_JUSTIFY_FILL "format-justify-fill" #define IMG_STOCK_KEYPAD "insert-text" #define IMG_STOCK_MEDIA_RECORD "media-record" #define IMG_STOCK_OK "action-ok" #define IMG_STOCK_OPEN "document-open" #define IMG_STOCK_PRINT "document-print" #define IMG_STOCK_REFRESH "view-refresh" #define IMG_STOCK_SAVE_AS "document-save-as" gnusim8085-1.4.1/src/asm-genobj.c0000644000175000017500000001024413266554222016211 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "asm-genobj.h" #include "asm-token.h" #include "asm-err-comm.h" #include "config.h" #include "8085.h" #include "8085-link.h" #define ASM_GENOBJ_INIT_BYTES 500 #define ASM_GENOBJ_DS_MAX 1024 static gboolean str_equal (const gchar * a, const gchar * b) { return !g_ascii_strcasecmp (a, b); } static gboolean add_numbers_to_block (AsmSourceEntry *entry, const gchar * str, EefMemBlock * mblock, gint * total) { gchar **slist, **p; gint val; g_assert (str); g_assert (total); /* split */ slist = g_strsplit (str, ",", -1); /* scan */ p = slist; *total = 0; while (*p) { //if (!asm_util_parse_number (*p, &val)) if (!asm_source_entry_parse_not_operand_but_this (entry, &val, *p)) { return FALSE; } (*total)++; /* add to mem block */ eef_mem_block_grow (mblock, val); p++; } g_strfreev (slist); return TRUE; } EefMemBlock * asm_genobj_generate (AsmSource * src, gint sa) { gint i; gint address = sa; EefMemBlock *mblock; g_assert (src); #define SEND_ERR(ln, str) \ asm_err_comm_send (ln+1, str, ASM_ERR_ERROR); \ return NULL; /* create mem block */ mblock = eef_mem_block_new (ASM_GENOBJ_INIT_BYTES); g_assert (mblock); eef_mem_block_set_start_addr (mblock, sa); /* For each source line */ for (i = 0; i < src->entries_total; i++) { AsmSourceEntry *entry = src->entries[i]; gint line_no = entry->listing_buffer_line_no; /* store address info */ entry->address = address; /* If pseudo op */ if (entry->s_op >= 256) { /* If DS */ if (str_equal ("DS", entry->s_op_id_pseudo->op_str)) { gint val; if (!asm_source_entry_parse_operand (entry, &val)) { SEND_ERR (line_no, _("Invalid data size")); } if (val < 0 || val > ASM_GENOBJ_INIT_BYTES) { SEND_ERR (line_no, _("DS: Exceeded limit")); } address += val; entry->b_opnd1 = val; eef_mem_block_grow_n (mblock, 0, val); } /* If DB */ else if (str_equal ("DB", entry->s_op_id_pseudo->op_str)) { gint val; if (!add_numbers_to_block (entry, entry->s_opnd, mblock, &val)) { SEND_ERR (line_no, _("DB: Operand error")); } address += val; } } /* If opcode */ else { IdOpcode *id_op = entry->s_op_id_opcode; g_assert (id_op); /* link */ eef_link_add (address, entry->listing_buffer_line_no); /* add opcode */ address += 1; eef_mem_block_grow (mblock, id_op->op_num); entry->b_op = id_op->op_num; /* add operands if any */ if (id_op->user_args) { gint val; guint8 val_h, val_l; if (!asm_source_entry_parse_operand (entry, &val)) { SEND_ERR (line_no, _("Invalid operand or symbol. Check whether operands start with a number. e.g a0H should be 0a0H")); } eef_split16 (val, &val_h, &val_l); entry->b_opnd1 = val_l; entry->b_opnd2 = val_h; /* should we add 1 byte or 2 bytes */ if (id_op->user_args == 1) { address++; eef_mem_block_grow (mblock, val); entry->b_opnd1 = val; } else { address += 2; eef_mem_block_grow (mblock, val_l); entry->b_opnd1 = val_l; eef_mem_block_grow (mblock, val_h); entry->b_opnd2 = val_h; } g_assert (id_op->user_args < 3); } /* if operands */ } /* If opcode */ } /* for each source line */ return mblock; } gnusim8085-1.4.1/src/support.c0000644000175000017500000001521713325703031015676 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "config.h" #include "support.h" GtkWidget* lookup_widget (GtkWidget *widget, const gchar *widget_name) { GtkWidget *parent, *found_widget; for (;;) { if (GTK_IS_MENU (widget)) parent = gtk_menu_get_attach_widget (GTK_MENU (widget)); else parent = gtk_widget_get_parent (GTK_WIDGET (widget)); if (!parent) parent = (GtkWidget*) g_object_get_data (G_OBJECT (widget), "GladeParentKey"); if (parent == NULL) break; widget = parent; } found_widget = (GtkWidget*) g_object_get_data (G_OBJECT (widget), widget_name); if (!found_widget) g_warning ("Widget not found: %s", widget_name); return found_widget; } GtkAction* lookup_action_widget (GtkWidget *widget, const gchar *widget_name) { GtkWidget *parent; GtkAction *found_widget; for (;;) { if (GTK_IS_MENU (widget)) parent = gtk_menu_get_attach_widget (GTK_MENU (widget)); else parent = gtk_widget_get_parent (GTK_WIDGET (widget)); if (!parent) parent = (GtkWidget*) g_object_get_data (G_OBJECT (widget), "GladeParentKey"); if (parent == NULL) break; widget = parent; } found_widget = (GtkAction*) g_object_get_data (G_OBJECT (widget), widget_name); if (!found_widget) g_warning ("Widget not found: %s", widget_name); return found_widget; } /* This is an internally used function to create pixmaps. */ GdkPixbuf* create_pixbuf (const gchar *filename) { gchar *pathname = NULL; GdkPixbuf *pixbuf; GError *error = NULL; if (!filename || !filename[0]) return NULL; pathname = NULL; if (!pathname) { GString *str; str = g_string_new(PACKAGE_PIXMAPS_DIR); g_string_append(str, "/"); g_string_append(str, filename); pathname = g_strdup(str->str); g_string_free(str, TRUE); } pixbuf = gdk_pixbuf_new_from_file (pathname, &error); if (!pixbuf) { GString *str; error = NULL; pathname = NULL; str = g_string_new("pixmaps/"); g_string_append(str, filename); pathname = g_strdup(str->str); g_string_free(str, TRUE); pixbuf = gdk_pixbuf_new_from_file (pathname, &error); } if (!pixbuf) { fprintf (stderr, "Failed to load pixbuf file: %s: %s\n", pathname, error->message); g_error_free (error); } g_free (pathname); return pixbuf; } gchar** read_authors (){ gchar *pathname = NULL; gchar **authors; FILE *fp; GString *gstr; char *ret; pathname = NULL; if (!pathname) { GString *str; str = g_string_new(PACKAGE_DOC_DIR); g_string_append(str, "/"); g_string_append(str, "AUTHORS"); pathname = g_strdup(str->str); g_string_free(str, TRUE); } fp = fopen (pathname, "r"); if (fp == NULL) { GString *str; pathname = NULL; str = g_string_new(""); g_string_append(str, "AUTHORS"); pathname = g_strdup(str->str); g_string_free(str, TRUE); } fp = fopen (pathname, "r"); if (fp == NULL) { fprintf (stderr, "Failed to load authors file: %s\n", pathname); return NULL; } gstr = g_string_new (""); while (!feof (fp)) { gchar buf[300] = { 0 }; // return value stored just to avoid compiler warnings. ret = fgets (buf, 100, fp); g_string_append (gstr, buf); } authors = g_strsplit(gstr->str, "\n", -1); g_string_free (gstr, TRUE); g_free (pathname); return authors; } GString* read_tutorial (){ gchar *pathname = NULL; FILE *fp; GString *gstr; char *ret; pathname = NULL; if (!pathname) { GString *str; str = g_string_new(PACKAGE_DOC_DIR); g_string_append(str, "/"); g_string_append(str, "asm-guide.txt"); pathname = g_strdup(str->str); g_string_free(str, TRUE); } fp = fopen (pathname, "r"); if (fp == NULL) { GString *str; pathname = NULL; str = g_string_new(""); g_string_append(str, "asm-guide.txt"); pathname = g_strdup(str->str); g_string_free(str, TRUE); } fp = fopen (pathname, "r"); if (fp == NULL) { GString *str; pathname = NULL; str = g_string_new(""); g_string_append(str, "doc/asm-guide.txt"); pathname = g_strdup(str->str); g_string_free(str, TRUE); } fp = fopen (pathname, "r"); if (fp == NULL) { fprintf (stderr, "Failed to load tutorial file: %s\n", pathname); return NULL; } gstr = g_string_new (""); while (!feof (fp)) { gchar buf[300] = { 0 }; // return value stored just to avoid compiler warnings. ret = fgets (buf, 100, fp); g_string_append (gstr, buf); } g_free (pathname); return gstr; } /* A wrapper function to create button with stock items. */ GtkWidget* button_from_stock (const gchar *label, const gchar *icon_name) { GtkWidget* button; button = gtk_button_new_with_mnemonic (label); if (icon_name != NULL) gtk_button_set_image (GTK_BUTTON (button), gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_BUTTON)); gtk_button_set_always_show_image (GTK_BUTTON (button), TRUE); return button; } /* A wrapper function to create button with stock image and custom label. */ GtkWidget* button_from_stock_img_custom_label (const gchar *label, const gchar *icon_name) { GtkWidget* button; button = gtk_button_new_with_mnemonic (label); if (icon_name != NULL) gtk_button_set_image (GTK_BUTTON (button), gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_BUTTON)); gtk_button_set_always_show_image (GTK_BUTTON (button), TRUE); return button; } gnusim8085-1.4.1/src/asm-id.h0000644000175000017500000000402612767046204015350 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This contains the opcode and pseudo information * Each is assigned an ID. if ID < 256 it is a opcode otherwise pseudo op * * R. Sridhar */ #ifndef __ASM_ID_H__ #define __ASM_ID_H__ #include #include "asm-ds-limits.h" G_BEGIN_DECLS /* OPCODE */ typedef struct { gint op_num; gchar op_str[ASM_DS_MAX_OPCODE_LENGTH]; gint num_args; gchar arg1[4]; gchar arg2[4]; gint user_args; /* 0 - no arg, 1 - byte, 2 - word */ gchar *op_desc; /* describes the instructions */ } IdOpcode; IdOpcode *asm_id_opcode_lookup (gchar * op_name, gchar * arg1, gchar * arg2); /* PSEUDO */ typedef struct { gint op_num; /* >= 256 */ gchar op_str[ASM_DS_MAX_OPCODE_LENGTH]; gint user_args; /* 0 - no arg, n args seperated by comma */ } IdPseudo; typedef enum { ID_PSEUDO_DB = 500, ID_PSEUDO_DS, ID_PSEUDO_EQU = 300 }IdPseudoId; IdPseudo *asm_id_pseudo_lookup (gchar * op_name); /* returns space seperated list of all opcode names * for use in syntax highlighting */ gchar *asm_id_return_all_opcode_names(void); /* Get datastructure pointer */ IdOpcode * asm_id_get_opcode (void); IdPseudo * asm_id_get_pseudo (void); gint asm_id_total_opcodes (void); gint asm_id_total_pseudos (void); G_END_DECLS #endif /* __ASM_ID_H__ */ gnusim8085-1.4.1/src/asm-err-comm.h0000644000175000017500000000224512767046204016476 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * Error communication channel * between assembler and interface (gui?) * * R. Sridhar */ #ifndef __ASM_ERR_COMM_H__ #define __ASM_ERR_COMM_H__ #include G_BEGIN_DECLS typedef enum { ASM_ERR_ERROR, ASM_ERR_WARNING, ASM_ERR_MESSAGE }AsmErrType; void asm_err_comm_send (gint line_no, gchar *err_msg, AsmErrType type); G_END_DECLS #endif /* __ASM_ERR_COMM_H__ */ gnusim8085-1.4.1/src/8085-asm.h0000644000175000017500000000303612767046204015360 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * Main assembler definition file * Use this file to interface with the assembler * and possibly to some extent with 8085 * * R. Sridhar */ #ifndef __8085_ASM_H__ #define __8085_ASM_H__ #include #include "asm-ds-limits.h" #include "asm-id.h" #include "asm-source.h" #include "asm-genobj.h" #include "asm-gensym.h" #include "asm-err-comm.h" #include "asm-ds-symtable.h" G_BEGIN_DECLS /* call this when you are prepraring to assemble */ void eef_asm_init(void); /* call this to deallocate memory used by assembler */ void eef_asm_destroy(void); /* assemble this text and load it into memory */ gboolean eef_asm_assemble (const char *text, gint load_address, AsmSource **src_r, EefMemBlock **block_r); G_END_DECLS #endif /* __8085_ASM_H__ */ gnusim8085-1.4.1/src/main.c0000644000175000017500000000510113325703060015077 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include "config.h" #include "interface.h" #include "gui-app.h" #include "gui-list-message.h" #include "asm-ds-symtable.h" #include "gui-list-data.h" #include "gui-list-stack.h" #include "gui-keypad.h" #include "gui-list-memory.h" #include "gui-list-io.h" #include "bridge.h" #include "callbacks.h" #include "file-op.h" int main (int argc, char *argv[]) { GtkWidget *statusbar; gchar *localedir = LOCALEDIR; #ifdef G_OS_WIN32 gchar *root = g_win32_get_package_installation_directory_of_module (NULL); localedir = g_build_filename (root, "share", "locale", NULL); g_free (root); #endif setlocale (LC_ALL, ""); bindtextdomain (PACKAGE, localedir); bind_textdomain_codeset (PACKAGE, "UTF-8"); textdomain (PACKAGE); gtk_init (&argc, &argv); g_type_class_unref (g_type_class_ref (GTK_TYPE_BUTTON)); g_object_set (gtk_settings_get_default (), "gtk-button-images", TRUE, NULL); /* create app */ gui_app_new (); asm_sym_init (); /* add extra */ gui_list_message_attach_me (); gui_list_data_attach_me (); gui_list_stack_attach_me (); gui_keypad_attach_me (); gui_list_memory_attach_me (); gui_list_memory_initialize (); gui_list_io_attach_me (); gui_list_io_initialize (); b_init (); /* Start with NEW file */ on_new1_activate (NULL, NULL); /* show start with dialog */ gui_app_show (); statusbar = lookup_widget (app->window_main, "main_statusbar"); g_assert (statusbar); gtk_statusbar_push (GTK_STATUSBAR (statusbar), gtk_statusbar_get_context_id (GTK_STATUSBAR(statusbar), "Simulator"), _("Simulator: Idle")); /* open file specified in command line if any */ if (argc > 1) ori_open (argv[1], TRUE); else gtk_widget_show (create_window_start (GTK_WINDOW (app->window_main))); gtk_main (); return 0; } gnusim8085-1.4.1/src/asm-err-comm.c0000644000175000017500000000200512767046204016463 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "asm-err-comm.h" #include "gui-list-message.h" void asm_err_comm_send (gint line_no, gchar * err_msg, AsmErrType type) { g_assert (err_msg); /* send message */ gui_list_message_add (err_msg, line_no, type); } gnusim8085-1.4.1/src/asm-ds-symtable.c0000644000175000017500000000657312767046204017204 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "asm-ds-symtable.h" #include "asm-source.h" GHashTable *hash_table = NULL; static void _asm_sym_delete_value (gpointer data) { AsmSymEntry *entry = (AsmSymEntry *) data; g_free (entry); } /* init */ void asm_sym_init (void) { g_assert (hash_table == NULL); hash_table = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, _asm_sym_delete_value); g_assert (hash_table); } /* deinit */ gboolean ret_true (gpointer key, gpointer value, gpointer user_data) { return TRUE; } void asm_sym_clear (void) { g_assert (hash_table); g_hash_table_destroy (hash_table); hash_table = NULL; asm_sym_init (); //g_hash_table_foreach_remove (hash_table, ret_true, NULL); } /* clear sym table - not needed now void asm_sym_clear (void) { g_assert (hash_table); asm_sym_destroy (); asm_sym_init (); }*/ static AsmSymEntry * _asm_sym_entry_new (AsmSymType type, char *name, gpointer data, gint no_of_data, gint lno) { AsmSymEntry *entry; g_assert (name); entry = g_malloc (sizeof (AsmSymEntry)); g_assert (entry); entry->type = type; g_stpcpy (entry->name, name); entry->data = data; entry->no_of_data = no_of_data; entry->listing_no = lno; return entry; } /* add symbols, data should be allocated by caller and deallocated by me * returns NULL if a symbol is redifined */ AsmSymEntry * asm_sym_add (AsmSymType type, char *name, gpointer data, gint no_of_data, gint listing_no) { AsmSymEntry *entry; /* return if exists */ if (g_hash_table_lookup (hash_table, name)) return NULL; entry = _asm_sym_entry_new (type, name, data, no_of_data, listing_no); /* debug */ g_hash_table_insert (hash_table, entry->name, entry); return entry; } /* query symbol */ AsmSymEntry * asm_sym_query (char *name) { return g_hash_table_lookup (hash_table, name); } /* scan symbol table */ void asm_sym_scan (GHFunc cb, gpointer userdata) { g_assert (cb); g_assert (hash_table); g_hash_table_foreach (hash_table, cb, userdata); } static guint _at_cb_mem; static AsmSymType _at_cb_type; static gchar *_at_cb_name = "ERR"; static void _symbol_at_cb (gpointer key, gpointer value, gpointer user_data) { AsmSymEntry *entry = (AsmSymEntry *)value; if ( entry->data == GUINT_TO_POINTER(_at_cb_mem) && entry->type == _at_cb_type ) _at_cb_name = entry->name; //FIXME: how to inform caller to stop calling } gchar * asm_sym_symbol_at (guint16 mem, AsmSymType type) { _at_cb_mem = mem; _at_cb_type = type; //FIXME: this func will loop through ALL symbols always! g_hash_table_foreach (hash_table, _symbol_at_cb, NULL); return _at_cb_name; } gnusim8085-1.4.1/src/gui-list-data.h0000644000175000017500000000222212767046204016636 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * Data List * * R. Sridhar */ #ifndef __GUI_LIST_DATA_H__ #define __GUI_LIST_DATA_H__ #include G_BEGIN_DECLS void gui_list_data_attach_me (void); void gui_list_data_clear(void); void gui_list_data_child_state (gboolean yes); void gui_list_data_add(guint16 addr, const char *sym_name, guint8 val); G_END_DECLS #endif /* __GUI_LIST_DATA_H__*/ gnusim8085-1.4.1/src/8085-memblock.h0000644000175000017500000000367312767046204016400 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This module handles Memory blocks * It is used by assembler to store object code * It is also used by 8085 module to load it into memory * This way assembler can communicate with 8085 directly * * R. Sridhar */ #ifndef __8085_MEMBLOCK_H__ #define __8085_MEMBLOCK_H__ #include #include /* for memset */ #include "8085.h" G_BEGIN_DECLS typedef struct { eef_addr_t start_addr; /* starting addr of memory to load this block in */ eef_addr_t size_allocated; /* total size allocated */ eef_addr_t size; /* size that should be copied to mm */ eef_data_t *buffer; } EefMemBlock; EefMemBlock *eef_mem_block_new (eef_addr_t max_size); void eef_mem_block_delete (EefMemBlock *self, gboolean also_buffer); void eef_mem_block_set_start_addr (EefMemBlock *self, eef_addr_t sa); /* operations */ /* realloc */ void eef_mem_block_realloc_buffer (EefMemBlock *self, eef_addr_t nsz); /* inc size by adding data */ void eef_mem_block_grow (EefMemBlock *self, eef_data_t data); /* inc size by adding data n times */ void eef_mem_block_grow_n (EefMemBlock *self, eef_data_t data, gint n); G_END_DECLS #endif /* __8085_MEMBLOCK_H__ */ gnusim8085-1.4.1/src/support.h0000644000175000017500000000466313304520432015705 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #define _(String) gettext (String) #define N_(String) (String) #define GTK_(String) dgettext ("gtk30", String) /* * Public Functions. */ /* * This function returns a widget in a component created by Glade. * Call it with the toplevel widget in the component (i.e. a window/dialog), * or alternatively any widget in the component, and the name of the widget * you want returned. */ GtkWidget* lookup_widget (GtkWidget *widget, const gchar *widget_name); /* * This function returns a action widget in a component. * Call it with the toplevel widget in the component (i.e. a window/dialog), * or alternatively any widget in the component, and the name of the widget * you want returned. */ GtkAction* lookup_action_widget (GtkWidget *widget, const gchar *widget_name); /* * Private Functions. */ /* This is used to create the pixbufs used in the interface. */ GdkPixbuf* create_pixbuf (const gchar *filename); /* This is used to read authors from AUTHORS file. */ gchar** read_authors (); /* This is used to read tutorial from asm-guide.txt file. */ GString* read_tutorial (); /* A wrapper function to create button with stock items. */ GtkWidget* button_from_stock (const gchar *label, const gchar *icon_name); /* A wrapper function to create button with stock image and custom label. */ GtkWidget* button_from_stock_img_custom_label (const gchar *label, const gchar *icon_name); gnusim8085-1.4.1/src/gui-list-memory.h0000644000175000017500000000246012767046204017241 0ustar carstencarsten/* Copyright (C) 2010 Debajit Biswas This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GUI_LIST_MEMORY_H__ #define __GUI_LIST_MEMORY_H__ #include #include "gui-app.h" #include "8085.h" #include "asm-source.h" #include "gui-view.h" G_BEGIN_DECLS #define MAX_LIST_LEN 1000 void gui_list_memory_attach_me (void); void gui_list_memory_clear (void); void gui_list_memory_set_start (gint st); void gui_list_memory_initialize (void); void gui_list_memory_update (void); void gui_list_memory_update_single (eef_addr_t addr); G_END_DECLS #endif /* __GUI_LIST_MEMORY_H__*/ gnusim8085-1.4.1/src/gui-editor.c0000644000175000017500000003227113327100724016233 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "gui-editor.h" GUIEditor * gui_editor_new (void) { GUIEditor *self; GPtrArray *dirs; const gchar * const *current_search_path; gchar **lang_spec_search_path; self = g_malloc0 (sizeof (GUIEditor)); self->buffer = gtk_source_buffer_new (NULL); self->widget = gtk_source_view_new_with_buffer (self->buffer); self->scroll = gtk_scrolled_window_new (NULL, NULL); gtk_container_add (GTK_CONTAINER (self->scroll), self->widget); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (self->scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gui_editor_set_font (self, DEFAULT_EDITOR_FONT); self->hltag = gtk_text_buffer_create_tag (GTK_TEXT_BUFFER(self->buffer), HIGHLIGHT_TAG, "background", COLOUR_BG_HL, NULL); self->lang_manager = gtk_source_language_manager_new (); self->style_scheme_manager = gtk_source_style_scheme_manager_get_default (); dirs = g_ptr_array_new(); current_search_path = gtk_source_language_manager_get_search_path(self->lang_manager); for (; current_search_path != NULL && *current_search_path != NULL; ++current_search_path) g_ptr_array_add(dirs, g_strdup(*current_search_path)); // look for spec file in our own directory g_ptr_array_add(dirs, g_strdup(PACKAGE_DATA_DIR)); // look for spec file in data directory when running from svn g_ptr_array_add(dirs, g_strdup("data")); // look for spec file in current directory, when running on windows g_ptr_array_add(dirs, g_strdup(".")); g_ptr_array_add(dirs, g_strdup(NULL)); lang_spec_search_path = (gchar **)g_ptr_array_free(dirs, FALSE); gtk_source_language_manager_set_search_path (self->lang_manager, lang_spec_search_path); gtk_source_style_scheme_manager_append_search_path (self->style_scheme_manager, "data"); gtk_source_style_scheme_manager_append_search_path (self->style_scheme_manager, "."); GtkSourceMarkAttributes *mark_attributes = gtk_source_mark_attributes_new (); gtk_source_mark_attributes_set_icon_name (mark_attributes, IMG_STOCK_MEDIA_RECORD); gtk_source_view_set_mark_attributes (GTK_SOURCE_VIEW (self->widget), MARKER_BREAKPOINT, mark_attributes, 0); return self; } void gui_editor_show (GUIEditor * self) { gtk_widget_show (GTK_WIDGET (self->widget)); gtk_widget_show (GTK_WIDGET (self->scroll)); gtk_source_view_set_show_line_numbers (GTK_SOURCE_VIEW(self->widget), TRUE); self->language = gtk_source_language_manager_get_language(self->lang_manager,"8085_asm"); if (self->language != NULL){ gtk_source_buffer_set_language (self->buffer, self->language); gtk_source_buffer_set_style_scheme (self->buffer, gtk_source_style_scheme_manager_get_scheme(self->style_scheme_manager,"classic")); gtk_source_buffer_set_highlight_syntax (self->buffer, TRUE); } self->mark = gtk_text_buffer_get_insert (GTK_TEXT_BUFFER(self->buffer)); gtk_source_view_set_show_line_marks (GTK_SOURCE_VIEW(self->widget), TRUE); } void gui_editor_destroy (GUIEditor * self) { gtk_widget_destroy (self->widget); g_free (self); } /* return new string and clones the string passed to it */ gchar * gui_editor_get_text (GUIEditor * self) { g_assert (self); GtkTextIter *start = g_malloc0 (sizeof (GtkTextIter)); GtkTextIter *end = g_malloc0 (sizeof (GtkTextIter)); gtk_text_buffer_get_bounds (GTK_TEXT_BUFFER(self->buffer), start, end); return gtk_text_buffer_get_text(GTK_TEXT_BUFFER(self->buffer),start,end,FALSE); } void gui_editor_set_text (GUIEditor * self, const gchar * text) { g_assert (self); gtk_text_buffer_set_text(GTK_TEXT_BUFFER(self->buffer),text,-1); } void gui_editor_set_mark (GUIEditor * self, guint line_no, gboolean set) { gtk_text_buffer_get_iter_at_line (GTK_TEXT_BUFFER(self->buffer), &(self->iter), line_no); gtk_source_buffer_create_source_mark (self->buffer, NULL, MARKER_BREAKPOINT, &(self->iter)); g_assert (self); } void gui_editor_set_highlight (GUIEditor * self, guint line_no, gboolean set) { g_assert (self); GtkTextIter line_start, line_end; /* get line bounds */ gtk_text_buffer_get_iter_at_line (GTK_TEXT_BUFFER (self->buffer), &line_start, (line_no)); line_end = line_start; gtk_text_iter_forward_to_line_end (&line_end); if (set) gtk_text_buffer_apply_tag (GTK_TEXT_BUFFER(self->buffer), self->hltag, &line_start, &line_end); else gtk_text_buffer_remove_tag (GTK_TEXT_BUFFER(self->buffer), self->hltag, &line_start, &line_end); } void gui_editor_toggle_mark (GUIEditor * self) { g_assert (self); gint y_buf; GtkTextIter line_start, line_end; GtkTextMark *insert; GSList *marker_list; GtkSourceMark *marker; insert = gtk_text_buffer_get_insert (GTK_TEXT_BUFFER(self->buffer)); gtk_text_buffer_get_iter_at_mark (GTK_TEXT_BUFFER(self->buffer), &(self->iter), insert); y_buf = gtk_text_iter_get_line(&(self->iter)); /* get line bounds */ gtk_text_buffer_get_iter_at_line (GTK_TEXT_BUFFER (self->buffer), &line_start, y_buf); line_end = line_start; gtk_text_iter_forward_to_line_end (&line_end); /* get the breakpoint markers already in the line */ marker_list = gtk_source_buffer_get_source_marks_at_line (self->buffer, y_buf, MARKER_BREAKPOINT); if (marker_list != NULL && g_slist_length(marker_list)!=0) { /* markers were found, so delete them */ gtk_source_buffer_remove_source_marks (self->buffer, &line_start, &line_end, MARKER_BREAKPOINT); } else { /* no marker found -> create one */ marker = gtk_source_buffer_create_source_mark (self->buffer, NULL, MARKER_BREAKPOINT, &(self->iter)); } g_slist_free (marker_list); } void gui_editor_toggle_mark_at_line (GUIEditor * self, gint line_no) { g_assert (self); GtkTextIter line_start, line_end; GSList *marker_list; GtkSourceMark *marker; /* get line bounds */ gtk_text_buffer_get_iter_at_line (GTK_TEXT_BUFFER (self->buffer), &line_start, line_no); line_end = line_start; gtk_text_iter_forward_to_line_end (&line_end); /* get the breakpoint markers already in the line */ marker_list = gtk_source_buffer_get_source_marks_at_line (self->buffer, line_no, MARKER_BREAKPOINT); if (marker_list != NULL && g_slist_length(marker_list)!=0) { /* markers were found, so delete them */ gtk_source_buffer_remove_source_marks (self->buffer, &line_start, &line_end, MARKER_BREAKPOINT); } else { /* no marker found -> create one */ marker = gtk_source_buffer_create_source_mark (self->buffer, NULL, MARKER_BREAKPOINT, &(line_start)); } g_slist_free (marker_list); } void gui_editor_set_margin_toggle_mark (GUIEditor * self) { g_signal_connect ((gpointer) self->widget, "line-mark-activated", G_CALLBACK (on_line_mark_activated), self); } void gui_editor_clear_all_highlights (GUIEditor * self) { GtkTextIter buffer_start, buffer_end; gtk_text_buffer_get_bounds (GTK_TEXT_BUFFER(self->buffer), &buffer_start, &buffer_end); gtk_text_buffer_remove_tag (GTK_TEXT_BUFFER(self->buffer), self->hltag, &buffer_start, &buffer_end); } gboolean gui_editor_is_marked (GUIEditor * self, gint ln) { GtkTextIter line_start, line_end; GSList *list_iter; /* get line bounds */ gtk_text_buffer_get_iter_at_line (GTK_TEXT_BUFFER (self->buffer), &line_start, ln); line_end = line_start; gtk_text_iter_forward_to_line_end (&line_end); /* get the markers already in the line */ list_iter = gtk_source_buffer_get_source_marks_at_iter (self->buffer, &line_start, NULL); /* search for the breakpoint marker */ while (list_iter != NULL) { GtkSourceMark *tmp = list_iter->data; const gchar *tmp_type = gtk_source_mark_get_category (tmp); if (tmp_type && !strcmp (tmp_type, MARKER_BREAKPOINT)) { return TRUE; } list_iter = g_slist_next (list_iter); } return FALSE; } void gui_editor_clear_all_marks (GUIEditor * self) { GtkTextIter buffer_start, buffer_end; /* get buffer bounds */ gtk_text_buffer_get_bounds (GTK_TEXT_BUFFER(self->buffer), &buffer_start, &buffer_end); /* delete all breakpoint mark */ gtk_source_buffer_remove_source_marks (self->buffer, &buffer_start, &buffer_end, MARKER_BREAKPOINT); } void gui_editor_goto_line (GUIEditor * self, gint ln) { gtk_text_buffer_get_iter_at_line (GTK_TEXT_BUFFER(self->buffer), &(self->iter), (ln -1)); gtk_text_buffer_place_cursor (GTK_TEXT_BUFFER(self->buffer), &(self->iter)); gtk_text_buffer_move_mark (GTK_TEXT_BUFFER(self->buffer), self->mark, &(self->iter)); gtk_text_view_scroll_mark_onscreen (GTK_TEXT_VIEW(self->widget), self->mark); } gint gui_editor_get_line (GUIEditor * self) { gtk_text_buffer_get_iter_at_mark (GTK_TEXT_BUFFER(self->buffer), &(self->iter), self->mark); return gtk_text_iter_get_line (&(self->iter)); } void gui_editor_insert (GUIEditor * self, gchar * text) { gtk_text_buffer_insert_at_cursor (GTK_TEXT_BUFFER(self->buffer), text, -1); } void gui_editor_set_readonly (GUIEditor * self, gboolean val) { gtk_text_view_set_editable (GTK_TEXT_VIEW(self->widget), !val); gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(self->widget), !val); } void gui_editor_set_show_line_numbers (GUIEditor * self, gboolean val) { gtk_source_view_set_show_line_numbers (GTK_SOURCE_VIEW(self->widget), val); } void gui_editor_grab_focus (GUIEditor * self) { gtk_widget_grab_focus (self->widget); } const gchar * gui_editor_get_font (GUIEditor *self) { return self->current_font; } void gui_editor_set_font (GUIEditor *self, const gchar *font_name) { PangoFontDescription *font_desc = NULL; g_return_if_fail (font_name != NULL); font_desc = pango_font_description_from_string (font_name); g_return_if_fail (font_desc != NULL); gtk_widget_modify_font (GTK_WIDGET (self->widget), font_desc); self->current_font = font_name; pango_font_description_free (font_desc); } static void gui_editor_begin_print (GtkPrintOperation *operation, GtkPrintContext *context, GUIEditor *editor) { g_assert (editor->buffer); /* Create a print compositor from the buffer */ editor->print_compositor = gtk_source_print_compositor_new (editor->buffer); /* Set some formatting options for pages */ gtk_source_print_compositor_set_print_header (editor->print_compositor, TRUE); gtk_source_print_compositor_set_print_footer (editor->print_compositor, TRUE); gtk_source_print_compositor_set_header_format (editor->print_compositor, TRUE, NULL, "%N/%Q", NULL); gtk_source_print_compositor_set_footer_format (editor->print_compositor, TRUE, NULL, PACKAGE_URL, NULL); gtk_source_print_compositor_set_left_margin (editor->print_compositor, 15.0, GTK_UNIT_MM); gtk_source_print_compositor_set_right_margin (editor->print_compositor, 15.0, GTK_UNIT_MM); gtk_source_print_compositor_set_bottom_margin (editor->print_compositor, 15.0, GTK_UNIT_MM); /* Pagination */ while (!gtk_source_print_compositor_paginate (editor->print_compositor, context)); gtk_print_operation_set_n_pages (operation, gtk_source_print_compositor_get_n_pages (editor->print_compositor)); } static void gui_editor_draw_page (GtkPrintOperation *operation, GtkPrintContext *context, gint page_nr, GUIEditor *editor) { gtk_source_print_compositor_draw_page (editor->print_compositor, context, page_nr); } void gui_editor_print (GUIEditor *editor) { editor->print_operation = gtk_print_operation_new (); #ifdef G_OS_WIN32 gtk_print_operation_set_unit (editor->print_operation, GTK_UNIT_POINTS); #endif GtkPrintOperationResult res; GError *error; GtkWidget *error_dialog; g_signal_connect (editor->print_operation, "begin-print", G_CALLBACK (gui_editor_begin_print), editor); g_signal_connect (editor->print_operation, "draw-page", G_CALLBACK (gui_editor_draw_page), editor); gtk_print_operation_set_show_progress (editor->print_operation, TRUE); res = gtk_print_operation_run (editor->print_operation, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, NULL, &error); if (res == GTK_PRINT_OPERATION_RESULT_ERROR ) { error_dialog = gtk_message_dialog_new (GTK_WINDOW (editor->scroll), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "Error printing file:\n%s", error->message); gtk_widget_show (error_dialog); g_error_free (error); } g_object_unref (editor->print_operation); } GdkPixbuf * gui_editor_get_stock_icon (GtkWidget *widget, const gchar *stock_id, GtkIconSize size) { GdkScreen *screen = gtk_widget_get_screen (widget); GtkIconTheme *theme = gtk_icon_theme_get_for_screen (screen); gint marker_size; gtk_icon_size_lookup (size, NULL, &marker_size); GdkPixbuf *pixbuf; pixbuf = gtk_icon_theme_load_icon (theme, stock_id, marker_size, 0, NULL); return pixbuf; } gnusim8085-1.4.1/src/asm-gensym.h0000644000175000017500000000214112767046204016252 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * Do a first pass over source * It just add the symbols and its value to the symtab * * R. Sridhar */ #ifndef __ASM_GENSYM_H__ #define __ASM_GENSYM_H__ #include #include "asm-source.h" G_BEGIN_DECLS gboolean asm_gensym_generate (AsmSource *src, gint sa); G_END_DECLS #endif /* __ASM_GENSYM_H__ */ gnusim8085-1.4.1/src/asm-id-info.h0000644000175000017500000000243012767046204016276 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* Some general information about the opcodes in 8085 instruction set * Feel free to correct or modify this feel and send the patches to the author */ #ifndef __ASM_ID_INFO_H__ #define __ASM_ID_INFO_H__ #include G_BEGIN_DECLS /* One way it is different from IdOpcode * IdOpcode is indexed by opcode_number */ typedef struct { gchar name[ASM_DS_MAX_OPCODE_LENGTH]; /* Name in CAPS */ gchar hex[3]; /* for eg; 'E4' */ }OpcodeInfo; G_END_DECLS #endif /* __ASM_ID_INFO_H__*/ gnusim8085-1.4.1/src/gui-view.h0000644000175000017500000000223612767046204015733 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * View updaters * * R. Sridhar */ #ifndef __GUI_VIEW_H__ #define __GUI_VIEW_H__ #include #include "support.h" #include "8085.h" G_BEGIN_DECLS void gui_view_update_io_mem(void); void gui_view_update_reg_flag(gboolean reset); void gui_view_update_all(void); void gui_util_gen_hex (guint8 val, gchar * a, gchar * b); G_END_DECLS #endif /* __GUI_VIEW_H__*/ gnusim8085-1.4.1/src/8085.c0000644000175000017500000002264013266554066014604 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "8085.h" #include "8085-instructions.h" #include "8085-memblock.h" #include "config.h" /* errors */ char *err_regname = "None of RegName"; /* signal handlers */ EefSigHandle hdl_mm_update = NULL; EefSigHandle hdl_io_update = NULL; EefSigHandle hdl_error = NULL; /* Only one System */ EefSystem sys; /* cb */ static EefTraceCallback trace_cb = NULL; static EefStackModifiedCallBack stack_cb = NULL; /* reset */ void eef_reset_reg (void) { EEF_CLEAR (sys.reg); sys.reg.sph = 0xff; sys.reg.spl = 0xff; } void eef_reset_flag (void) { EEF_CLEAR (sys.flag); } void eef_reset_io (void) { EEF_CLEAR (sys.io); } void eef_reset_mem (void) { EEF_CLEAR (sys.mem); } void eef_reset_all (void) { EEF_CLEAR (sys); sys.reg.sph = 0xff; sys.reg.spl = 0xff; } #undef EEF_CLEAR eef_addr_t eef_swap_bytes (eef_addr_t data) { eef_addr_t r = 0; r = (eef_data_t) data; r <<= 8; r |= (data >> 8); return r; } eef_addr_t eef_swap_bytes_in_addr (eef_addr_t addr) { eef_addr_t r = 0; r = sys.mem[addr + 1]; r <<= 8; r |= (sys.mem[addr]); return r; } void eef_split16 (eef_addr_t data, eef_data_t * h, eef_data_t * l) { g_assert (h); g_assert (l); *l = (eef_data_t) data; *h = (eef_data_t) (data >> 8); } eef_addr_t eef_join16 (eef_data_t h, eef_data_t l) { eef_addr_t r; r = h; r <<= 8; r |= l; return r; } eef_addr_t eef_mem16_get (eef_addr_t addr) { return eef_swap_bytes_in_addr (addr); } void eef_mem16_put (eef_addr_t addr, eef_addr_t bigendi) { eef_split16 (bigendi, &sys.mem[addr + 1], &sys.mem[addr]); } /* reg pairs - x = 'B'(BC) or 'D'(DE) or 'H'(HL) */ void eef_regpair_put (gchar x, eef_addr_t data) { eef_data_t h, l; eef_split16 (data, &h, &l); switch (x) { case 'B': sys.reg.b = h; sys.reg.c = l; break; case 'D': sys.reg.d = h; sys.reg.e = l; break; case 'H': sys.reg.h = h; sys.reg.l = l; break; case 'S': sys.reg.sph = h; sys.reg.spl = l; break; default: g_assert (!err_regname); break; } } /* reg pairs - x = 'B'(BC) or 'D'(DE) or 'H'(HL) */ eef_addr_t eef_regpair_get (gchar x) { switch (x) { case 'B': return eef_join16 (sys.reg.b, sys.reg.c); case 'D': return eef_join16 (sys.reg.d, sys.reg.e); case 'H': return eef_join16 (sys.reg.h, sys.reg.l); case 'S': return eef_join16 (sys.reg.sph, sys.reg.spl); } g_assert (!err_regname); return 0; } eef_data_t * eef_loc_of_reg (gchar x) { switch (x) { case 'A': return &sys.reg.a; case 'B': return &sys.reg.b; case 'C': return &sys.reg.c; case 'D': return &sys.reg.d; case 'E': return &sys.reg.e; case 'H': return &sys.reg.h; case 'L': return &sys.reg.l; case 'M': return NULL; } g_assert (!err_regname); return NULL; } void eef_loc_of_regpair (gchar x, eef_data_t ** h, eef_data_t ** l) { switch (x) { case 'B': *h = &sys.reg.b; *l = &sys.reg.c; break; case 'D': *h = &sys.reg.d; *l = &sys.reg.e; break; case 'H': *h = &sys.reg.h; *l = &sys.reg.l; break; case 'S': *h = &sys.reg.sph; *l = &sys.reg.spl; break; case 'P': *h = &sys.reg.pswh; *l = &sys.reg.pswl; g_warning ("Unwanted %c reached", x); break; case 'M': *h = NULL; *l = NULL; break; default: g_critical (_("Unwanted %c reached"), x); g_assert (!err_regname); } return; } void eef_pc_set (eef_addr_t val) { eef_data_t h, l; eef_split16 (val, &h, &l); sys.reg.pch = h; sys.reg.pcl = l; } eef_addr_t eef_pc_get (void) { return eef_join16 (sys.reg.pch, sys.reg.pcl); } void eef_stack_push_byte (eef_data_t data) { eef_regpair_put ('S', eef_regpair_get ('S') - 1); sys.mem[eef_regpair_get ('S')] = data; } eef_data_t eef_stack_pop_byte (void) { eef_regpair_put ('S', eef_regpair_get ('S') + 1); return sys.mem[eef_regpair_get ('S') - 1]; } /* calls stack changed callback */ void eef_call_stack_cb (gboolean pushed, gchar x) { if (stack_cb) (*stack_cb) (eef_join16 (sys.reg.sph, sys.reg.spl), pushed, x); } void eef_save_pc_into_stack (void) { eef_stack_push_byte (sys.reg.pch); eef_stack_push_byte (sys.reg.pcl); eef_call_stack_cb (TRUE, 'P'); } void eef_peek_pc_from_stack (void) { sys.reg.pcl = eef_stack_pop_byte (); sys.reg.pch = eef_stack_pop_byte (); eef_call_stack_cb (FALSE, 'P'); } eef_data_t eef_port_get (eef_data_t addr) { return sys.io[addr]; } void eef_port_put (eef_data_t addr, eef_data_t data) { sys.io[addr] = data; } void eef_interrupt_enable (gboolean val) { sys.int_enable = val; } gboolean eef_fetch_pcinc_execute (eef_addr_t * executed_bytes, gboolean * is_halt_inst) { //static gint cnt = 0; eef_data_t opcode; eef_addr_t pc_contents; gint ilen; gboolean r; EEF_SET_PTR (is_halt_inst, FALSE); EEF_SET_PTR (executed_bytes, 1); /* atleast */ /* get pc contents */ pc_contents = eef_pc_get (); /* fetch */ opcode = sys.mem[pc_contents]; /* inc pc */ ilen = eef_instruction_length (opcode); /* debug g_print ("\n%4X: [[%x]] len=%d [", pc_contents, opcode, ilen); * { * int i; * for (i=0; isize; i++) { sys.mem[i + block->start_addr] = block->buffer[i]; } } void eef_set_trace_callback (EefTraceCallback cb) { trace_cb = cb; } void eef_set_stack_callback (EefStackModifiedCallBack cb) { stack_cb = cb; } eef_data_t eef_get_op_at_addr (eef_addr_t addr) { return sys.mem[addr]; } gboolean eef_is_call_instr (eef_data_t op) { switch (op) { case 0xd4: case 0xc4: case 0xf4: case 0xec: case 0xfe: case 0xe4: case 0xcc: case 0xcd: case 0xdc: case 0xfc: return TRUE; } return FALSE; } gboolean eef_is_ret_instr (eef_data_t op) { return op == 0xC9; } gchar eef_regpair_get_another (gchar x) { switch (x) { case 'B': return 'C'; case 'D': return 'E'; case 'H': return 'L'; case 'S': return 'P'; } g_assert_not_reached (); return 0; /* supress warning */ } /* Position of flag in flag register sz0h0p1c */ #define C_FLAG_POSITION 0x01 #define AC_FLAG_POSITION 0x10 #define P_FLAG_POSITION 0x04 #define Z_FLAG_POSITION 0x40 #define S_FLAG_POSITION 0x80 /* Default value of flag register */ #define DEFAULT_FLAG 0x02 eef_data_t eef_flag_to_data (EefFlag flag) { eef_data_t td; td = DEFAULT_FLAG; td |= (0 == flag.c) ? 0 : C_FLAG_POSITION; td |= (0 == flag.ac) ? 0 : AC_FLAG_POSITION; td |= (0 == flag.p) ? 0 : P_FLAG_POSITION; td |= (0 == flag.z) ? 0 : Z_FLAG_POSITION; td |= (0 == flag.s) ? 0 : S_FLAG_POSITION; return td; /*return DEFAULT_FLAG | ((0 == flag.c) ? 0 : C_FLAG_POSITION) | ((0 == flag.ac) ? 0 : AC_FLAG_POSITION) | ((0 == flag.p) ? 0 : P_FLAG_POSITION) | ((0 == flag.z) ? 0 : Z_FLAG_POSITION) | ((0 == flag.s) ? 0 : S_FLAG_POSITION);*/ } //EefFlag * void eef_data_to_flag (eef_data_t from, EefFlag *flag) { /* flag.c = (0 == (from && C_FLAG_POSITION)) ? 0 : 1; flag.ac = (0 == (from && AC_FLAG_POSITION)) ? 0 : 1; flag.p = (0 == (from && P_FLAG_POSITION)) ? 0 : 1; flag.s = (0 == (from && S_FLAG_POSITION)) ? 0 : 1; flag.z = (0 == (from && Z_FLAG_POSITION)) ? 0 : 1;*/ // EefFlag * flag; flag->c = (0 == (from & C_FLAG_POSITION)) ? 0 : 1; flag->ac = (0 == (from & AC_FLAG_POSITION)) ? 0 : 1; flag->p = (0 == (from & P_FLAG_POSITION)) ? 0 : 1; flag->s = (0 == (from & S_FLAG_POSITION)) ? 0 : 1; flag->z = (0 == (from & Z_FLAG_POSITION)) ? 0 : 1; // return flag; } gnusim8085-1.4.1/src/Makefile.in0000644000175000017500000024621113327416216016073 0ustar carstencarsten# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @WIN32_TRUE@am__append_1 = \ @WIN32_TRUE@ -DLOCALEDIR=\"locale\"\ @WIN32_TRUE@ -mms-bitfields \ @WIN32_TRUE@ -mwindows @WIN32_FALSE@am__append_2 = \ @WIN32_FALSE@ -DLOCALEDIR=\"$(localedir)\" bin_PROGRAMS = gnusim8085$(EXEEXT) @USE_GIO_TRUE@am__append_3 = \ @USE_GIO_TRUE@ $(GIO_CFLAGS) @USE_GIO_TRUE@am__append_4 = \ @USE_GIO_TRUE@ file-op-gio.h\ @USE_GIO_TRUE@ file-op-gio.c @USE_GIO_TRUE@am__append_5 = \ @USE_GIO_TRUE@ $(GIO_LIBS) @USE_GIO_FALSE@am__append_6 = \ @USE_GIO_FALSE@ file-op.h\ @USE_GIO_FALSE@ file-op.c subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am__gnusim8085_SOURCES_DIST = callbacks.c interface.c main.c support.c \ callbacks.h interface.h support.h 8085.c 8085-instructions.c \ 8085-memblock.c asm-ds-symtable.c asm-err-comm.c asm-source.c \ asm-token.c asm-id.c asm-gensym.c asm-genobj.c 8085-asm.c \ gui-app.c gui-editor.c 8085-link.c gui-view.c bridge.c \ gui-list-io.c gui-list-memory.c gui-list-message.c \ gui-list-data.c asm-listing.c gui-list-stack.c 8085-asm.h \ 8085-instructions.h 8085-link.h 8085-memblock.h 8085.h \ asm-ds-limits.h asm-ds-symtable.h asm-err-comm.h asm-genobj.h \ asm-gensym.h asm-id.h asm-listing.h asm-source.h asm-token.h \ bridge.h gui-app.h gui-editor.h gui-list-data.h gui-list-io.h \ gui-list-memory.h gui-list-message.h gui-list-stack.h \ gui-view.h gui-keypad.h gui-keypad.c gui-input-symbol.h \ gui-input-symbol.c asm-id-info.h asm-id-info.c file-op-gio.h \ file-op-gio.c file-op.h file-op.c @USE_GIO_TRUE@am__objects_1 = gnusim8085-file-op-gio.$(OBJEXT) @USE_GIO_FALSE@am__objects_2 = gnusim8085-file-op.$(OBJEXT) am_gnusim8085_OBJECTS = gnusim8085-callbacks.$(OBJEXT) \ gnusim8085-interface.$(OBJEXT) gnusim8085-main.$(OBJEXT) \ gnusim8085-support.$(OBJEXT) gnusim8085-8085.$(OBJEXT) \ gnusim8085-8085-instructions.$(OBJEXT) \ gnusim8085-8085-memblock.$(OBJEXT) \ gnusim8085-asm-ds-symtable.$(OBJEXT) \ gnusim8085-asm-err-comm.$(OBJEXT) \ gnusim8085-asm-source.$(OBJEXT) gnusim8085-asm-token.$(OBJEXT) \ gnusim8085-asm-id.$(OBJEXT) gnusim8085-asm-gensym.$(OBJEXT) \ gnusim8085-asm-genobj.$(OBJEXT) gnusim8085-8085-asm.$(OBJEXT) \ gnusim8085-gui-app.$(OBJEXT) gnusim8085-gui-editor.$(OBJEXT) \ gnusim8085-8085-link.$(OBJEXT) gnusim8085-gui-view.$(OBJEXT) \ gnusim8085-bridge.$(OBJEXT) gnusim8085-gui-list-io.$(OBJEXT) \ gnusim8085-gui-list-memory.$(OBJEXT) \ gnusim8085-gui-list-message.$(OBJEXT) \ gnusim8085-gui-list-data.$(OBJEXT) \ gnusim8085-asm-listing.$(OBJEXT) \ gnusim8085-gui-list-stack.$(OBJEXT) \ gnusim8085-gui-keypad.$(OBJEXT) \ gnusim8085-gui-input-symbol.$(OBJEXT) \ gnusim8085-asm-id-info.$(OBJEXT) $(am__objects_1) \ $(am__objects_2) gnusim8085_OBJECTS = $(am_gnusim8085_OBJECTS) am__DEPENDENCIES_1 = @USE_GIO_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) gnusim8085_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) gnusim8085_LINK = $(CCLD) $(gnusim8085_CFLAGS) $(CFLAGS) \ $(gnusim8085_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(gnusim8085_SOURCES) DIST_SOURCES = $(am__gnusim8085_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTKSOURCEVIEW_API = @GTKSOURCEVIEW_API@ GTKSOURCEVIEW_CFLAGS = @GTKSOURCEVIEW_CFLAGS@ GTKSOURCEVIEW_LIBS = @GTKSOURCEVIEW_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ GTK_VERSION_REQ = @GTK_VERSION_REQ@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATA_DIR = @PACKAGE_DATA_DIR@ PACKAGE_HELP_DIR = @PACKAGE_HELP_DIR@ PACKAGE_MENU_DIR = @PACKAGE_MENU_DIR@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_PIXMAPS_DIR = @PACKAGE_PIXMAPS_DIR@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ markdown = @markdown@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I$(top_srcdir) $(GTK_CFLAGS) $(GTKSOURCEVIEW_CFLAGS) \ $(am__append_3) gnusim8085_CFLAGS = -DPACKAGE_DOC_DIR=\"$(docdir)\" $(am__append_1) \ $(am__append_2) gnusim8085_SOURCES = callbacks.c interface.c main.c support.c \ callbacks.h interface.h support.h 8085.c 8085-instructions.c \ 8085-memblock.c asm-ds-symtable.c asm-err-comm.c asm-source.c \ asm-token.c asm-id.c asm-gensym.c asm-genobj.c 8085-asm.c \ gui-app.c gui-editor.c 8085-link.c gui-view.c bridge.c \ gui-list-io.c gui-list-memory.c gui-list-message.c \ gui-list-data.c asm-listing.c gui-list-stack.c 8085-asm.h \ 8085-instructions.h 8085-link.h 8085-memblock.h 8085.h \ asm-ds-limits.h asm-ds-symtable.h asm-err-comm.h asm-genobj.h \ asm-gensym.h asm-id.h asm-listing.h asm-source.h asm-token.h \ bridge.h gui-app.h gui-editor.h gui-list-data.h gui-list-io.h \ gui-list-memory.h gui-list-message.h gui-list-stack.h \ gui-view.h gui-keypad.h gui-keypad.c gui-input-symbol.h \ gui-input-symbol.c asm-id-info.h asm-id-info.c $(am__append_4) \ $(am__append_6) gnusim8085_LDFLAGS = gnusim8085_LDADD = $(GTK_LIBS) $(GTKSOURCEVIEW_LIBS) $(am__append_5) LDADD = @LIBINTL@ all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) gnusim8085$(EXEEXT): $(gnusim8085_OBJECTS) $(gnusim8085_DEPENDENCIES) $(EXTRA_gnusim8085_DEPENDENCIES) @rm -f gnusim8085$(EXEEXT) $(AM_V_CCLD)$(gnusim8085_LINK) $(gnusim8085_OBJECTS) $(gnusim8085_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-8085-asm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-8085-instructions.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-8085-link.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-8085-memblock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-8085.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-asm-ds-symtable.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-asm-err-comm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-asm-genobj.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-asm-gensym.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-asm-id-info.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-asm-id.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-asm-listing.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-asm-source.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-asm-token.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-bridge.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-file-op-gio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-file-op.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-gui-app.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-gui-editor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-gui-input-symbol.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-gui-keypad.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-gui-list-data.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-gui-list-io.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-gui-list-memory.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-gui-list-message.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-gui-list-stack.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-gui-view.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-interface.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnusim8085-support.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` gnusim8085-callbacks.o: callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-callbacks.o -MD -MP -MF $(DEPDIR)/gnusim8085-callbacks.Tpo -c -o gnusim8085-callbacks.o `test -f 'callbacks.c' || echo '$(srcdir)/'`callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-callbacks.Tpo $(DEPDIR)/gnusim8085-callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='callbacks.c' object='gnusim8085-callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-callbacks.o `test -f 'callbacks.c' || echo '$(srcdir)/'`callbacks.c gnusim8085-callbacks.obj: callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-callbacks.obj -MD -MP -MF $(DEPDIR)/gnusim8085-callbacks.Tpo -c -o gnusim8085-callbacks.obj `if test -f 'callbacks.c'; then $(CYGPATH_W) 'callbacks.c'; else $(CYGPATH_W) '$(srcdir)/callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-callbacks.Tpo $(DEPDIR)/gnusim8085-callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='callbacks.c' object='gnusim8085-callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-callbacks.obj `if test -f 'callbacks.c'; then $(CYGPATH_W) 'callbacks.c'; else $(CYGPATH_W) '$(srcdir)/callbacks.c'; fi` gnusim8085-interface.o: interface.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-interface.o -MD -MP -MF $(DEPDIR)/gnusim8085-interface.Tpo -c -o gnusim8085-interface.o `test -f 'interface.c' || echo '$(srcdir)/'`interface.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-interface.Tpo $(DEPDIR)/gnusim8085-interface.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='interface.c' object='gnusim8085-interface.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-interface.o `test -f 'interface.c' || echo '$(srcdir)/'`interface.c gnusim8085-interface.obj: interface.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-interface.obj -MD -MP -MF $(DEPDIR)/gnusim8085-interface.Tpo -c -o gnusim8085-interface.obj `if test -f 'interface.c'; then $(CYGPATH_W) 'interface.c'; else $(CYGPATH_W) '$(srcdir)/interface.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-interface.Tpo $(DEPDIR)/gnusim8085-interface.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='interface.c' object='gnusim8085-interface.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-interface.obj `if test -f 'interface.c'; then $(CYGPATH_W) 'interface.c'; else $(CYGPATH_W) '$(srcdir)/interface.c'; fi` gnusim8085-main.o: main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-main.o -MD -MP -MF $(DEPDIR)/gnusim8085-main.Tpo -c -o gnusim8085-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-main.Tpo $(DEPDIR)/gnusim8085-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='main.c' object='gnusim8085-main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c gnusim8085-main.obj: main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-main.obj -MD -MP -MF $(DEPDIR)/gnusim8085-main.Tpo -c -o gnusim8085-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-main.Tpo $(DEPDIR)/gnusim8085-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='main.c' object='gnusim8085-main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` gnusim8085-support.o: support.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-support.o -MD -MP -MF $(DEPDIR)/gnusim8085-support.Tpo -c -o gnusim8085-support.o `test -f 'support.c' || echo '$(srcdir)/'`support.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-support.Tpo $(DEPDIR)/gnusim8085-support.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='support.c' object='gnusim8085-support.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-support.o `test -f 'support.c' || echo '$(srcdir)/'`support.c gnusim8085-support.obj: support.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-support.obj -MD -MP -MF $(DEPDIR)/gnusim8085-support.Tpo -c -o gnusim8085-support.obj `if test -f 'support.c'; then $(CYGPATH_W) 'support.c'; else $(CYGPATH_W) '$(srcdir)/support.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-support.Tpo $(DEPDIR)/gnusim8085-support.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='support.c' object='gnusim8085-support.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-support.obj `if test -f 'support.c'; then $(CYGPATH_W) 'support.c'; else $(CYGPATH_W) '$(srcdir)/support.c'; fi` gnusim8085-8085.o: 8085.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-8085.o -MD -MP -MF $(DEPDIR)/gnusim8085-8085.Tpo -c -o gnusim8085-8085.o `test -f '8085.c' || echo '$(srcdir)/'`8085.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-8085.Tpo $(DEPDIR)/gnusim8085-8085.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='8085.c' object='gnusim8085-8085.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-8085.o `test -f '8085.c' || echo '$(srcdir)/'`8085.c gnusim8085-8085.obj: 8085.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-8085.obj -MD -MP -MF $(DEPDIR)/gnusim8085-8085.Tpo -c -o gnusim8085-8085.obj `if test -f '8085.c'; then $(CYGPATH_W) '8085.c'; else $(CYGPATH_W) '$(srcdir)/8085.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-8085.Tpo $(DEPDIR)/gnusim8085-8085.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='8085.c' object='gnusim8085-8085.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-8085.obj `if test -f '8085.c'; then $(CYGPATH_W) '8085.c'; else $(CYGPATH_W) '$(srcdir)/8085.c'; fi` gnusim8085-8085-instructions.o: 8085-instructions.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-8085-instructions.o -MD -MP -MF $(DEPDIR)/gnusim8085-8085-instructions.Tpo -c -o gnusim8085-8085-instructions.o `test -f '8085-instructions.c' || echo '$(srcdir)/'`8085-instructions.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-8085-instructions.Tpo $(DEPDIR)/gnusim8085-8085-instructions.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='8085-instructions.c' object='gnusim8085-8085-instructions.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-8085-instructions.o `test -f '8085-instructions.c' || echo '$(srcdir)/'`8085-instructions.c gnusim8085-8085-instructions.obj: 8085-instructions.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-8085-instructions.obj -MD -MP -MF $(DEPDIR)/gnusim8085-8085-instructions.Tpo -c -o gnusim8085-8085-instructions.obj `if test -f '8085-instructions.c'; then $(CYGPATH_W) '8085-instructions.c'; else $(CYGPATH_W) '$(srcdir)/8085-instructions.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-8085-instructions.Tpo $(DEPDIR)/gnusim8085-8085-instructions.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='8085-instructions.c' object='gnusim8085-8085-instructions.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-8085-instructions.obj `if test -f '8085-instructions.c'; then $(CYGPATH_W) '8085-instructions.c'; else $(CYGPATH_W) '$(srcdir)/8085-instructions.c'; fi` gnusim8085-8085-memblock.o: 8085-memblock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-8085-memblock.o -MD -MP -MF $(DEPDIR)/gnusim8085-8085-memblock.Tpo -c -o gnusim8085-8085-memblock.o `test -f '8085-memblock.c' || echo '$(srcdir)/'`8085-memblock.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-8085-memblock.Tpo $(DEPDIR)/gnusim8085-8085-memblock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='8085-memblock.c' object='gnusim8085-8085-memblock.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-8085-memblock.o `test -f '8085-memblock.c' || echo '$(srcdir)/'`8085-memblock.c gnusim8085-8085-memblock.obj: 8085-memblock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-8085-memblock.obj -MD -MP -MF $(DEPDIR)/gnusim8085-8085-memblock.Tpo -c -o gnusim8085-8085-memblock.obj `if test -f '8085-memblock.c'; then $(CYGPATH_W) '8085-memblock.c'; else $(CYGPATH_W) '$(srcdir)/8085-memblock.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-8085-memblock.Tpo $(DEPDIR)/gnusim8085-8085-memblock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='8085-memblock.c' object='gnusim8085-8085-memblock.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-8085-memblock.obj `if test -f '8085-memblock.c'; then $(CYGPATH_W) '8085-memblock.c'; else $(CYGPATH_W) '$(srcdir)/8085-memblock.c'; fi` gnusim8085-asm-ds-symtable.o: asm-ds-symtable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-asm-ds-symtable.o -MD -MP -MF $(DEPDIR)/gnusim8085-asm-ds-symtable.Tpo -c -o gnusim8085-asm-ds-symtable.o `test -f 'asm-ds-symtable.c' || echo '$(srcdir)/'`asm-ds-symtable.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-asm-ds-symtable.Tpo $(DEPDIR)/gnusim8085-asm-ds-symtable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asm-ds-symtable.c' object='gnusim8085-asm-ds-symtable.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-asm-ds-symtable.o `test -f 'asm-ds-symtable.c' || echo '$(srcdir)/'`asm-ds-symtable.c gnusim8085-asm-ds-symtable.obj: asm-ds-symtable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-asm-ds-symtable.obj -MD -MP -MF $(DEPDIR)/gnusim8085-asm-ds-symtable.Tpo -c -o gnusim8085-asm-ds-symtable.obj `if test -f 'asm-ds-symtable.c'; then $(CYGPATH_W) 'asm-ds-symtable.c'; else $(CYGPATH_W) '$(srcdir)/asm-ds-symtable.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-asm-ds-symtable.Tpo $(DEPDIR)/gnusim8085-asm-ds-symtable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asm-ds-symtable.c' object='gnusim8085-asm-ds-symtable.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-asm-ds-symtable.obj `if test -f 'asm-ds-symtable.c'; then $(CYGPATH_W) 'asm-ds-symtable.c'; else $(CYGPATH_W) '$(srcdir)/asm-ds-symtable.c'; fi` gnusim8085-asm-err-comm.o: asm-err-comm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-asm-err-comm.o -MD -MP -MF $(DEPDIR)/gnusim8085-asm-err-comm.Tpo -c -o gnusim8085-asm-err-comm.o `test -f 'asm-err-comm.c' || echo '$(srcdir)/'`asm-err-comm.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-asm-err-comm.Tpo $(DEPDIR)/gnusim8085-asm-err-comm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asm-err-comm.c' object='gnusim8085-asm-err-comm.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-asm-err-comm.o `test -f 'asm-err-comm.c' || echo '$(srcdir)/'`asm-err-comm.c gnusim8085-asm-err-comm.obj: asm-err-comm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-asm-err-comm.obj -MD -MP -MF $(DEPDIR)/gnusim8085-asm-err-comm.Tpo -c -o gnusim8085-asm-err-comm.obj `if test -f 'asm-err-comm.c'; then $(CYGPATH_W) 'asm-err-comm.c'; else $(CYGPATH_W) '$(srcdir)/asm-err-comm.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-asm-err-comm.Tpo $(DEPDIR)/gnusim8085-asm-err-comm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asm-err-comm.c' object='gnusim8085-asm-err-comm.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-asm-err-comm.obj `if test -f 'asm-err-comm.c'; then $(CYGPATH_W) 'asm-err-comm.c'; else $(CYGPATH_W) '$(srcdir)/asm-err-comm.c'; fi` gnusim8085-asm-source.o: asm-source.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-asm-source.o -MD -MP -MF $(DEPDIR)/gnusim8085-asm-source.Tpo -c -o gnusim8085-asm-source.o `test -f 'asm-source.c' || echo '$(srcdir)/'`asm-source.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-asm-source.Tpo $(DEPDIR)/gnusim8085-asm-source.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asm-source.c' object='gnusim8085-asm-source.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-asm-source.o `test -f 'asm-source.c' || echo '$(srcdir)/'`asm-source.c gnusim8085-asm-source.obj: asm-source.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-asm-source.obj -MD -MP -MF $(DEPDIR)/gnusim8085-asm-source.Tpo -c -o gnusim8085-asm-source.obj `if test -f 'asm-source.c'; then $(CYGPATH_W) 'asm-source.c'; else $(CYGPATH_W) '$(srcdir)/asm-source.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-asm-source.Tpo $(DEPDIR)/gnusim8085-asm-source.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asm-source.c' object='gnusim8085-asm-source.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-asm-source.obj `if test -f 'asm-source.c'; then $(CYGPATH_W) 'asm-source.c'; else $(CYGPATH_W) '$(srcdir)/asm-source.c'; fi` gnusim8085-asm-token.o: asm-token.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-asm-token.o -MD -MP -MF $(DEPDIR)/gnusim8085-asm-token.Tpo -c -o gnusim8085-asm-token.o `test -f 'asm-token.c' || echo '$(srcdir)/'`asm-token.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-asm-token.Tpo $(DEPDIR)/gnusim8085-asm-token.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asm-token.c' object='gnusim8085-asm-token.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-asm-token.o `test -f 'asm-token.c' || echo '$(srcdir)/'`asm-token.c gnusim8085-asm-token.obj: asm-token.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-asm-token.obj -MD -MP -MF $(DEPDIR)/gnusim8085-asm-token.Tpo -c -o gnusim8085-asm-token.obj `if test -f 'asm-token.c'; then $(CYGPATH_W) 'asm-token.c'; else $(CYGPATH_W) '$(srcdir)/asm-token.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-asm-token.Tpo $(DEPDIR)/gnusim8085-asm-token.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asm-token.c' object='gnusim8085-asm-token.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-asm-token.obj `if test -f 'asm-token.c'; then $(CYGPATH_W) 'asm-token.c'; else $(CYGPATH_W) '$(srcdir)/asm-token.c'; fi` gnusim8085-asm-id.o: asm-id.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-asm-id.o -MD -MP -MF $(DEPDIR)/gnusim8085-asm-id.Tpo -c -o gnusim8085-asm-id.o `test -f 'asm-id.c' || echo '$(srcdir)/'`asm-id.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-asm-id.Tpo $(DEPDIR)/gnusim8085-asm-id.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asm-id.c' object='gnusim8085-asm-id.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-asm-id.o `test -f 'asm-id.c' || echo '$(srcdir)/'`asm-id.c gnusim8085-asm-id.obj: asm-id.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-asm-id.obj -MD -MP -MF $(DEPDIR)/gnusim8085-asm-id.Tpo -c -o gnusim8085-asm-id.obj `if test -f 'asm-id.c'; then $(CYGPATH_W) 'asm-id.c'; else $(CYGPATH_W) '$(srcdir)/asm-id.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-asm-id.Tpo $(DEPDIR)/gnusim8085-asm-id.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asm-id.c' object='gnusim8085-asm-id.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-asm-id.obj `if test -f 'asm-id.c'; then $(CYGPATH_W) 'asm-id.c'; else $(CYGPATH_W) '$(srcdir)/asm-id.c'; fi` gnusim8085-asm-gensym.o: asm-gensym.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-asm-gensym.o -MD -MP -MF $(DEPDIR)/gnusim8085-asm-gensym.Tpo -c -o gnusim8085-asm-gensym.o `test -f 'asm-gensym.c' || echo '$(srcdir)/'`asm-gensym.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-asm-gensym.Tpo $(DEPDIR)/gnusim8085-asm-gensym.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asm-gensym.c' object='gnusim8085-asm-gensym.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-asm-gensym.o `test -f 'asm-gensym.c' || echo '$(srcdir)/'`asm-gensym.c gnusim8085-asm-gensym.obj: asm-gensym.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-asm-gensym.obj -MD -MP -MF $(DEPDIR)/gnusim8085-asm-gensym.Tpo -c -o gnusim8085-asm-gensym.obj `if test -f 'asm-gensym.c'; then $(CYGPATH_W) 'asm-gensym.c'; else $(CYGPATH_W) '$(srcdir)/asm-gensym.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-asm-gensym.Tpo $(DEPDIR)/gnusim8085-asm-gensym.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asm-gensym.c' object='gnusim8085-asm-gensym.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-asm-gensym.obj `if test -f 'asm-gensym.c'; then $(CYGPATH_W) 'asm-gensym.c'; else $(CYGPATH_W) '$(srcdir)/asm-gensym.c'; fi` gnusim8085-asm-genobj.o: asm-genobj.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-asm-genobj.o -MD -MP -MF $(DEPDIR)/gnusim8085-asm-genobj.Tpo -c -o gnusim8085-asm-genobj.o `test -f 'asm-genobj.c' || echo '$(srcdir)/'`asm-genobj.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-asm-genobj.Tpo $(DEPDIR)/gnusim8085-asm-genobj.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asm-genobj.c' object='gnusim8085-asm-genobj.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-asm-genobj.o `test -f 'asm-genobj.c' || echo '$(srcdir)/'`asm-genobj.c gnusim8085-asm-genobj.obj: asm-genobj.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-asm-genobj.obj -MD -MP -MF $(DEPDIR)/gnusim8085-asm-genobj.Tpo -c -o gnusim8085-asm-genobj.obj `if test -f 'asm-genobj.c'; then $(CYGPATH_W) 'asm-genobj.c'; else $(CYGPATH_W) '$(srcdir)/asm-genobj.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-asm-genobj.Tpo $(DEPDIR)/gnusim8085-asm-genobj.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asm-genobj.c' object='gnusim8085-asm-genobj.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-asm-genobj.obj `if test -f 'asm-genobj.c'; then $(CYGPATH_W) 'asm-genobj.c'; else $(CYGPATH_W) '$(srcdir)/asm-genobj.c'; fi` gnusim8085-8085-asm.o: 8085-asm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-8085-asm.o -MD -MP -MF $(DEPDIR)/gnusim8085-8085-asm.Tpo -c -o gnusim8085-8085-asm.o `test -f '8085-asm.c' || echo '$(srcdir)/'`8085-asm.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-8085-asm.Tpo $(DEPDIR)/gnusim8085-8085-asm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='8085-asm.c' object='gnusim8085-8085-asm.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-8085-asm.o `test -f '8085-asm.c' || echo '$(srcdir)/'`8085-asm.c gnusim8085-8085-asm.obj: 8085-asm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-8085-asm.obj -MD -MP -MF $(DEPDIR)/gnusim8085-8085-asm.Tpo -c -o gnusim8085-8085-asm.obj `if test -f '8085-asm.c'; then $(CYGPATH_W) '8085-asm.c'; else $(CYGPATH_W) '$(srcdir)/8085-asm.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-8085-asm.Tpo $(DEPDIR)/gnusim8085-8085-asm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='8085-asm.c' object='gnusim8085-8085-asm.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-8085-asm.obj `if test -f '8085-asm.c'; then $(CYGPATH_W) '8085-asm.c'; else $(CYGPATH_W) '$(srcdir)/8085-asm.c'; fi` gnusim8085-gui-app.o: gui-app.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-gui-app.o -MD -MP -MF $(DEPDIR)/gnusim8085-gui-app.Tpo -c -o gnusim8085-gui-app.o `test -f 'gui-app.c' || echo '$(srcdir)/'`gui-app.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-gui-app.Tpo $(DEPDIR)/gnusim8085-gui-app.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gui-app.c' object='gnusim8085-gui-app.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-gui-app.o `test -f 'gui-app.c' || echo '$(srcdir)/'`gui-app.c gnusim8085-gui-app.obj: gui-app.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-gui-app.obj -MD -MP -MF $(DEPDIR)/gnusim8085-gui-app.Tpo -c -o gnusim8085-gui-app.obj `if test -f 'gui-app.c'; then $(CYGPATH_W) 'gui-app.c'; else $(CYGPATH_W) '$(srcdir)/gui-app.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-gui-app.Tpo $(DEPDIR)/gnusim8085-gui-app.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gui-app.c' object='gnusim8085-gui-app.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-gui-app.obj `if test -f 'gui-app.c'; then $(CYGPATH_W) 'gui-app.c'; else $(CYGPATH_W) '$(srcdir)/gui-app.c'; fi` gnusim8085-gui-editor.o: gui-editor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-gui-editor.o -MD -MP -MF $(DEPDIR)/gnusim8085-gui-editor.Tpo -c -o gnusim8085-gui-editor.o `test -f 'gui-editor.c' || echo '$(srcdir)/'`gui-editor.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-gui-editor.Tpo $(DEPDIR)/gnusim8085-gui-editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gui-editor.c' object='gnusim8085-gui-editor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-gui-editor.o `test -f 'gui-editor.c' || echo '$(srcdir)/'`gui-editor.c gnusim8085-gui-editor.obj: gui-editor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-gui-editor.obj -MD -MP -MF $(DEPDIR)/gnusim8085-gui-editor.Tpo -c -o gnusim8085-gui-editor.obj `if test -f 'gui-editor.c'; then $(CYGPATH_W) 'gui-editor.c'; else $(CYGPATH_W) '$(srcdir)/gui-editor.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-gui-editor.Tpo $(DEPDIR)/gnusim8085-gui-editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gui-editor.c' object='gnusim8085-gui-editor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-gui-editor.obj `if test -f 'gui-editor.c'; then $(CYGPATH_W) 'gui-editor.c'; else $(CYGPATH_W) '$(srcdir)/gui-editor.c'; fi` gnusim8085-8085-link.o: 8085-link.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-8085-link.o -MD -MP -MF $(DEPDIR)/gnusim8085-8085-link.Tpo -c -o gnusim8085-8085-link.o `test -f '8085-link.c' || echo '$(srcdir)/'`8085-link.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-8085-link.Tpo $(DEPDIR)/gnusim8085-8085-link.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='8085-link.c' object='gnusim8085-8085-link.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-8085-link.o `test -f '8085-link.c' || echo '$(srcdir)/'`8085-link.c gnusim8085-8085-link.obj: 8085-link.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-8085-link.obj -MD -MP -MF $(DEPDIR)/gnusim8085-8085-link.Tpo -c -o gnusim8085-8085-link.obj `if test -f '8085-link.c'; then $(CYGPATH_W) '8085-link.c'; else $(CYGPATH_W) '$(srcdir)/8085-link.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-8085-link.Tpo $(DEPDIR)/gnusim8085-8085-link.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='8085-link.c' object='gnusim8085-8085-link.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-8085-link.obj `if test -f '8085-link.c'; then $(CYGPATH_W) '8085-link.c'; else $(CYGPATH_W) '$(srcdir)/8085-link.c'; fi` gnusim8085-gui-view.o: gui-view.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-gui-view.o -MD -MP -MF $(DEPDIR)/gnusim8085-gui-view.Tpo -c -o gnusim8085-gui-view.o `test -f 'gui-view.c' || echo '$(srcdir)/'`gui-view.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-gui-view.Tpo $(DEPDIR)/gnusim8085-gui-view.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gui-view.c' object='gnusim8085-gui-view.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-gui-view.o `test -f 'gui-view.c' || echo '$(srcdir)/'`gui-view.c gnusim8085-gui-view.obj: gui-view.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-gui-view.obj -MD -MP -MF $(DEPDIR)/gnusim8085-gui-view.Tpo -c -o gnusim8085-gui-view.obj `if test -f 'gui-view.c'; then $(CYGPATH_W) 'gui-view.c'; else $(CYGPATH_W) '$(srcdir)/gui-view.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-gui-view.Tpo $(DEPDIR)/gnusim8085-gui-view.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gui-view.c' object='gnusim8085-gui-view.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-gui-view.obj `if test -f 'gui-view.c'; then $(CYGPATH_W) 'gui-view.c'; else $(CYGPATH_W) '$(srcdir)/gui-view.c'; fi` gnusim8085-bridge.o: bridge.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-bridge.o -MD -MP -MF $(DEPDIR)/gnusim8085-bridge.Tpo -c -o gnusim8085-bridge.o `test -f 'bridge.c' || echo '$(srcdir)/'`bridge.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-bridge.Tpo $(DEPDIR)/gnusim8085-bridge.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bridge.c' object='gnusim8085-bridge.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-bridge.o `test -f 'bridge.c' || echo '$(srcdir)/'`bridge.c gnusim8085-bridge.obj: bridge.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-bridge.obj -MD -MP -MF $(DEPDIR)/gnusim8085-bridge.Tpo -c -o gnusim8085-bridge.obj `if test -f 'bridge.c'; then $(CYGPATH_W) 'bridge.c'; else $(CYGPATH_W) '$(srcdir)/bridge.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-bridge.Tpo $(DEPDIR)/gnusim8085-bridge.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bridge.c' object='gnusim8085-bridge.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-bridge.obj `if test -f 'bridge.c'; then $(CYGPATH_W) 'bridge.c'; else $(CYGPATH_W) '$(srcdir)/bridge.c'; fi` gnusim8085-gui-list-io.o: gui-list-io.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-gui-list-io.o -MD -MP -MF $(DEPDIR)/gnusim8085-gui-list-io.Tpo -c -o gnusim8085-gui-list-io.o `test -f 'gui-list-io.c' || echo '$(srcdir)/'`gui-list-io.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-gui-list-io.Tpo $(DEPDIR)/gnusim8085-gui-list-io.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gui-list-io.c' object='gnusim8085-gui-list-io.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-gui-list-io.o `test -f 'gui-list-io.c' || echo '$(srcdir)/'`gui-list-io.c gnusim8085-gui-list-io.obj: gui-list-io.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-gui-list-io.obj -MD -MP -MF $(DEPDIR)/gnusim8085-gui-list-io.Tpo -c -o gnusim8085-gui-list-io.obj `if test -f 'gui-list-io.c'; then $(CYGPATH_W) 'gui-list-io.c'; else $(CYGPATH_W) '$(srcdir)/gui-list-io.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-gui-list-io.Tpo $(DEPDIR)/gnusim8085-gui-list-io.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gui-list-io.c' object='gnusim8085-gui-list-io.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-gui-list-io.obj `if test -f 'gui-list-io.c'; then $(CYGPATH_W) 'gui-list-io.c'; else $(CYGPATH_W) '$(srcdir)/gui-list-io.c'; fi` gnusim8085-gui-list-memory.o: gui-list-memory.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-gui-list-memory.o -MD -MP -MF $(DEPDIR)/gnusim8085-gui-list-memory.Tpo -c -o gnusim8085-gui-list-memory.o `test -f 'gui-list-memory.c' || echo '$(srcdir)/'`gui-list-memory.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-gui-list-memory.Tpo $(DEPDIR)/gnusim8085-gui-list-memory.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gui-list-memory.c' object='gnusim8085-gui-list-memory.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-gui-list-memory.o `test -f 'gui-list-memory.c' || echo '$(srcdir)/'`gui-list-memory.c gnusim8085-gui-list-memory.obj: gui-list-memory.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-gui-list-memory.obj -MD -MP -MF $(DEPDIR)/gnusim8085-gui-list-memory.Tpo -c -o gnusim8085-gui-list-memory.obj `if test -f 'gui-list-memory.c'; then $(CYGPATH_W) 'gui-list-memory.c'; else $(CYGPATH_W) '$(srcdir)/gui-list-memory.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-gui-list-memory.Tpo $(DEPDIR)/gnusim8085-gui-list-memory.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gui-list-memory.c' object='gnusim8085-gui-list-memory.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-gui-list-memory.obj `if test -f 'gui-list-memory.c'; then $(CYGPATH_W) 'gui-list-memory.c'; else $(CYGPATH_W) '$(srcdir)/gui-list-memory.c'; fi` gnusim8085-gui-list-message.o: gui-list-message.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-gui-list-message.o -MD -MP -MF $(DEPDIR)/gnusim8085-gui-list-message.Tpo -c -o gnusim8085-gui-list-message.o `test -f 'gui-list-message.c' || echo '$(srcdir)/'`gui-list-message.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-gui-list-message.Tpo $(DEPDIR)/gnusim8085-gui-list-message.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gui-list-message.c' object='gnusim8085-gui-list-message.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-gui-list-message.o `test -f 'gui-list-message.c' || echo '$(srcdir)/'`gui-list-message.c gnusim8085-gui-list-message.obj: gui-list-message.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-gui-list-message.obj -MD -MP -MF $(DEPDIR)/gnusim8085-gui-list-message.Tpo -c -o gnusim8085-gui-list-message.obj `if test -f 'gui-list-message.c'; then $(CYGPATH_W) 'gui-list-message.c'; else $(CYGPATH_W) '$(srcdir)/gui-list-message.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-gui-list-message.Tpo $(DEPDIR)/gnusim8085-gui-list-message.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gui-list-message.c' object='gnusim8085-gui-list-message.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-gui-list-message.obj `if test -f 'gui-list-message.c'; then $(CYGPATH_W) 'gui-list-message.c'; else $(CYGPATH_W) '$(srcdir)/gui-list-message.c'; fi` gnusim8085-gui-list-data.o: gui-list-data.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-gui-list-data.o -MD -MP -MF $(DEPDIR)/gnusim8085-gui-list-data.Tpo -c -o gnusim8085-gui-list-data.o `test -f 'gui-list-data.c' || echo '$(srcdir)/'`gui-list-data.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-gui-list-data.Tpo $(DEPDIR)/gnusim8085-gui-list-data.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gui-list-data.c' object='gnusim8085-gui-list-data.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-gui-list-data.o `test -f 'gui-list-data.c' || echo '$(srcdir)/'`gui-list-data.c gnusim8085-gui-list-data.obj: gui-list-data.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-gui-list-data.obj -MD -MP -MF $(DEPDIR)/gnusim8085-gui-list-data.Tpo -c -o gnusim8085-gui-list-data.obj `if test -f 'gui-list-data.c'; then $(CYGPATH_W) 'gui-list-data.c'; else $(CYGPATH_W) '$(srcdir)/gui-list-data.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-gui-list-data.Tpo $(DEPDIR)/gnusim8085-gui-list-data.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gui-list-data.c' object='gnusim8085-gui-list-data.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-gui-list-data.obj `if test -f 'gui-list-data.c'; then $(CYGPATH_W) 'gui-list-data.c'; else $(CYGPATH_W) '$(srcdir)/gui-list-data.c'; fi` gnusim8085-asm-listing.o: asm-listing.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-asm-listing.o -MD -MP -MF $(DEPDIR)/gnusim8085-asm-listing.Tpo -c -o gnusim8085-asm-listing.o `test -f 'asm-listing.c' || echo '$(srcdir)/'`asm-listing.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-asm-listing.Tpo $(DEPDIR)/gnusim8085-asm-listing.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asm-listing.c' object='gnusim8085-asm-listing.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-asm-listing.o `test -f 'asm-listing.c' || echo '$(srcdir)/'`asm-listing.c gnusim8085-asm-listing.obj: asm-listing.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-asm-listing.obj -MD -MP -MF $(DEPDIR)/gnusim8085-asm-listing.Tpo -c -o gnusim8085-asm-listing.obj `if test -f 'asm-listing.c'; then $(CYGPATH_W) 'asm-listing.c'; else $(CYGPATH_W) '$(srcdir)/asm-listing.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-asm-listing.Tpo $(DEPDIR)/gnusim8085-asm-listing.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asm-listing.c' object='gnusim8085-asm-listing.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-asm-listing.obj `if test -f 'asm-listing.c'; then $(CYGPATH_W) 'asm-listing.c'; else $(CYGPATH_W) '$(srcdir)/asm-listing.c'; fi` gnusim8085-gui-list-stack.o: gui-list-stack.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-gui-list-stack.o -MD -MP -MF $(DEPDIR)/gnusim8085-gui-list-stack.Tpo -c -o gnusim8085-gui-list-stack.o `test -f 'gui-list-stack.c' || echo '$(srcdir)/'`gui-list-stack.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-gui-list-stack.Tpo $(DEPDIR)/gnusim8085-gui-list-stack.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gui-list-stack.c' object='gnusim8085-gui-list-stack.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-gui-list-stack.o `test -f 'gui-list-stack.c' || echo '$(srcdir)/'`gui-list-stack.c gnusim8085-gui-list-stack.obj: gui-list-stack.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-gui-list-stack.obj -MD -MP -MF $(DEPDIR)/gnusim8085-gui-list-stack.Tpo -c -o gnusim8085-gui-list-stack.obj `if test -f 'gui-list-stack.c'; then $(CYGPATH_W) 'gui-list-stack.c'; else $(CYGPATH_W) '$(srcdir)/gui-list-stack.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-gui-list-stack.Tpo $(DEPDIR)/gnusim8085-gui-list-stack.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gui-list-stack.c' object='gnusim8085-gui-list-stack.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-gui-list-stack.obj `if test -f 'gui-list-stack.c'; then $(CYGPATH_W) 'gui-list-stack.c'; else $(CYGPATH_W) '$(srcdir)/gui-list-stack.c'; fi` gnusim8085-gui-keypad.o: gui-keypad.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-gui-keypad.o -MD -MP -MF $(DEPDIR)/gnusim8085-gui-keypad.Tpo -c -o gnusim8085-gui-keypad.o `test -f 'gui-keypad.c' || echo '$(srcdir)/'`gui-keypad.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-gui-keypad.Tpo $(DEPDIR)/gnusim8085-gui-keypad.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gui-keypad.c' object='gnusim8085-gui-keypad.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-gui-keypad.o `test -f 'gui-keypad.c' || echo '$(srcdir)/'`gui-keypad.c gnusim8085-gui-keypad.obj: gui-keypad.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-gui-keypad.obj -MD -MP -MF $(DEPDIR)/gnusim8085-gui-keypad.Tpo -c -o gnusim8085-gui-keypad.obj `if test -f 'gui-keypad.c'; then $(CYGPATH_W) 'gui-keypad.c'; else $(CYGPATH_W) '$(srcdir)/gui-keypad.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-gui-keypad.Tpo $(DEPDIR)/gnusim8085-gui-keypad.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gui-keypad.c' object='gnusim8085-gui-keypad.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-gui-keypad.obj `if test -f 'gui-keypad.c'; then $(CYGPATH_W) 'gui-keypad.c'; else $(CYGPATH_W) '$(srcdir)/gui-keypad.c'; fi` gnusim8085-gui-input-symbol.o: gui-input-symbol.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-gui-input-symbol.o -MD -MP -MF $(DEPDIR)/gnusim8085-gui-input-symbol.Tpo -c -o gnusim8085-gui-input-symbol.o `test -f 'gui-input-symbol.c' || echo '$(srcdir)/'`gui-input-symbol.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-gui-input-symbol.Tpo $(DEPDIR)/gnusim8085-gui-input-symbol.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gui-input-symbol.c' object='gnusim8085-gui-input-symbol.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-gui-input-symbol.o `test -f 'gui-input-symbol.c' || echo '$(srcdir)/'`gui-input-symbol.c gnusim8085-gui-input-symbol.obj: gui-input-symbol.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-gui-input-symbol.obj -MD -MP -MF $(DEPDIR)/gnusim8085-gui-input-symbol.Tpo -c -o gnusim8085-gui-input-symbol.obj `if test -f 'gui-input-symbol.c'; then $(CYGPATH_W) 'gui-input-symbol.c'; else $(CYGPATH_W) '$(srcdir)/gui-input-symbol.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-gui-input-symbol.Tpo $(DEPDIR)/gnusim8085-gui-input-symbol.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gui-input-symbol.c' object='gnusim8085-gui-input-symbol.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-gui-input-symbol.obj `if test -f 'gui-input-symbol.c'; then $(CYGPATH_W) 'gui-input-symbol.c'; else $(CYGPATH_W) '$(srcdir)/gui-input-symbol.c'; fi` gnusim8085-asm-id-info.o: asm-id-info.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-asm-id-info.o -MD -MP -MF $(DEPDIR)/gnusim8085-asm-id-info.Tpo -c -o gnusim8085-asm-id-info.o `test -f 'asm-id-info.c' || echo '$(srcdir)/'`asm-id-info.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-asm-id-info.Tpo $(DEPDIR)/gnusim8085-asm-id-info.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asm-id-info.c' object='gnusim8085-asm-id-info.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-asm-id-info.o `test -f 'asm-id-info.c' || echo '$(srcdir)/'`asm-id-info.c gnusim8085-asm-id-info.obj: asm-id-info.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-asm-id-info.obj -MD -MP -MF $(DEPDIR)/gnusim8085-asm-id-info.Tpo -c -o gnusim8085-asm-id-info.obj `if test -f 'asm-id-info.c'; then $(CYGPATH_W) 'asm-id-info.c'; else $(CYGPATH_W) '$(srcdir)/asm-id-info.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-asm-id-info.Tpo $(DEPDIR)/gnusim8085-asm-id-info.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asm-id-info.c' object='gnusim8085-asm-id-info.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-asm-id-info.obj `if test -f 'asm-id-info.c'; then $(CYGPATH_W) 'asm-id-info.c'; else $(CYGPATH_W) '$(srcdir)/asm-id-info.c'; fi` gnusim8085-file-op-gio.o: file-op-gio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-file-op-gio.o -MD -MP -MF $(DEPDIR)/gnusim8085-file-op-gio.Tpo -c -o gnusim8085-file-op-gio.o `test -f 'file-op-gio.c' || echo '$(srcdir)/'`file-op-gio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-file-op-gio.Tpo $(DEPDIR)/gnusim8085-file-op-gio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='file-op-gio.c' object='gnusim8085-file-op-gio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-file-op-gio.o `test -f 'file-op-gio.c' || echo '$(srcdir)/'`file-op-gio.c gnusim8085-file-op-gio.obj: file-op-gio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-file-op-gio.obj -MD -MP -MF $(DEPDIR)/gnusim8085-file-op-gio.Tpo -c -o gnusim8085-file-op-gio.obj `if test -f 'file-op-gio.c'; then $(CYGPATH_W) 'file-op-gio.c'; else $(CYGPATH_W) '$(srcdir)/file-op-gio.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-file-op-gio.Tpo $(DEPDIR)/gnusim8085-file-op-gio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='file-op-gio.c' object='gnusim8085-file-op-gio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-file-op-gio.obj `if test -f 'file-op-gio.c'; then $(CYGPATH_W) 'file-op-gio.c'; else $(CYGPATH_W) '$(srcdir)/file-op-gio.c'; fi` gnusim8085-file-op.o: file-op.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-file-op.o -MD -MP -MF $(DEPDIR)/gnusim8085-file-op.Tpo -c -o gnusim8085-file-op.o `test -f 'file-op.c' || echo '$(srcdir)/'`file-op.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-file-op.Tpo $(DEPDIR)/gnusim8085-file-op.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='file-op.c' object='gnusim8085-file-op.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-file-op.o `test -f 'file-op.c' || echo '$(srcdir)/'`file-op.c gnusim8085-file-op.obj: file-op.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -MT gnusim8085-file-op.obj -MD -MP -MF $(DEPDIR)/gnusim8085-file-op.Tpo -c -o gnusim8085-file-op.obj `if test -f 'file-op.c'; then $(CYGPATH_W) 'file-op.c'; else $(CYGPATH_W) '$(srcdir)/file-op.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnusim8085-file-op.Tpo $(DEPDIR)/gnusim8085-file-op.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='file-op.c' object='gnusim8085-file-op.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnusim8085_CFLAGS) $(CFLAGS) -c -o gnusim8085-file-op.obj `if test -f 'file-op.c'; then $(CYGPATH_W) 'file-op.c'; else $(CYGPATH_W) '$(srcdir)/file-op.c'; fi` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic cscopelist-am ctags ctags-am \ distclean distclean-compile distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-binPROGRAMS install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnusim8085-1.4.1/src/gui-list-memory.c0000644000175000017500000001115513266554744017245 0ustar carstencarsten/* Copyright (C) 2010 Debajit Biswas This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "config.h" #include "gui-list-memory.h" static GtkTreeStore *store = NULL; static GtkTreeView *view = NULL; static gboolean child_position = FALSE; static GtkTreeIter last_iter; static GtkTreeIter mark_iter; static eef_addr_t start = 0; enum { C_ADDR_HEX, C_ADDR, C_DATA, N_COLS }; void on_mem_list_data_edited (GtkCellRendererText *renderer, gchar *path, gchar *new_text, gpointer user_data) { GtkTreeIter iter; gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (store), &iter, path); gint value; gint addr; if(!asm_util_parse_number (new_text, &value)) value = 0; gtk_tree_store_set (store, &iter, C_DATA, value, -1); gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, C_ADDR, &addr, -1); sys.mem[addr] = value; } static void _add_column (GtkTreeView * view, gint id, gchar * title) { GtkCellRenderer *renderer; GtkTreeViewColumn *column; g_assert (view); renderer = gtk_cell_renderer_text_new (); if ( !strcmp(title, _("Data")) ) { g_object_set ((gpointer) renderer, "editable", TRUE, NULL); g_signal_connect ((gpointer) renderer, "edited", G_CALLBACK (on_mem_list_data_edited), NULL); } column = gtk_tree_view_column_new_with_attributes (title, renderer, "text", id, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); } static void create_me (void) { /* create store */ store = gtk_tree_store_new (N_COLS, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT); g_assert (store); /* create view */ view = GTK_TREE_VIEW (gtk_tree_view_new_with_model (GTK_TREE_MODEL (store))); g_assert (view); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (view), TRUE); gtk_widget_show (GTK_WIDGET (view)); /* add column */ _add_column (view, C_ADDR_HEX, g_strconcat(_("Address"), " (", _("Hex"), ")", NULL)); _add_column (view, C_ADDR, _("Address")); _add_column (view, C_DATA, _("Data")); } void gui_list_memory_attach_me (void) { GtkWidget *cont; cont = lookup_widget (app->window_main, "main_memory_scroll"); g_assert (cont); create_me (); gtk_container_add (GTK_CONTAINER (cont), GTK_WIDGET (view)); } void gui_list_memory_clear (void) { gtk_tree_store_clear (store); } void gui_list_memory_child_state (gboolean state) { child_position = state; if (state) mark_iter = last_iter; } void gui_list_memory_set_start (gint st) { if ( st >= 0 && st < 65536 ) start = st; } static void gui_list_memory_add (eef_addr_t addr, eef_data_t value) { GtkTreeIter iter; gchar addr_str[5] = "XXXX"; guint8 s1, s2; g_assert (store); gtk_tree_store_append (store, &iter, NULL); /* address */ eef_split16 (addr, &s1, &s2); gui_util_gen_hex (s1, addr_str, addr_str+1); gui_util_gen_hex (s2, addr_str+2, addr_str+3); gtk_tree_store_set (store, &iter, C_ADDR_HEX, addr_str, C_ADDR, addr, C_DATA, value, -1); last_iter = iter; } void gui_list_memory_initialize (void) { eef_addr_t i = 0; for( i = 0; i < MAX_LIST_LEN && i+start <= EEF_ADDR_T_MAX ; i++) { gui_list_memory_add (i+start, sys.mem[i + start]); } } void gui_list_memory_update (void) { gui_list_memory_clear(); gui_list_memory_initialize(); } void gui_list_memory_update_single (eef_addr_t addr) { if (addr >= start && addr < MAX(start + MAX_LIST_LEN, EEF_ADDR_T_MAX)) { GtkTreeIter iter; g_assert(gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter)); gint pos = addr -start; gint n = 0; while ( n++ < pos ) gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter); gtk_tree_store_set (store, &iter, C_DATA, sys.mem[addr], -1); } } gnusim8085-1.4.1/src/gui-list-data.c0000644000175000017500000000617513266554635016653 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "config.h" #include "gui-list-data.h" #include "gui-app.h" #include "8085.h" #include "gui-view.h" static GtkTreeStore *store = NULL; static GtkTreeView *view = NULL; static gboolean child_position = FALSE; static GtkTreeIter last_iter; static GtkTreeIter mark_iter; enum { C_ADDR, C_NAME, C_VAL, C_VAL_HEX, N_COLS }; static void _add_column (GtkTreeView * view, gint id, gchar * title) { GtkCellRenderer *renderer; GtkTreeViewColumn *column; g_assert (view); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes (title, renderer, "text", id, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); } static void create_me (void) { /* create store */ store = gtk_tree_store_new (N_COLS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING); g_assert (store); /* create view */ view = GTK_TREE_VIEW(gtk_tree_view_new_with_model (GTK_TREE_MODEL (store)) ); g_assert (view); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW(view), TRUE); gtk_widget_show (GTK_WIDGET (view)); /* add column */ _add_column (view, C_ADDR, _("Address")); _add_column (view, C_NAME, _("Variable")); _add_column (view, C_VAL_HEX, _("Value")); _add_column (view, C_VAL, g_strconcat(_("Value"), " (", _("Decimal"), ")", NULL)); } void gui_list_data_attach_me (void) { GtkWidget *cont; cont = lookup_widget (app->window_main, "main_data_scroll"); g_assert (cont); create_me (); gtk_container_add (GTK_CONTAINER (cont), GTK_WIDGET (view)); } void gui_list_data_clear (void) { gtk_tree_store_clear (store); } void gui_list_data_add (guint16 addr, const char *sym_name, guint8 val) { GtkTreeIter iter; gchar str[4] = "XXh"; gchar add_str[5] = "XXXX"; guint8 s1, s2; g_assert (store); g_assert (sym_name); gtk_tree_store_append (store, &iter, (child_position)?&mark_iter:NULL); /* address */ eef_split16 (addr, &s1, &s2); gui_util_gen_hex (s1, add_str, add_str+1); gui_util_gen_hex (s2, add_str+2, add_str+3); /* value */ gui_util_gen_hex (val, str, str+1); gtk_tree_store_set (store, &iter, C_ADDR, add_str, C_NAME, sym_name, C_VAL, val, C_VAL_HEX, str, -1); last_iter = iter; } void gui_list_data_child_state (gboolean yes) { child_position = yes; if ( yes ) mark_iter = last_iter; } gnusim8085-1.4.1/src/8085.h0000644000175000017500000001103712767046204014602 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * The Core 8085 Microprocessor definition * R. Sridhar */ #ifndef __8085_H__ #define __8085_H__ #include #include #include /* for memset */ #define _(String) gettext (String) G_BEGIN_DECLS /* 16bit Address, 8bit Data */ typedef guint16 eef_addr_t; typedef guint8 eef_data_t; #define EEF_DATA_T_MAX 255 #define EEF_ADDR_T_MAX 65535 /* CPU Registers */ typedef struct _EefReg { eef_data_t a, b, c, d, e, h, l; eef_data_t pswh, pswl; eef_data_t pch, pcl, sph, spl; eef_data_t int_reg; } EefReg; /* CPU Flags */ /*typedef struct _EefFlag { unsigned s:1; unsigned z:1; unsigned ac:1; unsigned p:1; unsigned c:1; } EefFlag;*/ typedef struct _EefFlag { gboolean s; gboolean z; gboolean ac; gboolean p; gboolean c; } EefFlag; /* EefFlag to eef_data_t for push to stack then push psw */ eef_data_t eef_flag_to_data (EefFlag flag); //EefFlag * void eef_data_to_flag (eef_data_t from, EefFlag *flag); /* Memory - 64K */ typedef eef_data_t EefMem[EEF_ADDR_T_MAX + 1]; /* IO Ports - FF */ typedef eef_data_t EefIO[EEF_DATA_T_MAX + 1]; /* System (One Instance) */ typedef struct _EefSystem { EefReg reg; EefFlag flag; EefMem mem; EefIO io; /* --private-- (don't touch directly) */ gboolean int_enable; } EefSystem; typedef enum { EEF_MM_UPDATE, /* memory change */ EEF_IO_UPDATE, /* io change */ EEF_ERROR /* Execute error */ } EefEvent; typedef void (*EefSigHandle) (EefEvent evt, gpointer data); #define EEF_SET_PTR(ptr, val) \ if ( ptr ) *ptr=val /* reset func */ void eef_reset_reg (void); void eef_reset_flag (void); void eef_reset_io (void); void eef_reset_mem (void); void eef_reset_all (void); /* Signal related */ void eef_signal_connect (EefEvent evt, EefSigHandle hdl); /* start execution */ /* return if exceeds max_bytes */ gboolean eef_execute_from (eef_addr_t sa, eef_addr_t * executed_bytes, eef_addr_t max_bytes); /* byte order */ eef_addr_t eef_swap_bytes (eef_addr_t data); eef_addr_t eef_swap_bytes_in_addr (eef_addr_t addr); void eef_split16 (eef_addr_t data, eef_data_t * h, eef_data_t * l); eef_addr_t eef_join16 (eef_data_t h, eef_data_t l); /* reads 16 bit little endian numbers and returning * it in big endian */ eef_addr_t eef_mem16_get (eef_addr_t addr); void eef_mem16_put (eef_addr_t addr, eef_addr_t bigendi); /* reg pairs - x = 'B'(BC) or 'D'(DE) or 'H'(HL) */ void eef_regpair_put (gchar x, eef_addr_t data); eef_addr_t eef_regpair_get (gchar x); gchar eef_regpair_get_another (gchar x); /* returns NULL of 'M' */ eef_data_t *eef_loc_of_reg (gchar x); /* for reg pairs: eg: D in h, E in l */ void eef_loc_of_regpair (gchar x, eef_data_t ** h, eef_data_t ** l); /* stack abstraction */ void eef_stack_push_byte (eef_data_t data); eef_data_t eef_stack_pop_byte (void); void eef_save_pc_into_stack (void); void eef_peek_pc_from_stack (void); /* io */ eef_data_t eef_port_get (eef_data_t addr); void eef_port_put (eef_data_t addr, eef_data_t data); /* interrupt */ void eef_interrupt_enable (gboolean val); /* load mem block */ /* mem_block should be a instance of EefMemBlock */ void eef_load_mem_block (gpointer mem_block); /* system */ extern EefSystem sys; #define EEF_CLEAR(structure) \ memset( &structure, 0, sizeof(structure) ) eef_data_t eef_get_op_at_addr (eef_addr_t addr); gboolean eef_is_call_instr (eef_data_t op); gboolean eef_is_ret_instr (eef_data_t op); eef_addr_t eef_pc_get (void); /* Callbacks */ typedef gboolean (*EefTraceCallback) (eef_addr_t addr, eef_addr_t prev_addr, gboolean finished); void eef_set_trace_callback (EefTraceCallback cb); typedef void (*EefStackModifiedCallBack) (eef_addr_t sp, gboolean pushed, gchar what); void eef_set_stack_callback (EefStackModifiedCallBack cb); #define CALL_LEN 3; G_END_DECLS #endif gnusim8085-1.4.1/src/8085-asm.c0000644000175000017500000000404013266554031015344 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "8085-asm.h" #include "8085.h" #include "8085-link.h" #include "config.h" #include "gui-list-message.h" #include "gui-app.h" #include "file-op.h" #include "asm-err-comm.h" /* call this when you are prepraring to assemble */ void eef_asm_init (void) { /* clear msg */ gui_list_message_clear(); //TODO data, stack /* Initialize symtab */ asm_sym_clear (); /* clear link */ eef_link_clear (); } /* call this to deallocate memory used by assembler */ void eef_asm_destroy (void) { /* */ } /* assemble this text and load it into memory */ gboolean eef_asm_assemble (const char *text, gint load_address, AsmSource **src_r, EefMemBlock **block_r) { AsmSource *src; EefMemBlock *block; file_op_editor_save(); src = asm_source_new (text); g_return_val_if_fail (src, FALSE); /* First pass */ if (asm_gensym_generate (src, load_address) == FALSE) return FALSE; /* Second Pass */ if (block = asm_genobj_generate (src, load_address), block == NULL) return FALSE; /* load block into memory */ eef_load_mem_block (block); g_assert (src_r); g_assert (block_r); *src_r = src; *block_r = block; /* show success message */ asm_err_comm_send (0, _("Program assembled successfully"), ASM_ERR_MESSAGE); return TRUE; } gnusim8085-1.4.1/src/gui-list-stack.h0000644000175000017500000000243212767046204017035 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * Stack List * * R. Sridhar */ #ifndef __GUI_LIST_STACK_H__ #define __GUI_LIST_STACK_H__ #include #include G_BEGIN_DECLS void gui_list_stack_attach_me (void); void gui_list_stack_clear (void); void gui_list_stack_child_state (gboolean yes); void gui_list_stack_add (guint16 addr, const char *sym_name, guint16 val); /* call this to update stack view */ void gui_list_stack_reload (void); void gui_list_stack_reset (void); G_END_DECLS #endif /* __GUI_STACK_DATA_H__ */ gnusim8085-1.4.1/src/asm-listing.h0000644000175000017500000000211313266553452016423 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * Assembler generated Listing * * R. Sridhar */ #ifndef __ASM_LISTING_H__ #define __ASM_LISTING_H__ #include #include #include "asm-source.h" G_BEGIN_DECLS /* get listing */ GString *asm_listing_generate (AsmSource *src); G_END_DECLS #endif /* __ASM_LISTING_H__ */ gnusim8085-1.4.1/src/gui-keypad.c0000644000175000017500000001220213325703305016214 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "gui-keypad.h" #include "asm-id.h" #include "gui-app.h" #include "gui-input-symbol.h" #include "interface.h" #include "bridge.h" static GtkWidget *table; #define TABLE_ROWS 21 #define TABLE_COLS 4 IdOpcode *p_opcode; IdPseudo *p_pseudo; /* Due to the overall unknown bug, I need this Call this of you want to use the globals */ static void validate_globals() { p_opcode = asm_id_get_opcode (); /* make sure */ p_pseudo = asm_id_get_pseudo (); } /* helper: return string containing registers that is used by opcode */ gchar * get_register (IdOpcode * opcode) { gchar *ret; gint tot; gint i = 0; gint index; g_assert(opcode); validate_globals(); if (!g_ascii_strcasecmp ("MOV", opcode->op_str)) { ret = g_strdup ("ABCDEHLM"); return ret; } ret = g_malloc (15); for (i = 0; i < 15; i++) ret[i] = 0; tot = asm_id_total_opcodes (); index = -1; for (i = 0; i < tot; i++) { if (opcode == &p_opcode[i]) { index = i; break; } } g_assert (index != -1); i = 0; while (!g_ascii_strcasecmp (opcode->op_str, p_opcode[index].op_str)) { ret[i++] = p_opcode[index].arg1[0]; index--; } ret[i] = '\0'; return ret; } /* callback for Opcode Button click */ static void cb_clicked (GtkButton * button, gpointer user_data) { if (b_get_state() != B_STATE_DEBUG) { IdOpcode *opdata = (IdOpcode *) user_data; GString *line_buf; gchar *re, *re2; gchar *newop; g_assert (opdata); line_buf = g_string_new (""); newop = g_ascii_strdown (opdata->op_str, -1); g_string_append_printf (line_buf, "%s ", newop); g_free (newop); if (opdata->num_args > 0) { re = get_register (opdata); re2 = gui_input_reg (re); if ( !re2 ) goto done; newop = g_ascii_strdown (re2, -1); g_string_append_printf (line_buf, " %s", newop); g_free (newop); g_free (re2); if (opdata->num_args > 1) { re2 = gui_input_reg (re); if ( !re2 ) goto done; newop = g_ascii_strdown (re2, -1); g_string_append_printf (line_buf, ", %s", newop); g_free (newop); g_free (re2); } g_free (re); } if (opdata->user_args) { re = gui_input_symbol (); if ( !re ) goto done; if (opdata->num_args > 0) g_string_append_printf (line_buf, ", %s", re); else g_string_append_printf (line_buf, " %s", re); g_free (re); } g_string_append (line_buf, "\n"); /* Insert into editor */ { gint old_no = gui_editor_get_line (app->editor); gui_editor_insert (app->editor, line_buf->str); gui_editor_goto_line (app->editor, old_no + 1); } done: /* set focus */ gui_editor_grab_focus (app->editor); } } /* a generator for distinct opcodes, die after end */ IdOpcode * get_next_opcode (void) { static int valid = 1; static int next = 0; gchar save[5]; IdOpcode *opcode, *prev = NULL; g_assert (valid); if (next == asm_id_total_opcodes ()) { valid = 0; return NULL; } opcode = &p_opcode[next++]; g_stpcpy (save, opcode->op_str); while (next < asm_id_total_opcodes () + 1 && !g_ascii_strcasecmp (save, opcode->op_str)) { prev = opcode; opcode = &p_opcode[next++]; } next--; return prev; } static void cb_focus () { /* set focus */ gui_editor_grab_focus (app->editor); } static void create_me (void) { int i, j; IdOpcode *opcode; opcode = asm_id_get_opcode (); /* Construct a table of cells */ table = gtk_grid_new (); gtk_grid_set_column_homogeneous (GTK_GRID (table), TRUE); gtk_grid_set_row_homogeneous (GTK_GRID (table), TRUE); g_signal_connect (table, "focus", (GCallback) cb_focus, NULL); p_opcode = asm_id_get_opcode (); p_pseudo = asm_id_get_pseudo (); for (i = 0; i < TABLE_ROWS; i++) { for (j = 0; j < TABLE_COLS; j++) { GtkWidget *button; IdOpcode *op; /* get opcode name */ op = get_next_opcode (); if (!op) goto breakout; button = gtk_button_new_with_label (op->op_str); gtk_widget_set_tooltip_text (button, op->op_desc); g_signal_connect (button, "clicked", (GCallback) cb_clicked, op); TABLE_ATTACH_DEFAULTS (table, button, j, j + 1, i, i + 1); } } breakout: return; } void gui_keypad_attach_me (void) { GtkWidget *cont; cont = lookup_widget (app->window_main, "main_keypad_scroll"); g_assert (cont); create_me (); gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (cont), GTK_WIDGET (table)); gtk_widget_show_all (GTK_WIDGET (cont)); } gnusim8085-1.4.1/src/file-op-gio.c0000644000175000017500000002546313266554530016311 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "config.h" #include "file-op.h" #include "gui-editor.h" #include "gui-app.h" #include "interface.h" #define MAX_ERR_MSG_SIZE 512 static GString *file_name = NULL; static const gchar *default_dir = NULL; static gchar *last_open_save_dir = NULL; static GtkRecentManager *recent_manager = NULL; static void _set_file_name (gchar * name) { if (file_name == NULL) file_name = g_string_new (name); else g_string_assign (file_name, name); } void ori_open (gchar * fn, gboolean replace) { GString *gstr; GFile *fp; GFileInputStream *file_in; char *nullstr = "NULLSTRING"; gssize bytes = 1; if (!fn) fn = nullstr; fp = g_file_new_for_uri (fn); if (fp == NULL) { gchar errmsg[MAX_ERR_MSG_SIZE + 1]; g_snprintf (errmsg, MAX_ERR_MSG_SIZE, _("Failed to open <%s>"), fn); gui_app_show_msg (GTK_MESSAGE_ERROR, errmsg); return; } gstr = g_string_new (""); file_in = g_file_read (fp, NULL, NULL); while (bytes != 0) { gchar buf[100] = { 0 }; bytes = g_input_stream_read (G_INPUT_STREAM (file_in), buf, 100, NULL, NULL); g_string_append_len (gstr, buf, bytes); } g_input_stream_close (G_INPUT_STREAM (file_in), NULL, NULL); gui_editor_set_text (app->editor, gstr->str); gtk_text_buffer_set_modified ((GtkTextBuffer *)app->editor->buffer, FALSE); /* Set breakpoints as instructed in the source */ { gchar *str = gstr->str; gint ln = 0; gchar **lines = NULL; g_assert (str); lines = g_strsplit (str, "\n", -1); g_assert (lines); /* for each line */ while (lines[ln]) { /* check for ;@ */ if (strlen (lines[ln]) > 1) { if (lines[ln][0] == ';' && lines[ln][1] == '@') { /* add breakpoint */ gui_editor_set_mark (app->editor, ln + 1, TRUE); //exit(99); } } ln++; } g_strfreev (lines); } g_string_free (gstr, TRUE); if (replace) _set_file_name (fn); } static gboolean ori_save (gchar * fn, gboolean replace) { gchar *text; GFile *fp; GFileOutputStream *file_out; GError *error = NULL; char *nullstr = "NULLSTRING"; gssize bytes; if (!fn) fn = nullstr; fp = g_file_new_for_uri (fn); file_out = g_file_create (fp, G_FILE_CREATE_NONE, NULL, &error); if ((file_out == NULL) && (error->code == G_IO_ERROR_EXISTS)) { if (replace) { g_error_free (error); /* replace file */ file_out = g_file_replace (fp, NULL, TRUE, G_FILE_CREATE_NONE, NULL, &error); } } text = gui_editor_get_text (app->editor); if (file_out == NULL) { gchar errmsg[MAX_ERR_MSG_SIZE + 1]; g_snprintf (errmsg, MAX_ERR_MSG_SIZE, _("Failed to save <%s>"), fn); gui_app_show_msg (GTK_MESSAGE_ERROR, errmsg); return TRUE; } bytes = g_output_stream_write (G_OUTPUT_STREAM (file_out), text, strlen (text), NULL, NULL); gtk_text_buffer_set_modified ((GtkTextBuffer *)app->editor->buffer, FALSE); /* debug */ g_output_stream_close (G_OUTPUT_STREAM (file_out), NULL, NULL); g_free (text); if (replace) _set_file_name (fn); /*g_error_free (error);*/ return TRUE; } void file_op_editor_new (void) { gchar template[] = "\ \n\ ;\n\ \n\ jmp start\n\ \n\ ;data\n\ \n\ \n\ ;code\n\ start: nop\n\ \n\ \n\ hlt"; if (gtk_text_buffer_get_modified ((GtkTextBuffer *)app->editor->buffer)) { if (!file_op_confirm_save()) return; } if (G_UNLIKELY (file_name)) { g_string_free (file_name, TRUE); file_name = NULL; } /* Set template text */ gui_editor_set_text (app->editor, template); gui_editor_goto_line (app->editor, 13); gtk_text_buffer_set_modified ((GtkTextBuffer *)app->editor->buffer, FALSE); } /* funcs related to main editor */ gboolean file_op_editor_save (void) { if (file_name) return ori_save (file_name->str, TRUE); gchar *selected_file; GtkWidget *file_selector; gboolean is_saved = FALSE; file_selector = create_file_dialog (_("Save file"), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_SAVE); while (!is_saved) { if (gtk_dialog_run (GTK_DIALOG (file_selector)) == GTK_RESPONSE_ACCEPT) { selected_file = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (file_selector)); if (recent_manager == NULL) recent_manager = gtk_recent_manager_get_default (); gtk_recent_manager_add_item (recent_manager, selected_file); is_saved = ori_save(selected_file, TRUE); last_open_save_dir = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER (file_selector)); g_free (selected_file); } else break; } gtk_widget_destroy (file_selector); return is_saved; } void file_op_editor_save_as (void) { gchar *selected_file; GtkWidget *file_selector; gboolean is_saved = FALSE; file_selector = create_file_dialog (_("Save file as"), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_SAVE); while (!is_saved) { if (gtk_dialog_run (GTK_DIALOG (file_selector)) == GTK_RESPONSE_ACCEPT) { selected_file = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (file_selector)); is_saved = ori_save(selected_file, TRUE); if (recent_manager == NULL) recent_manager = gtk_recent_manager_get_default (); gtk_recent_manager_add_item (recent_manager, selected_file); last_open_save_dir = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER (file_selector)); g_free (selected_file); } else break; } gtk_widget_destroy (file_selector); } void file_op_editor_open (void) { if (gtk_text_buffer_get_modified ((GtkTextBuffer *)app->editor->buffer)) { if (!file_op_confirm_save()) return; } gchar *selected_file; GtkWidget *file_selector; file_selector = create_file_dialog ("Open File", GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_OPEN); if (gtk_dialog_run (GTK_DIALOG (file_selector)) == GTK_RESPONSE_ACCEPT) { selected_file = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (file_selector)); if (recent_manager == NULL) recent_manager = gtk_recent_manager_get_default (); gtk_recent_manager_add_item (recent_manager, selected_file); last_open_save_dir = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER (file_selector)); ori_open(selected_file, TRUE); g_free (selected_file); } gtk_widget_destroy (file_selector); } /* -- related to listing window */ void file_op_listing_save (gchar * text) { gchar *selected_file; GtkWidget *file_selector; GFile *fp; GFileOutputStream *file_out; GError *error = NULL; gssize bytes; file_selector = create_file_dialog ("Save Op Listing", GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_SAVE); if (gtk_dialog_run (GTK_DIALOG (file_selector)) == GTK_RESPONSE_ACCEPT) { selected_file = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (file_selector)); if (recent_manager == NULL) recent_manager = gtk_recent_manager_get_default (); gtk_recent_manager_add_item (recent_manager, selected_file); fp = g_file_new_for_uri (selected_file); file_out = g_file_create (fp, G_FILE_CREATE_NONE, NULL, &error); if ((file_out == NULL) && (error->code == G_IO_ERROR_EXISTS)) { g_error_free (error); /* replace file */ file_out = g_file_replace (fp, NULL, TRUE, G_FILE_CREATE_NONE, NULL, &error); } if (file_out == NULL) { gui_app_show_msg (GTK_MESSAGE_ERROR, _("Failed to save listing file")); return; } bytes = g_output_stream_write (G_OUTPUT_STREAM (file_out), text, strlen (text), NULL, NULL); g_output_stream_close (G_OUTPUT_STREAM (file_out), NULL, NULL); last_open_save_dir = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER (file_selector)); g_free (selected_file); } gtk_widget_destroy (file_selector); } GtkWidget * create_file_dialog(const gchar *title, GtkFileChooserAction action, const gchar *stock) { GtkWidget *file_selector; GtkFileFilter *file_filter; if (default_dir == NULL) { default_dir = g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS); } file_selector = gtk_file_chooser_dialog_new (title, NULL, action, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, stock, GTK_RESPONSE_ACCEPT, NULL); if (last_open_save_dir == NULL) gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER(file_selector), g_strconcat("file://", default_dir, NULL)); else gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER(file_selector), last_open_save_dir); gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER(file_selector), TRUE); gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER(file_selector), FALSE); file_filter = gtk_file_filter_new(); gtk_file_filter_set_name (file_filter, "ASM Files"); gtk_file_filter_add_pattern(file_filter, "*.asm"); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(file_selector), GTK_FILE_FILTER(file_filter)); file_filter = gtk_file_filter_new(); gtk_file_filter_set_name (file_filter, "All Files"); gtk_file_filter_add_pattern(file_filter, "*"); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(file_selector), GTK_FILE_FILTER(file_filter)); return file_selector; } /* to confirm saving the file */ gboolean file_op_confirm_save (void) { GtkWidget *dialog; GtkResponseType response; gchar *primary_msg; gchar *secondary_msg; primary_msg = g_strdup_printf ("Close the file without saving?"); secondary_msg = g_strdup_printf ("All the changes made will be lost if unsaved." ); dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, "%s", primary_msg); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", secondary_msg); g_free (primary_msg); g_free (secondary_msg); gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_DISCARD, GTK_RESPONSE_CLOSE); gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_SAVE, GTK_RESPONSE_OK); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_CANCEL); response = gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); if (response == GTK_RESPONSE_CLOSE) return TRUE; if (response == GTK_RESPONSE_OK) return file_op_editor_save (); return FALSE; } gnusim8085-1.4.1/src/gui-view.c0000644000175000017500000001352312767046204015727 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "gui-view.h" #include "gui-app.h" #include "asm-source.h" #include "gui-list-data.h" #include "gui-list-stack.h" #include "gui-list-memory.h" #include "gui-list-io.h" #include "asm-ds-symtable.h" typedef struct { gpointer data; gchar *glade; gpointer extra; } GUIViewTable; /* reg, glade */ static GUIViewTable reg_flag[] = { {&sys.reg.a, "main_reg_a", NULL}, {&sys.reg.b, "main_reg_b", NULL}, {&sys.reg.c, "main_reg_c", NULL}, {&sys.reg.d, "main_reg_d", NULL}, {&sys.reg.e, "main_reg_e", NULL}, {&sys.reg.h, "main_reg_h", NULL}, {&sys.reg.l, "main_reg_l", NULL}, {&sys.reg.pswh, "main_reg_pswh", NULL}, {&sys.reg.pswl, "main_reg_pswl", NULL}, {&sys.reg.pch, "main_reg_pch", NULL}, {&sys.reg.pcl, "main_reg_pcl", NULL}, {&sys.reg.sph, "main_reg_sph", NULL}, {&sys.reg.spl, "main_reg_spl", NULL}, {&sys.reg.int_reg, "main_reg_int_reg", NULL}, {NULL, NULL, NULL}, /* flags */ { (gpointer)'S', "main_flag_s", NULL }, { (gpointer)'Z', "main_flag_z", NULL }, { (gpointer)'A', "main_flag_ac", NULL }, { (gpointer)'P', "main_flag_p", NULL }, { (gpointer)'C', "main_flag_c", NULL }, {NULL, NULL, NULL} }; static gboolean _get_flag (gchar c) { switch (c) { case 'S': return sys.flag.s; case 'Z': return sys.flag.z; case 'A': return sys.flag.ac; case 'P': return sys.flag.p; case 'C': return sys.flag.c; } g_assert_not_reached(); return FALSE; } /* spin, glade, areamem */ static GUIViewTable io_mem[] = { {"main_io_spin", "main_io_entry", sys.io}, {"main_mem_spin", "main_mem_entry", sys.mem}, {NULL, NULL, NULL} }; static gchar gui_util_hex_char (guint8 val) { /**/ if (val < 10) return val + 48; else return 'A' + (val - 10); } void gui_util_gen_hex (guint8 val, gchar * a, gchar * b) { guint8 x = 0, y = 0; g_assert (a); g_assert (b); x = val; x >>= 4; y = val; y <<= 4; y >>= 4; *a = gui_util_hex_char (x); *b = gui_util_hex_char (y); } void gui_view_update_io_mem (void) { GUIViewTable *ptr; GtkSpinButton *spin; GtkEntry *entry; gint val; gchar str[3] = "XX"; ptr = io_mem; while (ptr->data) { spin = GTK_SPIN_BUTTON(lookup_widget (app->window_main, ptr->data)); g_assert (spin); entry = GTK_ENTRY(lookup_widget (app->window_main, ptr->glade)); g_assert (entry); val = gtk_spin_button_get_value_as_int (spin); gui_util_gen_hex (*( (eef_data_t *)(ptr->extra) + val), str, str+1); gtk_entry_set_text (entry, str); ptr++; } } void gui_add_me_to_data_list(guint16 addr, gchar *name, gint cnt) { guint8 val; gchar *t; if ( cnt != -1 ) t = g_strdup_printf ("%s + %d", name, cnt); else t = g_strdup (name); if ( cnt != -1 ) addr += cnt; val = sys.mem[addr]; gui_list_data_add (addr, t, val); g_free (t); } void gui_for_each_in_hash(gchar *name, AsmSymEntry *entry, gpointer data) { /* add */ gint cnt = -1; if ( entry->type != ASM_SYM_VARIABLE ) return ; /* no thanx */ if ( entry->no_of_data == 1 ) gui_add_me_to_data_list (GPOINTER_TO_UINT(entry->data), entry->name, -1); else { gui_add_me_to_data_list (GPOINTER_TO_UINT(entry->data), entry->name, -1); gui_list_data_child_state (TRUE); for ( cnt=0; cnt < entry->no_of_data; cnt++ ) gui_add_me_to_data_list (GPOINTER_TO_UINT(entry->data), entry->name, cnt); gui_list_data_child_state (FALSE); } } static void gui_view_update_data(void) { gui_list_data_clear(); /* add */ asm_sym_scan ( (GHFunc)gui_for_each_in_hash, NULL); } static void gui_view_update_stack(void) { gui_list_stack_clear(); /* add */ gui_list_stack_reload (); } void gui_view_update_reg_flag (gboolean reset) { GUIViewTable *ptr; /* update reg_flag */ ptr = ®_flag[0]; while (ptr->data) { GtkLabel *label; gchar str[3] = "XX"; label = GTK_LABEL(lookup_widget (app->window_main, ptr->glade)); g_assert (label); gui_util_gen_hex (*((eef_data_t *) (ptr->data)), str, str + 1); if (!g_str_equal(gtk_label_get_text(label), str) && !reset){ /* show updated register with bold font */ gtk_label_set_markup (label, g_markup_printf_escaped("%s",str)); } else { gtk_label_set_markup (label, g_markup_printf_escaped("%s",str)); } ptr++; } /* update flag */ ptr++; while (ptr->data) { GtkLabel *label; gchar str[2] = "0"; label = GTK_LABEL(lookup_widget (app->window_main, ptr->glade)); g_assert (label); if ( _get_flag (GPOINTER_TO_INT(ptr->data)) && !reset){ str[0] = '1'; /* show updated flag with bold font */ gtk_label_set_markup (label, g_markup_printf_escaped("%s",str)); } else { gtk_label_set_markup (label, g_markup_printf_escaped("%s",str)); } ptr++; } } void gui_view_update_all (void) { /* update reg, flag labels */ gui_view_update_reg_flag(FALSE); /* update io_mem text entries */ gui_view_update_io_mem (); /* update data, stack lists */ gui_view_update_data (); gui_view_update_stack (); gui_list_memory_update (); gui_list_io_update (); } gnusim8085-1.4.1/src/asm-id.c0000644000175000017500000004737712767046204015363 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "asm-id.h" #include "asm-ds-limits.h" static IdOpcode id_opcode[] = { /* * { 0x, "", 0, "X", "X" }, */ {0xCE, "ACI", 0, "X", "X", 1, "Add immediate to accumulator with carry"} /* TODO - Add descriptions for all the instructions */ , {0x8F, "ADC", 1, "A", "X", 0, "Add register to accumulator with carry"} , {0x88, "ADC", 1, "B", "X", 0, "Add register to accumulator with carry"} , {0x89, "ADC", 1, "C", "X", 0, "Add register to accumulator with carry"} , {0x8A, "ADC", 1, "D", "X", 0, "Add register to accumulator with carry"} , {0x8B, "ADC", 1, "E", "X", 0, "Add register to accumulator with carry"} , {0x8C, "ADC", 1, "H", "X", 0, "Add register to accumulator with carry"} , {0x8D, "ADC", 1, "L", "X", 0, "Add register to accumulator with carry"} , {0x8E, "ADC", 1, "M", "X", 0, "Add register to accumulator with carry"} , {0x87, "ADD", 1, "A", "X", 0, "Add register or memory to accumulator"} , {0x80, "ADD", 1, "B", "X", 0, "Add register or memory to accumulator"} , {0x81, "ADD", 1, "C", "X", 0, "Add register or memory to accumulator"} , {0x82, "ADD", 1, "D", "X", 0, "Add register or memory to accumulator"} , {0x83, "ADD", 1, "E", "X", 0, "Add register or memory to accumulator"} , {0x84, "ADD", 1, "H", "X", 0, "Add register or memory to accumulator"} , {0x85, "ADD", 1, "L", "X", 0, "Add register or memory to accumulator"} , {0x86, "ADD", 1, "M", "X", 0, "Add register or memory to accumulator"} , {0xC6, "ADI", 0, "X", "X", 1, "Add immediate to accumulator"} , {0xA7, "ANA", 1, "A", "X", 0, "Logical AND register or memory with accumulator"} , {0xA0, "ANA", 1, "B", "X", 0, "Logical AND register or memory with accumulator"} , {0xA1, "ANA", 1, "C", "X", 0, "Logical AND register or memory with accumulator"} , {0xA2, "ANA", 1, "D", "X", 0, "Logical AND register or memory with accumulator"} , {0xA3, "ANA", 1, "E", "X", 0, "Logical AND register or memory with accumulator"} , {0xA4, "ANA", 1, "H", "X", 0, "Logical AND register or memory with accumulator"} , {0xA5, "ANA", 1, "L", "X", 0, "Logical AND register or memory with accumulator"} , {0xA6, "ANA", 1, "M", "X", 0, "Logical AND register or memory with accumulator"} , {0xE6, "ANI", 0, "M", "X", 1, "Logical AND immediate with accumulator"} , {0xCD, "CALL", 0, "M", "X", 2, "Subroutine Call"} , {0xDC, "CC", 0, "M", "X", 2, "Call on Carry"} , {0xFC, "CM", 0, "M", "X", 2, "Call on minus"} , {0x2F, "CMA", 0, "M", "X", 0, "Complement accumulator"} , {0x3F, "CMC", 0, "M", "X", 0, "Complement carry"} , {0xBF, "CMP", 1, "A", "X", 0, "Compare register or memory with accumulator"} , {0xB8, "CMP", 1, "B", "X", 0, "Compare register or memory with accumulator"} , {0xB9, "CMP", 1, "C", "X", 0, "Compare register or memory with accumulator"} , {0xBA, "CMP", 1, "D", "X", 0, "Compare register or memory with accumulator"} , {0xBB, "CMP", 1, "E", "X", 0, "Compare register or memory with accumulator"} , {0xBC, "CMP", 1, "H", "X", 0, "Compare register or memory with accumulator"} , {0xBD, "CMP", 1, "L", "X", 0, "Compare register or memory with accumulator"} , {0xBE, "CMP", 1, "M", "X", 0, "Compare register or memory with accumulator"} , {0xD4, "CNC", 0, "M", "X", 2, "Call on no Carry"} , {0xC4, "CNZ", 0, "M", "X", 2, "Call on no zero"} , {0xF4, "CP", 0, "M", "X", 2, "Call on positive"} , {0xEC, "CPE", 0, "M", "X", 2, "Call on parity even"} , {0xFE, "CPI", 0, "M", "X", 1, "Compare immediate with accumulator"} , {0xE4, "CPO", 0, "M", "X", 2, "Call on parity odd"} , {0xCC, "CZ", 0, "M", "X", 2, "Call on zero"} , {0x27, "DAA", 0, "M", "X", 0, "Decimal adjust accumulator"} , {0x09, "DAD", 1, "B", "X", 0, "Add register pair to H and L registers"} , {0x19, "DAD", 1, "D", "X", 0, "Add register pair to H and L registers"} , {0x29, "DAD", 1, "H", "X", 0, "Add register pair to H and L registers"} , {0x39, "DAD", 1, "SP", "X", 0, "Add register pair to H and L registers"} , {0x3D, "DCR", 1, "A", "X", 0, "Decrement register or memory by 1"} , {0x05, "DCR", 1, "B", "X", 0, "Decrement register or memory by 1"} , {0x0D, "DCR", 1, "C", "X", 0, "Decrement register or memory by 1"} , {0x15, "DCR", 1, "D", "X", 0, "Decrement register or memory by 1"} , {0x1D, "DCR", 1, "E", "X", 0, "Decrement register or memory by 1"} , {0x25, "DCR", 1, "H", "X", 0, "Decrement register or memory by 1"} , {0x2D, "DCR", 1, "L", "X", 0, "Decrement register or memory by 1"} , {0x35, "DCR", 1, "M", "X", 0, "Decrement register or memory by 1"} , {0x0B, "DCX", 1, "B", "X", 0, "Decrement register pair by 1"} , {0x1B, "DCX", 1, "D", "X", 0, "Decrement register pair by 1"} , {0x2B, "DCX", 1, "H", "X", 0, "Decrement register pair by 1"} , {0x3B, "DCX", 1, "SP", "X", 0, "Decrement register pair by 1"} , {0xF3, "DI", 0, "X", "X", 0, "Disable Interrupts"} , {0xFB, "EI", 0, "X", "X", 0, "Enable Interrupts"} , {0x76, "HLT", 0, "X", "X", 0, "Halt and enter wait state"} , {0xDB, "IN", 0, "X", "X", 1, "Input data to accumulator from a port with 8-bit address"} , {0x3C, "INR", 1, "A", "X", 0, "Increment register or memory by 1"} , {0x04, "INR", 1, "B", "X", 0, "Increment register or memory by 1"} , {0x0C, "INR", 1, "C", "X", 0, "Increment register or memory by 1"} , {0x14, "INR", 1, "D", "X", 0, "Increment register or memory by 1"} , {0x1C, "INR", 1, "E", "X", 0, "Increment register or memory by 1"} , {0x24, "INR", 1, "H", "X", 0, "Increment register or memory by 1"} , {0x2C, "INR", 1, "L", "X", 0, "Increment register or memory by 1"} , {0x34, "INR", 1, "M", "X", 0, "Increment register or memory by 1"} , {0x03, "INX", 1, "B", "X", 0, "Increment register pair by 1"} , {0x13, "INX", 1, "D", "X", 0, "Increment register pair by 1"} , {0x23, "INX", 1, "H", "X", 0, "Increment register pair by 1"} , {0x33, "INX", 1, "SP", "X", 0, "Increment register pair by 1"} , {0xDA, "JC", 0, "X", "X", 2, "Jump on Carry"} , {0xFA, "JM", 0, "X", "X", 2, "Jump on minus"} , {0xC3, "JMP", 0, "X", "X", 2, "Jump"} , {0xD2, "JNC", 0, "X", "X", 2, "Jump on no Carry"} , {0xC2, "JNZ", 0, "X", "X", 2, "Jump on no zero"} , {0xF2, "JP", 0, "X", "X", 2, "Jump on positive"} , {0xEA, "JPE", 0, "X", "X", 2, "Jump on parity even"} , {0xE2, "JPO", 0, "X", "X", 2, "Jump on parity odd"} , {0xCA, "JZ", 0, "X", "X", 2, "Jump on zero"} , {0x3A, "LDA", 0, "X", "X", 2, "Load accumulator"} , {0x0A, "LDAX", 1, "B", "X", 0, "Load accumulator indirect"} , {0x1A, "LDAX", 1, "D", "X", 0, "Load accumulator indirect"} , {0x2A, "LHLD", 0, "X", "X", 2, "Load H and L registers direct"} , {0x01, "LXI", 1, "B", "X", 2, "Load register pair immediate"} , {0x11, "LXI", 1, "D", "X", 2, "Load register pair immediate"} , {0x21, "LXI", 1, "H", "X", 2, "Load register pair immediate"} , {0x31, "LXI", 1, "SP", "X", 2, "Load register pair immediate"} , {0x7F, "MOV", 2, "A", "A", 0, "Copy from source to destination"} , {0x78, "MOV", 2, "A", "B", 0, "Copy from source to destination"} , {0x79, "MOV", 2, "A", "C", 0, "Copy from source to destination"} , {0x7A, "MOV", 2, "A", "D", 0, "Copy from source to destination"} , {0x7B, "MOV", 2, "A", "E", 0, "Copy from source to destination"} , {0x7C, "MOV", 2, "A", "H", 0, "Copy from source to destination"} , {0x7D, "MOV", 2, "A", "L", 0, "Copy from source to destination"} , {0x7E, "MOV", 2, "A", "M", 0, "Copy from source to destination"} , {0x47, "MOV", 2, "B", "A", 0, "Copy from source to destination"} , {0x40, "MOV", 2, "B", "B", 0, "Copy from source to destination"} , {0x41, "MOV", 2, "B", "C", 0, "Copy from source to destination"} , {0x42, "MOV", 2, "B", "D", 0, "Copy from source to destination"} , {0x43, "MOV", 2, "B", "E", 0, "Copy from source to destination"} , {0x44, "MOV", 2, "B", "H", 0, "Copy from source to destination"} , {0x45, "MOV", 2, "B", "L", 0, "Copy from source to destination"} , {0x46, "MOV", 2, "B", "M", 0, "Copy from source to destination"} , {0x4F, "MOV", 2, "C", "A", 0, "Copy from source to destination"} , {0x48, "MOV", 2, "C", "B", 0, "Copy from source to destination"} , {0x49, "MOV", 2, "C", "C", 0, "Copy from source to destination"} , {0x4A, "MOV", 2, "C", "D", 0, "Copy from source to destination"} , {0x4B, "MOV", 2, "C", "E", 0, "Copy from source to destination"} , {0x4C, "MOV", 2, "C", "H", 0, "Copy from source to destination"} , {0x4D, "MOV", 2, "C", "L", 0, "Copy from source to destination"} , {0x4E, "MOV", 2, "C", "M", 0, "Copy from source to destination"} , {0x57, "MOV", 2, "D", "A", 0, "Copy from source to destination"} , {0x50, "MOV", 2, "D", "B", 0, "Copy from source to destination"} , {0x51, "MOV", 2, "D", "C", 0, "Copy from source to destination"} , {0x52, "MOV", 2, "D", "D", 0, "Copy from source to destination"} , {0x53, "MOV", 2, "D", "E", 0, "Copy from source to destination"} , {0x54, "MOV", 2, "D", "H", 0, "Copy from source to destination"} , {0x55, "MOV", 2, "D", "L", 0, "Copy from source to destination"} , {0x56, "MOV", 2, "D", "M", 0, "Copy from source to destination"} , {0x5F, "MOV", 2, "E", "A", 0, "Copy from source to destination"} , {0x58, "MOV", 2, "E", "B", 0, "Copy from source to destination"} , {0x59, "MOV", 2, "E", "C", 0, "Copy from source to destination"} , {0x5A, "MOV", 2, "E", "D", 0, "Copy from source to destination"} , {0x5B, "MOV", 2, "E", "E", 0, "Copy from source to destination"} , {0x5C, "MOV", 2, "E", "H", 0, "Copy from source to destination"} , {0x5D, "MOV", 2, "E", "L", 0, "Copy from source to destination"} , {0x5E, "MOV", 2, "E", "M", 0, "Copy from source to destination"} , {0x67, "MOV", 2, "H", "A", 0, "Copy from source to destination"} , {0x60, "MOV", 2, "H", "B", 0, "Copy from source to destination"} , {0x61, "MOV", 2, "H", "C", 0, "Copy from source to destination"} , {0x62, "MOV", 2, "H", "D", 0, "Copy from source to destination"} , {0x63, "MOV", 2, "H", "E", 0, "Copy from source to destination"} , {0x64, "MOV", 2, "H", "H", 0, "Copy from source to destination"} , {0x65, "MOV", 2, "H", "L", 0, "Copy from source to destination"} , {0x66, "MOV", 2, "H", "M", 0, "Copy from source to destination"} , {0x6F, "MOV", 2, "L", "A", 0, "Copy from source to destination"} , {0x68, "MOV", 2, "L", "B", 0, "Copy from source to destination"} , {0x69, "MOV", 2, "L", "C", 0, "Copy from source to destination"} , {0x6A, "MOV", 2, "L", "D", 0, "Copy from source to destination"} , {0x6B, "MOV", 2, "L", "E", 0, "Copy from source to destination"} , {0x6C, "MOV", 2, "L", "H", 0, "Copy from source to destination"} , {0x6D, "MOV", 2, "L", "L", 0, "Copy from source to destination"} , {0x6E, "MOV", 2, "L", "M", 0, "Copy from source to destination"} , {0x77, "MOV", 2, "M", "A", 0, "Copy from source to destination"} , {0x70, "MOV", 2, "M", "B", 0, "Copy from source to destination"} , {0x71, "MOV", 2, "M", "C", 0, "Copy from source to destination"} , {0x72, "MOV", 2, "M", "D", 0, "Copy from source to destination"} , {0x73, "MOV", 2, "M", "E", 0, "Copy from source to destination"} , {0x74, "MOV", 2, "M", "H", 0, "Copy from source to destination"} , {0x75, "MOV", 2, "M", "L", 0, "Copy from source to destination"} , {0x3E, "MVI", 1, "A", "X", 1, "Move immediate 8-bit"} , {0x06, "MVI", 1, "B", "X", 1, "Move immediate 8-bit"} , {0x0E, "MVI", 1, "C", "X", 1, "Move immediate 8-bit"} , {0x16, "MVI", 1, "D", "X", 1, "Move immediate 8-bit"} , {0x1E, "MVI", 1, "E", "X", 1, "Move immediate 8-bit"} , {0x26, "MVI", 1, "H", "X", 1, "Move immediate 8-bit"} , {0x2E, "MVI", 1, "L", "X", 1, "Move immediate 8-bit"} , {0x36, "MVI", 1, "M", "X", 1, "Move immediate 8-bit"} , {0x00, "NOP", 0, "M", "X", 0, "No operation"} , {0xB7, "ORA", 1, "A", "X", 0, "Logical OR register or memory with accumulator"} , {0xB0, "ORA", 1, "B", "X", 0, "Logical OR register or memory with accumulator"} , {0xB1, "ORA", 1, "C", "X", 0, "Logical OR register or memory with accumulator"} , {0xB2, "ORA", 1, "D", "X", 0, "Logical OR register or memory with accumulator"} , {0xB3, "ORA", 1, "E", "X", 0, "Logical OR register or memory with accumulator"} , {0xB4, "ORA", 1, "H", "X", 0, "Logical OR register or memory with accumulator"} , {0xB5, "ORA", 1, "L", "X", 0, "Logical OR register or memory with accumulator"} , {0xB6, "ORA", 1, "M", "X", 0, "Logical OR register or memory with accumulator"} , {0xF6, "ORI", 0, "M", "X", 1, "Logical OR immediate with accumulator"} , {0xD3, "OUT", 0, "M", "X", 1, "Output data from accumulator to a port with 8-bit address"} , {0xE9, "PCHL", 0, "M", "X", 0, "Load program counter with HL contents"} , {0xC0, "RNZ", 0, "B", "X", 0, "Return on no zero"} , {0xC1, "POP", 1, "B", "X", 0, "Pop off stack to register pair"} , {0xD1, "POP", 1, "D", "X", 0, "Pop off stack to register pair"} , {0xE1, "POP", 1, "H", "X", 0, "Pop off stack to register pair"} , {0xF1, "POP", 1, "PSW", "X", 0, "Pop off stack to register pair"} , {0xC5, "PUSH", 1, "B", "X", 0, "Push register pair onto stack"} , {0xD5, "PUSH", 1, "D", "X", 0, "Push register pair onto stack"} , {0xE5, "PUSH", 1, "H", "X", 0, "Push register pair onto stack"} , {0xF5, "PUSH", 1, "PSW", "X", 0, "Push register pair onto stack"} , {0x17, "RAL", 0, "M", "X", 0, "Rotate accumulator left through carry"} , {0x1F, "RAR", 0, "M", "X", 0, "Rotate accumulator right through carry"} , {0xD8, "RC", 0, "M", "X", 0, "Return on Carry"} , {0xC9, "RET", 0, "M", "X", 0, "Return from subroutine"} , {0x20, "RIM", 0, "M", "X", 0, "Read interrupt mask"} , {0x07, "RLC", 0, "M", "X", 0, "Rotate accumulator left"} , {0xF8, "RM", 0, "M", "X", 0, "Return on minus"} , {0xD0, "RNC", 0, "M", "X", 0, "Return on no Carry"} , {0xF0, "RP", 0, "M", "X", 0, "Return on positive"} , {0xE8, "RPE", 0, "M", "X", 0, "Return on parity even"} , {0xE0, "RPO", 0, "M", "X", 0, "Return on parity odd"} , {0x0F, "RRC", 0, "M", "X", 0, "Rotate accumulator right"} , {0xC7, "RST", 1, "0", "X", 0, "Restart"} , {0xCF, "RST", 1, "1", "X", 0, "Restart"} , {0xD7, "RST", 1, "2", "X", 0, "Restart"} , {0xDF, "RST", 1, "3", "X", 0, "Restart"} , {0xE7, "RST", 1, "4", "X", 0, "Restart"} , {0xEF, "RST", 1, "5", "X", 0, "Restart"} , {0xF7, "RST", 1, "6", "X", 0, "Restart"} , {0xFF, "RST", 1, "7", "X", 0, "Restart"} , {0xC8, "RZ", 0, "X", "X", 0, "Return on zero"} , {0x9F, "SBB", 1, "A", "X", 0, "Subtract source and borrow from accumulator"} , {0x98, "SBB", 1, "B", "X", 0, "Subtract source and borrow from accumulator"} , {0x99, "SBB", 1, "C", "X", 0, "Subtract source and borrow from accumulator"} , {0x9A, "SBB", 1, "D", "X", 0, "Subtract source and borrow from accumulator"} , {0x9B, "SBB", 1, "E", "X", 0, "Subtract source and borrow from accumulator"} , {0x9C, "SBB", 1, "H", "X", 0, "Subtract source and borrow from accumulator"} , {0x9D, "SBB", 1, "L", "X", 0, "Subtract source and borrow from accumulator"} , {0x9E, "SBB", 1, "M", "X", 0, "Subtract source and borrow from accumulator"} , {0xDE, "SBI", 0, "M", "X", 1, "Subtract immediate from accumulator with borrow"} , {0x22, "SHLD", 0, "M", "X", 2, "Store H and L registers direct"} , {0x30, "SIM", 0, "M", "X", 0, "Set interrupt mask"} , {0xF9, "SPHL", 0, "M", "X", 0, "Copy H and L registers to the stack pointer"} , {0x32, "STA", 0, "M", "X", 2, "Store accumulator direct"} , {0x02, "STAX", 1, "B", "X", 0, "Store accumulator indirect (RegPair)"} , {0x12, "STAX", 1, "D", "X", 0, "Store accumulator indirect (RegPair)"} , {0x37, "STC", 0, "M", "X", 0, "Set Carry"} , //modified {0x97, "SUB", 1, "A", "X", 0, "Subtract register or memory from accumulator"} , {0x90, "SUB", 1, "B", "X", 0, "Subtract register or memory from accumulator"} , {0x91, "SUB", 1, "C", "X", 0, "Subtract register or memory from accumulator"} , {0x92, "SUB", 1, "D", "X", 0, "Subtract register or memory from accumulator"} , {0x93, "SUB", 1, "E", "X", 0, "Subtract register or memory from accumulator"} , {0x94, "SUB", 1, "H", "X", 0, "Subtract register or memory from accumulator"} , {0x95, "SUB", 1, "L", "X", 0, "Subtract register or memory from accumulator"} , {0x96, "SUB", 1, "M", "X", 0, "Subtract register or memory from accumulator"} , {0xD6, "SUI", 0, "M", "X", 1, "Subtract immediate from accumulator"} , {0xEB, "XCHG", 0, "M", "X", 0, "Exchange H and L with D and E"} , {0xAF, "XRA", 1, "A", "X", 0, "Exclusive OR register or memory with accumulator"} , {0xA8, "XRA", 1, "B", "X", 0, "Exclusive OR register or memory with accumulator"} , {0xA9, "XRA", 1, "C", "X", 0, "Exclusive OR register or memory with accumulator"} , {0xAA, "XRA", 1, "D", "X", 0, "Exclusive OR register or memory with accumulator"} , {0xAB, "XRA", 1, "E", "X", 0, "Exclusive OR register or memory with accumulator"} , {0xAC, "XRA", 1, "H", "X", 0, "Exclusive OR register or memory with accumulator"} , {0xAD, "XRA", 1, "L", "X", 0, "Exclusive OR register or memory with accumulator"} , {0xAE, "XRA", 1, "M", "X", 0, "Exclusive OR register or memory with accumulator"} , {0xEE, "XRI", 0, "M", "X", 1, "Exclusive OR immediate with accumulator"} , {0xE3, "XTHL", 0, "M", "X", 0, "Exchange H and L with top of stack"} }; IdOpcode * asm_id_get_opcode (void) { return id_opcode; } IdOpcode * asm_id_opcode_lookup (gchar * op_name, gchar * arg1, gchar * arg2) { int i; g_assert (op_name); /* linear search! Not faster. but assembling will take no time */ for (i = 0; i < sizeof (id_opcode) / sizeof (id_opcode[0]); i++) { if (g_ascii_strcasecmp (op_name, id_opcode[i].op_str)) continue; if (arg1 && g_ascii_strcasecmp (arg1, id_opcode[i].arg1)) continue; if (arg2 && g_ascii_strcasecmp (arg2, id_opcode[i].arg2)) continue; return &id_opcode[i]; } return NULL; } static IdPseudo id_pseudo[] = { {ID_PSEUDO_EQU, "EQU", 1}, {ID_PSEUDO_DB, "DB", 1}, {ID_PSEUDO_DS, "DS", 1} }; IdPseudo * asm_id_get_pseudo (void) { return id_pseudo; } IdPseudo * asm_id_pseudo_lookup (gchar * op_name) { int i; g_assert (op_name); for (i = 0; i < sizeof (id_pseudo) / sizeof (id_pseudo[0]); i++) { if (g_ascii_strcasecmp (op_name, id_pseudo[i].op_str)) continue; return &id_pseudo[i]; } return NULL; } gchar * asm_id_return_all_opcode_names (void) { gchar *all, *next; gint i, tot; all = g_malloc (ASM_DS_MAX_OPCODE_LENGTH * 0xFF); next = all; tot = sizeof (id_opcode) / sizeof (id_opcode[0]); g_assert (tot == 246); /* for each opcode */ for (i = 0; i < tot; i++) { next = g_stpcpy (next, id_opcode[i].op_str); next = g_stpcpy (next, " "); } next = g_ascii_strdown (all, -1); g_free (all); return next; } gint asm_id_total_opcodes (void) { return sizeof(id_opcode)/sizeof(id_opcode[0]); } gint asm_id_total_pseudos (void) { return sizeof(id_pseudo)/sizeof(id_pseudo[0]); } gnusim8085-1.4.1/src/bridge.h0000644000175000017500000000370612767046204015436 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This is module acts like a bridge between user interface funtionality * and other core modules * In most of the cases, gui callbacks will make use of this module for * their job to get done * * R. Sridhar */ #ifndef __BRIDGE_H__ #define __BRIDGE_H__ #include #include "8085.h" #include "asm-source.h" #define SIM_CONTEXT "Simulator" G_BEGIN_DECLS /* the state of the application */ typedef enum { B_STATE_IDLE, B_STATE_DEBUG }BState; BState b_get_state(void); typedef enum { B_TRACE_IN, B_TRACE_OVER, B_TRACE_OUT }BTraceMode; void b_init(void); gboolean b_assemble(char *text, guint16 start_addr); gboolean b_execute(void); /* after this mode is set, execution is traced * after program halt of stop it will automatically switch back * to normal mode */ void b_enter_debug_mode (void); /* stop the current debugging */ void b_debug_stop(void); /* toggles at current line number */ void b_toggle_breakpoint (void); gboolean b_resume_execution (BTraceMode tmode); /* on 4 stuffs */ gboolean b_resume_execution(BTraceMode tmode); /* get src */ AsmSource * b_get_src(void); extern GtkWidget *appbar ; G_END_DECLS #endif /* __BRIDGE_H__*/ gnusim8085-1.4.1/src/gui-editor.h0000644000175000017500000000642413325706127016250 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * GUI - Editor for ASM code * using gtksourceview * * R. Sridhar */ #ifndef __GUI_EDITOR_H__ #define __GUI_EDITOR_H__ #include #include #include #include #include #include #include #include "callbacks.h" #include "interface.h" #define DEFAULT_EDITOR_FONT (const gchar*) "Monospace 12" #define MARKER_BREAKPOINT (const gchar*) "breakpoint" #define HIGHLIGHT_TAG (const gchar*) "hl_tag" #define COLOUR_BG_HL (const gchar*) "#00FFFF" G_BEGIN_DECLS typedef struct { /* use this id for use with GTK+ */ GtkWidget *widget; GtkWidget *scroll; const gchar* current_font; GtkSourceBuffer *buffer; GtkTextIter iter; GtkTextMark *mark; GtkTextTag *hltag; GtkSourceLanguageManager *lang_manager; GtkSourceStyleSchemeManager *style_scheme_manager; GtkSourceLanguage *language; GtkPrintOperation *print_operation; GtkSourcePrintCompositor *print_compositor; } GUIEditor; GUIEditor *gui_editor_new (void); void gui_editor_show (GUIEditor * self); void gui_editor_destroy (GUIEditor * self); /* return new string and clones the string passed to it */ gchar *gui_editor_get_text (GUIEditor * self); void gui_editor_set_text (GUIEditor * self, const gchar * text); void gui_editor_set_mark (GUIEditor * self, guint line_no, gboolean set); void gui_editor_set_highlight (GUIEditor * self, guint line_no, gboolean set); void gui_editor_toggle_mark (GUIEditor * self); void gui_editor_toggle_mark_at_line (GUIEditor * self, gint line_no); void gui_editor_set_margin_toggle_mark (GUIEditor * self); void gui_editor_clear_all_highlights(GUIEditor *self); gboolean gui_editor_is_marked (GUIEditor *self, gint ln); void gui_editor_clear_all_marks(GUIEditor *self); void gui_editor_goto_line (GUIEditor *self, gint ln); gint gui_editor_get_line (GUIEditor *self); void gui_editor_set_readonly (GUIEditor *self, gboolean val); void gui_editor_set_show_line_numbers (GUIEditor *self, gboolean val); void gui_editor_insert (GUIEditor *self, gchar *text); void gui_editor_grab_focus (GUIEditor *self); const gchar *gui_editor_get_font (GUIEditor *self); void gui_editor_set_font (GUIEditor *self, const gchar *font_name); void gui_editor_print (GUIEditor *self); GdkPixbuf * gui_editor_get_stock_icon (GtkWidget *widget, const gchar *stock_id, GtkIconSize size); G_END_DECLS #endif /* __GUI_EDITOR_H__ */ gnusim8085-1.4.1/src/bridge.c0000644000175000017500000002441313266554416015433 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* bridge.c is really an uglier code! sorry ;-| */ #include "bridge.h" #include "8085-asm.h" #include "8085.h" #include "config.h" #include "gui-app.h" #include "8085-link.h" #include "gui-view.h" #include "gui-list-stack.h" #define SIM_PROG_RUNNING _("Simulator: Program running") /* DATA */ static BState state = B_STATE_IDLE; /* state of the program */ static gboolean saved_and_assembled_successfully = FALSE; static gboolean execution_single_stepped = FALSE; /* if above is TRUE , then associate with these */ static BTraceMode ess_trace_mode = B_TRACE_IN; /* supplementry vars below */ static gboolean ess_trace_mode_over_inside_func = FALSE; static eef_addr_t ess_trace_mode_over_stack_cont = 0xFF; static gint ess_trace_mode_out_callret = 0; static guint16 executed_bytes = 0; static guint16 last_loaded_address = 0; /* for break point and trace */ static guint16 about_to_execute_from = 0; static AsmSource *ds_source = NULL; static EefMemBlock *ds_memblock = NULL; /* statusbar id */ GtkWidget *statusbar = NULL; /* Methods */ BState b_get_state (void) { return state; } static void _end_of_exec (void) { gtk_statusbar_pop (GTK_STATUSBAR(statusbar), gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), SIM_CONTEXT)); //gui_list_stack_reset (); } static void _update_gui_state (void) { gboolean bdebug = FALSE; if (state == B_STATE_DEBUG) bdebug = TRUE; GtkAction *action_widget; #define DF_ACTION(wstr, issen) \ action_widget = lookup_action_widget (app->window_main, wstr); \ g_assert (action_widget); \ gtk_action_set_sensitive (action_widget, issen); DF_ACTION ("newfile", !bdebug); DF_ACTION ("openfile", !bdebug); DF_ACTION ("savefile", !bdebug); DF_ACTION ("savefileas", !bdebug); DF_ACTION ("resetregisters", !bdebug); DF_ACTION ("resetflags", !bdebug); DF_ACTION ("resetports", !bdebug); DF_ACTION ("resetmemory", !bdebug); DF_ACTION ("resetall", !bdebug); DF_ACTION ("assemble", !bdebug); DF_ACTION ("listing", !bdebug); DF_ACTION ("stop_debug", bdebug); #undef DF_ACTION } static void ds_clean_up (void) { if (ds_memblock) eef_mem_block_delete (ds_memblock, TRUE); ds_memblock = NULL; if (ds_source) asm_source_destroy (ds_source); ds_source = NULL; } /* CALLBACK */ static void hightlight_line (gint ln) { gui_editor_clear_all_highlights (app->editor); if (ln != -1) { gui_editor_set_highlight (app->editor, ln, TRUE); gui_editor_goto_line (app->editor, ln); } } static void bridge_debug_this_line (eef_addr_t addr, gint ln) { if (ln != -1) { about_to_execute_from = addr; state = B_STATE_DEBUG; } gui_view_update_all (); _update_gui_state (); hightlight_line (ln); } /* If returned TRUE 8085 will proceed with executing * instruction at "addr" otherwise it will return to caller. */ gboolean prev_is_call_instr = FALSE; gboolean _bridge_8085_cb (eef_addr_t addr, eef_addr_t prev_addr, gboolean finished) { gint ln; gboolean break_pt = FALSE; eef_data_t opcode; if (finished) { state = B_STATE_IDLE; prev_is_call_instr = FALSE; execution_single_stepped = FALSE; saved_and_assembled_successfully = FALSE; bridge_debug_this_line (0, -1); gui_editor_set_readonly (app->editor, FALSE); _end_of_exec (); return TRUE; /* caller is going to return */ } /* get opcode */ opcode = eef_get_op_at_addr (addr); if (eef_is_call_instr (eef_get_op_at_addr (prev_addr))) prev_is_call_instr = TRUE; else prev_is_call_instr = FALSE; /* get line no */ ln = eef_link_get_line_no (addr); if (ln == -1) { GString *err_str; err_str = g_string_new (""); g_string_printf (err_str, _("Execution branched to invalid memory location <%xH>. Execution will be stopped!\n\n\ Check whether you've included the \"hlt\" instruction at the end of your program and your source program\ is not empty. Also check your program logic. If you're very sure, there might be a bug in GNUSim8085.\ If so you're advised to send a copy of your source progam."), addr); /* fatal error */ gui_app_show_msg (GTK_MESSAGE_WARNING, err_str->str); g_string_free (err_str, TRUE); b_debug_stop (); //g_return_val_if_fail (ln != -1, FALSE); return FALSE; } break_pt = gui_editor_is_marked (app->editor, ln); if (!execution_single_stepped && break_pt) { /* break */ bridge_debug_this_line (addr, ln); return FALSE; } else if (execution_single_stepped) { /* find the mode - ess_trace_mode */ if (ess_trace_mode == B_TRACE_OVER) { /* normal trace */ if (ess_trace_mode_over_inside_func == FALSE) { if (prev_is_call_instr) { ess_trace_mode_over_inside_func = TRUE; ess_trace_mode_over_stack_cont = eef_regpair_get ('S') + 2; prev_is_call_instr = FALSE; if (break_pt) { bridge_debug_this_line (addr, ln); return FALSE; } else { return TRUE; } } bridge_debug_this_line (addr, ln); return FALSE; } /* inside call */ if (ess_trace_mode_over_stack_cont == eef_regpair_get ('S')) { ess_trace_mode_over_inside_func = FALSE; bridge_debug_this_line (addr, ln); return FALSE; } if (break_pt) { bridge_debug_this_line (addr, ln); return FALSE; } else { return TRUE; /* finish the func */ } } else if (ess_trace_mode == B_TRACE_OUT) { if (eef_is_call_instr (eef_get_op_at_addr (prev_addr))) ess_trace_mode_out_callret++; if (eef_is_ret_instr (eef_get_op_at_addr (prev_addr))) ess_trace_mode_out_callret--; if ((ess_trace_mode_out_callret < 0) || (break_pt)) { bridge_debug_this_line (addr, ln); return FALSE; } return TRUE; } else if (ess_trace_mode == B_TRACE_IN) { bridge_debug_this_line (addr, ln); return FALSE; } } return TRUE; } void b_init (void) { /* set callback */ eef_set_trace_callback (_bridge_8085_cb); /* set statusbar id */ statusbar = lookup_widget (app->window_main, "main_statusbar"); g_assert (statusbar); _update_gui_state(); } gboolean b_assemble (char *text, guint16 start_addr) { g_assert (state == B_STATE_IDLE); /* clean up previous */ ds_clean_up (); /* restart asm */ eef_asm_init (); sys.reg.sph = 0xff; sys.reg.spl = 0xff; gtk_statusbar_push (GTK_STATUSBAR(statusbar), gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), SIM_CONTEXT), _("Assembler: running")); gui_editor_clear_all_highlights (app->editor); saved_and_assembled_successfully = eef_asm_assemble (text, start_addr, &ds_source, &ds_memblock); gtk_statusbar_pop (GTK_STATUSBAR(statusbar), gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), SIM_CONTEXT)); if (saved_and_assembled_successfully) last_loaded_address = start_addr; else { last_loaded_address = 0; ds_clean_up (); return FALSE; } return TRUE; } gboolean b_execute (void) { //g_assert (state == B_STATE_IDLE); if (!saved_and_assembled_successfully) return FALSE; if (state == B_STATE_DEBUG) { /* resuming execution */ state = B_STATE_IDLE; execution_single_stepped = FALSE; gui_editor_set_readonly (app->editor, TRUE); return eef_execute_from (about_to_execute_from, &executed_bytes, -1); } else { /* init */ gui_list_stack_reset (); } if (execution_single_stepped) /* tracing */ state = B_STATE_DEBUG; gui_editor_set_readonly (app->editor, TRUE); gtk_statusbar_push (GTK_STATUSBAR(statusbar), gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), SIM_CONTEXT), _(SIM_PROG_RUNNING)); return eef_execute_from (last_loaded_address, &executed_bytes, -1); gtk_statusbar_pop (GTK_STATUSBAR(statusbar), gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), SIM_CONTEXT)); } gboolean b_resume_execution (BTraceMode tmode) { gboolean r; ess_trace_mode_out_callret = 0; if (state != B_STATE_DEBUG) { /* start it */ if (!saved_and_assembled_successfully) return FALSE; gui_list_stack_reset (); execution_single_stepped = TRUE; state = B_STATE_DEBUG; about_to_execute_from = last_loaded_address; ess_trace_mode = tmode; gui_editor_set_readonly (app->editor, TRUE); bridge_debug_this_line (about_to_execute_from, eef_link_get_line_no (about_to_execute_from)); gtk_statusbar_push (GTK_STATUSBAR(statusbar), gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), SIM_CONTEXT), _(SIM_PROG_RUNNING)); return TRUE; } execution_single_stepped = TRUE; ess_trace_mode = tmode; gui_editor_set_readonly (app->editor, TRUE); gtk_statusbar_push (GTK_STATUSBAR(statusbar), gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), SIM_CONTEXT), _(SIM_PROG_RUNNING)); r = eef_execute_from (about_to_execute_from, &executed_bytes, -1); _end_of_exec (); return r; } /* after this mode is set, execution is traced * after program halt of stop it will automatically switch back * to normal mode */ void b_enter_debug_mode (void) { g_assert (execution_single_stepped == FALSE); execution_single_stepped = TRUE; _update_gui_state (); gui_editor_set_readonly (app->editor, TRUE); } /* stop the current debugging */ void b_debug_stop (void) { execution_single_stepped = FALSE; state = B_STATE_IDLE; prev_is_call_instr = FALSE; ess_trace_mode_out_callret = 0; bridge_debug_this_line (0, -1); /* clear display */ _update_gui_state (); _end_of_exec (); gui_editor_set_readonly (app->editor, FALSE); } /* toggles at current line number */ void b_toggle_breakpoint (void) { gui_editor_toggle_mark (app->editor); } AsmSource * b_get_src (void) { return ds_source; } gnusim8085-1.4.1/src/asm-token.c0000644000175000017500000000656212767046204016076 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "asm-token.h" /* allocation */ AsmTokenizer * asm_tokenizer_new (gchar * str) { AsmTokenizer *self; g_assert (str); self = g_malloc (sizeof (AsmTokenizer)); g_assert (self); self->full_string = g_strdup (str); self->next = self->full_string; return self; } void asm_tokenizer_destroy (AsmTokenizer * self) { g_assert (self); g_free (self->full_string); g_free (self); } /* call these funcs in order... */ void asm_tokenizer_remove_comment (AsmTokenizer * self) { gchar *p; g_assert (self); g_assert (self->full_string); p = self->full_string; while (*p && *p != ';') p++; *p = '\0'; } void asm_tokenizer_strip (AsmTokenizer * self) { g_assert (self); g_assert (self->full_string); g_strstrip (self->full_string); g_strdelimit (self->full_string, " \t", ' '); return; } static gboolean is_char_of_code (gchar c) { if (c == ':' || g_ascii_isalnum (c) || c == ',') return TRUE; return FALSE; } void asm_tokenizer_compress (AsmTokenizer * self) { gchar *tmp; gint tmp_len = 0; gchar *ptr; gboolean pcomma = FALSE; g_assert (self); g_assert (self->full_string); tmp = g_strdup (self->full_string); ptr = self->full_string; while (*ptr) { if ( is_char_of_code (*ptr) ) { if ( *ptr == ',' ) pcomma = TRUE; else pcomma = FALSE; if ( *ptr == ',' && tmp_len && !is_char_of_code(tmp[tmp_len-1]) ) tmp[ tmp_len-1 ] = *ptr++; else tmp[ tmp_len++ ] = *ptr++; } else { /* skip as many whites as possible and add one space */ if ( !pcomma ) tmp[ tmp_len++ ] = *ptr++; pcomma = FALSE; while ( *ptr && !is_char_of_code(*ptr) ) ptr++; if ( *ptr == '\0' ) break; } } tmp[ tmp_len ] = '\0'; /* swap */ g_free (self->full_string); self->full_string = g_strdup (tmp); self->next = self->full_string; g_free (tmp); } /* ....or call this once */ void asm_tokenizer_ready (AsmTokenizer * self) { asm_tokenizer_remove_comment (self); asm_tokenizer_strip (self); asm_tokenizer_compress (self); } /* returns next token * caller should free the string */ gchar *asm_tokenizer_next (AsmTokenizer * self, gchar delimiter) { gchar *token; gint token_iter = 0; gchar *p; g_assert (self); if ( self->next == '\0' ) return NULL; token = g_strdup ( self->next ); p = self->next; while ( *p && *p == delimiter ) p++; if ( *p == '\0' ) { g_free (token); self->next = NULL; return NULL; } do { token[ token_iter++ ] = *p++; }while ( *p && *p != delimiter ); token[ token_iter ] = '\0'; self->next = (*p)?p+1:p; return token; } gnusim8085-1.4.1/src/callbacks.h0000644000175000017500000001303113325703245016105 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include gboolean on_window_main_delete_event (GtkWidget * widget, GdkEvent * event, gpointer user_data); G_MODULE_EXPORT void on_new1_activate (GtkMenuItem * menuitem, gpointer user_data); G_MODULE_EXPORT void on_open1_activate (GtkMenuItem * menuitem, gpointer user_data); G_MODULE_EXPORT void on_save1_activate (GtkMenuItem * menuitem, gpointer user_data); G_MODULE_EXPORT void on_save_as1_activate (GtkMenuItem * menuitem, gpointer user_data); G_MODULE_EXPORT void on_print_activate (GtkAction * menuitem, gpointer user_data); G_MODULE_EXPORT void on_font_select_activate (GtkAction * menuitem, gpointer user_data); G_MODULE_EXPORT void on_quit1_activate (GtkMenuItem * menuitem, gpointer user_data); G_MODULE_EXPORT void on_registers1_activate (GtkMenuItem * menuitem, gpointer user_data); G_MODULE_EXPORT void on_flags1_activate (GtkMenuItem * menuitem, gpointer user_data); G_MODULE_EXPORT void on_io_ports1_activate (GtkMenuItem * menuitem, gpointer user_data); G_MODULE_EXPORT void on_main_memory1_activate (GtkMenuItem * menuitem, gpointer user_data); G_MODULE_EXPORT void on_reset_all1_activate (GtkMenuItem * menuitem, gpointer user_data); G_MODULE_EXPORT void on_assemble1_activate (GtkMenuItem * menuitem, gpointer user_data); G_MODULE_EXPORT void on_execute1_activate (GtkMenuItem * menuitem, gpointer user_data); G_MODULE_EXPORT void on_step_in1_activate (GtkMenuItem * menuitem, gpointer user_data); G_MODULE_EXPORT void on_step_over1_activate (GtkMenuItem * menuitem, gpointer user_data); G_MODULE_EXPORT void on_step_out1_activate (GtkMenuItem * menuitem, gpointer user_data); G_MODULE_EXPORT void on_toggle_breakpoint1_activate (GtkMenuItem * menuitem, gpointer user_data); G_MODULE_EXPORT void on_clear_all_breakpoints1_activate (GtkMenuItem * menuitem, gpointer user_data); G_MODULE_EXPORT void on_stop_execution1_activate (GtkMenuItem * menuitem, gpointer user_data); G_MODULE_EXPORT void on_help_activate (GtkMenuItem * menuitem, gpointer user_data); G_MODULE_EXPORT void on_assembler_tutorial1_activate (GtkMenuItem * menuitem, gpointer user_data); G_MODULE_EXPORT void on_about1_activate (GtkMenuItem * menuitem, gpointer user_data); G_MODULE_EXPORT void show_hide_side_pane (GtkToggleAction * menuitem, gpointer user_data); G_MODULE_EXPORT void on_main_io_monitor_clicked (GtkButton * button, gpointer user_data); G_MODULE_EXPORT void on_main_io_set_clicked (GtkButton * button, gpointer user_data); G_MODULE_EXPORT void on_main_io_spin_changed (GtkEditable * editable, gpointer user_data); G_MODULE_EXPORT void on_main_io_update_clicked (GtkButton * button, gpointer user_data); G_MODULE_EXPORT void on_main_mem_spin_changed (GtkEditable * editable, gpointer user_data); G_MODULE_EXPORT void on_main_mem_update_clicked (GtkButton * button, gpointer user_data); G_MODULE_EXPORT void on_main_io_spin_changed (GtkEditable * editable, gpointer user_data); G_MODULE_EXPORT void on_main_io_update_clicked (GtkButton * button, gpointer user_data); G_MODULE_EXPORT void on_main_mem_spin_changed (GtkEditable * editable, gpointer user_data); G_MODULE_EXPORT void on_main_mem_update_clicked (GtkButton * button, gpointer user_data); G_MODULE_EXPORT void on_show_listing1_activate (GtkMenuItem * menuitem, gpointer user_data); G_MODULE_EXPORT void on_listing_save_clicked (GtkButton * button, gpointer user_data); G_MODULE_EXPORT void on_listing_print_clicked (GtkButton * button, gpointer user_data); G_MODULE_EXPORT void on_main_but_to_hex_clicked (GtkButton * button, gpointer user_data); G_MODULE_EXPORT void on_main_but_to_dec_clicked (GtkButton * button, gpointer user_data); G_MODULE_EXPORT void on_main_entry_dec_activate (GtkEntry * entry, gpointer user_data); G_MODULE_EXPORT void on_main_entry_hex_activate (GtkEntry * entry, gpointer user_data); G_MODULE_EXPORT void on_start_but_tutorial_clicked (GtkButton * button, gpointer user_data); G_MODULE_EXPORT void on_start_but_open_clicked (GtkButton * button, gpointer user_data); G_MODULE_EXPORT void on_start_but_close_clicked (GtkButton * button, gpointer user_data); G_MODULE_EXPORT void on_listing_save_clicked (GtkButton * button, gpointer user_data); G_MODULE_EXPORT void on_mem_list_start_clicked (GtkButton * button, gpointer user_data); G_MODULE_EXPORT void on_mem_list_start_changed (GtkEntry *entry, gpointer user_data); G_MODULE_EXPORT void on_io_list_start_clicked (GtkButton * button, gpointer user_data); G_MODULE_EXPORT void on_io_list_start_changed (GtkEntry * entry, gpointer user_data); G_MODULE_EXPORT void show_tutorial (); G_MODULE_EXPORT void on_line_mark_activated (GtkSourceView * view, GtkTextIter * iter, GdkEventButton * event, gpointer editor); gnusim8085-1.4.1/src/asm-id-info.c0000644000175000017500000000167312767046204016301 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* Some general information about the opcodes in 8085 instruction set * Feel free to correct or modify this feel and send the patches to the author */ gnusim8085-1.4.1/src/8085-instructions.c0000644000175000017500000017201313266554153017343 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ //Instructions TODO: RIM, SIM, ~RST #include "8085-instructions.h" #include "config.h" #define ERR_IV_OP _("Invalid Opcode") void _eef_inst_assign_all (void); void eef_call_stack_cb (gboolean pushed, gchar x); /* refer 8085.c */ typedef gint (*eef_inst_func_t) (eef_addr_t opnd_addr); eef_inst_func_t eef_instructions[MAX_INSTS]; gboolean eef_instructions_assigned = FALSE; gboolean eef_inst_is_halt_inst (eef_data_t op) { switch (op) { case 0x76: case 0xc7: case 0xcf: case 0xd7: case 0xdf: case 0xe7: case 0xef: case 0xff: return TRUE; } return FALSE; } gboolean eef_inst_execute (eef_addr_t addr, eef_addr_t * consumed_bytes, gboolean * is_halt_inst) { eef_data_t op; /* opcode */ eef_addr_t returned_value; /* init */ EEF_SET_PTR (consumed_bytes, 1); EEF_SET_PTR (is_halt_inst, FALSE); /* init inst. table */ if (G_UNLIKELY (eef_instructions_assigned == FALSE)) _eef_inst_assign_all (); /* get op */ op = sys.mem[addr]; /* call */ returned_value = eef_instructions[op] (addr + 1); /* is halt */ EEF_SET_PTR (is_halt_inst, eef_inst_is_halt_inst (op)); if (consumed_bytes) { *consumed_bytes = returned_value; /* propogate error */ if (*consumed_bytes > 2) return FALSE; } return TRUE; } /* FLAG RELATED STUFFS */ /* check for carry in this operation */ static gboolean _eef_is_carry (eef_data_t a, eef_data_t b, gchar op /* '+' or '-' */ ) { eef_addr_t big_a, big_b; g_assert (op == '+' || op == '-'); big_a = a; big_b = b; if (op == '+') return !((big_a + big_b) < (eef_addr_t) (EEF_DATA_T_MAX + 1)); else{ //return !((big_a - big_b) <= big_a); return big_a < big_b; } } /* check AC */ gboolean _eef_is_auxillary_carry (eef_data_t a, eef_data_t b, gchar op) { /* zero the higher 4 bits */ a <<= 4; a >>= 4; b <<= 4; b >>= 4; if (op == '+') return !((a + b) < 16); else return !((a - b) <= a); } /* count ones */ static gint _eef_count_one_bits (eef_data_t data) { eef_data_t mask = 1; gint cnt = 0; while (mask) { if (data & mask) cnt++; mask <<= 1; } return cnt; } /* give the result to this func and it will set flags except C, AC */ static void _eef_find_and_set_flags (eef_data_t result) { sys.flag.z = (result == 0); sys.flag.s = (result >= (eef_data_t) (((eef_addr_t) (EEF_DATA_T_MAX + 1)) / 2)); sys.flag.p = !(_eef_count_one_bits (result) % 2); } static void _eef_flag_check_and_set_aux_c (eef_data_t a, eef_data_t b, gchar op) { sys.flag.ac = _eef_is_auxillary_carry (a, b, op); } static void _eef_flag_check_and_set_c (eef_data_t a, eef_data_t b, gchar op) { sys.flag.c = _eef_is_carry (a, b, op); } /***************************************************************/ /************* BEGINNING OF INSTRUCTION DEFINITIONS ************/ /***************************************************************/ static gint _eef_inst_func_lxi (eef_addr_t opnd_addr, gchar x) { gint bytes_consumed = 0; eef_addr_t data; data = eef_mem16_get (opnd_addr); eef_regpair_put (x, data); bytes_consumed = 2; return bytes_consumed; } /* 00 NOP */ static gint _eef_inst_func_0 (eef_addr_t opnd_addr) { return 0; } /* 01 LXI B */ static gint _eef_inst_func_1 (eef_addr_t opnd_addr) { return _eef_inst_func_lxi (opnd_addr, 'B'); } static gint _eef_inst_func_stax (eef_addr_t opnd_addr, gchar x) { gint bytes_consumed = 0; eef_addr_t ta; ta = eef_regpair_get (x); sys.mem[ta] = sys.reg.a; return bytes_consumed; } /* 02 STAX B */ static gint _eef_inst_func_2 (eef_addr_t opnd_addr) { return _eef_inst_func_stax (opnd_addr, 'B'); } static gint _eef_inst_func_incdec_reg (eef_addr_t opnd_addr, gchar r, gboolean is_inc) { gint bytes_consumed = 0; gint dx = -1; eef_data_t *rloc; if (is_inc) dx = +1; rloc = eef_loc_of_reg (r); /* if memory loc */ if (!rloc) { /* use from hl pair */ eef_addr_t ta; ta = eef_regpair_get ('H'); _eef_flag_check_and_set_aux_c (sys.mem[ta], 1, is_inc ? '+' : '-'); sys.mem[ta] += dx; _eef_find_and_set_flags (sys.mem[ta]); } else { _eef_flag_check_and_set_aux_c (*rloc, 1, is_inc ? '+' : '-'); *rloc += dx; _eef_find_and_set_flags (*rloc); } return bytes_consumed; } static gint _eef_inst_func_incdec_regpair (eef_addr_t opnd_addr, gchar r, gboolean is_inc) { gint bytes_consumed = 0; gint dx = -1; eef_data_t *rloc_h, *rloc_l; if (is_inc) dx = +1; eef_loc_of_regpair (r, &rloc_h, &rloc_l); *rloc_l += dx; if (*rloc_l == 0xFF && dx == -1) *rloc_h += dx; else if (*rloc_l == 0x00 && dx == +1) *rloc_h += dx; return bytes_consumed; } static gint _eef_inst_func_mov (eef_addr_t opnd_addr, gchar dst, gchar src) { eef_data_t *src_ptr, *dst_ptr; eef_data_t src_data, *dst_data; /* get ptrs of regs else NULL */ src_ptr = eef_loc_of_reg (src); dst_ptr = eef_loc_of_reg (dst); /* load and refer data */ src_data = (src_ptr) ? *src_ptr : sys.mem[eef_regpair_get ('H')]; dst_data = (dst_ptr) ? dst_ptr : &sys.mem[eef_regpair_get ('H')]; /* copy data */ *dst_data = src_data; return 0; } static gint _eef_inst_func_add_i (eef_addr_t opnd_addr, eef_data_t data, gchar op) { /* check for flags */ _eef_flag_check_and_set_c (sys.reg.a, data, op); _eef_flag_check_and_set_aux_c (sys.reg.a, data, op); /* add */ sys.reg.a += (op == '+') ? data : -1 * data; _eef_find_and_set_flags (sys.reg.a); return 0; } static gint _eef_inst_func_add (eef_addr_t opnd_addr, gchar sec, gchar op) { eef_data_t data; eef_data_t *data_ptr; /* find operand data */ data_ptr = eef_loc_of_reg (sec); if (data_ptr) data = *data_ptr; else data = sys.mem[eef_regpair_get ('H')]; _eef_inst_func_add_i (opnd_addr, data, op); return 0; } static gint _eef_inst_func_add_with_carry_i (eef_addr_t opnd_addr, eef_data_t data, gchar op) { eef_data_t data_1; /* I'm not sure abt the new code * Old code: if (op == '+') data_1 = data + sys.flag.c; else data_1 = data - sys.flag.c; */ data_1 = data + sys.flag.c; /* check for flags */ sys.flag.c = 0; sys.flag.c = (_eef_is_carry (sys.reg.a, data, op) || _eef_is_carry (sys.reg.a, data_1, op)); sys.flag.ac = (_eef_is_auxillary_carry (sys.reg.a, data, op) || _eef_is_auxillary_carry (sys.reg.a, data_1, op)); /* add */ sys.reg.a += (op == '+') ? data_1 : -1 * data_1; _eef_find_and_set_flags (sys.reg.a); /* sys.flag.c = 0; Oops! misunderstood! */ return 0; } static gint _eef_inst_func_add_with_carry (eef_addr_t opnd_addr, gchar sec, gchar op) { eef_data_t data; eef_data_t *data_ptr; /* find operand data */ data_ptr = eef_loc_of_reg (sec); if (data_ptr) data = *data_ptr; else data = sys.mem[eef_regpair_get ('H')]; _eef_inst_func_add_with_carry_i (opnd_addr, data, op); return 0; } static gint _eef_inst_func_mvi (eef_addr_t opnd_addr, gchar dst) { eef_data_t *dst_ptr; eef_data_t *dst_data; /* get ptrs of regs else NULL */ dst_ptr = eef_loc_of_reg (dst); /* load and refer data */ dst_data = (dst_ptr) ? dst_ptr : &sys.mem[eef_regpair_get ('H')]; /* copy data */ *dst_data = sys.mem[opnd_addr]; return 1; } static gint _eef_inst_func_dad (eef_addr_t opnd_addr, gchar sec) { eef_data_t *dst_h, *dst_l; eef_addr_t h_data, sec_data; eef_loc_of_regpair (sec, &dst_h, &dst_l); if (dst_h == NULL) /* M not supported */ { g_warning (ERR_IV_OP); return -1; } /* load data */ h_data = eef_regpair_get ('H'); sec_data = eef_join16 (*dst_h, *dst_l); /* check for overflow and (re)set carry flag */ sys.flag.c = ( ( (int)h_data + (int)sec_data ) >= (1<<16) ); eef_regpair_put ('H', h_data + sec_data); return 0; } static eef_data_t _eef_util_get_val_from_rm_spec (eef_addr_t opnd_addr, gchar sec) { eef_data_t *ta; ta = eef_loc_of_reg (sec); if (ta) return *ta; return sys.mem[eef_regpair_get ('H')]; } static gint _eef_inst_func_ana_i (eef_addr_t opnd_addr, eef_data_t data) { sys.flag.c = 0; sys.flag.ac = 1; sys.reg.a &= data; _eef_find_and_set_flags (sys.reg.a); return 0; } static gint _eef_inst_func_ana (eef_addr_t opnd_addr, gchar sec) { _eef_inst_func_ana_i (opnd_addr, _eef_util_get_val_from_rm_spec (opnd_addr, sec)); return 0; } static gint _eef_inst_func_ora_i (eef_addr_t opnd_addr, eef_data_t data) { sys.flag.c = 0; sys.flag.ac = 0; sys.reg.a |= data; _eef_find_and_set_flags (sys.reg.a); return 0; } static gint _eef_inst_func_ora (eef_addr_t opnd_addr, gchar sec) { _eef_inst_func_ora_i (opnd_addr, _eef_util_get_val_from_rm_spec (opnd_addr, sec)); return 0; } static gint _eef_inst_func_xra_i (eef_addr_t opnd_addr, eef_addr_t data) { sys.flag.c = 0; sys.flag.ac = 0; sys.reg.a ^= data; _eef_find_and_set_flags (sys.reg.a); return 0; } static gint _eef_inst_func_xra (eef_addr_t opnd_addr, gchar sec) { _eef_inst_func_xra_i (opnd_addr, _eef_util_get_val_from_rm_spec (opnd_addr, sec)); return 0; } static gint _eef_inst_func_cmp_i (eef_addr_t opnd_addr, eef_data_t data) { /* Patch from Debjit Biswas for CMP bug #579320 */ eef_data_t a = sys.reg.a; _eef_flag_check_and_set_c (sys.reg.a, data, '-'); _eef_flag_check_and_set_aux_c (sys.reg.a, data, '-'); a += -1 * data; _eef_find_and_set_flags (a); return 0; } static gint _eef_inst_func_cmp (eef_addr_t opnd_addr, gchar sec) { _eef_inst_func_cmp_i (opnd_addr, _eef_util_get_val_from_rm_spec (opnd_addr, sec)); return 0; } static gint _eef_inst_func_push (eef_addr_t opnd_addr, gchar x) { eef_data_t *high, *low; if ('P' != x) { eef_loc_of_regpair (x, &high, &low); g_assert (high); eef_stack_push_byte (*high); eef_stack_push_byte (*low); } else { eef_stack_push_byte (sys.reg.a); eef_stack_push_byte (eef_flag_to_data(sys.flag)); } /* stack cb */ eef_call_stack_cb (TRUE, x); return 0; } static gint _eef_inst_func_pop (eef_addr_t opnd_addr, gchar x) { eef_data_t *high, *low; if ('P' != x) { eef_loc_of_regpair (x, &high, &low); g_assert (high); *low = eef_stack_pop_byte (); *high = eef_stack_pop_byte (); } else { eef_data_to_flag(eef_stack_pop_byte (), &sys.flag); sys.reg.a = eef_stack_pop_byte (); } /* stack cb */ eef_call_stack_cb (FALSE, x); return 0; } static gint _eef_inst_func_rst (eef_addr_t opnd_addr, gint num /* 0-7 */ ) { g_assert (num >= 0 && num < 8); /* See first line of this file */ g_warning ("Instruction 'RST' Not implemented (currently halt the \ execution like 'hlt')"); return 0; } /* 03 INX B */ static gint _eef_inst_func_3 (eef_addr_t opnd_addr) { return _eef_inst_func_incdec_regpair (opnd_addr, 'B', TRUE); } /* 03 INR B */ static gint _eef_inst_func_4 (eef_addr_t opnd_addr) { return _eef_inst_func_incdec_reg (opnd_addr, 'B', TRUE); } /* 05 DCR B */ static gint _eef_inst_func_5 (eef_addr_t opnd_addr) { return _eef_inst_func_incdec_reg (opnd_addr, 'B', FALSE); } /* 06 MVI B */ static gint _eef_inst_func_6 (eef_addr_t opnd_addr) { return _eef_inst_func_mvi (opnd_addr, 'B'); } /* 07 RLC */ static gint _eef_inst_func_7 (eef_addr_t opnd_addr) { if (sys.reg.a & 128) sys.flag.c = 1; else sys.flag.c = 0; sys.reg.a <<= 1; sys.reg.a |= (sys.flag.c) ? 1 : 0; return 0; } static gint _eef_inst_func_jmpc (eef_addr_t opnd_addr, eef_data_t flag_bit, gboolean val) { if (flag_bit == val) { /* jump */ sys.reg.pcl = sys.mem[opnd_addr]; sys.reg.pch = sys.mem[opnd_addr + 1]; } return 2; } static gint _eef_inst_func_callc (eef_addr_t opnd_addr, eef_data_t flag_bit, gboolean val) { if (flag_bit == val) { eef_save_pc_into_stack (); } _eef_inst_func_jmpc (opnd_addr, flag_bit, val); return 2; } static gint _eef_inst_func_retc (eef_addr_t opnd_addr, eef_data_t flag_bit, gboolean val) { if (flag_bit == val) eef_peek_pc_from_stack (); return 0; } static gint _eef_inst_func_8 (eef_addr_t opnd_addr) { g_warning (ERR_IV_OP); return -1; } /* 09 DAD B */ static gint _eef_inst_func_9 (eef_addr_t opnd_addr) { return _eef_inst_func_dad (opnd_addr, 'B'); } /* 0A LDAX B ==> 1A*/ static gint _eef_inst_func_10 (eef_addr_t opnd_addr) { gint bytes_consumed = 0; sys.reg.a = sys.mem[eef_regpair_get ('B')]; return bytes_consumed; } /* 0B DCX B */ static gint _eef_inst_func_11 (eef_addr_t opnd_addr) { return _eef_inst_func_incdec_regpair (opnd_addr, 'B', FALSE); } /* 0C INR C */ static gint _eef_inst_func_12 (eef_addr_t opnd_addr) { return _eef_inst_func_incdec_reg (opnd_addr, 'C', TRUE); } /* 0D DCR C */ static gint _eef_inst_func_13 (eef_addr_t opnd_addr) { return _eef_inst_func_incdec_reg (opnd_addr, 'C', FALSE); } /* 0E MVI C */ static gint _eef_inst_func_14 (eef_addr_t opnd_addr) { return _eef_inst_func_mvi (opnd_addr, 'C'); } /* 0F RRC */ static gint _eef_inst_func_15 (eef_addr_t opnd_addr) { if (sys.reg.a & 1) sys.flag.c = 1; else sys.flag.c = 0; sys.reg.a >>= 1; sys.reg.a |= (sys.flag.c) ? 128 : 0; return 0; } static gint _eef_inst_func_16 (eef_addr_t opnd_addr) { g_warning (ERR_IV_OP); return -1; } /* 11 LXI B */ static gint _eef_inst_func_17 (eef_addr_t opnd_addr) { return _eef_inst_func_lxi (opnd_addr, 'D'); } /* 12 STAX D */ static gint _eef_inst_func_18 (eef_addr_t opnd_addr) { return _eef_inst_func_stax (opnd_addr, 'D'); } /* 13 INX D */ static gint _eef_inst_func_19 (eef_addr_t opnd_addr) { return _eef_inst_func_incdec_regpair (opnd_addr, 'D', TRUE); } /* 14 INR D */ static gint _eef_inst_func_20 (eef_addr_t opnd_addr) { return _eef_inst_func_incdec_reg (opnd_addr, 'D', TRUE); } /* 15 DCR D */ static gint _eef_inst_func_21 (eef_addr_t opnd_addr) { return _eef_inst_func_incdec_reg (opnd_addr, 'D', FALSE); } /* 16 MVI D */ static gint _eef_inst_func_22 (eef_addr_t opnd_addr) { return _eef_inst_func_mvi (opnd_addr, 'D'); } /* 17 RAL */ static gint _eef_inst_func_23 (eef_addr_t opnd_addr) { gboolean pc = sys.flag.c; // if (sys.reg.a & 255) if (sys.reg.a & 128) sys.flag.c = 1; else sys.flag.c = 0; sys.reg.a <<= 1; // debug sys.reg.a |= (pc) ? 128 : 0; if (pc) sys.reg.a |= 1; else sys.reg.a &= (~1); return 0; } static gint _eef_inst_func_24 (eef_addr_t opnd_addr) { g_warning (ERR_IV_OP); return -1; } /* 19 DAD D */ static gint _eef_inst_func_25 (eef_addr_t opnd_addr) { return _eef_inst_func_dad (opnd_addr, 'D'); } /* 1A LDAX D <== 0A */ static gint _eef_inst_func_26 (eef_addr_t opnd_addr) { gint bytes_consumed = 0; sys.reg.a = sys.mem[eef_regpair_get ('D')]; return bytes_consumed; } /* 1B DCX D */ static gint _eef_inst_func_27 (eef_addr_t opnd_addr) { return _eef_inst_func_incdec_regpair (opnd_addr, 'D', FALSE); } /* 1C INR E */ static gint _eef_inst_func_28 (eef_addr_t opnd_addr) { return _eef_inst_func_incdec_reg (opnd_addr, 'E', TRUE); } /* 1D DCR E */ static gint _eef_inst_func_29 (eef_addr_t opnd_addr) { return _eef_inst_func_incdec_reg (opnd_addr, 'E', FALSE); } /* 1E MVI E */ static gint _eef_inst_func_30 (eef_addr_t opnd_addr) { return _eef_inst_func_mvi (opnd_addr, 'E'); } /* 1F RAR */ static gint _eef_inst_func_31 (eef_addr_t opnd_addr) { gboolean pc = sys.flag.c; if (sys.reg.a & 1) sys.flag.c = 1; else sys.flag.c = 0; sys.reg.a >>= 1; // debug sys.reg.a |= ( (pc) ? 128 : 0 ); if (pc) sys.reg.a |= 128; else sys.reg.a &= (~128); return 0; } /* 20 RIM */ static gint _eef_inst_func_32 (eef_addr_t opnd_addr) { //TODO (page 748) g_warning (_("Instruction 'RIM' Not implemented")); return 0; } /* 21 LXI H */ static gint _eef_inst_func_33 (eef_addr_t opnd_addr) { return _eef_inst_func_lxi (opnd_addr, 'H'); } /* 22 SHLD addr */ static gint _eef_inst_func_34 (eef_addr_t opnd_addr) { gint bytes_consumed = 2; eef_mem16_put (eef_swap_bytes_in_addr (opnd_addr), eef_regpair_get ('H')); return bytes_consumed; } /* 23 INX H */ static gint _eef_inst_func_35 (eef_addr_t opnd_addr) { return _eef_inst_func_incdec_regpair (opnd_addr, 'H', TRUE); } /* 24 INR H */ static gint _eef_inst_func_36 (eef_addr_t opnd_addr) { return _eef_inst_func_incdec_reg (opnd_addr, 'H', TRUE); } /* 25 DCR H */ static gint _eef_inst_func_37 (eef_addr_t opnd_addr) { return _eef_inst_func_incdec_reg (opnd_addr, 'H', FALSE); } /* 26 MVI H */ static gint _eef_inst_func_38 (eef_addr_t opnd_addr) { return _eef_inst_func_mvi (opnd_addr, 'H'); } /* 27 DAA */ static gint _eef_inst_func_39 (eef_addr_t opnd_addr) { eef_data_t ac_low; gboolean c_old; c_old = sys.flag.c; ac_low = sys.reg.a & 0x0F; if (ac_low > 9 || sys.flag.ac) { _eef_inst_func_add_i (opnd_addr, 6, '+'); sys.flag.c = (sys.flag.c || c_old); sys.flag.ac = 1; } if (sys.reg.a > 0x99 || sys.flag.c) { sys.reg.a = sys.reg.a + 0x60; sys.flag.c = 1; } return 0; } static gint _eef_inst_func_40 (eef_addr_t opnd_addr) { g_warning (ERR_IV_OP); return -1; } /* 29 DAD H */ static gint _eef_inst_func_41 (eef_addr_t opnd_addr) { return _eef_inst_func_dad (opnd_addr, 'H'); } /* 2A LHLD addr */ static gint _eef_inst_func_42 (eef_addr_t opnd_addr) { gint bytes_consumed = 2; eef_addr_t st; /* bug sys.reg.l = sys.mem[sys.mem[opnd_addr]]; * sys.reg.h = sys.mem[sys.mem[opnd_addr + 1] + 1]; */ st = eef_mem16_get (opnd_addr); sys.reg.l = sys.mem[st]; sys.reg.h = sys.mem[st + 1]; return bytes_consumed; } /* 2B DCX H */ static gint _eef_inst_func_43 (eef_addr_t opnd_addr) { return _eef_inst_func_incdec_regpair (opnd_addr, 'H', FALSE); } /* 2C INR L */ static gint _eef_inst_func_44 (eef_addr_t opnd_addr) { return _eef_inst_func_incdec_reg (opnd_addr, 'L', TRUE); } /* 2D DCR L */ static gint _eef_inst_func_45 (eef_addr_t opnd_addr) { return _eef_inst_func_incdec_reg (opnd_addr, 'L', FALSE); } /* 2E MVI L */ static gint _eef_inst_func_46 (eef_addr_t opnd_addr) { return _eef_inst_func_mvi (opnd_addr, 'L'); } /* 2F CMA */ static gint _eef_inst_func_47 (eef_addr_t opnd_addr) { sys.reg.a = ~sys.reg.a; return 0; } /* 30 SIM */ static gint _eef_inst_func_48 (eef_addr_t opnd_addr) { //TODO (page 752) g_warning (_("Instruction 'SIM' Not implemented")); return 0; } /* 31 LXI SP */ static gint _eef_inst_func_49 (eef_addr_t opnd_addr) { return _eef_inst_func_lxi (opnd_addr, 'S'); } /* 32 STA addr */ static gint _eef_inst_func_50 (eef_addr_t opnd_addr) { gint bytes_consumed = 2; sys.mem[eef_swap_bytes_in_addr (opnd_addr)] = sys.reg.a; return bytes_consumed; } /* 33 INX SP */ static gint _eef_inst_func_51 (eef_addr_t opnd_addr) { return _eef_inst_func_incdec_regpair (opnd_addr, 'S', TRUE); } /* 34 INR M */ static gint _eef_inst_func_52 (eef_addr_t opnd_addr) { return _eef_inst_func_incdec_reg (opnd_addr, 'M', TRUE); } /* 35 DCR M */ static gint _eef_inst_func_53 (eef_addr_t opnd_addr) { return _eef_inst_func_incdec_reg (opnd_addr, 'M', FALSE); } /* 36 MVI M */ static gint _eef_inst_func_54 (eef_addr_t opnd_addr) { return _eef_inst_func_mvi (opnd_addr, 'M'); } /* 37 STC */ static gint _eef_inst_func_55 (eef_addr_t opnd_addr) { sys.flag.c = 1; return 0; } static gint _eef_inst_func_56 (eef_addr_t opnd_addr) { g_warning (ERR_IV_OP); return -1; } /* 39 DAD SP */ static gint _eef_inst_func_57 (eef_addr_t opnd_addr) { return _eef_inst_func_dad (opnd_addr, 'S'); } /* 3A LDA addr */ static gint _eef_inst_func_58 (eef_addr_t opnd_addr) { gint bytes_consumed = 2; sys.reg.a = sys.mem[eef_mem16_get (opnd_addr)]; return bytes_consumed; } /* 3B DCX SP */ static gint _eef_inst_func_59 (eef_addr_t opnd_addr) { return _eef_inst_func_incdec_regpair (opnd_addr, 'S', FALSE); } /* 3C INR A */ static gint _eef_inst_func_60 (eef_addr_t opnd_addr) { return _eef_inst_func_incdec_reg (opnd_addr, 'A', TRUE); } /* 3D DCR A */ static gint _eef_inst_func_61 (eef_addr_t opnd_addr) { return _eef_inst_func_incdec_reg (opnd_addr, 'A', FALSE); } /* 3E MVI A */ static gint _eef_inst_func_62 (eef_addr_t opnd_addr) { return _eef_inst_func_mvi (opnd_addr, 'A'); } /* 3F CMC */ static gint _eef_inst_func_63 (eef_addr_t opnd_addr) { sys.flag.c = !sys.flag.c; return 0; } /* MOV inst starts here -------------- */ static gint _eef_inst_func_64 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'B', 'B'); } static gint _eef_inst_func_65 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'B', 'C'); } static gint _eef_inst_func_66 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'B', 'D'); } static gint _eef_inst_func_67 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'B', 'E'); } static gint _eef_inst_func_68 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'B', 'H'); } static gint _eef_inst_func_69 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'B', 'L'); } static gint _eef_inst_func_70 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'B', 'M'); } static gint _eef_inst_func_71 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'B', 'A'); } static gint _eef_inst_func_72 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'C', 'B'); } static gint _eef_inst_func_73 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'C', 'C'); } static gint _eef_inst_func_74 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'C', 'D'); } static gint _eef_inst_func_75 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'C', 'E'); } static gint _eef_inst_func_76 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'C', 'H'); } static gint _eef_inst_func_77 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'C', 'L'); } static gint _eef_inst_func_78 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'C', 'M'); } static gint _eef_inst_func_79 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'C', 'A'); } static gint _eef_inst_func_80 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'D', 'B'); } static gint _eef_inst_func_81 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'D', 'C'); } static gint _eef_inst_func_82 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'D', 'D'); } static gint _eef_inst_func_83 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'D', 'E'); } static gint _eef_inst_func_84 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'D', 'H'); } static gint _eef_inst_func_85 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'D', 'L'); } static gint _eef_inst_func_86 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'D', 'M'); } static gint _eef_inst_func_87 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'D', 'A'); } static gint _eef_inst_func_88 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'E', 'B'); } static gint _eef_inst_func_89 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'E', 'C'); } static gint _eef_inst_func_90 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'E', 'D'); } static gint _eef_inst_func_91 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'E', 'E'); } static gint _eef_inst_func_92 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'E', 'H'); } static gint _eef_inst_func_93 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'E', 'L'); } static gint _eef_inst_func_94 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'E', 'M'); } static gint _eef_inst_func_95 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'E', 'A'); } static gint _eef_inst_func_96 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'H', 'B'); } static gint _eef_inst_func_97 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'H', 'C'); } static gint _eef_inst_func_98 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'H', 'D'); } static gint _eef_inst_func_99 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'H', 'E'); } static gint _eef_inst_func_100 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'H', 'H'); } static gint _eef_inst_func_101 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'H', 'L'); } static gint _eef_inst_func_102 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'H', 'M'); } static gint _eef_inst_func_103 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'H', 'A'); } static gint _eef_inst_func_104 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'L', 'B'); } static gint _eef_inst_func_105 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'L', 'C'); } static gint _eef_inst_func_106 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'L', 'D'); } static gint _eef_inst_func_107 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'L', 'E'); } static gint _eef_inst_func_108 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'L', 'H'); } static gint _eef_inst_func_109 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'L', 'L'); } static gint _eef_inst_func_110 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'L', 'M'); } static gint _eef_inst_func_111 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'L', 'A'); } static gint _eef_inst_func_112 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'M', 'B'); } static gint _eef_inst_func_113 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'M', 'C'); } static gint _eef_inst_func_114 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'M', 'D'); } static gint _eef_inst_func_115 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'M', 'E'); } static gint _eef_inst_func_116 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'M', 'H'); } static gint _eef_inst_func_117 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'M', 'L'); } /* 76 HLT */ static gint _eef_inst_func_118 (eef_addr_t opnd_addr) { return 0; } static gint _eef_inst_func_119 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'M', 'A'); } static gint _eef_inst_func_120 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'A', 'B'); } static gint _eef_inst_func_121 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'A', 'C'); } static gint _eef_inst_func_122 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'A', 'D'); } static gint _eef_inst_func_123 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'A', 'E'); } static gint _eef_inst_func_124 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'A', 'H'); } static gint _eef_inst_func_125 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'A', 'L'); } static gint _eef_inst_func_126 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'A', 'M'); } static gint _eef_inst_func_127 (eef_addr_t opnd_addr) { return _eef_inst_func_mov (opnd_addr, 'A', 'A'); } /* End of Mov inst. ------------------- */ /* ADD begin ----- */ static gint _eef_inst_func_128 (eef_addr_t opnd_addr) { return _eef_inst_func_add (opnd_addr, 'B', '+'); } static gint _eef_inst_func_129 (eef_addr_t opnd_addr) { return _eef_inst_func_add (opnd_addr, 'C', '+'); } static gint _eef_inst_func_130 (eef_addr_t opnd_addr) { return _eef_inst_func_add (opnd_addr, 'D', '+'); } static gint _eef_inst_func_131 (eef_addr_t opnd_addr) { return _eef_inst_func_add (opnd_addr, 'E', '+'); } static gint _eef_inst_func_132 (eef_addr_t opnd_addr) { return _eef_inst_func_add (opnd_addr, 'H', '+'); } static gint _eef_inst_func_133 (eef_addr_t opnd_addr) { return _eef_inst_func_add (opnd_addr, 'L', '+'); } static gint _eef_inst_func_134 (eef_addr_t opnd_addr) { return _eef_inst_func_add (opnd_addr, 'M', '+'); } static gint _eef_inst_func_135 (eef_addr_t opnd_addr) { return _eef_inst_func_add (opnd_addr, 'A', '+'); } /* end of ADD ------ */ /* ADC begin ----- */ static gint _eef_inst_func_136 (eef_addr_t opnd_addr) { return _eef_inst_func_add_with_carry (opnd_addr, 'B', '+'); } static gint _eef_inst_func_137 (eef_addr_t opnd_addr) { return _eef_inst_func_add_with_carry (opnd_addr, 'C', '+'); } static gint _eef_inst_func_138 (eef_addr_t opnd_addr) { return _eef_inst_func_add_with_carry (opnd_addr, 'D', '+'); } static gint _eef_inst_func_139 (eef_addr_t opnd_addr) { return _eef_inst_func_add_with_carry (opnd_addr, 'E', '+'); } static gint _eef_inst_func_140 (eef_addr_t opnd_addr) { return _eef_inst_func_add_with_carry (opnd_addr, 'H', '+'); } static gint _eef_inst_func_141 (eef_addr_t opnd_addr) { return _eef_inst_func_add_with_carry (opnd_addr, 'L', '+'); } static gint _eef_inst_func_142 (eef_addr_t opnd_addr) { return _eef_inst_func_add_with_carry (opnd_addr, 'M', '+'); } static gint _eef_inst_func_143 (eef_addr_t opnd_addr) { return _eef_inst_func_add_with_carry (opnd_addr, 'A', '+'); } /* end of ADC ----- */ /* SUB begin ... */ static gint _eef_inst_func_144 (eef_addr_t opnd_addr) { return _eef_inst_func_add (opnd_addr, 'B', '-'); } static gint _eef_inst_func_145 (eef_addr_t opnd_addr) { return _eef_inst_func_add (opnd_addr, 'C', '-'); } static gint _eef_inst_func_146 (eef_addr_t opnd_addr) { return _eef_inst_func_add (opnd_addr, 'D', '-'); } static gint _eef_inst_func_147 (eef_addr_t opnd_addr) { return _eef_inst_func_add (opnd_addr, 'E', '-'); } static gint _eef_inst_func_148 (eef_addr_t opnd_addr) { return _eef_inst_func_add (opnd_addr, 'H', '-'); } static gint _eef_inst_func_149 (eef_addr_t opnd_addr) { return _eef_inst_func_add (opnd_addr, 'L', '-'); } static gint _eef_inst_func_150 (eef_addr_t opnd_addr) { return _eef_inst_func_add (opnd_addr, 'M', '-'); } static gint _eef_inst_func_151 (eef_addr_t opnd_addr) { return _eef_inst_func_add (opnd_addr, 'A', '-'); } /* end of SUB .... */ /* SBB begin .... */ static gint _eef_inst_func_152 (eef_addr_t opnd_addr) { return _eef_inst_func_add_with_carry (opnd_addr, 'B', '-'); } static gint _eef_inst_func_153 (eef_addr_t opnd_addr) { return _eef_inst_func_add_with_carry (opnd_addr, 'C', '-'); } static gint _eef_inst_func_154 (eef_addr_t opnd_addr) { return _eef_inst_func_add_with_carry (opnd_addr, 'D', '-'); } static gint _eef_inst_func_155 (eef_addr_t opnd_addr) { return _eef_inst_func_add_with_carry (opnd_addr, 'E', '-'); } static gint _eef_inst_func_156 (eef_addr_t opnd_addr) { return _eef_inst_func_add_with_carry (opnd_addr, 'H', '-'); } static gint _eef_inst_func_157 (eef_addr_t opnd_addr) { return _eef_inst_func_add_with_carry (opnd_addr, 'L', '-'); } static gint _eef_inst_func_158 (eef_addr_t opnd_addr) { return _eef_inst_func_add_with_carry (opnd_addr, 'M', '-'); } static gint _eef_inst_func_159 (eef_addr_t opnd_addr) { return _eef_inst_func_add_with_carry (opnd_addr, 'A', '-'); } /* ANA begin .... */ static gint _eef_inst_func_160 (eef_addr_t opnd_addr) { return _eef_inst_func_ana (opnd_addr, 'B'); } static gint _eef_inst_func_161 (eef_addr_t opnd_addr) { return _eef_inst_func_ana (opnd_addr, 'C'); } static gint _eef_inst_func_162 (eef_addr_t opnd_addr) { return _eef_inst_func_ana (opnd_addr, 'D'); } static gint _eef_inst_func_163 (eef_addr_t opnd_addr) { return _eef_inst_func_ana (opnd_addr, 'E'); } static gint _eef_inst_func_164 (eef_addr_t opnd_addr) { return _eef_inst_func_ana (opnd_addr, 'H'); } static gint _eef_inst_func_165 (eef_addr_t opnd_addr) { return _eef_inst_func_ana (opnd_addr, 'L'); } static gint _eef_inst_func_166 (eef_addr_t opnd_addr) { return _eef_inst_func_ana (opnd_addr, 'M'); } static gint _eef_inst_func_167 (eef_addr_t opnd_addr) { return _eef_inst_func_ana (opnd_addr, 'A'); } /* end of ANA..... */ /* XRA begin ... */ static gint _eef_inst_func_168 (eef_addr_t opnd_addr) { return _eef_inst_func_xra (opnd_addr, 'B'); } static gint _eef_inst_func_169 (eef_addr_t opnd_addr) { return _eef_inst_func_xra (opnd_addr, 'C'); } static gint _eef_inst_func_170 (eef_addr_t opnd_addr) { return _eef_inst_func_xra (opnd_addr, 'D'); } static gint _eef_inst_func_171 (eef_addr_t opnd_addr) { return _eef_inst_func_xra (opnd_addr, 'E'); } static gint _eef_inst_func_172 (eef_addr_t opnd_addr) { return _eef_inst_func_xra (opnd_addr, 'H'); } static gint _eef_inst_func_173 (eef_addr_t opnd_addr) { return _eef_inst_func_xra (opnd_addr, 'L'); } static gint _eef_inst_func_174 (eef_addr_t opnd_addr) { return _eef_inst_func_xra (opnd_addr, 'M'); } static gint _eef_inst_func_175 (eef_addr_t opnd_addr) { return _eef_inst_func_xra (opnd_addr, 'A'); } /* end of XRA ... */ /* ORA begin .... */ static gint _eef_inst_func_176 (eef_addr_t opnd_addr) { return _eef_inst_func_ora (opnd_addr, 'B'); } static gint _eef_inst_func_177 (eef_addr_t opnd_addr) { return _eef_inst_func_ora (opnd_addr, 'C'); } static gint _eef_inst_func_178 (eef_addr_t opnd_addr) { return _eef_inst_func_ora (opnd_addr, 'D'); } static gint _eef_inst_func_179 (eef_addr_t opnd_addr) { return _eef_inst_func_ora (opnd_addr, 'E'); } static gint _eef_inst_func_180 (eef_addr_t opnd_addr) { return _eef_inst_func_ora (opnd_addr, 'H'); } static gint _eef_inst_func_181 (eef_addr_t opnd_addr) { return _eef_inst_func_ora (opnd_addr, 'L'); } static gint _eef_inst_func_182 (eef_addr_t opnd_addr) { return _eef_inst_func_ora (opnd_addr, 'M'); } static gint _eef_inst_func_183 (eef_addr_t opnd_addr) { return _eef_inst_func_ora (opnd_addr, 'A'); } /* end of ORA */ /* CMP begin ... */ static gint _eef_inst_func_184 (eef_addr_t opnd_addr) { return _eef_inst_func_cmp (opnd_addr, 'B'); } static gint _eef_inst_func_185 (eef_addr_t opnd_addr) { return _eef_inst_func_cmp (opnd_addr, 'C'); } static gint _eef_inst_func_186 (eef_addr_t opnd_addr) { return _eef_inst_func_cmp (opnd_addr, 'D'); } static gint _eef_inst_func_187 (eef_addr_t opnd_addr) { return _eef_inst_func_cmp (opnd_addr, 'E'); } static gint _eef_inst_func_188 (eef_addr_t opnd_addr) { return _eef_inst_func_cmp (opnd_addr, 'H'); } static gint _eef_inst_func_189 (eef_addr_t opnd_addr) { return _eef_inst_func_cmp (opnd_addr, 'L'); } static gint _eef_inst_func_190 (eef_addr_t opnd_addr) { return _eef_inst_func_cmp (opnd_addr, 'M'); } static gint _eef_inst_func_191 (eef_addr_t opnd_addr) { return _eef_inst_func_cmp (opnd_addr, 'A'); } /* end of CMP ... */ /* C0 RNZ */ static gint _eef_inst_func_192 (eef_addr_t opnd_addr) { return _eef_inst_func_retc (opnd_addr, sys.flag.z, FALSE); } /* C1 POP B */ static gint _eef_inst_func_193 (eef_addr_t opnd_addr) { return _eef_inst_func_pop (opnd_addr, 'B'); } /* C2 JNZ */ static gint _eef_inst_func_194 (eef_addr_t opnd_addr) { return _eef_inst_func_jmpc (opnd_addr, sys.flag.z, FALSE); } /* C3 JMP */ static gint _eef_inst_func_195 (eef_addr_t opnd_addr) { sys.reg.pcl = sys.mem[opnd_addr]; sys.reg.pch = sys.mem[opnd_addr + 1]; return 2; } /* C4 CNZ */ static gint _eef_inst_func_196 (eef_addr_t opnd_addr) { return _eef_inst_func_callc (opnd_addr, sys.flag.z, FALSE); } /* C5 PUSH B */ static gint _eef_inst_func_197 (eef_addr_t opnd_addr) { return _eef_inst_func_push (opnd_addr, 'B'); } /* C6 ADI */ static gint _eef_inst_func_198 (eef_addr_t opnd_addr) { _eef_inst_func_add_i (opnd_addr, sys.mem[opnd_addr], '+'); return 1; } /* C7 RST 0 */ static gint _eef_inst_func_199 (eef_addr_t opnd_addr) { return _eef_inst_func_rst (opnd_addr, 0); } /* C8 RZ */ static gint _eef_inst_func_200 (eef_addr_t opnd_addr) { return _eef_inst_func_retc (opnd_addr, sys.flag.z, TRUE); } /* C9 RET */ static gint _eef_inst_func_201 (eef_addr_t opnd_addr) { eef_peek_pc_from_stack (); return 0; } /* CA JZ */ static gint _eef_inst_func_202 (eef_addr_t opnd_addr) { return _eef_inst_func_jmpc (opnd_addr, sys.flag.z, TRUE); } static gint _eef_inst_func_203 (eef_addr_t opnd_addr) { g_warning (ERR_IV_OP); return -1; } /* CC CZ */ static gint _eef_inst_func_204 (eef_addr_t opnd_addr) { return _eef_inst_func_callc (opnd_addr, sys.flag.z, TRUE); } /* CD CALL */ static gint _eef_inst_func_205 (eef_addr_t opnd_addr) { eef_addr_t ta; ta = eef_mem16_get (opnd_addr); eef_save_pc_into_stack (); _eef_inst_func_jmpc (opnd_addr, TRUE, TRUE); return 2; } /* CE ACI */ static gint _eef_inst_func_206 (eef_addr_t opnd_addr) { _eef_inst_func_add_with_carry_i (opnd_addr, sys.mem[opnd_addr], '+'); return 1; } /* CF RST 1 */ static gint _eef_inst_func_207 (eef_addr_t opnd_addr) { return _eef_inst_func_rst (opnd_addr, 1); } /* D0 RNC */ static gint _eef_inst_func_208 (eef_addr_t opnd_addr) { return _eef_inst_func_retc (opnd_addr, sys.flag.c, FALSE); } /* D1 POP D */ static gint _eef_inst_func_209 (eef_addr_t opnd_addr) { return _eef_inst_func_pop (opnd_addr, 'D'); } /* D2 JNC */ static gint _eef_inst_func_210 (eef_addr_t opnd_addr) { return _eef_inst_func_jmpc (opnd_addr, sys.flag.c, FALSE); } /* D3 OUT */ static gint _eef_inst_func_211 (eef_addr_t opnd_addr) { eef_port_put (sys.mem[opnd_addr], sys.reg.a); return 1; } /* D4 CNC */ static gint _eef_inst_func_212 (eef_addr_t opnd_addr) { return _eef_inst_func_callc (opnd_addr, sys.flag.c, FALSE); } /* D5 PUSH D */ static gint _eef_inst_func_213 (eef_addr_t opnd_addr) { return _eef_inst_func_push (opnd_addr, 'D'); } /* D6 SUI */ static gint _eef_inst_func_214 (eef_addr_t opnd_addr) { _eef_inst_func_add_i (opnd_addr, sys.mem[opnd_addr], '-'); return 1; } /* D7 RST 2 */ static gint _eef_inst_func_215 (eef_addr_t opnd_addr) { return _eef_inst_func_rst (opnd_addr, 2); } /* D8 RC */ static gint _eef_inst_func_216 (eef_addr_t opnd_addr) { return _eef_inst_func_retc (opnd_addr, sys.flag.c, TRUE); } static gint _eef_inst_func_217 (eef_addr_t opnd_addr) { g_warning (ERR_IV_OP); return -1; } /* DA JC */ static gint _eef_inst_func_218 (eef_addr_t opnd_addr) { return _eef_inst_func_jmpc (opnd_addr, sys.flag.c, TRUE); } /* DB IN */ static gint _eef_inst_func_219 (eef_addr_t opnd_addr) { sys.reg.a = eef_port_get (sys.mem[opnd_addr]); return 1; } /* DC CC */ static gint _eef_inst_func_220 (eef_addr_t opnd_addr) { return _eef_inst_func_callc (opnd_addr, sys.flag.c, TRUE); } static gint _eef_inst_func_221 (eef_addr_t opnd_addr) { g_warning (ERR_IV_OP); return -1; } /* DE SBI */ static gint _eef_inst_func_222 (eef_addr_t opnd_addr) { _eef_inst_func_add_with_carry_i (opnd_addr, sys.mem[opnd_addr], '-'); return 1; } /* DF RST 3 */ static gint _eef_inst_func_223 (eef_addr_t opnd_addr) { return _eef_inst_func_rst (opnd_addr, 3); } /* E0 RPO */ static gint _eef_inst_func_224 (eef_addr_t opnd_addr) { return _eef_inst_func_retc (opnd_addr, sys.flag.p, FALSE); } /* E1 POP H */ static gint _eef_inst_func_225 (eef_addr_t opnd_addr) { return _eef_inst_func_pop (opnd_addr, 'H'); } /* E2 JPO */ static gint _eef_inst_func_226 (eef_addr_t opnd_addr) { return _eef_inst_func_jmpc (opnd_addr, sys.flag.p, FALSE); } /* E3 XTHL */ static gint _eef_inst_func_227 (eef_addr_t opnd_addr) { eef_data_t tmp; tmp = sys.reg.l; sys.reg.l = sys.mem[eef_regpair_get ('S')]; sys.mem[eef_regpair_get ('S')] = tmp; tmp = sys.reg.h; sys.reg.h = sys.mem[eef_regpair_get ('S') + 1]; sys.mem[eef_regpair_get ('S') + 1] = tmp; return 0; } /* E4 CPO */ static gint _eef_inst_func_228 (eef_addr_t opnd_addr) { return _eef_inst_func_callc (opnd_addr, sys.flag.p, FALSE); } /* E5 PUSH H */ static gint _eef_inst_func_229 (eef_addr_t opnd_addr) { return _eef_inst_func_push (opnd_addr, 'H'); } /* E6 ANI */ static gint _eef_inst_func_230 (eef_addr_t opnd_addr) { _eef_inst_func_ana_i (opnd_addr, sys.mem[opnd_addr]); return 1; } /* E7 RST 4 */ static gint _eef_inst_func_231 (eef_addr_t opnd_addr) { return _eef_inst_func_rst (opnd_addr, 4); } /* E8 RPE */ static gint _eef_inst_func_232 (eef_addr_t opnd_addr) { return _eef_inst_func_retc (opnd_addr, sys.flag.p, TRUE); } /* E9 PCHL */ static gint _eef_inst_func_233 (eef_addr_t opnd_addr) { sys.reg.pch = sys.reg.h; sys.reg.pcl = sys.reg.l; return 0; } /* EA JPE */ static gint _eef_inst_func_234 (eef_addr_t opnd_addr) { return _eef_inst_func_jmpc (opnd_addr, sys.flag.p, TRUE); } /* EB XCHG */ static gint _eef_inst_func_235 (eef_addr_t opnd_addr) { eef_data_t tmp; tmp = sys.reg.h; sys.reg.h = sys.reg.d; sys.reg.d = tmp; tmp = sys.reg.l; sys.reg.l = sys.reg.e; sys.reg.e = tmp; return 0; } /* EC CPE */ static gint _eef_inst_func_236 (eef_addr_t opnd_addr) { return _eef_inst_func_callc (opnd_addr, sys.flag.p, TRUE); } static gint _eef_inst_func_237 (eef_addr_t opnd_addr) { g_warning (ERR_IV_OP); return -1; } /* EE XRI */ static gint _eef_inst_func_238 (eef_addr_t opnd_addr) { _eef_inst_func_xra_i (opnd_addr, sys.mem[opnd_addr]); return 1; } /* EF RST 5 */ static gint _eef_inst_func_239 (eef_addr_t opnd_addr) { return _eef_inst_func_rst (opnd_addr, 5); } /* F0 RP */ static gint _eef_inst_func_240 (eef_addr_t opnd_addr) { return _eef_inst_func_retc (opnd_addr, sys.flag.s, FALSE); } /* F1 POP PSW */ static gint _eef_inst_func_241 (eef_addr_t opnd_addr) { return _eef_inst_func_pop (opnd_addr, 'P'); } /* F2 JP */ static gint _eef_inst_func_242 (eef_addr_t opnd_addr) { return _eef_inst_func_jmpc (opnd_addr, sys.flag.s, FALSE); } /* F3 DI */ static gint _eef_inst_func_243 (eef_addr_t opnd_addr) { eef_interrupt_enable (FALSE); return 0; } /* F4 CP */ static gint _eef_inst_func_244 (eef_addr_t opnd_addr) { return _eef_inst_func_callc (opnd_addr, sys.flag.s, FALSE); } /* F5 PUSH PSW */ static gint _eef_inst_func_245 (eef_addr_t opnd_addr) { return _eef_inst_func_push (opnd_addr, 'P'); } /* F6 ORI */ static gint _eef_inst_func_246 (eef_addr_t opnd_addr) { _eef_inst_func_ora_i (opnd_addr, sys.mem[opnd_addr]); return 1; } /* F7 RST 6 */ static gint _eef_inst_func_247 (eef_addr_t opnd_addr) { return _eef_inst_func_rst (opnd_addr, 6); } /* F8 RM */ static gint _eef_inst_func_248 (eef_addr_t opnd_addr) { return _eef_inst_func_retc (opnd_addr, sys.flag.s, TRUE); } /* F9 SPHL */ static gint _eef_inst_func_249 (eef_addr_t opnd_addr) { sys.reg.sph = sys.reg.h; sys.reg.spl = sys.reg.l; return 0; } /* FA JM */ static gint _eef_inst_func_250 (eef_addr_t opnd_addr) { return _eef_inst_func_jmpc (opnd_addr, sys.flag.s, TRUE); } /* FB EI */ static gint _eef_inst_func_251 (eef_addr_t opnd_addr) { eef_interrupt_enable (TRUE); return 0; } /* FC CM */ static gint _eef_inst_func_252 (eef_addr_t opnd_addr) { return _eef_inst_func_callc (opnd_addr, sys.flag.s, TRUE); } static gint _eef_inst_func_253 (eef_addr_t opnd_addr) { g_warning (ERR_IV_OP); return -1; } /* FE CPI */ static gint _eef_inst_func_254 (eef_addr_t opnd_addr) { _eef_inst_func_cmp_i (opnd_addr, sys.mem[opnd_addr]); return 1; } /* FF RST 7 */ static gint _eef_inst_func_255 (eef_addr_t opnd_addr) { return _eef_inst_func_rst (opnd_addr, 7); } void _eef_inst_assign_all (void) { eef_instructions[0] = _eef_inst_func_0; eef_instructions[1] = _eef_inst_func_1; eef_instructions[2] = _eef_inst_func_2; eef_instructions[3] = _eef_inst_func_3; eef_instructions[4] = _eef_inst_func_4; eef_instructions[5] = _eef_inst_func_5; eef_instructions[6] = _eef_inst_func_6; eef_instructions[7] = _eef_inst_func_7; eef_instructions[8] = _eef_inst_func_8; eef_instructions[9] = _eef_inst_func_9; eef_instructions[10] = _eef_inst_func_10; eef_instructions[11] = _eef_inst_func_11; eef_instructions[12] = _eef_inst_func_12; eef_instructions[13] = _eef_inst_func_13; eef_instructions[14] = _eef_inst_func_14; eef_instructions[15] = _eef_inst_func_15; eef_instructions[16] = _eef_inst_func_16; eef_instructions[17] = _eef_inst_func_17; eef_instructions[18] = _eef_inst_func_18; eef_instructions[19] = _eef_inst_func_19; eef_instructions[20] = _eef_inst_func_20; eef_instructions[21] = _eef_inst_func_21; eef_instructions[22] = _eef_inst_func_22; eef_instructions[23] = _eef_inst_func_23; eef_instructions[24] = _eef_inst_func_24; eef_instructions[25] = _eef_inst_func_25; eef_instructions[26] = _eef_inst_func_26; eef_instructions[27] = _eef_inst_func_27; eef_instructions[28] = _eef_inst_func_28; eef_instructions[29] = _eef_inst_func_29; eef_instructions[30] = _eef_inst_func_30; eef_instructions[31] = _eef_inst_func_31; eef_instructions[32] = _eef_inst_func_32; eef_instructions[33] = _eef_inst_func_33; eef_instructions[34] = _eef_inst_func_34; eef_instructions[35] = _eef_inst_func_35; eef_instructions[36] = _eef_inst_func_36; eef_instructions[37] = _eef_inst_func_37; eef_instructions[38] = _eef_inst_func_38; eef_instructions[39] = _eef_inst_func_39; eef_instructions[40] = _eef_inst_func_40; eef_instructions[41] = _eef_inst_func_41; eef_instructions[42] = _eef_inst_func_42; eef_instructions[43] = _eef_inst_func_43; eef_instructions[44] = _eef_inst_func_44; eef_instructions[45] = _eef_inst_func_45; eef_instructions[46] = _eef_inst_func_46; eef_instructions[47] = _eef_inst_func_47; eef_instructions[48] = _eef_inst_func_48; eef_instructions[49] = _eef_inst_func_49; eef_instructions[50] = _eef_inst_func_50; eef_instructions[51] = _eef_inst_func_51; eef_instructions[52] = _eef_inst_func_52; eef_instructions[53] = _eef_inst_func_53; eef_instructions[54] = _eef_inst_func_54; eef_instructions[55] = _eef_inst_func_55; eef_instructions[56] = _eef_inst_func_56; eef_instructions[57] = _eef_inst_func_57; eef_instructions[58] = _eef_inst_func_58; eef_instructions[59] = _eef_inst_func_59; eef_instructions[60] = _eef_inst_func_60; eef_instructions[61] = _eef_inst_func_61; eef_instructions[62] = _eef_inst_func_62; eef_instructions[63] = _eef_inst_func_63; eef_instructions[64] = _eef_inst_func_64; eef_instructions[65] = _eef_inst_func_65; eef_instructions[66] = _eef_inst_func_66; eef_instructions[67] = _eef_inst_func_67; eef_instructions[68] = _eef_inst_func_68; eef_instructions[69] = _eef_inst_func_69; eef_instructions[70] = _eef_inst_func_70; eef_instructions[71] = _eef_inst_func_71; eef_instructions[72] = _eef_inst_func_72; eef_instructions[73] = _eef_inst_func_73; eef_instructions[74] = _eef_inst_func_74; eef_instructions[75] = _eef_inst_func_75; eef_instructions[76] = _eef_inst_func_76; eef_instructions[77] = _eef_inst_func_77; eef_instructions[78] = _eef_inst_func_78; eef_instructions[79] = _eef_inst_func_79; eef_instructions[80] = _eef_inst_func_80; eef_instructions[81] = _eef_inst_func_81; eef_instructions[82] = _eef_inst_func_82; eef_instructions[83] = _eef_inst_func_83; eef_instructions[84] = _eef_inst_func_84; eef_instructions[85] = _eef_inst_func_85; eef_instructions[86] = _eef_inst_func_86; eef_instructions[87] = _eef_inst_func_87; eef_instructions[88] = _eef_inst_func_88; eef_instructions[89] = _eef_inst_func_89; eef_instructions[90] = _eef_inst_func_90; eef_instructions[91] = _eef_inst_func_91; eef_instructions[92] = _eef_inst_func_92; eef_instructions[93] = _eef_inst_func_93; eef_instructions[94] = _eef_inst_func_94; eef_instructions[95] = _eef_inst_func_95; eef_instructions[96] = _eef_inst_func_96; eef_instructions[97] = _eef_inst_func_97; eef_instructions[98] = _eef_inst_func_98; eef_instructions[99] = _eef_inst_func_99; eef_instructions[100] = _eef_inst_func_100; eef_instructions[101] = _eef_inst_func_101; eef_instructions[102] = _eef_inst_func_102; eef_instructions[103] = _eef_inst_func_103; eef_instructions[104] = _eef_inst_func_104; eef_instructions[105] = _eef_inst_func_105; eef_instructions[106] = _eef_inst_func_106; eef_instructions[107] = _eef_inst_func_107; eef_instructions[108] = _eef_inst_func_108; eef_instructions[109] = _eef_inst_func_109; eef_instructions[110] = _eef_inst_func_110; eef_instructions[111] = _eef_inst_func_111; eef_instructions[112] = _eef_inst_func_112; eef_instructions[113] = _eef_inst_func_113; eef_instructions[114] = _eef_inst_func_114; eef_instructions[115] = _eef_inst_func_115; eef_instructions[116] = _eef_inst_func_116; eef_instructions[117] = _eef_inst_func_117; eef_instructions[118] = _eef_inst_func_118; eef_instructions[119] = _eef_inst_func_119; eef_instructions[120] = _eef_inst_func_120; eef_instructions[121] = _eef_inst_func_121; eef_instructions[122] = _eef_inst_func_122; eef_instructions[123] = _eef_inst_func_123; eef_instructions[124] = _eef_inst_func_124; eef_instructions[125] = _eef_inst_func_125; eef_instructions[126] = _eef_inst_func_126; eef_instructions[127] = _eef_inst_func_127; eef_instructions[128] = _eef_inst_func_128; eef_instructions[129] = _eef_inst_func_129; eef_instructions[130] = _eef_inst_func_130; eef_instructions[131] = _eef_inst_func_131; eef_instructions[132] = _eef_inst_func_132; eef_instructions[133] = _eef_inst_func_133; eef_instructions[134] = _eef_inst_func_134; eef_instructions[135] = _eef_inst_func_135; eef_instructions[136] = _eef_inst_func_136; eef_instructions[137] = _eef_inst_func_137; eef_instructions[138] = _eef_inst_func_138; eef_instructions[139] = _eef_inst_func_139; eef_instructions[140] = _eef_inst_func_140; eef_instructions[141] = _eef_inst_func_141; eef_instructions[142] = _eef_inst_func_142; eef_instructions[143] = _eef_inst_func_143; eef_instructions[144] = _eef_inst_func_144; eef_instructions[145] = _eef_inst_func_145; eef_instructions[146] = _eef_inst_func_146; eef_instructions[147] = _eef_inst_func_147; eef_instructions[148] = _eef_inst_func_148; eef_instructions[149] = _eef_inst_func_149; eef_instructions[150] = _eef_inst_func_150; eef_instructions[151] = _eef_inst_func_151; eef_instructions[152] = _eef_inst_func_152; eef_instructions[153] = _eef_inst_func_153; eef_instructions[154] = _eef_inst_func_154; eef_instructions[155] = _eef_inst_func_155; eef_instructions[156] = _eef_inst_func_156; eef_instructions[157] = _eef_inst_func_157; eef_instructions[158] = _eef_inst_func_158; eef_instructions[159] = _eef_inst_func_159; eef_instructions[160] = _eef_inst_func_160; eef_instructions[161] = _eef_inst_func_161; eef_instructions[162] = _eef_inst_func_162; eef_instructions[163] = _eef_inst_func_163; eef_instructions[164] = _eef_inst_func_164; eef_instructions[165] = _eef_inst_func_165; eef_instructions[166] = _eef_inst_func_166; eef_instructions[167] = _eef_inst_func_167; eef_instructions[168] = _eef_inst_func_168; eef_instructions[169] = _eef_inst_func_169; eef_instructions[170] = _eef_inst_func_170; eef_instructions[171] = _eef_inst_func_171; eef_instructions[172] = _eef_inst_func_172; eef_instructions[173] = _eef_inst_func_173; eef_instructions[174] = _eef_inst_func_174; eef_instructions[175] = _eef_inst_func_175; eef_instructions[176] = _eef_inst_func_176; eef_instructions[177] = _eef_inst_func_177; eef_instructions[178] = _eef_inst_func_178; eef_instructions[179] = _eef_inst_func_179; eef_instructions[180] = _eef_inst_func_180; eef_instructions[181] = _eef_inst_func_181; eef_instructions[182] = _eef_inst_func_182; eef_instructions[183] = _eef_inst_func_183; eef_instructions[184] = _eef_inst_func_184; eef_instructions[185] = _eef_inst_func_185; eef_instructions[186] = _eef_inst_func_186; eef_instructions[187] = _eef_inst_func_187; eef_instructions[188] = _eef_inst_func_188; eef_instructions[189] = _eef_inst_func_189; eef_instructions[190] = _eef_inst_func_190; eef_instructions[191] = _eef_inst_func_191; eef_instructions[192] = _eef_inst_func_192; eef_instructions[193] = _eef_inst_func_193; eef_instructions[194] = _eef_inst_func_194; eef_instructions[195] = _eef_inst_func_195; eef_instructions[196] = _eef_inst_func_196; eef_instructions[197] = _eef_inst_func_197; eef_instructions[198] = _eef_inst_func_198; eef_instructions[199] = _eef_inst_func_199; eef_instructions[200] = _eef_inst_func_200; eef_instructions[201] = _eef_inst_func_201; eef_instructions[202] = _eef_inst_func_202; eef_instructions[203] = _eef_inst_func_203; eef_instructions[204] = _eef_inst_func_204; eef_instructions[205] = _eef_inst_func_205; eef_instructions[206] = _eef_inst_func_206; eef_instructions[207] = _eef_inst_func_207; eef_instructions[208] = _eef_inst_func_208; eef_instructions[209] = _eef_inst_func_209; eef_instructions[210] = _eef_inst_func_210; eef_instructions[211] = _eef_inst_func_211; eef_instructions[212] = _eef_inst_func_212; eef_instructions[213] = _eef_inst_func_213; eef_instructions[214] = _eef_inst_func_214; eef_instructions[215] = _eef_inst_func_215; eef_instructions[216] = _eef_inst_func_216; eef_instructions[217] = _eef_inst_func_217; eef_instructions[218] = _eef_inst_func_218; eef_instructions[219] = _eef_inst_func_219; eef_instructions[220] = _eef_inst_func_220; eef_instructions[221] = _eef_inst_func_221; eef_instructions[222] = _eef_inst_func_222; eef_instructions[223] = _eef_inst_func_223; eef_instructions[224] = _eef_inst_func_224; eef_instructions[225] = _eef_inst_func_225; eef_instructions[226] = _eef_inst_func_226; eef_instructions[227] = _eef_inst_func_227; eef_instructions[228] = _eef_inst_func_228; eef_instructions[229] = _eef_inst_func_229; eef_instructions[230] = _eef_inst_func_230; eef_instructions[231] = _eef_inst_func_231; eef_instructions[232] = _eef_inst_func_232; eef_instructions[233] = _eef_inst_func_233; eef_instructions[234] = _eef_inst_func_234; eef_instructions[235] = _eef_inst_func_235; eef_instructions[236] = _eef_inst_func_236; eef_instructions[237] = _eef_inst_func_237; eef_instructions[238] = _eef_inst_func_238; eef_instructions[239] = _eef_inst_func_239; eef_instructions[240] = _eef_inst_func_240; eef_instructions[241] = _eef_inst_func_241; eef_instructions[242] = _eef_inst_func_242; eef_instructions[243] = _eef_inst_func_243; eef_instructions[244] = _eef_inst_func_244; eef_instructions[245] = _eef_inst_func_245; eef_instructions[246] = _eef_inst_func_246; eef_instructions[247] = _eef_inst_func_247; eef_instructions[248] = _eef_inst_func_248; eef_instructions[249] = _eef_inst_func_249; eef_instructions[250] = _eef_inst_func_250; eef_instructions[251] = _eef_inst_func_251; eef_instructions[252] = _eef_inst_func_252; eef_instructions[253] = _eef_inst_func_253; eef_instructions[254] = _eef_inst_func_254; eef_instructions[255] = _eef_inst_func_255; } /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ /*@@@@@@@@@@@@@ EOF - Instructions @@@@@@@@@@@@@@@@@@@@@@@@@*/ /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ /* returns the length of a instruction * similar to decoding stage of microprocessor */ gint eef_instruction_length (eef_data_t op) { /* 1, 2, 3 */ switch (op) { case 0x0: return 1; case 0x1: return 3; case 0x2: return 1; case 0x3: return 1; case 0x4: return 1; case 0x5: return 1; case 0x6: return 2; case 0x7: return 1; case 0x8: return 1; case 0x9: return 1; case 0xA: return 1; case 0xB: return 1; case 0xC: return 1; case 0xD: return 1; case 0xE: return 2; case 0xF: return 1; case 0x10: return 1; case 0x11: return 3; case 0x12: return 1; case 0x13: return 1; case 0x14: return 1; case 0x15: return 1; case 0x16: return 2; case 0x17: return 1; case 0x18: return 1; case 0x19: return 1; case 0x1A: return 1; case 0x1B: return 1; case 0x1C: return 1; case 0x1D: return 1; case 0x1E: return 2; case 0x1F: return 1; case 0x20: return 1; case 0x21: return 3; case 0x22: return 3; case 0x23: return 1; case 0x24: return 1; case 0x25: return 1; case 0x26: return 2; case 0x27: return 1; case 0x28: return 1; case 0x29: return 1; case 0x2A: return 3; case 0x2B: return 1; case 0x2C: return 1; case 0x2D: return 1; case 0x2E: return 2; case 0x2F: return 1; case 0x30: return 1; case 0x31: return 3; case 0x32: return 3; case 0x33: return 1; case 0x34: return 1; case 0x35: return 1; case 0x36: return 2; case 0x37: return 1; case 0x38: return 1; case 0x39: return 1; case 0x3A: return 3; case 0x3B: return 1; case 0x3C: return 1; case 0x3D: return 1; case 0x3E: return 2; case 0x3F: return 1; case 0x40: return 1; case 0x41: return 1; case 0x42: return 1; case 0x43: return 1; case 0x44: return 1; case 0x45: return 1; case 0x46: return 1; case 0x47: return 1; case 0x48: return 1; case 0x49: return 1; case 0x4A: return 1; case 0x4B: return 1; case 0x4C: return 1; case 0x4D: return 1; case 0x4E: return 1; case 0x4F: return 1; case 0x50: return 1; case 0x51: return 1; case 0x52: return 1; case 0x53: return 1; case 0x54: return 1; case 0x55: return 1; case 0x56: return 1; case 0x57: return 1; case 0x58: return 1; case 0x59: return 1; case 0x5A: return 1; case 0x5B: return 1; case 0x5C: return 1; case 0x5D: return 1; case 0x5E: return 1; case 0x5F: return 1; case 0x60: return 1; case 0x61: return 1; case 0x62: return 1; case 0x63: return 1; case 0x64: return 1; case 0x65: return 1; case 0x66: return 1; case 0x67: return 1; case 0x68: return 1; case 0x69: return 1; case 0x6A: return 1; case 0x6B: return 1; case 0x6C: return 1; case 0x6D: return 1; case 0x6E: return 1; case 0x6F: return 1; case 0x70: return 1; case 0x71: return 1; case 0x72: return 1; case 0x73: return 1; case 0x74: return 1; case 0x75: return 1; case 0x76: return 1; case 0x77: return 1; case 0x78: return 1; case 0x79: return 1; case 0x7A: return 1; case 0x7B: return 1; case 0x7C: return 1; case 0x7D: return 1; case 0x7E: return 1; case 0x7F: return 1; case 0x80: return 1; case 0x81: return 1; case 0x82: return 1; case 0x83: return 1; case 0x84: return 1; case 0x85: return 1; case 0x86: return 1; case 0x87: return 1; case 0x88: return 1; case 0x89: return 1; case 0x8A: return 1; case 0x8B: return 1; case 0x8C: return 1; case 0x8D: return 1; case 0x8E: return 1; case 0x8F: return 1; case 0x90: return 1; case 0x91: return 1; case 0x92: return 1; case 0x93: return 1; case 0x94: return 1; case 0x95: return 1; case 0x96: return 1; case 0x97: return 1; case 0x98: return 1; case 0x99: return 1; case 0x9A: return 1; case 0x9B: return 1; case 0x9C: return 1; case 0x9D: return 1; case 0x9E: return 1; case 0x9F: return 1; case 0xA0: return 1; case 0xA1: return 1; case 0xA2: return 1; case 0xA3: return 1; case 0xA4: return 1; case 0xA5: return 1; case 0xA6: return 1; case 0xA7: return 1; case 0xA8: return 1; case 0xA9: return 1; case 0xAA: return 1; case 0xAB: return 1; case 0xAC: return 1; case 0xAD: return 1; case 0xAE: return 1; case 0xAF: return 1; case 0xB0: return 1; case 0xB1: return 1; case 0xB2: return 1; case 0xB3: return 1; case 0xB4: return 1; case 0xB5: return 1; case 0xB6: return 1; case 0xB7: return 1; case 0xB8: return 1; case 0xB9: return 1; case 0xBA: return 1; case 0xBB: return 1; case 0xBC: return 1; case 0xBD: return 1; case 0xBE: return 1; case 0xBF: return 1; case 0xC0: return 1; case 0xC1: return 1; case 0xC2: return 3; case 0xC3: return 3; case 0xC4: return 3; case 0xC5: return 1; case 0xC6: return 2; case 0xC7: return 1; case 0xC8: return 1; case 0xC9: return 1; case 0xCA: return 3; case 0xCB: return 1; case 0xCC: return 3; case 0xCD: return 3; case 0xCE: return 2; case 0xCF: return 1; case 0xD0: return 1; case 0xD1: return 1; case 0xD2: return 3; case 0xD3: return 2; case 0xD4: return 3; case 0xD5: return 1; case 0xD6: return 2; case 0xD7: return 1; case 0xD8: return 1; case 0xD9: return 1; case 0xDA: return 3; case 0xDB: return 2; case 0xDC: return 3; case 0xDD: return 1; case 0xDE: return 2; case 0xDF: return 1; case 0xE0: return 1; case 0xE1: return 1; case 0xE2: return 3; case 0xE3: return 1; case 0xE4: return 3; case 0xE5: return 1; case 0xE6: return 2; case 0xE7: return 1; case 0xE8: return 1; case 0xE9: return 1; case 0xEA: return 3; case 0xEB: return 1; case 0xEC: return 3; case 0xED: return 1; case 0xEE: return 2; case 0xEF: return 1; case 0xF0: return 1; case 0xF1: return 1; case 0xF2: return 3; case 0xF3: return 1; case 0xF4: return 3; case 0xF5: return 1; case 0xF6: return 2; case 0xF7: return 1; case 0xF8: return 1; case 0xF9: return 1; case 0xFA: return 3; case 0xFB: return 1; case 0xFC: return 3; case 0xFD: return 1; case 0xFE: return 2; case 0xFF: return 1; } g_assert_not_reached (); return -1; /* supress warning */ } gnusim8085-1.4.1/src/gui-list-io.c0000644000175000017500000001074113266554667016350 0ustar carstencarsten/* Copyright (C) 2010 Debajit Biswas This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "config.h" #include "gui-list-io.h" static GtkTreeStore *store = NULL; static GtkTreeView *view = NULL; static gboolean child_position = FALSE; static GtkTreeIter last_iter; static GtkTreeIter mark_iter; static eef_data_t start = 0; enum { C_ADDR_HEX, C_ADDR, C_DATA, N_COLS }; void on_io_list_data_edited (GtkCellRendererText *renderer, gchar *path, gchar *new_text, gpointer user_data) { GtkTreeIter iter; gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (store), &iter, path); gint value; gint addr; if(!asm_util_parse_number (new_text, &value)) value = 0; gtk_tree_store_set (store, &iter, C_DATA, value, -1); gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, C_ADDR, &addr, -1); sys.io[addr] = value; } static void _add_column (GtkTreeView * view, gint id, gchar * title) { GtkCellRenderer *renderer; GtkTreeViewColumn *column; g_assert (view); renderer = gtk_cell_renderer_text_new (); if ( !strcmp(title, _("Data")) ) { g_object_set ((gpointer) renderer, "editable", TRUE, NULL); g_signal_connect ((gpointer) renderer, "edited", G_CALLBACK (on_io_list_data_edited), NULL); } column = gtk_tree_view_column_new_with_attributes (title, renderer, "text", id, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); } static void create_me (void) { /* create store */ store = gtk_tree_store_new (N_COLS, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT); g_assert (store); /* create view */ view = GTK_TREE_VIEW (gtk_tree_view_new_with_model (GTK_TREE_MODEL (store))); g_assert (view); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (view), TRUE); gtk_widget_show (GTK_WIDGET (view)); /* add column */ _add_column (view, C_ADDR_HEX, g_strconcat(_("Address"), " (", _("Hex"), ")", NULL)); _add_column (view, C_ADDR, _("Address")); _add_column (view, C_DATA, _("Data")); } void gui_list_io_attach_me (void) { GtkWidget *cont; cont = lookup_widget (app->window_main, "main_io_scroll"); g_assert (cont); create_me (); gtk_container_add (GTK_CONTAINER (cont), GTK_WIDGET (view)); } void gui_list_io_clear (void) { gtk_tree_store_clear (store); } void gui_list_io_child_state (gboolean state) { child_position = state; if (state) mark_iter = last_iter; } void gui_list_io_set_start (gint st) { if ( st >= 0 && st < EEF_DATA_T_MAX ) start = st; } static void gui_list_io_add (eef_data_t addr, eef_data_t value) { GtkTreeIter iter; gchar addr_str[3] = "XX"; g_assert (store); gtk_tree_store_append (store, &iter, NULL); /* address */ gui_util_gen_hex (addr, addr_str, addr_str+1); gtk_tree_store_set (store, &iter, C_ADDR_HEX, addr_str, C_ADDR, addr, C_DATA, value, -1); last_iter = iter; } void gui_list_io_initialize (void) { eef_data_t i = 0; for( i = 0; i < IO_LIST_MAX_LEN && i+start <= EEF_DATA_T_MAX ; i++) { gui_list_io_add (i+start, sys.io[i + start]); } } void gui_list_io_update (void) { gui_list_io_clear(); gui_list_io_initialize(); } void gui_list_io_update_single (eef_data_t addr) { if (addr >= start && addr < MAX(start + IO_LIST_MAX_LEN, EEF_DATA_T_MAX)) { GtkTreeIter iter; g_assert(gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter)); gint pos = addr -start; gint n = 0; while ( n++ < pos ) gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter); gtk_tree_store_set (store, &iter, C_DATA, sys.io[addr], -1); } } gnusim8085-1.4.1/src/file-op-gio.h0000644000175000017500000000325112767046204016304 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * File operations are handled in this module * save, open, save as, save text.... * * R. Sridhar */ #ifndef __FILE_OP_H__ #define __FILE_OP_H__ #include //TODO: remove those non-glib funcs #include #include #include #include G_BEGIN_DECLS /* funcs related to main editor */ void file_op_editor_new (void); gboolean file_op_editor_save (void); void file_op_editor_save_as (void); void file_op_editor_open (void); /* -- related to listing window */ void file_op_listing_save (gchar *text); /* this is will be called from main.c passing argv[1] */ void ori_open (gchar * fn, gboolean replace); /* to confirm saving the file */ gboolean file_op_confirm_save (void); GtkWidget* create_file_dialog(const gchar *title, GtkFileChooserAction action, const gchar *stock); G_END_DECLS #endif /* __FILE_OP_H__*/ gnusim8085-1.4.1/src/8085-memblock.c0000644000175000017500000000421412767046204016363 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "8085-memblock.h" EefMemBlock * eef_mem_block_new (eef_addr_t max_size) { EefMemBlock *self; self = g_malloc (sizeof (EefMemBlock)); g_return_val_if_fail (self, NULL); self->buffer = g_malloc (sizeof (eef_data_t) * max_size); g_return_val_if_fail (self->buffer, NULL); self->size_allocated = max_size; self->size = 0; return self; } void eef_mem_block_delete (EefMemBlock * self, gboolean also_buffer) { if (self && also_buffer) g_free (self->buffer); g_free (self); } void eef_mem_block_set_start_addr (EefMemBlock * self, eef_addr_t sa) { g_assert (self); self->start_addr = sa; } void eef_mem_block_realloc_buffer (EefMemBlock * self, eef_addr_t nsz) { g_assert (self); g_return_if_fail (nsz > self->size_allocated); self->buffer = g_realloc (self->buffer, nsz); self->size_allocated = nsz; } void eef_mem_block_grow (EefMemBlock * self, eef_data_t data) { g_assert (self); /* realloc if necessary */ if (self->size == self->size_allocated) { eef_addr_t nsz = self->size + 10; /* check for size exceeding range */ g_assert (nsz > self->size); eef_mem_block_realloc_buffer (self, nsz); } self->buffer[self->size++] = data; } /* inc size by adding data n times */ void eef_mem_block_grow_n (EefMemBlock * self, eef_data_t data, gint n) { int i=0; for (i=0; i This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "gui-input-symbol.h" #include "support.h" #include "interface.h" #include "asm-ds-symtable.h" /* DON't directly use these variables. see the 2 funcs below */ static GtkWidget *combo_macros = NULL, *combo_variables = NULL, *combo_labels = NULL; static GList *list_macros = NULL, *list_variables = NULL, *list_labels = NULL; static GtkWidget *cdialog = NULL; static void combo_vars_validate (GtkWidget * dig) { /* validate widget vars */ combo_macros = lookup_widget (GTK_WIDGET (dig), "isymbol_macros"); g_assert (combo_macros); combo_variables = lookup_widget (GTK_WIDGET (dig), "isymbol_variables"); g_assert (combo_macros); combo_labels = lookup_widget (GTK_WIDGET (dig), "isymbol_labels"); g_assert (combo_macros); /* validate lists */ list_macros = list_variables = list_labels = NULL; } static void combo_vars_invalidate (gboolean only_combo) { /* widget */ combo_macros = combo_variables = combo_labels = NULL; if (only_combo) return; /* lists */ if (list_macros) g_list_free (list_macros); if (list_variables) g_list_free (list_variables); if (list_labels) g_list_free (list_labels); } static void add_to_combo (gpointer item, gpointer combo) { gtk_combo_box_text_prepend_text (GTK_COMBO_BOX_TEXT (combo), item); } static void combo_vars_flush (void) { if (list_macros) g_list_foreach (list_macros, add_to_combo, combo_macros); if (list_variables) g_list_foreach (list_variables, add_to_combo, combo_variables); if (list_labels) g_list_foreach (list_labels, add_to_combo, combo_labels); } static void for_each_symbol (gchar * name, AsmSymEntry * entry, gpointer dialog) { GtkWidget *dig; GList **lst = NULL; g_assert (entry); g_assert (dialog); dig = GTK_WIDGET (dialog); /* select combo to insert */ switch (entry->type) { case ASM_SYM_VARIABLE: lst = &list_variables; break; case ASM_SYM_LABEL: lst = &list_labels; break; case ASM_SYM_MACRO: lst = &list_macros; break; default: return; } *lst = g_list_insert (*lst, (gpointer) entry->name, -1); } /* fills dialog with symbols from current module */ static void _fill_symbols (GtkWidget * dig) { combo_vars_validate (dig); asm_sym_scan ((GHFunc) for_each_symbol, (gpointer) dig); combo_vars_flush (); combo_vars_invalidate (FALSE); } static void _connect_cb_callback (GtkWidget * combo) { /* set entry text */ GtkWidget *entry; entry = lookup_widget (cdialog, "entry1"); g_assert (entry); gtk_entry_set_text (GTK_ENTRY (entry), gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (combo))); } static void _connect_cb (GtkWidget * dig) { g_assert (dig); combo_vars_validate (dig); /* connect signal */ #define CBCON(comb) g_signal_connect ((gpointer) (GTK_COMBO_BOX (comb)), \ "changed", \ (GCallback) _connect_cb_callback, \ NULL); CBCON (combo_macros); CBCON (combo_labels); CBCON (combo_variables); #undef CBCON combo_vars_invalidate (TRUE); } gchar * gui_input_symbol (void) { GtkWidget *dig; gchar *symbol_name = NULL; cdialog = dig = create_dialog_isymbol (); g_assert (dig); _fill_symbols (dig); _connect_cb (dig); if (gtk_dialog_run (GTK_DIALOG (dig)) == GTK_RESPONSE_OK) { GtkWidget *entry; entry = lookup_widget (dig, "entry1"); g_assert (entry); symbol_name = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry))); } gtk_widget_destroy (GTK_WIDGET (dig)); cdialog = NULL; return symbol_name; } /* Now Input Register widget --- */ gchar * gui_input_reg (gchar * set) { gint i = 0; gchar psw[] = "PSW", sp[] = "SP", a[] = "A"; /* yes. this is uglier (C) */ gchar b[] = "B", c[] = "C", d[] = "D", e[] = "E"; gchar h[] = "H", l[] = "L", m[] = "M"; gchar d1[] = "1", d2[] = "2", d3[] = "3", d4[] = "4"; gchar d5[] = "5", d6[] = "6", d7[] = "7", d0[] = "0"; GtkWidget *combo_reg; GtkWidget *dig; gchar *symbol_name = NULL; g_assert (set); dig = create_dialog_ireg (); g_assert (dig); combo_reg = lookup_widget (GTK_WIDGET (dig), "ireg"); g_assert (combo_reg); while (set[i]) { gchar *to = NULL; if (set[i] == 'P') to = psw; else if (set[i] == 'S') to = sp; else { switch (set[i]) { case 'A': to = a; break; case 'B': to = b; break; case 'C': to = c; break; case 'D': to = d; break; case 'E': to = e; break; case 'H': to = h; break; case 'L': to = l; break; case 'M': to = m; break; case '0': to = d0; break; case '1': to = d1; break; case '2': to = d2; break; case '3': to = d3; break; case '4': to = d4; break; case '5': to = d5; break; case '6': to = d6; break; case '7': to = d7; break; default: g_assert_not_reached(); } } i++; gtk_combo_box_text_prepend_text (GTK_COMBO_BOX_TEXT (combo_reg), to); } if (gtk_dialog_run (GTK_DIALOG (dig)) == GTK_RESPONSE_OK) { symbol_name = g_strdup (gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (combo_reg))); } gtk_widget_destroy (GTK_WIDGET (dig)); return symbol_name; } gnusim8085-1.4.1/src/gui-app.h0000644000175000017500000000243612767046204015543 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * GUI - Main application window and stuffs * * R. Sridhar */ #ifndef __GUI_APP_H__ #define __GUI_APP_H__ #include #include "interface.h" /* widgets */ #include "gui-editor.h" #include "support.h" G_BEGIN_DECLS typedef struct { GtkWidget *window_main; GUIEditor *editor; } GUIApp; void gui_app_new (void); void gui_app_destroy (void); void gui_app_show (void); extern GUIApp *app; void gui_app_show_msg (GtkMessageType type, gchar * msg); G_END_DECLS #endif /* __GUI_APP_H__ */ gnusim8085-1.4.1/src/8085-link.h0000644000175000017500000000250412767046204015534 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This module links between memory address of opcode * and its corresponding line (line no) on source code * Given the address it will return the line no * * R. Sridhar */ #ifndef __8085_LINK_H__ #define __8085_LINK_H__ #include #include /* for memset */ G_BEGIN_DECLS /* clear stuff - call this before assembly */ void eef_link_clear (void); /* add address, lineno */ void eef_link_add (gint addr, gint lineno); /* main func */ gint eef_link_get_line_no (gint addr); G_END_DECLS #endif /* __8085_LINK_H__ */ gnusim8085-1.4.1/src/8085-instructions.h0000644000175000017500000000266212767046204017350 0ustar carstencarsten/* Copyright (C) 2003 Sridhar Ratnakumar This file is part of GNUSim8085. GNUSim8085 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNUSim8085 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUSim8085; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* * This is the Instructuions module. * All the instruction definitions are found here * The interface is minimal. You have to give only the starting address of inst. * * R. Sridhar */ #include #include "8085.h" #ifndef __8085_INSTRUCTIONS_H__ #define __8085_INSTRUCTIONS_H__ G_BEGIN_DECLS #define MAX_INSTS 256 /* execute this opcode and set is_halt_inst if a terminating inst * Returns FALSE of error */ gboolean eef_inst_execute (eef_addr_t addr, eef_addr_t * consumed_bytes, gboolean * is_halt_inst); gint eef_instruction_length (eef_data_t op); gboolean eef_inst_is_halt_inst (eef_data_t op); G_END_DECLS #endif gnusim8085-1.4.1/README_OSX.md0000644000175000017500000000142313327060052015232 0ustar carstencarstenGNUSim8085 depends on other open source applications/libraries which are not available on app store. You can install these dependencies from repositories Fink, MacPorts or Brew. ## Dependencies Build dependencies (Mandatory) - GTK3 (>= 3.10.0) development package - GtkSourceView3 (>= 3.10.0) development package Build dependencies (Optional) - gettext (>= 0.18) - markdown (discount or similar package that provides markdown binary) ## Install from source To install from source, run the following commands ```sh $ ./autogen.sh # only required when configure script does not exist $ ./configure $ make $ sudo make install ``` Note: If you are using brew to install dependencies then simply run command brew bundle from the source root. This will fetch all the necessary packages. gnusim8085-1.4.1/Makefile.am0000644000175000017500000000124013327660733015267 0ustar carstencarsten## Process this file with automake to produce Makefile.in SUBDIRS = po src pixmaps doc data gnusim8085_docdir = $(docdir) gnusim8085_doc_DATA = \ AUTHORS\ NEWS\ TODO\ ABOUT-NLS EXTRA_DIST = config.rpath m4/ChangeLog $(gnusim8085_doc_DATA) \ README.md README_OSX.md WINDOWS-PORT.txt Brewfile DISTCLEANFILES = README *.exe *.gz gnomemenudir = $(datadir)/applications gnomemenu_DATA = GNUSim8085.desktop README: README.md cp README.md README # Copy all the spec files. Of cource, only one is actually used. dist-hook: for specfile in *.spec; do \ if test -f $$specfile; then \ cp -p $$specfile $(distdir); \ fi \ done ACLOCAL_AMFLAGS = -I m4 gnusim8085-1.4.1/NEWS0000644000175000017500000001661613327663030013740 0ustar carstencarstenGNUSim8085 1.4.1 (31 Jul 2018) New: The application has been ported to GTK3. There is no major functional difference compared to previous versions. But using GTK3 should allow us to use newer design practices like header bar in future. New: LP: #1322687 - Please create an AppData file This allows more information to be displayed in software centre applications. Fix: Printing fix for Windows Translations: New - Dutch (nl), Japanese (ja), Lithuanian (lt), Marathi (mr), Russian (ru), Thai (th). Updated - Arabic (ar), French (fr), German (de), Greek (el), Kannada (kn), Spanish (es), Tamil (ta). Note to packagers: The application is now built using GTK3 APIs. Dependencies: New - GTK+ >= 3.10.0, GtkSourceView >= 3.10.0, markdown (discount or similar package that provides markdown binary) GNUSim8085 1.3.7 (20 Feb 2011) New: LP: #579341 - Editable memory listing as a tab. This allows easy viewing/editing of memory contents in a table. The table is shown in a tab similar to Data/Stack content shown currently. New: LP: #579324 - Memory/IO Ports Grid Inspector This allows easy viewing/editing of I/O contents in a table. The table is shown in a tab similar to Data/Stack content shown currently. New: Files opened/saved are added to recently used file list using GtkRecentManager APIs. New: LP: #519836 - Breakpoint Toggling It is now possible to toggle breakpoint by clicking on left margin of editor component. New: LP: #579322 - Choosing a font in editor This allows setting a font in editor component. But the preference is not saved on application exit. New: LP: #680100 - doesn't retain current working directory The last accessed directory by the file selection dialogs is saved. Also the default open/save directory is 'Documents' directory whose value depends on OS and user settings. But the working directory preference is not saved on application exit. Fix: LP: #519828 - Start-up dialog should not be minimised Fix: LP: #519834 - Assembler Error: No line highlighting Fix: LP: #579317 - Modify the 'Help' dialog to point to actual tutorial Fix: LP: #579318 - Stepping through code doesn't honor breakpoints Fix: LP: #579319 - Help -> about = crash Fix: LP: #579320 - CMP flags not working like SUB with signed numbers Fix: LP: #584093 - 78+88 in BCD addition missed carry Translations: New - Brazilian Portuguese (pt_BR), Greek (el), Tamil (ta). Updated - Arabic (ar), French (fr), German (de), Gujarati (gu), Kannada (kn), Italian (it), Spanish (es). GNUSim8085 1.3.6 (27 Feb 2010) New: Basic printing support for program editor and assembly listing window. New: Better looking installer. Multi-language interface and finish screen with 'Run program' option. New: The UI is now 'i18n'ized. New: Experimental file handling with GIO APIs. Disabled by default. Use --enable-gio configure option. New: New icon. Fix: SF#1847830 - Make the UI i18n enabled Fix: SF#1942893 - Assembler listing window is too narrow Fix: SF#2356534 - Basic File handling errors Fix: SF#2462607 - Keypad should not insert instruction code while debugging Fix: SF#2462657 - Example programs must be read-only on Windows Fix: SF#2580092 - syntax highlighting for labels with underscore in symbol Fix: SF#2582426 - syntax highlighting for sp register (stack pointer) Translations: New - Arabic (ar), Asturian (ast), Esperanto (eo), French (fr), German (de), Gujarati (gu), Italian (it), Kannada (kn), Spanish (es). GNUSim8085 1.3.5 (24 Dec 2008) New: Port to gtksourceview 2. Syntax highlighting works in non standard installation also. New: Windows port with an installer. GTK+ runtime needs to be installed separately. New: Updated registers and flags are shown in bold. New: Assembler now accepts Binary and octal arguments. Fix: Tooltips for the keypad buttons. Needs GTK+ >= 2.12. Fix: Add file filter for .asm files. Fix: DAA Instruction bug. Thanks to Madhusudhan. C. S Fix: Error message reports line number offset by 1. Thanks Aditya M. Fix: DAD Instruction bug. Thanks to Aditya M. GNUSim8085 1.3.2 (17 Oct 2007) Fix: Configure script exits silently (after checking for GNOME) Fix: 8085asm.lang file doesn't include some keywords FIX: Assemble Error (equ/in) New: Some code cleanup to use GTK+ widgets instead of GNOME widgets. New: The instruction added using keypad now has single space (' ') instead of tabs ('\t') as field separater. New: Fix 'make distcheck' as well as debian build. GNUSim8085 1.3 (20 Feb 2007) New: Use gtksourceview as editor component. Fix: Syntax highlighting working again. Fix: About dialog does not close by pressing close button. GNUSim8085 1.2.91 (17 Oct 2006) Fix: Bug Fixes for PCHL,DAA Instructions. Fix: GUI Modifications. GNUSim8085 1.2.90 (30 Jul 2006) New: We've got maintainers! Thanks to Aanjhan and Onkar for helping to make this release. Fix: Text widget doesn't work in newer version of GNOME. Fixed by updating to Scintilla 1.66 Fix: Patch #964792 in sourceforge: PUSH/POP PSW operation fix. GNUSim8085 1.2.89 (26 Jan 2004) - Sridhar New: GNUSim8085 is ready for translation (gettext)! New: Icon for all dialogs Fix: 'string.h' bug fixed Fix: Removed gdk* funcs which were making library dependency problems on some systems GNUSim8085 1.2.88 (31 Dec 2003) - Sridhar Fix: ACI instruction bug fixed Fix: Add/Sub with carry instructions bug fixed Fix: Add/Sub instructions - carry set bug fixed Fix: CMA instruction bug fixed Fix: Carry check bug fixed Fix: File listing save crash bug fixed New: Main window has new title New: Pango rendered text New: XCHG implemented. (Oops! This was a very very critical bug!) Fix: App Pixmap will now show correctly (unless u fiddle with pixmap dir) GNUSim8085 1.2.8 (11 Dec 2003) - Sridhar New: Keypad (Not stable!) GNUSim8085 1.2.3 (05 Nov 2003) - Sridhar New: ASM Files can be passed as a parameter hereafter! GNUSim8085 1.2.1 (01 Oct 2003) - Sridhar Fix: Instructions: LHLD, RAR, RAL, STC - wrong exec - fixed New: Listing Window - added Button Box for "Save listing file" GNUSim8085 1.2.0 beta (26 Aug 2003) - Sridhar New: Stable Stack view Fix: Now simulation will be as fast as that of release 1.1.9 GNUSim8085 1.2.0 alpha (26 Aug 2003) - Sridhar New: Stack view - view current functions called and variables pushed! Fix: "I/O Port" widget - resetting on execution - fixed TODO: in this beta release, simulation is really slow, will be fixed later TODO: tutorial GNUSim8085 1.1.9 (04 Aug 2003) - Sridhar New: Dec-Hex convertion widgets added New: step-in and step-out implemented New: Start-with dialog with "Tutorial" button New: Automatic breakpoint insertion syntax for assembly code New: Replace scintilla archives with sources (hence smaller package size!) Fix: view not following trace - fixed Fix: Assembler Syntax Fix: "equ" symbols can used in pseudo op operands also Fix: Last char is not saved during saving file. Now fixed. (Don't use v < 1.2!) New: Informative statusbar GNUSim8085 1.1 (25 July 2003) - Sridhar New: First stable release of the simulator(lot of bugs) :-) gnusim8085-1.4.1/missing0000755000175000017500000001533013254236244014632 0ustar carstencarsten#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2013 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gnusim8085-1.4.1/config.sub0000755000175000017500000010577513254235636015237 0ustar carstencarsten#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2014 Free Software Foundation, Inc. timestamp='2014-09-11' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches with a ChangeLog entry to config-patches@gnu.org. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gnusim8085-1.4.1/configure.ac0000644000175000017500000001171413327416165015526 0ustar carstencarstendnl Process this file with autoconf to produce a configure script. AC_INIT([gnusim8085], [1.4.1], [https://github.com/GNUSim8085/GNUSim8085/issues]) AC_DEFINE([PACKAGE_URL],["http://www.gnusim8085.org/"],[Website URL]) AC_CANONICAL_HOST AM_INIT_AUTOMAKE([1.14 silent-rules]) AM_SILENT_RULES([yes]) AC_CONFIG_SRCDIR([src/main.c]) AC_CONFIG_HEADERS([config.h]) AC_ISC_POSIX AC_SUBST(CFLAGS,$CFLAGS) AC_PROG_CC AM_PROG_CC_STDC AM_PROG_CC_C_O AC_HEADER_STDC dnl Checks for programs. PKG_PROG_PKG_CONFIG can_build_documentation=yes dnl Checks for libraries. dnl Checks for header files. AC_CHECK_HEADERS([libintl.h stdlib.h string.h unistd.h]) dnl Checks for typedefs, structures, and compiler characteristics. dnl Checks for library functions. AC_CHECK_FUNCS([memset setlocale strtol strtoul]) dnl Checks for Additional stuffs. case "${host}" in i[[3456789]]86-*-mingw32*) WIN32="yes" ;; *cygwin*) WIN32="yes" ;; *) WIN32="no" ;; esac AM_CONDITIONAL([WIN32], test "$WIN32" = "yes") AC_PATH_PROG([markdown],[markdown]) if test -z "$markdown" ; then AC_MSG_WARN([markdown was not found. If you want to change and compile the documentation, \ please install markdown]) can_build_documentation=no fi AC_MSG_CHECKING([whether documentation can be changed and compiled]) AC_MSG_RESULT($can_build_documentation) AM_CONDITIONAL([BUILD_HELP], test "$can_build_documentation" = "yes") gtk_api="gtk+-3.0" gtksourceview_api="gtksourceview-3.0" gtk_required="3.10.0" gtksourceview_required="3.10.0" AC_SUBST(GTK_VERSION_REQ, $gtk_required) AC_SUBST(GTKSOURCEVIEW_API, $gtksourceview_api) AC_ARG_ENABLE([gio], AS_HELP_STRING([--enable-gio],[Enable gio based file handling (default: enabled)]), [enable_gio=$enableval], [enable_gio=yes]) if test "x$enable_gio" != "xno"; then PKG_CHECK_MODULES(GIO, [gio-2.0],, [ AC_MSG_ERROR( [ Cannot find gio Please check the following: * Do you have the glib2 development package installed? (usually called glib2-devel for rpm based distros or libglib2.0-dev for deb based distros or similar) If ls -l /usr/lib/pkgconfig/gio-2.0.pc reports that the file does not exist, then you are missing the development package. ])]) fi AM_CONDITIONAL(USE_GIO, test "x$enable_gio" = "xyes") PKG_CHECK_MODULES(GTK, [$gtk_api >= $gtk_required],, [ AC_MSG_ERROR( [ Cannot find $gtk_api >= $gtk_required Please check the following: * Do you have the $gtk_api development package installed? If pkg-config --cflags $gtk_api reports that the package does not exist, then you are missing the development package. ])]) PKG_CHECK_MODULES(GTKSOURCEVIEW, [$gtksourceview_api >= $gtksourceview_required],, [ AC_MSG_ERROR( [ Cannot find $gtksourceview_api >= $gtksourceview_required Please check the following: * Do you have the $gtksourceview_api development package installed? If pkg-config --cflags $gtksourceview_api reports that the file does not exist, then you are missing the development package. ])]) AC_SUBST(GTK_LIBS) AC_SUBST(GTK_CFLAGS) AC_SUBST(GTKSOURCEVIEW_LIBS) AC_SUBST(GTKSOURCEVIEW_CFLAGS) dnl Languages which your application supports AM_GNU_GETTEXT([external]) AM_GNU_GETTEXT_VERSION([0.18.1]) dnl Set PACKAGE SOURCE DIR in config.h. packagesrcdir=`cd $srcdir && pwd` dnl Set PACKAGE PREFIX if test "x${prefix}" = "xNONE"; then packageprefix=${ac_default_prefix} else packageprefix=${prefix} fi dnl Set PACKAGE DATA & DOC DIR packagedatadir=share/${PACKAGE} packagedocdir=share/doc/${PACKAGE} dnl Set PACKAGE DIRs in config.h. packagepixmapsdir=share/icons/hicolor/scalable/apps packagehelpdir=${packagedocdir}/help packagemenudir=share/gnome/apps dnl Subst PACKAGE_DATA_DIR. PACKAGE_DATA_DIR="${packageprefix}/${packagedatadir}" AC_SUBST(PACKAGE_DATA_DIR) dnl Subst PACKAGE_PIXMAPS_DIR. PACKAGE_PIXMAPS_DIR="${packageprefix}/${packagepixmapsdir}" AC_SUBST(PACKAGE_PIXMAPS_DIR) dnl Subst PACKAGE_HELP_DIR. PACKAGE_HELP_DIR="${packageprefix}/${packagehelpdir}" AC_SUBST(PACKAGE_HELP_DIR) dnl Subst PACKAGE_MENU_DIR. PACKAGE_MENU_DIR="${packageprefix}/${packagemenudir}" AC_SUBST(PACKAGE_MENU_DIR) AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${packageprefix}/${packagedatadir}", [Directory where data files are installed]) AC_DEFINE_UNQUOTED(PACKAGE_PIXMAPS_DIR, "${packageprefix}/${packagepixmapsdir}", [Directory where pixmaps files are installed]) AC_DEFINE_UNQUOTED(PACKAGE_HELP_DIR, "${packageprefix}/${packagehelpdir}", [Directory where help files are installed]) AC_DEFINE_UNQUOTED(PACKAGE_MENU_DIR, "${packageprefix}/${packagemenudir}", [Directory where menu files are installed]) dnl AC_DEFINE_UNQUOTED(PACKAGE_SOURCE_DIR, "${packagesrcdir}") AC_OUTPUT([ Makefile po/Makefile.in src/Makefile pixmaps/Makefile doc/Makefile doc/help/Makefile data/Makefile GNUSim8085.desktop installer.nsi ]) gnusim8085-1.4.1/GNUSim8085.desktop.in0000644000175000017500000000031012767046204016655 0ustar carstencarsten[Desktop Entry] Name=GNUSim8085 Comment=Intel 8085 microprocessor simulator Exec=gnusim8085 Icon=@PACKAGE_PIXMAPS_DIR@/gnusim8085.svg Terminal=false Type=Application Categories=GNOME;GTK;Development; gnusim8085-1.4.1/doc/0000755000175000017500000000000013327663073014003 5ustar carstencarstengnusim8085-1.4.1/doc/Makefile.am0000644000175000017500000000050513253242211016020 0ustar carstencarsten## Process this file with automake to produce Makefile.in SUBDIRS = help gnusim8085_docdir = $(docdir) gnusim8085_doc_DATA = asm-guide.txt man_MANS = gnusim8085.1 gnusim8085_exampledir = $(docdir)/examples/ gnusim8085_example_DATA = examples/* EXTRA_DIST = $(gnusim8085_doc_DATA) $(gnusim8085_example_DATA) gnusim8085.1 gnusim8085-1.4.1/doc/gnusim8085.10000644000175000017500000000467412767046204015725 0ustar carstencarsten.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.27. .TH GNOME "1" "November 2003" "GNUSim8085 1.2.3" "User Commands" .SH NAME gnusim8085 \- graphical Intel 8085 simulator, assembler and debugger .SH SYNOPSIS .B gnusim8085 [\fIOPTION\fR]... .SH DESCRIPTION .TP \fB\-\-load\-modules\fR=\fIMODULE1\fR,MODULE2,... Dynamic modules to load .SS "Help options" .TP \fB\-?\fR, \fB\-\-help\fR Show this help message .TP \fB\-\-usage\fR Display brief usage message .SS "GTK+" .TP \fB\-\-gdk\-debug\fR=\fIFLAGS\fR Gdk debugging flags to set .TP \fB\-\-gdk\-no\-debug\fR=\fIFLAGS\fR Gdk debugging flags to unset .TP \fB\-\-display\fR=\fIDISPLAY\fR X display to use .TP \fB\-\-screen\fR=\fISCREEN\fR X screen to use .TP \fB\-\-sync\fR Make X calls synchronous .TP \fB\-\-name\fR=\fINAME\fR Program name as used by the window manager .TP \fB\-\-class\fR=\fICLASS\fR Program class as used by the window manager .HP \fB\-\-gxid\-host\fR=\fIHOST\fR .HP \fB\-\-gxid\-port\fR=\fIPORT\fR .TP \fB\-\-gtk\-debug\fR=\fIFLAGS\fR Gtk+ debugging flags to set .TP \fB\-\-gtk\-no\-debug\fR=\fIFLAGS\fR Gtk+ debugging flags to unset .TP \fB\-\-g\-fatal\-warnings\fR Make all warnings fatal .TP \fB\-\-gtk\-module\fR=\fIMODULE\fR Load an additional Gtk module .SS "Bonobo activation Support" .TP \fB\-\-oaf\-ior\-fd\fR=\fIFD\fR File descriptor to print IOR on .TP \fB\-\-oaf\-activate\-iid\fR=\fIIID\fR IID to activate .TP \fB\-\-oaf\-private\fR Prevent registering of server with OAF .SS "GNOME Library" .TP \fB\-\-disable\-sound\fR Disable sound server usage .TP \fB\-\-enable\-sound\fR Enable sound server usage .TP \fB\-\-espeaker\fR=\fIHOSTNAME\fR:PORT Host:port on which the sound server to use is running .HP \fB\-\-version\fR .SS "Session management" .TP \fB\-\-sm\-client\-id\fR=\fIID\fR Specify session management ID .TP \fB\-\-sm\-config\-prefix\fR=\fIPREFIX\fR Specify prefix of saved configuration .TP \fB\-\-sm\-disable\fR Disable connection to session manager .SS "GNOME GUI Library" .HP \fB\-\-disable\-crash\-dialog\fR .SH AUTHOR Written by Sridhar Ratnakumar . This manual page was written by Shaun Jackman for the Debian system. .SH "REPORTING BUGS" Report bugs to Sridhar . .SH COPYRIGHT Copyright 2003 Sridhar . This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. .SH "SEE ALSO" http://www.gnusim8085.org gnusim8085-1.4.1/doc/asm-guide.txt0000644000175000017500000001337412767046204016425 0ustar carstencarstenGNUSim8085 Assembly Language Guide ================================== :Date: 2003-10 :Version: 1.0 :Authors: Sridhar Ratnakumar Introduction ------------ A basic assembly program consists of 4 parts. a. Machine operations (mnemonics) b. Pseudo operations (like preprocessor in C) c. Labels d. Comments In addition, you have constants in an assembly program. Unless otherwise specified, a constant which is always numberic is in decimal form. If appended with a character ``h`` it is assumed to be in hexadecimal form. If a hex constant starts with an alpha-char don't forget to include the number ``0`` in the begining, since that will help the assembler to differentiate between a label and a constant. Labels ------ Labels when given to any particular instruction/data in a program, takes the address of that instruction or data as its value. But it has different meaning when given to ``EQU`` directive. Then it takes the operand of ``EQU`` as its value. Labels must always be placed in the first column and must be followed by an instruction (no empty line). Labels must be followed by a ``:`` (colon), to differentiate it from other tokens. Pseudo Ops ---------- There are only 3 directives currently available in our assembly language. a. ``DB`` - define byte ( 8 bits ) b. ``DS`` - define size (no. of bytes) c. ``EQU`` - like minimalistic ``#define`` in C ``DB`` is used to define space for an array of values specified by comma seperated list. And the label (if given to the begining of ``DB``) is assigned the address of the first data item. For example, :: var1: db 34, 56h, 87 .. note:: Assuming that the assembler has currently incremented its ``PC`` to ``4200h``, ``var1=4200h``, ``var1+1=4201h``, ``var1+2=4202h``. Note that ``56h`` is actually considered to be a hex constant. In this example 3 bytes are assigned. ``DS`` is used to define the specified number of bytes to be assigned and initialize them to zero. To access each byte you can use the ``+`` or ``-`` operator along with label. For example, :: var2: ds 8 .. note: Now when you use ``var2`` in the program it refers to the first byte of these eight bytes. To refer other bytes, say 3rd byte, you have to use ``var2+3`` instead of simply ``var2``. Hope you understand! This concept also applies to ``DB``! '-' is used to backrefer variables, i.e., to refer just previous variables in the program! ``EQU`` behaves similar to ``#define`` in C. But it is simple. It can be used to give names only to numeric constants. Nesting of ``EQU`` is not allowed. You can use ``EQU`` only in operands for pseudo ops and mneumonics. For example, :: jmp start ;jump to code skipping data ;data starts here port1: equ 9h data: equ 7fh var1: db data, 0 ;like - 7fh, 0 ;code starts here start: lxi h, var1 ;load var1 address in HL pair for addressing mov a, m ;load contents of var1 in reg A (i.e. 7fh in A) out port1 ;send contents of reg A to port 9h in port1 ;read from port1 and store value in reg A sta var1+1 ;store contents of reg A in memory location var+1 (next to 7fh!) hlt ;halt execution .. note:: As you can see ``EQU`` defined labels can be used to give descriptive names to constants. You should use them frequently in your program in order to avoid magic numbers. Mnemonics --------- After all, I am using my spare time to do all these things. Writing a BIG manual on 8085 instructions seems to be redundant and time consuming. You can refer many available text books on 8085 programming for this. (TODO: tutor weblink?) But don't get upset! There are example programs in the docs section, which you can get used to! :-) Comments -------- Comments start with a semi-colon (``;``). As you can see in the previous example, comments can be given to any part of the program. Anything after ``;`` is ignored by the assembler, except to one important character sequence...YES READ ON.. Auto breakpoints ---------------- As you get acquainted with the application, you can use breakpoints to debug your program. But for certain programs, you have to display something to the user before continuing. A perfect example for this is the N-Queens problem. Here finding all the solutions for (say) 8 queens is time consuming (it involves a total of 92 solutions). In my system, it took almost 1 minute to computer all the solutions. But in that I can see only the last solution, since solutions are overwritten by subsequent ones. Now I can give a breakpoint at the place where the program finds the next solution. When the breakpoint is reached, I can stop and see the solution (by examining the variables) and then continue for the next solution. But for this program, everytime you load it, you have to set the breakpoints. This can be automated. To set the breakpoint (when the program is loaded) at line number `n`, you have to put a special comment at line ``n-1``. And this comment should start at first column. The sequence is :: ;@ If ``;@`` is encountered, the editor will set breakpoint in the next line. For obvious reasons, you can't set a breakpoint at first line in your program. For an example, look at the N-Queens program in the docs section (`nqueens.asm`). Final notes ----------- * Don't forget to include the ``HLT`` instruction somewhere else in the program to terminate it, otherwise you will be fooled! * Constant addresses should be used with caution. ``LDA 2200h`` will be ``3a 00 22`` in machine code . So the actual address is again ``2200h``! Thats all for now folks! http://www.gnusim8085.org/ gnusim8085-1.4.1/doc/Makefile.in0000644000175000017500000005770313327416216016057 0ustar carstencarsten# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" \ "$(DESTDIR)$(gnusim8085_docdir)" \ "$(DESTDIR)$(gnusim8085_exampledir)" NROFF = nroff MANS = $(man_MANS) DATA = $(gnusim8085_doc_DATA) $(gnusim8085_example_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/mkinstalldirs DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTKSOURCEVIEW_API = @GTKSOURCEVIEW_API@ GTKSOURCEVIEW_CFLAGS = @GTKSOURCEVIEW_CFLAGS@ GTKSOURCEVIEW_LIBS = @GTKSOURCEVIEW_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ GTK_VERSION_REQ = @GTK_VERSION_REQ@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATA_DIR = @PACKAGE_DATA_DIR@ PACKAGE_HELP_DIR = @PACKAGE_HELP_DIR@ PACKAGE_MENU_DIR = @PACKAGE_MENU_DIR@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_PIXMAPS_DIR = @PACKAGE_PIXMAPS_DIR@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ markdown = @markdown@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = help gnusim8085_docdir = $(docdir) gnusim8085_doc_DATA = asm-guide.txt man_MANS = gnusim8085.1 gnusim8085_exampledir = $(docdir)/examples/ gnusim8085_example_DATA = examples/* EXTRA_DIST = $(gnusim8085_doc_DATA) $(gnusim8085_example_DATA) gnusim8085.1 all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-gnusim8085_docDATA: $(gnusim8085_doc_DATA) @$(NORMAL_INSTALL) @list='$(gnusim8085_doc_DATA)'; test -n "$(gnusim8085_docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(gnusim8085_docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(gnusim8085_docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(gnusim8085_docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(gnusim8085_docdir)" || exit $$?; \ done uninstall-gnusim8085_docDATA: @$(NORMAL_UNINSTALL) @list='$(gnusim8085_doc_DATA)'; test -n "$(gnusim8085_docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(gnusim8085_docdir)'; $(am__uninstall_files_from_dir) install-gnusim8085_exampleDATA: $(gnusim8085_example_DATA) @$(NORMAL_INSTALL) @list='$(gnusim8085_example_DATA)'; test -n "$(gnusim8085_exampledir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(gnusim8085_exampledir)'"; \ $(MKDIR_P) "$(DESTDIR)$(gnusim8085_exampledir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(gnusim8085_exampledir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(gnusim8085_exampledir)" || exit $$?; \ done uninstall-gnusim8085_exampleDATA: @$(NORMAL_UNINSTALL) @list='$(gnusim8085_example_DATA)'; test -n "$(gnusim8085_exampledir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(gnusim8085_exampledir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(MANS) $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(gnusim8085_docdir)" "$(DESTDIR)$(gnusim8085_exampledir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-gnusim8085_docDATA \ install-gnusim8085_exampleDATA install-man install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-man1 install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-gnusim8085_docDATA \ uninstall-gnusim8085_exampleDATA uninstall-man uninstall-man: uninstall-man1 .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic cscopelist-am ctags ctags-am \ distclean distclean-generic distclean-tags distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-gnusim8085_docDATA \ install-gnusim8085_exampleDATA install-html install-html-am \ install-info install-info-am install-man install-man1 \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-am uninstall uninstall-am uninstall-gnusim8085_docDATA \ uninstall-gnusim8085_exampleDATA uninstall-man uninstall-man1 .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnusim8085-1.4.1/doc/examples/0000755000175000017500000000000013327663073015621 5ustar carstencarstengnusim8085-1.4.1/doc/examples/nqueens.asm0000644000175000017500000000634112767046204020003 0ustar carstencarsten;Copyright (C) 2003 Sridhar Ratnakumar ;Distributed under same license as rest of the program i.e. GPL v2 or later. ;See COPYING file for license text. ;See docs/asm-guide.txt before ;continuing ;solution to N-Queens problem ;Sridhar ;TUTORIAL ;1. Click "execute" and expand the ; board variable to see solution ;2. Click "execute" again for next ; solution. ;3. For more information see ; doc/asm-guide.txt jmp start ;skip data ;data nqueen: equ 8 ;INPUT - N q_n: db nqueen ;no of queens sl_fd: db 0 ;solutions found board: ds nqueen ;max board size ;code start: nop mvi b,0 call input ;input n call find_solution call output ;all sol found hlt ;halt program ;============== ;set board[B] = C setb: nop push h lxi h, board ;load addr mov a,l add b ;add index to l base mov l,a ;restore l jnc sb_c ;check for carry inr h sb_c: mov m,c ;store in memory pop h ret ;============== ;============== ;get board[D] in A getb: nop push h lxi h, board ;load addr mov a,l add d ;add index to l base mov l,a ;restore l jnc gb_c ;check for carry inr h gb_c: mov a,m ;save return value pop h ret ;============== ;============== ;threatens ; arg B - x ; C - y ; loc D - cnt ; E - tmp ; H - threats (bool) ; ret A - 0 if not threatens threatens: nop push h mvi d,0 mvi h,0 ;while cnt < x && h == 0 t_lp: nop mov a,d cmp b jnc t_lpb mvi a,1 cmp h jc t_lpb ;get board[D] in A call getb cmp c jnz t_a mvi h,1 t_a: nop mov a,b sub d mov e,a ;? y == board[i]-tmp call getb sub e cmp c jz t_c ;? y == board[i]+tmp call getb add e cmp c jnz t_b t_c: mvi h,1 t_b: nop inr d ;loop (while) jmp t_lp t_lpb: nop mov a,h pop h ret ;============== ;============== ;Find Solution ; arg B - pieces placed ; loc C - counter find_solution: nop push b ;init lxi h,q_n ;for c=0 to N-1 mvi c,0 fs_lp: nop ;check if threatens call threatens cpi 1 jz fs_c ;now not threatened call setb ;board[B] = C ;if piecesplaced == n-1 mov a,m dcr a cmp b jnz fs_a call ps ;print solution call ask ;ask user (pause) ;sl_fd++ push h lxi h,sl_fd inr m pop h fs_a: nop ;call recursively inr b call find_solution dcr b ;jmp fs_c: inr c mov a,c cmp m jc fs_lp pop b ret ;============== ;============== ;Input n input: nop ret ;============== ;============== ;Print solution (g: board, q_n, sl_fd) ps: nop ret ;============== ;============== ;ask user whether to cont or not ;exit if 'n' or else just return ask: nop ;Execution should pause here ;Otherwise finding all solutions will ;take time - no one will wait for that! ;so we see the solutions one by one ;After execution breaks here, examine ;the contents of variable "board" for ;sl_fd(th) solution! ;For N queens, solution is board[0->N-1] ;Resume execution by clicking "execute" ;button for next solution! ;The ";@" below is used to automatically ;set the breakpoint when opening this file ;@ - ";@" should be the first two chars of line before the line at which you wish to have the breakpoint. ret ;breakpoint is reached here. press "Execute" button to continue execution ;============== ;============== ;Output last message number of solutions output: nop ret ;EOF gnusim8085-1.4.1/doc/examples/debugexample.asm0000644000175000017500000000170312767046204020764 0ustar carstencarsten;Copyright (C) 2003 Sridhar Ratnakumar ;Distributed under same license as rest of the program i.e. GPL v2 or later. ;See COPYING file for license text. ;See docs/asm-guide.txt before ;continuing ;Just debug this ;erroneos program ;-) ;A sample program ;illustrating debuging facilities ;"step-in", "step-over", "step-out" ;To see asm listing choose ;Assembler=>ShowListing menu jmp start ;data hai: db 34,56 tmp: equ 39h ;code start: mov a,h ;push b ;Try hitting any of 3 debugging buttons ;for understanding its mechanism ;Try setting breakpoints and hitting ;the "execute" button. (There are 2 ;breakpoints set automatically when this ;file is opened!) call func1 ;call func1 pop b mov a,h call func2 ;call func2 call func3 ;call func3 mov m,a hlt func1: nop nop nop mvi c,56 ret func2: nop nop mvi b,45h nop ret func3: nop push b nop ;@ (automatic break point) mvi d,34h call func2 nop ;@ pop b ret gnusim8085-1.4.1/doc/examples/sumofnumbers.asm0000644000175000017500000000210112767046204021040 0ustar carstencarsten;Copyright (C) 2010 Kirantej J L ;Distributed under same license as rest of the program i.e. GPL v2 or later. ;See COPYING file for license text. ; ; This program reads the numbers from the memory location 50 till it ;finds 00 (end of input) and then sums up and stores the result in ;0080H(LOB),0081H(HOB) respectively. ; this program demonstrates 1) comparision and 2) addition jmp start ;code start: LXI H,50 ;set up HL as memory pointer MVI C,00H ;clear C to save sum MOV B,C ;Clear B to save carry nxtbyte: MOV A,M ; Transfer current reading to (A) CPI 00h ;Is it last reading JZ OUTPUT ;If yes go to output section ADD C ;Add previous sun to accumulator JNC SAVE ; Skip CY register if there is no carry INR B ;Update carry register SAVE: MOV C,A ;Save sum INX H ; point to next reading JMP nxtbyte ;Go back to get next reading OUTPUT: LXI H,80H ;Point to 080H memory location MOV M,C ;Store low-order byte of sum in 080h INX H ; ;Point to 081H memory location MOV M,B HLT gnusim8085-1.4.1/doc/examples/swaphex.asm0000644000175000017500000000055512767046204020005 0ustar carstencarsten;Copyright (C) 2003 Sridhar Ratnakumar ;Distributed under same license as rest of the program i.e. GPL v2 or later. ;See COPYING file for license text. ;Program to swap hex digits jmp start ;data ;code start: mvi a,91h mov b,a ani 0fh mov c,a mov a,b ani 0f0h rrc rrc rrc rrc mov d,a mov a,c rlc rlc rlc rlc add d hlt gnusim8085-1.4.1/doc/examples/sorting.asm0000644000175000017500000000240112767046204020003 0ustar carstencarsten;Copyright (C) 2010 Kirantej J L ;Distributed under same license as rest of the program i.e. GPL v2 or later. ;See COPYING file for license text. ; ; This program is the famous bubble sorting technique, it compares sucessive elements and then sorts ; This assumes that data is stored in memory location 50 ; Change the initial value of C-register in line-no 17 for different number of inputs ; The sorted elements are stored in memory location -50 jmp start ;data ;code start: LXI H,50 ;set up as a momory pointer for the bytes MVI D,00 ;Clear register D to set up a flag MVI C,04 ;Set register C for comparision count Check: MOV A,M ;Get data byte INX H ; point to next byte CMP M ;Compare bytes JC NXTBYT ;if (A) < second byte, do not exchange MOV B,M ;Get second byte for exchange MOV M,A ;Store first byte in second location DCX H ;Point to first location MOV M,B ;Store second byte in first location INX H ;Get ready for second comparision MVI D,01 ;Load 1 in D as a remainder for exchange NXTBYT: DCR C ;Decrement comparision count JNZ Check ;If comparision count != 0, go back MOV A,D ;Get flag bit in A RRC ; place flag bit D0 in carry JC start ;If flag is 1. exchange occured HLT gnusim8085-1.4.1/doc/examples/README0000644000175000017500000000010212767046204016470 0ustar carstencarstenYou are welcome to contribute some of your example programs here. gnusim8085-1.4.1/doc/examples/addwithcarry.asm0000644000175000017500000000062212767046204021006 0ustar carstencarsten;Copyright (C) 2003 Sridhar Ratnakumar ;Distributed under same license as rest of the program i.e. GPL v2 or later. ;See COPYING file for license text. ;Test add-with-carry instructions jmp start ;data ;code start: nop ;Add with carry mvi a, 23h mvi b, 46h stc adc b ;6A ;aci 46h ;Sub with carry mvi a, 37h mvi b, 3fh stc sbb b ;SBI mvi a, 37h stc sbi 25h hlt gnusim8085-1.4.1/doc/examples/bcd2bin.asm0000644000175000017500000000073412767046204017630 0ustar carstencarsten;Copyright (C) 2003 Sridhar Ratnakumar ;Distributed under same license as rest of the program i.e. GPL v2 or later. ;See COPYING file for license text. ;Program to convert BCD to binary (8-bit) lda bcd ;load the bcd number mov e,a ani 0f0h ;mask rlc ;shift left 4 times rlc rlc rlc mov b,a xra a ;clear a mvi c,0ah ;initialize counter loop1: add b dcr c jnz loop1 mov b,a mov a,e ani 0fh add b sta bin hlt bcd: db 23h bin: db 00h gnusim8085-1.4.1/doc/help/0000755000175000017500000000000013327663074014734 5ustar carstencarstengnusim8085-1.4.1/doc/help/io.png0000644000175000017500000006242113327067677016065 0ustar carstencarsten‰PNG  IHDRH»ŒðZsBIT|dˆtEXtSoftwaregnome-screenshotï¿> IDATxœìw|Uú‡Ÿ™ÛÒ{BzBBè¤ ("êÚ+¶ÕuÕÝUlX×î*®«û³·UD{)R¥„Þ’Bz½efÎï䆒›F.ž‡Ï|¸¹wæœ3ç{æ÷œ3ó¥´¤X ‘HþШ'»‰ää# D"ÁÜœäÛùnK”RT¡êofHRSú‡“áÓ®…”H$í‹ÒÔK3øïO¬Ù_Ê ÄH’"ƒñµP\éä@~33"5„[Æ'b1IC"ñF5.Í`Ö¼tTÕÌðn±”VWê8œ‚aiA„šù}_)A~*«wç€ÐxæŠ>c JØûÛ:¶e•Ñeìy ëò9oÉ)I£­÷??ìF×}"Ø’UÂîC¥”WQét04-”.¾ì>TÊ–¬ú&…ãÒ þ»hOG–½qìÛùøá[¹þögùá Þ>yh{YôÖ»|ôårv•ȉ—΂p–q83“|ç1?tD›ðb#ظœ;r9kPwÒ–àÔª¢ ÔlÿþfNÍÀ¡iT¹Û³œôŒà§»9hÉ‘þÇ'jbñœgX°µr—ª›]Òè?ò,¦ŒíAˆ©mNÊ(ØÍ–ý¥T;ؼ¿ŠIñ(m“tÛcdñéìÙ,È€ÔËŸæÑi15ÖÙΊ9·ðÊ:³îᥙ}›7 ÓBDåA~ûþk~ümûóJpàChLWú ›Ì…ÓÙFÚ´'¢âW^¸í5Öë]¹üéG8/öè}ΫÚÄI Á¶õÅÚć‡p¸¤Š²*ªª¢( * (ìg#»À‰S×Bàpä•*ÄGóåšýÜ>µo©º(+(¤Ìi Z}ñ³8ÊóÉH?BƶÕ,]~!wÝ}>Ý}[/;Žk®©â·’DÎ&?¢xï<ù2?f;9êÛTŸ‘Î sÎ;oàI,]4ìÉ6Ñ4 ‚UÛÒ­k"y%•¸tj(Š‚¿™™ãR8½g$ϵƒµ{ B`A^I%aþ6VnËjĸQézá£<:-ìGعìÞ˜»šC»>ãõÏûðÔiXô"¶~;?nd±TÃν‚ËÇ$âãVQ”³÷ç…,ø~-;•!ü"é6éFî>·‚%ó¾f¹= úãÊÔl~zc.?íÉ&¯°Œ*ÃJX×!œ94„ŒÕ+Ù’U qô;k:3ÏïM`gëüçyyù%Uè– ¢»ãÜé—2&ÞÖ¶*xB“õ¢‘õõ“<ä£õeX’¦r㟎1€(YËOëKŠ•ž—ÜÁõãz€P$I}G3¶oXõÝST±mîS<3w;òªP- ¹[YòÎS<ûÅ\F>»7lcÿ¡Bªð%ÀGPvh?½=‡¶ÚA  ÿàîXAé¶t2u@”°}ëA T’ \i†öz—®a[VvÕŸ@_ƒJկƀŠ• Èbbbˆ‰ð§Á^M[œÏ)Dƒ¦9©r¸piŠŠ¢àÒ>X¾—»ÏëCi•‹Ìü2 !„v— ];v”æDXI핊uQöÒîôt­à³%Ùhæ4.{ü~΋7Q°ôyf½µ™õ?­¡hÄDB‹W²à»8bÐ5pû„8l†*݆J^ÃY)QL¼ëYfÄn俳þÍŠR3ýgÎaÖX'?=;‹··”‘¾y?ú°~˜1ÑëªçyãJŠÒ2ªJÖðÆcsÙzh; )!žæ ÑÙ;ïn®œw\¡k?‰Â×K˜9ž)×_Ƈç²óÛ9<âSF©¥+ßx>©Öãs5e“« Pcé×'¼Q—Y®àósp)ጼå!nDÞâ9<üÞfö~÷ 'ý…aw‘£˜x÷³\™ZÈ¢gîå½ôB6¬ßÇÕýzí9nÓ‘4xÁ¾fŠË+pi¢v kT;³Kph.€# °˜TŠÊ*öõ¼j„0j>)( h{Øï±›y÷\GÝkC-È#߀À»Øë(ƒ™tf60ùàk‚jsÞ8ŠWÒbM¬(ØívPÃèÚ5uK•ååè€Ù(ä÷O^çÝEéä;ÄѾ³ÉÝÑœYõÿw /üZUs¬BÀØðÊͱ4¸¿{0¶^Å`Ôɪ9õfSÜ$n¼x|°’ ©ßÀ¹É çZ3ìS]Sg“±‡}.ÔŸ3†…cbNE·°¾r?{rt†%s)Œn©á¨é9”—V×kÈFöšKú¦ƒlüýÂ7°ÃæÔ QÑ65ã8 ³ÙÔdùÛë|v§oñ דƒÙl!8$„Ȩ.µ×ñqû4ôå¨1¬ÜW€op8•N­º¢àg5æÇÒô\š†€ZÀf±PXϨž1³’í›vã †Æã«€00ŚȈɃ¨;E¯ô \¥v޽xš…³Y†Qm„Ì–šªÕ}Õ†yõë­”û§1ñ² t÷Í`É{ß±ãF¦å¨¤\Öð¬A-Í©QNöüj{(4ŽìÙK¡žH—|d5"šHUሞöí…\ѰWÐÂþðÑz5ª/T%˜!#ûðÁæd¬û•CÒ©ÂL‘Ã袂֜s4ŽÏ§z¥¦˜Õj“´ÑùôêÓ¯e u šËEnN6GòÕ%ºÁ}4ŽéÅ7¿-Àê€0š¨î$E£( ‘A>Ì›Ê;Kw"„À¤€®ååpñµ£šY<«4‹M‹?âåEŠ…¤Ñ§“j5.‰ÓJvie8ÃG0í¬|p•¡ÌA˜Fl"ñ¦•ì.ûŸWåÑkL4*+ |¹ù5ƒ’C‡©`NÍ“N'DbÛ¼:†@QQU@”SPX…àØ‘h3CnyƒoimYê¤ØŒzAñoÿãí_óQã†0Ílø}.¯/êÁýSbë/+ašfaûv'Û>ùïÙ¦3y@Á¥‡ö³³8œ‘ƒ0'v#Ų‚­e›ùeM}F“·b%;4â—DJls炆žÁйùuïw|nÒÀggެ6@Í;ÇFR¶úágVÀ^@Vv"ÎtL¦ã®û¶;ŸÎÙb!:6ŽûözfRcÃ?0‰eé{ñÃé208þ.®dóþÃ|öÛ C *`µ¨ägäìÁ©t ?A± öÍ€ëê85½Úr+fÂNç–iÉÕ 5j 羘9ËŽ°þÝûùóÇø*v**mŒ¾û?Ü<ÀŒÚe4çŽXÄK+ XýÚ]lü ›Q‰£ÇLþsGÏ1x„JX×dBÔ=¦ÄÃýFŒ%+êîM\´eOk^½Ÿ·lÏqàöMPšQ/¢t~°†5†©×ßÊEÊg<øø7ìXð6? ¸sŽmàJ㯾„õOÎe[Ù^½öOÕý9d,½obPØ(Î÷;å²ê¿gã»´J;Vºž=•Á~œ°KV‹oÆŸÅŠïãÒBOÏiÁJ³Ï±QÌ)ôéîÃÊM¥¬zåolÿÀ‚Ãg4÷>uÝŽ­Ë¶</Àb± iŸP££)÷MŸH|’Üý®J„fgã®,¦<2y¿lÆe¯Bhv g%9ûH³q÷ôqMÅJpdA6tNÄop4©Ïä’¿<ÊÓÿ˜H¢{0K dðõ³¹ûÒÑôŒDu”SᲚؕ³³ÖÅ<í†û¹óO#H‹ò‡ª2ª"6H¥-Æs­½/áŽ+ÇÒ=ÊLiÆv¶lËÆÐ…”Þ=‰÷W@fÂõ×pf.ø«¾wÀ°Ñ ëÅNú§sYU$q ç¥Ù°u›Æ§‡¢ØwòùG+(lÀe¶&NaÖ?ïæŠñýIŽÀfR1Yý ‹ïÅðQ= 1(~ôqw]2’n6t»OTOθòî¹0…Æ!›ÀB÷‰énUPL ŒŸÜßfŸcSõʘ™æÜqªJK]øû[p54ËÓ¦çãýœà¥#'ßÿŽïVmŸ³/ª¥Úï6\.„« LÕû®žŒÙtê¸SÉ©Æöô-Ži4iÜì9˜Ç¼%¿±là K«ýã°àÎÔ“Ë'#5.ªmK,‘HÚœV‰Dâý4e#Øîs£‰¤í/ÑK$i$‰4‰i$ ÒH$¤!H$HC ‘H† ã¬÷2oýr¨Ñ·h%’“…4ún>¾÷îúp;žÆWj6F)û6¬ggžÝ£IGÐù#-‰rVÿß}¼¶º§ªÅ— ˆ8RûœÆ¸³ÏbPL¼ú«øCL˜Ÿ´ŒÞ†(á§gîä=Û¼ö·QÔ]|ϱúßÜôj%W͹— ¡§P¤Ñv ót*KËÑ»]À=—õŪUQth/¿ÿò5/<°Œ3o½‡ë††¶îVã™xÇCLl«"K$^†‚j”Àº÷èQmñû dä™céûòc¼þæ{ôèv£CÐóÙøùG|¶bYEA]‡0íÊ+9+ů:BQ¶oç2oÉF2Šu|ÂR˜üç{øS·\>ý+<ȳ—¥`…¬ùßë|þ{‡ ËqâKT¯3˜<ÔÌŽå«ÙšQˆË/†S®áú©=ªC_cûãx~᎔»0ÆÒûÌË™yѤ›Ñ9h´}øR¶î5xù#ï{„é=|@ÏáÛ'á›™=ÜŸ+¯~Êð" !Ô.É$ùlÎ9Œ^¾ƒo*¢ßµ³¹pX |m>›þñ¿í¼–Ý7òÍÙ$\ð7sLì¾F†ñ}bºÓ·W &º~h-¿ÇÐñ§Ñß t‡+æ°sgFXTüú3$¡æàd²VÏæ—=9ú5[_Òf¸6¼ÆÍ×¾vü–>ˆòuM·A q§=ð¼ùVþ¿ç2`æ­Œø#X¼Üµ1¸C™d:ªÈãv®}Óý£®©X‹«ÐröqÀÆÐ^]ZpQª„„…€½ŒR'Õµ¦† ;*ÜáÊ5òÖÎG_¯awN1N‹?æ*SÚ)ø®cîu÷^Þ¯^ˆ1çÖOxæóêÏ'j‚@” ¡Ì¸b÷ü÷Žô¿žÛ†‡üa–FójC`ÚÇJ•èØ.¨B€¨›îáü®u{<*>!þ(Ù¢U.ºÉlBAC‚êÅ̘M`Ô¬É`ü–—^^„:îJþ|U ÁJ.?¾ú ë[s‚’f£øw!¥[·ú³ùþ@eõ'j¢‚Œ™8}}aï6äeÂd¹{ï5Úa–Ï_L–ßn†É”H¼å2D܉‰èDâ͋ٱý0z·ãÃz·Wæ>²Dw®¿p }¾D?' ¸/iÔè¦ÛÊŸÇÛ+ƒøÓì;°|ð8Ÿ¼óýfMà` ¼ÆˆÒlvlߎE«¢äÐ^6.[Êêì μõF…(( aÊ™_òÌ×ÿáÓùœÑ=³£ƒåQœ1: ßÀ¡œ3îKžþìßüŸ¸€Ñi!˜+òqD gH|ëËgŽM Z,â§ÏW:"ž S!ù•uvPôäo[ÃæCÑ Œöýø%°éöáS•Î'ÿ[EÀ92%9uæŸXûàÞûew‹<åµòC`Â705ýKž{âKT³/q¤ö=—¿ßZ÷"_zO¿‡¿Îcá/ðâ§UàFâðË6|ñ¡×÷ð€y,øéæ,pb ŒeøŒ> nC`JžÊ­×ñÞWð¯*1Ì>ÇÚ¥f%‚њ†·—2wé`ú_‘&;”¦Ú‡NÞ÷óXÆXf“\½$]ìDfLú…Ç~ʆa71ÄÿÔ6 /m*È¡D"ñN<^*‘HþXHC ‘H¤!H$ÒH$¤!H$HC ‘H†@"‘ D"¡O–––‘¾-ÒÒ2ìv;v»‡ÃaÈМ…¢(¨ªZo3™LG||­ÊCê|òé=6Š¢°nýzöï?@—.]HLL$$$UUk l2™jÿ–´B Ã@×u èý»¸¸˜üü|¶¦§Ǩ‘#=~ÙIêÜyhOÝxlJËÊØ½{'N$ ³ÙŒÙ\Œ¢(µB6ŽŽÁ-¼¢ösTT)))”——³xñb’’’ˆ‰ñ(]©s碽tvã‘!P…}ûö“––F`` ~~~-ÊTÒv4tAšL&l6Š¢––Fffq±±Í¾[H;í¡s]<örsséÓ§Om$›ÍFTT»víòøX©³÷ÐÝx4k ( º®ËÆá%(Š‚ÍfCÓ4ô’:{-Õ¹.O꺎Åb‘ Ä P‹Å‚¦i'Þù¤ÎÞCktvãY×@Q0 ›Í&G‹½UU±Ùl躞h%uö*Z¬sÝ4<Ú»fBÞ)¼÷Â0ŒZíš…ÔÙ«h±ÎuðÈ#0„Àl67Ý8Œ|Öþï%^ÿfÙU$ ÿ·üõRúËu2P³ÙŒáA‘:{-ѹ.-z²°îíþvA,@k×>¼¯wMá†2\ç)Ôù”£M=#w;Û‹üé;¤Öšßý ¡·i ÛwBϨS>,tg£=<©s磵A›¾}hRLá!u’µ†,(*(nl‰A‰—!u>õhã×å*> ¤Î§mÚ50…F¢SX,Žþî*¢ T!4<“¢H—±ƒi®Ô¹óÑ©ºjloz…V²õ÷ݸ׮ڲžmz ½{…ËÆqŠ u>õhÛYK?ο Eÿ›ÃKq70>ì ß¼ú#ηr®I>u:ŸrxdL&Bˆ&æ—-¤\þ(Ø_äÕ·á‡*’G^Ãã·ŸG¬*ï'EQB`2™Ð›ù,ºÔÙûh‰Îuñ,`µZ«Ÿin 5’á3Ÿ`øLË"it]Çjµzä®K½–è\ÇÜ/7´4$’¤ãBÔ¾Nì)Rgï¡5:»ñxŒÀjµÖ¾÷,_Héühš†Õjõø8©³wÑRÝxìX­VÁÖ‹0 £Å†@êì=´Tg7!Àßßüü|é2zBòóóñ÷÷óø-d©³÷ÐRëâQ×@ƒ˜˜6mÚDZZZ­’®cçÂ}ñjšFFÆ €Í¿»K½ƒÖê\Ïâ‘įIJlÙ2"##‰ŠŠ"((¨^Œ{÷" ²á´/îøöucÝëºNii)yyy9r„ؘX"#"p¹\'N°©s碽t®‹Çƒ…š¦Ñ»woì;GòŽ••Eyyymëþ/ÝÊöÅ=W÷ÂT…€€ÂÃÂèÚ5›šæyã:wÚSg7!.—‹ÙL|| Çßä ¢c9æ:¬¾8«ï .—³eIJ;í ³›?bìvU$§6Rç?r5d‰D" D"‘†@"‘ D"¡•ñšš6ªÑlMê’¡(M?äÓVóûRç“KGèÜ"C „ÀápPT\BAAA½ùe÷ܲÉ$Ttº®÷pO@@aaa„…†´j!S©sç¡=u†>G°wï>ÊËˉ‰¥gÏžøùúÖÎd2É'Í:÷ÝÚýʰ‚ʪ* ؾc¤¦¦x¬‰Ô¹sÑ^:»ñð]AQq1ùŒ7®ÞÝÀ]PAÓ®¤¤}Pk´P…`«•àà`ùùçŸ '$8¸ÙDêÜyiKëâ±GPPPH÷îÝQUU>^Ú qëá^ /--üüB‚ƒ=JGêܹi+ÝxìTUU ÈÆÑ™©ÖF!<<œìììÚ„Í=Vêì´F纴襣êà–-^¹Ù”nÿ•ìOŸ ö¼¿Üo\ûfx ¢ªjÓ±¡#unˆ’­?“óÅóÄ]xA½Fw|!¼ˆ–êìÆcC ë:f“‰Žh!ç?Mܘ˜üÃÉ\ðO„®2`B»æyªaRU´DµíH¥xÓr>{ŠÄ©— WppþÓô~ð«-ƒ·ÑRÝxÜ5p¹\¨&¢æ_{"4WÙ!l‘q$N½”ÌOG!ƒ&¶k¾§f‹—Ëå‘{ßÑ:×¥xãbræ?IÒ—añ÷Å~è0BÓ;´ ÞHKt®w¼';»£¥ªªZ3Ü¢<›Mìÿ ûLjv:ñOB¹“1ïq„.2©}3?EPUÅãhÄ­³›âõ‹Èùøq’ο“ÅLùÎÕä®ÜBüŒÇäCK' %:×ÅcC ªªûvwƒŒCè“õþÃDÛ¤!aÊŸÈœû†¦6lJ…Ì盇oãím¸I–ÜòêLn怊(fñã·ð–íVÞ5Ÿ:?9Vü‹k^®àºWâì°Î;§^«Y3éhŠ×/&ëƒÇHºàBT‹‰Òí«8ôÛ6â.àþg6\†6׺Œ•/ýƒ—Wá4@µøO·~Ã9뜳Ûòpá§:×¥…‹sƒŸ…0YïΦ‹½Š€´ÓH˜|™ü ÐSë 1òúGèZiß½È;»ûsãmˆS%€˜<+»R½{Æ¢¶}ufǵ5%ë‹Ö.æàû“tÞ˜Ì*eé+8´n7ñ3"tøäÆóos­u*ÊÊÐ{\ÂCWÀ⪤(gëú‚gï^Êø;fsã°°Nú‚Në4j™!u¶ dÈ„¦“õ΃DÙö8ø³Ï!ãǰuIÁ/¹W½-„&õ$ å7+Š-‚”ž½I­y.Fè…l^øso £D!$i0“f\Íù}CYÐøùŠc>ëGX¿ð,\¾•ŒBƒà”aœíµLJõ¥tÍËÜóâ~F=ô$W÷ôý _=ö_…ÜÌ3wŽ"´½ŠÖÙv×¹òÀv2ßœMòyça2AéæåäýžAÂuÿ$tøÙ'È»}´VbéÞ½Gµ÷×g0§OOÿà•ÿ{‹^Ýîbl¨Ò„Ö~Õ›Œb¶~õ>sØÀþb Ÿ°T¦þu6÷°´mÖ-{+h‘q«m5štÄ2l¡#. oà §Õ$ð ñ¡tËêã÷¯y¾nd£ßÙÙ5ï žþ<›¤ îàÁÿÊù Y|úôSÌßãl8¡át:ëm.­&}!ÂÎöŸä…Ÿì ºòô¯L ØÂ;Ï½ÏÆJ:ífެäû7°Ó®‘ýý[,84ˆë®IíPg´þîK·¬Æ7ØÕ$0œò6 tÄ„ ›Ô¼4ÚCk޾Oa:ºgôe“I®ÜÈ« 0šÔZ „ƒÝóŸä©…Äœs  K?£| _-)dÀMÿäâáþ$ßx>oû„U;®cà †^3“³^âµ×ËØÃÀ›ï`xpû8ÞGŒÖ›‚öÔ9 ÷iä~üoJ6.'°÷pâ'žMÆ7 ñK@è¨Æ€š(k[i]7Zºt%Ùßà÷œ\´ò¢¦µî¾Ž¯¾;HâEÿâÖi1¨µÉ—j«i[Õ5¨±C0T´ò2^y€äs'a1AéÆeä¥ç“pË?ñëÚ«‰2ˆ:ÚV6²÷“ágX¯HК¦Eï^a|²a¹ÚðZ·²ö8ÀÜç2ºru×’qnžË?Tïcä ÓQÅ‘WnbúÝ{蚊µ¨!‚P†põUƒøû¿—’7ðϼ4<°ýë¯Õv }uöëÚ¥È IDAT‹Ä??EÆË÷ Ø—Ôw$É“&rà•Ù.ác§5¿°m¤õqŸêx'ÒZËÞÇþš|•š|ÛVfÒ²×ÝÖ¸'íIáŠÈ|é>R¦NÀ¢@éº_8´³ˆÄÛ'lÌÔäÔW»RG¿Â@ÔŽöÕ™"«Ùïh5ÏtûG‘œ’RÖàpPqô%”1™Í…)u[—‚-Ø¿fŸrö¦ïÇáë »W²æÐh&viß¡§ÖÜ:Jç‘Bñâ,û/öEò¤³ØÿÊC „y^sK[ý©•ZãîªÕùÉÈÙ˾ •è¸.('Ò:«¡|Û—Öz-k…¢cÆ ýžŒÍ"uâ™X(_÷39[ H¸íIBÇžÛì>u³“B²µ€íÛ£»÷ÑrÙ¶£[r ÑjciP§ßX³¹Ž(щ$XJ8í$¼K]j·H‚m B”nü·~ æâG㊤=Ì{s ¹zûÖak=‚ŽÐYAÈȉ$üå rÒ )_û V¡‘:iíZkÛ€!¨×ð¬ôœñ³?ä“¥ÿcΧUàFâðË9íô®þn¿0Žû¦Ä£t™ÀU“—òð§ Y?ì&†ø·‡)PjGÐ=:ªƒu®KèS0 AƳw“X±á7#ÿ¶ÐZÅ/0uËç<ûÄç¨f_#ãèÖï|î¾c"ƒ¢L膚Һ>XéqÅÌ ø€|‡æ;1Æ2lFo'†µƒÑo™ÎõR(-)>®†·§o¡WŸ~Çí¬ë:«[ÃØ±cj3nÏR¼r)Ï=@âzÆdÓPLVÌªŽæÒë\Ä jí~€00t½FäãR@5[0¡.t£š±˜t—‹êCI††®`²`VšK«-‡RóîÒhë%Dކµ2±lùr†;­ÙaÅ:Zç†(Z¾ˆÌ éî'uâ7O[¯5¨f+&õèh¼¢¦têÒ¸Ö¢Á|†®5šoKñDçÆ®khA×@­yËIU”v¿S<“þŸ®¨ý»%y ÍÁñ‹A tÍ y/m t—£á}uNý˜}KWsWÑÀwm‰àt¹0›=ïv¤Î 2z"!£¾\Öœü[¯5kíqºžåÛZ£³4›Í8N|lÖš"—Ãê|ÔÞÏд–5©³7ÐzÝx|¤ÉdBÓ4„ÍJíp™{¨UÒ PP”£ZèšÞ¢HÃRçÎNÛèìÆãéÃÐÐòó j—j®.P‹ó—´1ÕZ(µúÉ?‚Íæù[sRçÎM[éìÆ#@UU¢"#ùuÅJâããª#Ø(ÕIŠpO¦!oRçQÓš†¡**š®³}û èÑ+ªRçNJë\§m6qq±,Z´˜èèh¢¢" ®¹4©˜TŠªTÿ/o!íŠÝІ@3t ½úb-*.æðá Ÿp.“FÑškWTüÊ ·½Æz½+—?ýçÅÊ–Ä»iÔÌyþæ<ÿB‡¤jëj6– Ôˆ¡ŒìnAoà'_æÇlçÑu4\EÜö+·¯cÝ”;¹z_4NJ (s T«/~{i{7fߦõì¼éQþ>&¢åËS ]Fó•œB4jæ:Ÿ­žŽôèÉ—µ`Œ@T°iÕ&Ê…JÔi#èf.c͇oñc¶üR˜tÍ5œ;(Ÿò ~ûü]>X~Œïßä“þOq}?ß&Vézá£<:-Qº›¯þóó·•ðû¢•äœ~q³íûOX°dû ]øD¦1lò%\:>•0±zÞ|–lÙKæábª +A øë]ÑÕÉëû˜w÷ÕÌÌ=¯â…Ùg¡èäoüŒ÷üBúÁRt[ áqÙñ·+$‘tN5ÍÇ_ï¸Cœ'‡£Þf·;pÔŒ8ìvªªìÌŸ¿ E†@TlbÕæJ„)ša#R0•üÂOëJŠ•Þÿ•kFGVß½ý{rÖ ·R’ù °êçÍLï7œ¦LSP7F ŠçÓm»0Š‹(1ª(™÷Ï|Ÿ >¾*r·²ä=(›Íƒ$cÑsظt ÛªÀìD ÍA¥êGíõ¬X ŠÇß æL€(þ•w^þ‚QñD[+É/Ô°úI# é¼4>F˜ÈM×ßâQbMŽ4Š lãj¶T L±Ã‘lÂØM®&@£_¿ðú.¼)Ž~½#øôÀa¹9äp‚.º0œ”ælaѪ t@ ‹ ´hïü˜ƒK gä-që¨ òÏáá÷6³÷»oØ8é/ sÇzT¢˜4ëY®ì®¢i&ûŠêïÕxΙUŒ@/{6qß|Å÷Ë~g÷¯ Ù½vÎ~˜‹YwN"iO´š(ÆGòÕ%ºÁ}#øèc®¹î*Í¥át:n ŒTÙíÌŸ¿ÐCC (X·š.0¥ gx‹­„œÆ’¾¶Œmó_áÿk˜:0kE&k>{‡/3t„ư±ýO0> ’rÉ“ÇOU"±)–l-ÛÌ/k è3*˜¼+Ù¡ ¿$Rb÷å«~fìdeW!âüA×ÁdBÑË)U“8ãŠ;9ãÂL>{òAæïÉdýæCü)%^>Ê)épÌ ѱqØ·×sC˜À]›åQ†ˆ#¬Y½ i#†í¾J”`F^u-›3_å×Ã{øî•ù®îqŠ•¸q×qù@¿O*a£8oÜìX”˪ÿþïZÐ*íhXézöTûEr7§Ð§»+7•²ê•¿±ý ŸÑÜûÔtÝÿþs öð(Â|]ä4@ñ%2*¸åÓ•I+±X,M.MШ!xq΋¼8çÅv)”ãÐZVïÕÀ܃§EÕ»PÔðáüù±(ú|ý5K×í #¿ÝHTroN7•sG%Ѫxž3îã®àX°t…>Q=2é®8;¥éŽ”PÆÌü3¹oÂ/ÛQZ aá\:è†?1±ìÊÍæ€aÆ?¼£Î¼ˆ#¥!tZNâºÙ_<̽ŸÀÔçž¿oáòJ‘HÚíé[èÕÈ8ÕÉë²Ùü¶:]±ÐsĤHN'Í虿±:[G±õfÄé6K$'‘»M¹‰Ä;éœ]‰DÒi†@"‘HC ‘H¤!H$HC ‘H†@"‘ÐÄ#Æ'¢´´Œômé”–”Ö1u8†Ñ–åëX„€F^Ól¿< PÚÖ+Š‚ªªõ6“ªLB|<ññq6;½Z­KËŽ¯õv­½Œ55™&>.ÎcMÅcC ( ëÖ¯gÿþtéÅÀ ˆÀjµ6ú®³·°kÇ6BÃÂ;4Ϣ‚6ÏS!†®c†! ¤¤”¼#ylMßJ||<£FŽD4{±¾Ö]HLL$$$UUk¦Édªý[Ò~!0 ½FS÷ßÅÅÅäçç³5=øø¸jÚ‚Ò²2vïÞÃÄ g…Étê„Þ ",,¬CóÔ5W»äén BˆÚÏ‘‘‘tíšLyy9?-ý™¤¤$bcbM£Vë‰ Àl6c6W7EQj/~i:††4ŠŠ"%%…òòr/^|BMÃ#C ( ûöí#­[7"£¢PÕSÇœj4t‘º¶¢(¤¦¤™™E\llƒwj­÷“––F`` ~~~SpI£4¦©ÍfCQÒÒÒšÔ´)<örsr1b¸4^ŒÅb!22‚={÷5¹_nn.}úô©mh’΋Íf#**Š]»vµèx=M× ‘ ËQ«ÕŠ®k(ŠÒ¨G ëº4^‚¢(Øl64­qM›ÂãájÃ0°Zå_ÞŒ¢(Õk\Z“û麎Åb‘†À ¨ÕTkZÓÆð¬k (†.†—SÝh¬hºÞøt©¢`6›MÎ xªªb³ÙЛҴ <3BŠl^Nu×ÀRí>6æBÖ|/=ïÀí†Ñ¸¦MàQ×À¢vúHrr™>ãJ¦Ï¸²ÅÇ+Š‚ÙlÆh¤Ñ¸µ–FÀ{8‘¦MÑ>WµQÈÆùoð¿Å›Éµû“0䮽þ|z˵ÿ¼ŽºÏ ‡‘ÏÚ÷_âµoÖ“]@Òð ¹õ¯—Ò?Dê|2hÑnѳ­îÆÑðfõåó<ÿåaR/¾“{ÿz.]ö~̳ÿ^š:îäoOÐØÿÉ£<:?‡î3îç±Y³ëzêÉ…¢½Ž¶÷\Ûøáû½„ý7Oéèa9ÈíÏ~Í¢½gqe7ùüÁ)k _}¾‹ði/ð· ú`úX³¸öá…|½k 7ô:{-2MÝ=¼Ýì.ö£gÿT¬5ûùõ@wÓrvï.†´¯TÚܾùÜ?h÷<ý¾-ó„Æ»Fîv¶ùÓwHZý ¡·i ÛwBÏ(¯×ÙÛèð®ASˆ’"J"4¸NÒ¶PÂ%E%È÷ÕN ŒâBŠ !<¤ŽÎÖ0ƒEÅRg/£¦Ní{A[ßu[’§Û8e©FœJ´y×@ %˜ŠKÅÑý\%–+‡…`ª]IXâ 4Ö50…F¢SX\Wç" JBÃC¥Î'NÕ5P»ô {H%;¶ì¯]CÔ¾}»´(ºw•ãAíM¯ÐJ¶þ¾»Vçª-ëÙ¦ÇлW¸ÔÙËhû®¥7“§¤°tþ«¼3ƒ1¡¹,~oξ3™”*G’O,ý8ÿ‚4ýo/ÅÝÀø°ƒ|óê8ÜʹrÆÀëhó®˜IúÓ=Ìr¼Æ»sŸãg‡ C.ç¾›Î&Z•÷‰¶¢£ÆÆÂBÊåòˆýE^}û~¨ò'yä5<~ûyÄJO ­éxdL&Só^oTÃ<ý~Ooi±$“É„ÞÀkÍÒZdøÌ'>³ (ñ˜¦4m ƪ_B‘x?µ¯7ò»51 ôŽ,–¤èº^;´ÇzÜ5°ÕÄ"äz/îÀ—¶Ä•°Ùlµ‘Š¥Þ›ZMm¶ïñ¬ÕfÃåt¶(3IçAÓ4¬'h4V«—ËÕä>’΃ËåjqÐ Ï ÕJyEy‹2“tôfDš²Z­rí/¢5ÑÃ<êþþdeezJ…2ÿ#!„ ¸¸˜ÿ&ã’øûû‘ŸŸOTT”ìtr„äççãïï×’¸$žyBÄÄÆpð`6e¥%r ÉËpÇÃ×4ììbbc¢á;¾111ddÀårÕ‹¥/é<¸uq¹\dd &¦qM›Â#À0 "#"ˆ‹eíÚu„…‡‘””Lppð)ͦ:rWÇ6ööÈÓÝ8Ü+â!ÐuòŠ )*,".6–ȈˆFÇÜZÇÆÄ²lÙ2"##‰ŠŠ"((¨ÞêFîå·¼]ûÎŽ[Ϻ«éºNii)yyy9r„ؘ¦5m g 4M£wïÞØvòòްgÏnÊËË‚z Ïï šæÂ¼³eqá[ŠÃ^…ÍÇ·MÓ<6àJõ… „‡G––†ÍMkºÁÔÕúHÞ²²²j´õ¤7jímÔ×òèÿ„‡…ѵkr³4m AµâÄb6“GbBÂñwysèsmV_°Õw—ëÄ3?uµŽ#Aj}òi¥¦Ñâw ÜnŠäÔGj}êÓæoJ$ïC‰D" D"‘†@"‘ÐÊÀ$MMUf¶&u‰DâFQš~ñ«µÏq´È!p8—PPPPonÙ=¯,?–HÚ]×{ˆ+ €°°0ÂBCZµ„}‹ž#Ø»wåååÄÄÆÒ³gOü|}k f2™äSfI;àöÀu]¯}ˆ«²ªŠ‚‚¶ïØA`@ ©©)-ºþ<|éHPT\L~AãÆ«w×wRÐñéJ$$ÔšëNQ‚­V‚ƒƒILLäçŸ&<"œà`ÇAAA!Ý»wGUUùh©Drq_{îUÓÒÒÈÏ/ $8Øã´<öªªª ¤H:ÕסBxx8ÙÙÙ!Úß#Ð4­&°%^9+ €-™%ü”žOVa%¥UA>fR£Û#§fðæÏÜpfƒ»†œÜK$ÍDUÕ‡ðØ躎ÙdÂ-Aq…‹ç¿ÛKQ…‹ž± î†ÍbÂî2(,wðß%(·»èŸJ…]ãÍ¥øoò€“]l‰¤Y˜TÍÃèÅn<î¸\.T“ QóÏ[8RæäÑ…;éÚ%¾‰¡”U¹(*w¡ '&l§÷ˆ ãH±¡>dæWQXáêØs…lùö;öÆLåüÁ!òÅ>OùüöÁûlŒ½œ›ÎŠýÃ=-g¶XjƒÈx|¬';»\¨ªZó¼€Çùðê’$Føh#ëH9Å”;qiV‹JX€È@aþ64CàԪ߶ëÐsÔóX÷õWì˜4ŽiƒBNÜEy»¶qȯ7ý|;§áèÈ2ê%ìY»†í#/À¼7¤UU©ZôøXOvB ªªû¯ÙÖî)äp‰“˜_rŠìlË.&.ÔÆìó»ñ—³’°ª 9…•ì=\F^‰Œ¼J\5† ^Zz フëþ»­^û>º“Ën~‹t­5eųºÕvóù¿žcÞ†â–çi”²òÅ™~éÅ\|ñÅ\zù•\ÿ—{xêÍoH/ÐZ_ÿ'*£QƯÏ]Í¥·¾Ãv×ñ¿kÛßå/—Îä?k+›]Šð®öÙf½>=¤… ¯ê¬Ý_BR¤…åNr +é›ÀígwE^øn±¡~œæÀ‘¥ö£Q^Ž;G¥z«öu÷iM­ÔZ‚f×®ÂÑò´ в2ôîóÐÕƒñѪ(ÎÙÆOŸÀcrï370пu÷Ö&˨ø3xì`ü×®fÅŽéôì[w;WýÆ‘áÜÔß§çX½‡wµÎ¶¤ågÜ2C êl^À¶ì2zÇ…PX椸ÒɃ“ªï5•»¨°—Õ»!„ú[޽ÆþÌ1ß…üöþÿñéúää—áTˆN;É—OgrÀ£.«+—•½Ã'˶q¨ÊJTZ2Ör°Ô¦o³øžùx3yåNLqô=ëJnºtaª{ïÝÆ%ïXñ·w¸k” ô#¬_ø?.ßJF¡ApÊ0οöZ&¥úÕw™ktTãèž–†@¯ IÒ¸óXºùjްQÄæÏßcîâ d”(„$ fÒŒ«9¿ohµ[)ŠÙøÉ›,Xµ‹Ì¼R\æP†]ÿ$;½‰2ÖàÛ §®ä·Û¸ªÏjr»v²ò·ÂGŒ¡·Í©:ç¥må[Ÿdÿ´9<1­ ò¾áÁ;¿$ùþW¸¡¯¹ùõä ´âzlÙ»îMx‡%péšnàÐt4à &ØV[ö™cx{Y‡‹êÇz õ·0slBýst51þpô³£ŒÌ­é&\Î7¥b±fë¢ù¼ÿø*}”‹ºZ@T²éÝ'xéWμânH0Q°c) w ,P›~p‰\uçù„@ÁæÏyû£ÿð~òKÜ>ÜE€ÀL×óïáöq((ø†YÂÎŽŸä…•‘\pÝ=Ü^Φ…oòÎsïùÂÍ ª"±ö£–Óâ®ÁÑÆßùŤRR©¡(*f“Jn©ƒ„0&òÒU½=¶1󨮍ó­PÀ7®7ú¦b¢ý%£ÌºŸo¾ù)· ŧ|-ß/+$íò‡¸yJdu5öòçÀOëÙQ'ßÄþ ©É%9i:™+ïæ§ÝÙèÃÓ0Õäj îB\\ÍOŒò5|µ¤7ý“‹‡ûW{ãùl¼íVí¸Žƒêºßnã¦át9ÁUIQö6~þè{2m½™ÔË£b_.Ê!é¢qóä½{ÄP™y7_|µŽ©wŽÀ@QðKèËÀÞ©˜ ÚÈh —±~½šè~æbX̯›*4̰³yÅ:Ê’ÎaL²R»sêã%ŽQèè7žÕSçå¨çrRº5~x=cüÙŸçÀ×j&ÀfæÓµ‡¸}RR=×Ï‚¬;f³JLµ¡¥½k¤Ž=oqTƒÚz¡Æ;0ª?* èÊ[÷rHBbN&µ†wEè5÷aݨIÞ¾‹Ãk?cî«Ù•[ŒÃ€Ån`JsÕ ‚ê|jÏ%癎*޼rÓÿ[û-º¦b-ªDˆ £ç^“†kí+\?ã•êï3 C¸ì®ë9+Œ]ûÉp„3¬WdmQôîÆ'ö‘« 'U9þœë¦lEM˸n_²`ÙzʆŽ& rË×UÑóòÓ‰­­ßÕG]ê×O½Ï5ÿ{TOÞ@Çw j\-áíĺý êk#ý`9›»ƒ[Ç'j¥°ÜÅÖƒå¸tA|˜ “]‚Z:Ê„Ù.»]ê¼r…½Êf3æzw»º]¡(G/¥æwÝ@ˆšææv_kŽÓ³¾æÅzÖuüõúT‚•½ü"k븾î.Z]ª]âPÆüe6¦Ô}\Áì_§;p4OsŸËxðÊAøZ|$2غŽa½· Q§¬Ô™>nôœ©cOÔV¢3¡? Þü…U#ºy•ÁüydXíqÆ ë£Žg&E]Ó0„@…cễzòZSÚ{Þ´vÁ¤ ºuñã@žH  ¤ÊÉ¿¾;€Ã©h!1ÒŸp?3™vlf…@¾–c§bBˆ‹óǹe ;*‡ÒÏ݇te°ik!æø¢”£h½‹Â8ÄŽEX‰RJL ÉÖïØ²ù ®n‰ÕB¸÷­©WWæ>2EOnºd4½üa%:@©“®›*+*ê&%:‘Ë·Èv>2©žÈÇiV“§âErפêÁB!Ð]GŸP«.ë÷lßv=5¦zpPÏeÛŽBlÉ)D«a4pΔ±!O›Àð¹/ðãÒµ”ýžŽÿÈY ö;àÆy¢ú¨©xa¸ËHhàHv.N:ãZBxVOÞÀÉò¼©²®Ëý öRZåB7¡þVºù šœšAy•Fy•‹¸P+åv+f¥¡s3ÓûìÉ$¯XÀËÏÀùúÓÅ\Ä®_¾âÛœ(&^3ÿÚ Á `Ý×|5’´pÈYù)ŸgD1þÊø¾ƒ™69žÇ¾˜Ã¿Å…œÕ3³x²æK IDATc7¹ö꜄˜â’ˆß±xÁ/H ÈTD^EúW¢éšdáÛ_ðCÊD>¥Aƒ™6„sÆGóäWÿæ%åÎìŽÙQÀÁò.œ1: ߺþnmo§þ`a=|1mr,~öoX/ft Þkh´ŒÇ»ÝÖ~œ=.šÙ_¿N®Çù7÷¨ñ°ª9q} 8’¾ŠM¹Q ŒŽfÐÐ|ño$:“G2)swmý=¨'/ 5W¢é¾ûî}äØ/óäÕåøŒ„ +ë ]“»zÝ 7~V•þ ,ß]D•KÇé2(®tQXê  ÌEQ¥³R#ý‘ŒÕÜðƒjp/†÷ ¤pû*–.ù‰_Öî¤Ð¿/SoºKzûÕø¥ìXº”ýjöôŸøfñoìÕ’8ëúÛ¸¬_@ÍÔ¥JXŸôö=ÄÆ¥?ðÍ?²|]ZTGŒ o´ 5$•ža…lZú_»ˆ—oä9šÔ£ž„‚…Ø”(J·.ãûï–ðëæìÿoïÌä*ÎÅýÖ9§»gŸéY™†”M\YŒ[b4Šš—D³/¿Ç`âõzcnrÅxs½¹Ñ‰ˆ‚ŠQ—€"Û°ïÌÀìKÏôvΩßÝ= Lô°öX/O?Óô©SU§¾ªïT}UõfáX&q“{ÎdÊÅ>ýh ‹—|È'ÿÜMkâP&Œ-¤‡1\úÙ³r1ÿ4&pÍùEQÞ ™£&Q!vóñ»o±èƒ5ìÓ*¸æ›ßá‹å a³Hè™÷ç]•£º/Ž–ÇÔ^Çßé¶-YMÓ˜[øæôºÜ.ŽYI Ê6ÙñɬŒâŠÑY¸‡!ß³…—,fɳzk+)CFqÞ” ”¦äo9õ4!صkÅEE½.,ŠÖ®DkKóQ-¹jÓFŽsT`˲Xõ÷ÕLz1²›[²x¶aIU[k:8ÐèÇ´I04†å%rqy:•)s§ÐÑu­Ë (ml˲Ãea`áC±rìÏøõ¬a!S9¶ev… E„Ðuôð‘d¡¸z†š®÷¼.mÓ Ç#4tÃ@‹ØLÓÍ›igF²ib™öof8Ð1»VSöþÐ=ã;ò™èš$hQ'¢æ±÷²5:Â61Êëq”‡¦cè:¢3M7Ðuš±DØnÐËsE-§³—.÷e:ËW¬`ò¤ózu­]C?†Zx‡“&D\õ"3*3™Q™%Dט4*Ò¤Ï6Ói0 ü½w·#i™Qºã‘V»¯¥Ò ô@b™6ÇÞ”*±‚þã ×g|3à1½…5 ú£ï ;fyX&A«ûýË `EòxËéìFJƒFÿÌ~1ße@€—“ȹkŠ#è±°%~Þ,Šx¤³k:Ä÷t)]×1MérÒi'ŽÌ­+BˆB¾ôÈ‹ÜhÄQSoD·µò–iõÛ{xÌ[•Üî êë:ie¦_i`$VÀ×¹•Y¡8ˆðn®H[¬«¯Ãårë¶^‰©G i¹99|¼òŠŠ CžŠDÈ`Yç­: Å)Dt[RVšÐ0-‹ªª-Œ7¶_[‘cRB\.……,Y²”Aƒ‘››CFzzÈj©k蚎ÐDè¯ê*(')%–m!m‰i[ØVèÜÔÜÌáõÔÔÔPŸO¦Û}êÏ5€`DEE……lݶªª*ü~?^ü~ÜÍ"(ñÀ‘'éá)OwFù\tá$''÷ÛF³"ˆøPOKKcâ„ñݶw* PœN"oþˆ ¿Þ‰àA=‘D ÅÙ…jÍ …B)…BE†A0ìí’B¡ˆC‚Á †ÝãR¯Š =ÃÍ¡êƒJ(€`0HMõA2Üî¨azÝ}(¥¤®ö0-Í͘¦R E_(c¡B¡PŠ@¡P(E P(PŠ@¡P B¡@)…BR …¥ J( ”"P((E P(èÃCÑ‚×ç³aãÆ˜"1b³¾2ë„3¥P(N/Q7Ýpã—™ýÓû°LŸßßçÃçóãóùðù|ø}~|þ®ß¼^/;¶íäõ¯îgP('HÔAii)_õµ˜"›9sFŸ×ÛW<Á·ÿw¦1”[~ù×vó¸ÜÉËÿúsÞ>ƒ®ûw»¹ŒþùcU(±UÌyâIæ<ñäILʦ±¾[‚ îâÝ·>ãŠ{Ç“>!·yÕ›¼_m!4Õ6`¢Bqºˆªæ¿>Ÿ±Ú*F0ëæh6›æÆæðÉ¿’–¿/â¯_ÇUy¬},{ç3¼ác’̦FZ%äÀjbã;óXðþ:v7Û$ç–3éšYÜrq °öñÁ³sù`ÇAjÛðÚN2‡LàÒ‰ì]õ ö·Bj!c®¸•»®¯$-â—ÁnfóâWY°ììj ’SΤ™7ñ•ˇ’"û«æÍgÙ†ì;ÜŒ×v’V<•©©ò—Ïd\ñžºk,ö¾öo<øú~ôsîæ©Ù—’¡ÎuQÄQg ^ž;K/›ÊÔK/æü)“7~,•£F2tXEÅ…dçd“š–‚ÃéÀ¶-ÚÛÛ™?AIimé4ÒÝéhÁí,]¶ à]ÿì·Itg @zZh³|TÍ{”Ç_YÉöfŒÌ|5YòûGùýª–ðÑãõl]»‰]‡šñÉ$~ê·­`þÜ·X³·Ã¥áoÚÃê¿åÅ5žð‘l^6Ï}„Gç.gK­Í!h¯ÙȲçá±7÷°ªY÷áj6ïoÀ§%“šhÓ¡¥sî¸aBÒºe,@6³µª[”MºRŠ8$º ¤„{îþVL‘õi#m´´I$:C¦}ÞšÇg+–òë²ð¼·š-_ú——RÛÖŠG‚l\ÉËbåÜü‹¸®H§áÃ'˜ýëYûÁjšÎŸFf$~‘Ë´ûã¶‚u<3û7¬l58ç®9ÌžàƒÇfó‡ mlZ¿kÒôÆ•,|¿š ÈbÊ·âÛ¤Q»tÿþÇõì|w릇IŽ®x§Ï~ŒÛ‡k˜¦ÞädèK›ÙrhëÝÈàŒ-lÜm‚^Æøs2Qz@D·<9‡9OÎ9y)Ùí´µK’ §rá¤Å|¶|-‹çétlöãvÓFûÙ*_;í˜{w°;(‘r;óî¿“yÝ¢Ój©·éRaDòÊ tV¶H|>h™ ’…¶¡š {w°+(içpɤ,t ÿ ¨xik;v³£ÚbRé‘ 0 ²'r~ù+l­ÚÏÚÖ2=[ý­l"ò4ª6m8ye¦PœŽÇgatÁk¯²qÓ¦˜QQÁ¬›oíý¢ôÒÑaƒH"99‘1Ó¦Røñ›lýèc)LžvyÉ«H eí^ ÒÆ„³„ógŽ#¯Û@F¤T¥GæÏ­EÐA»N\.>ø2®ñ.Ü@d_À´ ©ˆ€ §l/£°”bý¶™m²ÎçÚ+ŠIl­£Í™Mf?´Q2Œ2ÇJ6¶­ç¯«uA:µ+?a‹)I¥”ô5_!Șt)ã^ÙÀª‹˜·ßFž?H-ÓTœ•ƒ Ù³kg슠¤¸˜û~4;¦û²È€¯%'.‡‘ÅE×^ÅgbiS¦1 'N|tø$bÈÅ\wáRæ,¯cí ðÍWRI>Ú;\\ôãÿâÞsûwt£È¼€ë.{-KjøÛ3ÿu/80;|˜82ãjÆ'}xqÉc¹ò‚þþ^->A¹19[Yg/‡£Ï£ ¢¶¤§æ<ÅSsž:y9ñyñIN€ iÌMü¸{OZ8q|^¼^ "•ñw?ÈÍgáòõì®õЮ'á.B¶@bô¯—/’}ÛO¹/ýe|ø{MrG0aúMÌšQVF}á¤bÚ唽ÿ ;¬T&\>IM*âu®AŒH)Zÿñ,ÿ6gy_à¡GfQý4)…⬠jÓFF±aõûXôÏ'>Vÿ÷}¼°UâoiÅ'Ó˜|ÃU SJ@ç(E v3m>`[32¥˜É×ÜÉ7¦d¨µЏ§×¡A_]…BŸôÕ®ÕŒ—B¡PŠ@¡P(E P(PŠ@¡P B¡@)…BÁ ¬#hmmcÓæM´¶´v:1õûý;þâ)!Ê6ÍS—¦ âäêc!š¦õøèšFZz:ÅEE’ššzÜñuʺµ­Ëym¼Ë:ÎèU¦ºNzz:E……1ËôHbVB>]»–Ý»÷——ËØ±cÉÊÎÆétFÝë/lÛ²wfÖiM³©±á¤§)¥Ä–Û²°mÛ–HiÓÒÒJm]-7m¤¨¨ˆ ¦LAÊè+Ì{Ê:’’222Ð4­³bêºÞùÅ©CÊжz+,ÓÈÿ›››©¯¯gã¦MS¦ÑˆY´¶µ±}û¦]yÙ9¹èúÀq1š––Ffæ‘®NN-–<%iF*ƒ”²ó{NNC† ÆãñðÁ‡QZZJA~~Ô8:e=m)))†a„ªŒ¢³ñ+%pzèM¦¹¹¹”••áñxXºté1e˜‚]»vQ>l9¹¹hÚÀQÞiDi !ZVƾ}û),(èõ ’õnÊËËIMM%))éôd\•h2u¹\!(//ïS¦}s ¦º†óÏŸ¬”@ãp8ÈÉÉfÇÎ]}†«©©aÔ¨QMqöâr¹ÈÍÍeÛ¶mýº?æiY¤¥g¨ŠÇ!p:X–‰"jÀ²,¥â!.— ÓŒ.Ó¾ˆÙ\mÛ6Nç±]w(Î^„!5A³Ïp–eáp8”"ˆ:ejö-ÓhÄ64Û¶TňsB•ƉiYѧK…À¶m\.—šˆ4MÃåraõ%Ó>ˆMH U)âœÐÐÀê>FëB†W=‚ø Ò#°m;ºLû ¦¡-eçô‘âÌrëm·sëm·÷û~!†a`G©4Y+%?K¦}qjZµÝȺùÏò§¥ë©ñ%S<á Üq÷õT¦©Jot_/pv=k^|šÿ]´–ƒÞJ'ßÀ·¿÷ÎQž\Ï'¢´ûµ¶5R9zÿØìÿË<ñ—à ½ñ‡üä{×·óûÍ2êèë¾3ÿQÄ‚ÉîWæáùÕ ¿í~>ûò·=ÏC,âr‡wœüAp3ï-ÞI挟sïU8€ ǾÿØÛ,Ùy·SëÁ ¼µpY×>ɾ8 0ʹŸ;þý5ÞÞv_¯PrŽ'ú¥úz{ÚµÛÙޜĈs†â ‡Kª<—áú ¶oo†òì¸wöy¼có¹/ýù”§yäï'3Mˆ>4°kª¨jJfô„ŠN9'Ÿ;J}U[aDnÜË9Þ8íCƒ¾-M´†;½[Ô.7™©’–¦–£*TÄ%vs#Íd•ÑMÎÎL²Ò%M ÍJÎqÆ)šØï‚“ýÖíOš‘žÀ™ÈKeHœô¡–á&š[eW¸` Azfº\M ,¢ tw6¢™Ææîrn¢¡UàÎr+9ŸΪ¡–WÁðŒ¶lØÝyލ¯ê3¶™¹ îV•c€ T2ÒÝÁÆnwÃZ6[ùTŽÌRrŽ3NþÐÀQÉÌ«Êøpþïx6ÿ6.v×°ôË Œ¾‹éC•%yÀàÃõ_,gÉŸæðtá×¹<ó‹~÷>s¿Í5jÆ î8éC0(ýÒýÌöÿ//Ì}œüIO¸…ŸÞ3ƒAšzOœ,N—m ú e·<ÌÏ|Oñ»?üŒ÷¼É žò5~ñýë(Pr>#œÈÐ &E ëúñmoԲ댿µ¿ÙRœ¤”躎ÕËŽµã’µ–Ãä»~Éä»NQ1Ó—Lû"& ´ Eÿtn1Žr]@Øgu:³¥8,Ë ùíǽ1 \a_jInüq|é:†_ —ËÕé©XÉûì¦S¦.W¿îyÖÀér ú•˜âìÁ4MœÇ¨4N§“`0ØgÅÙC0ì·Ó ØÓ‰§ÝÓ¯ÄgÖqxšr:êì‚8âD¼‡Å44R’“Ù¿?îåÊüó„”’ææfR’“ûôK’œœD}}=¹¹¹jhp–#¥¤¾¾žää¤þø%‰­G ¥M~A>¤­µE’⌈?|Ó49x°šü‚|¤ìý/¥M~~>{÷î! öð¥¯8{ˆÈ% ²wïòó£Ë´/bêضMNv6…¬Yó)™Y™”–&==}@x³ yî:½•ýT¤©‘q¤”X–…§½ÆÆFš›(,( ';;ª "ë‚ü–/_NNN¹¹¹¤¥¥õ8Ý(rüV¼Ëþl'"Ïî§Y–Ekk+µµµÔÕÕQß·Lû"æYÓ4©¬¬Äç÷Q[[ÇŽÛñx÷Lg[¡@×4̽Gˆyh Ñtþ7P¨k ððk[’—Êè7mÞ Mž ¦  #p9t.¬Èfo];îöÕ{ilžÞ2lxç]væ_Íõã3ÔÆ?E ‡£Ó‰LÌ÷Æ8âàBÓ´ðz˜Ó;+‘Àï–í¡$;™œTûë¼T7·Óà 4mœÌ9©.2“]˜¶$`†vãÖ2°jùôí·Ø2ý2®—qìe¡ÒKí¶ÍJªdLq¢RMS‹1ßK`)%š¦Eþ3`>kv4r¸%@~F"ÕM>6l¦ÐíâÁë‡ñ+Jqj‚êÆvn£¶ÅÇÞÚ‚aEÐ#.k?¯ýøfî|ff4Lv½üCn¾÷ÿØdžH^‰­ìÍí,üõãÌûGó •O`Õ“Üþ•oñûvôrÝäÀ?eÖͲè°}Æeù¹þ@WûŒ‘~.1–jh°fw ¥9I4zT7v0º8…ïÏ‚ž|wî$ÎËL ®ÅO«¯Ë ÌQe BŸž¥Ó=̉”šìü{¼¥/èÊOÓlil&hÕñÁÜEÌýeJº-•M3÷ÍídM­2W­(=sô¿fõOÈnŸÀæƒmTfÐØ ¹#ÀÇ—"º=[“'H»¯­Ç Àì8²÷þ#~·ùû‹ÿÃëk÷P]ßF@KaPùy̼åVfV¤vuáƒ5|òòó¼º|3‡¼NrËãô€£3~›ê¥Oòè+ë©õÐS }ÅíÜó•qdj‘0&[ÿø]nú#€ƒóô<÷]૎µ¯ý‰×Vldo£MzÙ$®¿ã¦M:baÓÜØYùdW/æõÕÓùÁù‘<Ù±è Ö%ïk£¥Mv=w_ñËV½ð ¯­ÝË¡FÉu9WO2ØüÑ'¬ßÛ@0©qWßÍ½× %’!»‰õ ÿÈÜ¥ÿ`o‹ £t<Óoû®íume3ë^}ŽÛƾÚV‚†›IwÿŒK6>Àã{®â±Go¤D =Ó¾÷sÿû#ù·ßÞEå@Ñ]'Ðû·× ò‘C-Ó²ñ›¦m“Ÿîê|¶»¦ó‡åû9ÜÔÓœ;ÙÁ]S‹{–Aä» ûlìºÐõ]J¤Ýƾ›h,¾…Þ3‡ï0—ÌçÅ_ì¡ýá‡ùòÈ>{á—<ýq2—Îú_/ÖiØò!¯m—8 3þôŠi|õ‡×“• ëò‡—ÿ‹?Í÷''#$H †\?ß¿, 1Ó”>¶¼ôŸ<ùI_¼ó~¾‘åá³×žãùÇ_$çÉ{×Ã…¢M[‹Qz3w.âÉ7–°oâ ”è ›Wòú²V&Þy7©/ý7 Í>¤Lü}Çïò°s-Cnç¾ï ÅðlãÝ^â¹—†0mÖWùQQ-k_å¹—Ëüò9Ü1ÒlŸ÷K~µXpñm?à_J$û>œÇK¿z„ÀÏ~ÁW†:Ànaǧk9œ3?¸g$)–1(‹"£çÊMT5Þ@q–ÙÊö­Õ8GÜD™66Ç…× œÈcô{hÐU¹ã½Á¡k´t˜¡aè5­~Š3[šÊÓ_­Œzo´.÷‘CÙíW ±°’sGEg猌˜ý‹ý“«¾;‘Ï/o¤ü–‡¸÷ªœP1LfÏkÙÒ-žÄ’s˜Nepé­ìûäÇ|°ý ÖärôpªÎô< ó„ˆíYÍ[Ë9÷žÿàÆÉÉ¡{¿q=ë¾û*Ûr'cÇu?ß2@k›GŠ›ÑW_ˈ÷ðÎú™Ü;ÎÉÞeïð™{ÿ1yk®Ö,’ÇŠÿÜÐó'ägÔȡ蔓yhkqÞ•ç1F*$›V<Ê–­‡°F"Ú×ð—%Õ”~ù×Ü;3!¡²"ŸŽ}?æÍ·>åêžO€$flåPt)±¨4žãÓõ-\yY:"°ƒª]‚á·•ãܮ܄ûq¯NaD~2»ký$: R\¯¯9Ä÷§—öè"ÛR²¿Á‡ahä§9Ñz;ú[FºÆG–K·.sg¹îØ¡¯¢˜sG¹ysãN™(©ÞÇ3›ÉÃÝH+l˜´ìpô‘øƒ^ósß\ŶšfüF Ÿ^ìa@‚P:ÏR½‡}~/uÿ}·>Óù+–©álê@Ê´®g—<형€æÃõ¿Îão¯à†òlÞ]V˘[¦3Äð±)ÚÛÚC=•cÆôóg¸3ÀÛJk‡Ld™é°¹ÝŠóànöú³˜42§³$¹TŽÌäÕì¢ÆœÌPqt¼"eŒÑxvÍ:Z/¹„”½Ulõ•1sL*bÔßNNÿÐ ¼¼XŒeƇ¤ñéî¸%¸]l:àáGs·ðíËK(t;iôÙxÀCÐ’eºÐä¥õv´”Žá€ Ï‡%%ݶdáóúÀ00d÷¾B÷!„¢«"‹ðuËFÊp³”ÝúRbí›§~³íŠ;ùÞÝCIÕ,ùíS¬‰ÄÛÙ.zÊIJ@¸¹ø;rCY÷²À•žJ?ò“ÝAG$$¸Ò òªéÝ¿˜—ÿ”ÆZãbfOICJIB‚¤£½[Ê}¥Ïø›z~aè‚Xväyutl;2&ÃÏÒ­<è6…µ\’{á8ŒÿùŸ6_Èð h(žÂ9î3¼…3C÷»G¯gôÆ„Ò4†å%±§ÖJ³Rhñøõ»{ð,²S”ä$“•d°¯Á‡Ë¤&è$:ŽœªÉ °0™À† lé˜È˜ÈX;¸—Ï66b“+ºh kbËÖ&œÅ%äj‘_Æ`ç»lX€à°’ "aÃåÜ·‹}r÷Üt#“édPŠè¯—:ÚÛ{(&1¨„bÇ;ì9 kJiJp”Lí<àJp†4HÞ%|aì›<ýQ-Ãn»‡†DâÄåoXÇŠß>úù{4è?„îÑòËì\LÕæÃXCóCÆA«†Í[q .cÖ{¼’Æ]Δ”Çù늴­«¦hÒx1ìÝ9S=‚¢îžZÀ vÒê bÙw²“¼´4]0m<^7H¡Û‰ÇçĽ=»A匙 ^¹€ß> ×_yyFÛþúïTç2íkI6 Ÿ¾Í¹S(Ï‚êO^gáÞ\.¿ý\¤„Äñ\;³ˆŸ¿9‡ßȸbD6†;5¾PJRJôÂRòå»,]ðWÒÏ/&Mo¢¶½›|Ä †”:xg囼Wv%ŲžÖ´ñL)ŸÀ.ľõž_äÒŠ, |~p¹œaE”Ìy7ÌbFЇó.É ÿ¦árØž¼¶$5ùñw6ң즺‡!q×Î,àá7žæYç\TûWÌgá"®¾k, = ´G+Œ ®¸,=ËáŽ"®ºwPÏžÏà´ …¡…vø­6€AV²Á×”òÈ¢=4ûL!@ÚÓ ùIDAT›ì4ƒôÄ$F&£k¢×g׋¯ç'&1ï•÷xó¹ñȲåÆûoåÚ‘ÎnÃ)Óð°ñ/Ïòf]¤‚QLÿÁÜTá_×)»ñHË+ïý™'ßhÇv¤•?’I… %ZÉÕ|÷î&ž_øg_Üm$’Q@ynr¸!$1iÖÝTýÏËÌêS¬Ä<ν©ŒÉà qÛ¿2;õ%^ýðOÌyÝ ‰™”L¾…ó.FB÷²ýx}àt9;ŸW+¾Œ;¿!°-«³»œP×N‡”¤àì;þÎVß5ûÑcV¥§f‡1(»ñ'Üïüsßz†_µBzé8¾4û_¸vˆÞ9T=2Þ.Å—]Ř·φa×2eÐÀ€@žÀù¢µ¥ù¨Ò¨Ú´‘£Æز,Vý}5S§^Ü™èÀ*L°mXRÕÀÖš4úñm ay‰\\žNeA ÇÜá)tt]ë2(JÛ²°ìpYÙXøÐC¬û3~=kFÈœm™]aB!t=|dY(®žá„f ë=¯KÛÄ´Âñ Ý0Ð"6ÓÄ´CŠHë<Ã0’MË´h@†Ó3¾¯w4É.,Ì ¾¿¯øºÃf Fò©8 b‡ï?*Ì‘qY®½ÞÓ s/ÿtµ7>Ê&§D}–x£Ë}™Îò+˜<é¼^]Fk×СÞᤠ1 z„€•™Ì¨ÌŒâ8Æ•ÒÄìK1wÚL‚?уJ¤i÷q¤Äîkç©´0½X¦Í±7­ZýÇ*è?"®¾â—˜ÿ‘Ð3›½„9fž{»'@ÝÞxñ³kéŸù(q&ÿ:1eÀÕ[)! bý3ûÅ|—aÂ]ÅþÁü¹§û´ž<ò ¬8©XYù‡_ñÆ>Ü‘—ñ­]M±°Ž­Ìã†Î®`èßÓ¥t]Ç4M¤ËI§62w®8>D!_zäEn´C¶Ur§m0_úåóÜ$$Ò¶0M“>F8q†@t[ o™V¿½‡Ç¬Üî êëHIIF” Ä›†9åH¬€ï8ºåŠÇ°e-Â;Ê"G¦×Õ×ár¹úWLŠ@Ó4rsrøxå'†<‰Á0²BKuŠSˆè¶¤8¬4¡aZUU[7nl¿¶"Ç<}èr¹(,,`É’¥ 4ˆÜÜ2ÒÓCVK]C×t„&BÕù ÅIAJ‰e[áél Û ½€›š›9|¸–šš òóÉt»Oý¹²Œ¨¨ ¨°­Û¶SUU…ß泥ËßïpÖX…âlàÈŽôð4ª;#ƒü‚.ºð’““OŸ âC=--‰Æw6|¥ŠÓKäͱô×;œÀ!¨'’¨B¡8»P­Y¡P(E P(¢(Ã0ƒ½]R(qH0Ä0Q¯÷ªÒ3ܪ>¨”B1ƒÔT$Ã펦×݇RJêjÓÒÜŒi*e PÄ3†á =#ƒœÜ¼¨k zU …âó…2* ¥ ü´dǼà×ß&IEND®B`‚gnusim8085-1.4.1/doc/help/editor.png0000644000175000017500000004040313327067537016733 0ustar carstencarsten‰PNG  IHDR[Ê®sBIT|dˆtEXtSoftwaregnome-screenshotï¿> IDATxœìÝwtTEãÆñïÝ’ÞHB¡†ŽtD)Š(`± ¢¯úÚ^;êÏ.ö‚¨XDŠ € X(ÒAB'¡ ½í?BI dlHñùœ“Crwvfî&çø8sgÆHMI¶)‚­´; """"eŸB£ˆˆˆˆx¥Ð(""""^9J»ÿ&©©i¬[¿ŽÔÔ4²³³ÉÎÎ&''Ó4K»k"""R†Íf+ðe·Û '¦fMbbjZtZSò Ã`Ùß³mÛvªV­Jtt4Øl¶c¿D»Ý~ìg_², Ó4ñx<˜¦yìçääd’’’Ø»w/115éÔ±#–Ux4ÔHã9𖯦M›éÙ³'!!!8޼Þ0ŒcAQQDDDJÊÑ0hYÖ±ï«T©B½zõHOOç—_~¡víÚÔ¨^½Ð÷+4–0Ã0غuqqq„††TÚ]‘¡Â©ìv;þþþ†A\\ ‰Ô¬Q£ÐÑF…Æs`Ïž=4kÖìØ/EDDD¤,ñ÷÷§J•*lܸñ”e´zº„†ÇãQ`‘2Ë0 üýýq»Ý§Ì+ ç€ÇãÁét*4ŠˆˆH™dN§·Û}Ê2ewzÚ:̺ٿ°­Ú¥ôiN¹[†išøûûku´ˆˆˆ”I6› <”»‘Fó+~þ™Å ™”¹=¬ll\ÉÚYÞûväAR4ŠˆˆHYut¤Ñ4ÍcÙåDÞC£•¯¯ßÎmïþA¶¯{X^y¶òãï3quª×¢¦eáp8EDD¤L3 ‡Ã©}KWþýEDDDÊo9Å7¡Ñ<ÌÚÇñÝÜ•$¤„Ƕ¤Ç ¹¢YÄ‘¡L“=s?äíIk8îÂZƒ¦ßÈ×´$òèX§k/MäEÿ°/ÛŸÊõcñË8E­C,óSV&²ïP:¹R¥IW.kç`ÿX»ã® ê´ì}wöiDÈÑÏÀ“ÄŠ)ß2ù÷õ$6 «Û–+o¾™îõ‚Nxfò4ú‹›Mß<ÊÀoœtxàS¾ÀÏ'§ˆˆˆHYãƒÐ˜Ëæïßä­Yn¸—1‰ 'ñÝ[o‘;ôy®­ç ÂvcÀ}—S)ÈâðúŒžø ãj¿Í;aX™¬û&ÿÈE×ÞÇm1vÅÿÆÔ-Ö)Bc;7Ä“{ÞUGÆfÀ¨ñu¸äºùïuþ¤¬œÌ×>erÜ0niärˆÿîM>ø3š+ny˜Û#3X3õkF¿;Žèaƒi˜¿/ý=òÑÕîó0÷v‰ÂÀ (ÊY䧤‘F)ËJ|¤ÑÊXÎŒ_öÛÿ÷ª hÚ¨Ù;ŸeúŒ\þ@‚0ªumkyS`ÿz–›wcvh€-}9³¢þµo0øÒ*y¡¬q0 ¿­$¾ˆ¶ª7¤y“zØiHÔÞ¥¬œ^“v—´ç<Ð6üþ.ññû1ÕÀH_ÆO¿¦Å g¹ºC(PgP«ÌâøA´j•ÿ£(º¿ö#—ý"ªQ+¦jù]Ù-"""ršŠÍ=ÛØ‘I»&U¯ª±W£I£JLZ¹=žÔ·»Ùÿ÷¾¾„M»“ÉuãÈ2±Ç¹òêØ›À.wíã¢Î2€ÙˆˆŒ€ì4RsÜ•-‚ÈpØ‘·ÂÙÚ›@BNI#dÐçÇzÇmÃ/9 ‹Ð|mÝ_‘Ÿ<ÓèmÛsçO|ðÑllÝnæž[ênìaî'ÃùûhÃÈ«¥{ëØv ÜX¦`8pØÁ´Ì#´Àˆ ÓÝOЯnþEã6"‚ „U¯ý= šž‘²¬Ä§§mÕëPÛo6þÙÙ zÞh£g/ÿÄƯvªÛÁ•°•D«!w^}ÍC °©bœPÇ,Ö­Ù…;.¶D–tÛªÅãœEÂ^“*ÆÙ†·þb8ñ÷ƒÌŒ,L86]-"""RQv>³Rw²~íZޝ¶ÓˆÚm¹¢gu^žúŸ\CçH\ø=SwÖ¤÷ Öžµ¨fÍæ×)¿Sé‚Âì‡HÊ<^·Ü–+zÕä•ßçC®æ’&Q8³7±'Çw7j„¶¥÷ÅÓxcú‡ ·÷£kÃ(9‡Ø™^…®ãÌ— ^ú‹­:ubÌüãGf×ïN-’H mÃq!z¾QDDD*¤ÓîÓxëµiù®8i}ÏGçív;–eizZDDDÊ4Ã0°, »Ýާ3¨Ô”ä2wJ_Eâp8˜ñÓÏôèуÐÐÐÒˆˆH¡ÒÒÒ˜3g}.ï»ÐXvÏž®@ŽnâX‘ÒdYÿS–Ñ1‚瀟Ÿn·[SÔ"""Rf¹ÝnüüN}ºFÏ???LÓ,ínˆˆˆˆœ’iš ¥É² 88ˆ¤¤$MO‹ˆˆH™dYIIIqª¸¢ééfY&Õ«WgÕªUÄÅÅK𚦑Òvt@Ëív³cÇvZ¶l‰e>;ªÕÓç€ÓédýúH:xÊ•+S¥J°ÛíØl6 ÃÀf³û^DDDÄ—,ËÂ4MLÓ<ö½Çã!55•ýû÷sàÀ¢£¢hÚ´ .WáÇ&+4ž†aàp8ÉÎÉæÀþ§ù—+~h´2Xúí'ÌÞI»¾ƒyäñ‡Ð–õ4¾µˆäŠªpÇgðã4ÿ ôrÀ[7àqpâ–æR¸øÉðòçpÐÛf@dh[ôh‘õÙà–q°m,|œgßmÁÇAœÿÐhzÔ¬‚ÿÑk—v£Nî@žþe"ów¢å 0 n@“npEƒ¼¯º2šÀ„°cÔ­·Xfpãpc1« ­ ¡‘èK‘bòAÔq?0ÔmP»™LR)5Z‡aÚh=RO³Vü6 n½æåžºœ4ÏNHô¿î^çùÃߨ‡ iU†ºÀ¯™ÇËíš7u„È Š†Î·Âü}'·³n4\Ü‚‚ aÿTò‡×7,w:íz¶ÀÐÛ M}„Ðjpñ ˜·çx=ž Ð!úß õ æb˜8.¨¡±ðúâÓûÉ[#ò¦ˆû…ÜÅÐÈqdÊ8>ß_°ìõǧ” ž>“úÎ@Úx¬ÄF@@œw%LÞrüõÜÙÐgŒY™eô\DDä ”ÐøX›ãð„4 a {É4q< ðì0ø%ØëeJtÿ xë>hÝî‡mÕ È®»aûN°U‚J'~Šüö,|â†fÂê¿à…KÁ86²—•}áÏÊðñT˜ò>„͇+úª|AõðOpÅp¸ ŒŸ¯ö€Ÿ+â9J/ízvÀ:gÞç1q&Lùšo„+ûÀßù²6ÚàÓ/ êbøÜû ü·&¼ñ^ÑÏžÄÞY7M<²?8[Á¯[ò~Þ7Fç+ëÃ7À¶­ðR'Ôwšr×Cÿ®0ê<=fN€)0 7Ì9rŠ’½&Do„{ºB­æðÀ»°:éÌÛ)¯Š?=]ˆ¬µcør~n@Çà’hÁ7ÌT˜;FŽ„iË¡jG¸yÜv=4,äîœLHOW2Ìz>ÛM‡BãÃ¥‡Á ú‘yц-Ž¿<ëCX ÓÇÁ¥!y×Î…Æ×ÀG¿ÂÈË&¼»šÃÔÏà<Ð üã¡ÿ7§¸!/íú]?\Rð-]*ÃOÝaÊZhÛæÈE;ô¾zv€yuaÿ%pSwØð;|0-odµÉü¿@t,DUBÀð‡šµ¡Naï7 rm¨lBd€ê;Lù?ø-¾Ÿý"ó.wm ñà­ Ðý.°7ƒ¯ÿ€÷7Àw_èwàã§¡}|ÜØ B4.""˜ÏGÍóyûÅ jû_žРT 8ZÂjäþ O®Ep^ ô=aÚzغ^¹«ðÀˆ žm ¡¡Y núšÞ ß=Uø"‹NWCµÂB„–-‡€ àÂã—ûB',_ž#å/Ï›n’/Úwî~EÜó)Û=Rç¼wà²ÖP5!ôØá‚ýó•3 <4ïß° Ï{&0$Ȩ`+Æ]0gDõ†Ë"_6ª@×&ð÷bÈ¿ @DcøÏkðçvX7.¶à…+ ¦-,® »ˆˆˆƧ#VÚ*F>õ ÃodØsýˆ-ËKV® HI†ä”¼ppÊ+Ü7ÔG Ä4€˜°S”5 JåS,¾° % ‚#NáëSòVcÛ]œá• &û ð;U(,ª]`ñópù{Ð÷9˜Ø*ù\u¸=ËÚŽTb³åm3Gþõ€§"…F7L£ |LÁ—LØcòþ.N êV.$ù»ÉtC`(84Ò(""˜ïBcö&¾ú ³.á…÷Ó²ŒÏÕ9/€¿`É”¼ééÁÀÙn¸Ý jœð궃ΠN£rãxÐ*ìµðPÈ8 ¹ä #Yœ ¡áGB¢"‚ó­Éñ0›• ¹§ mEµë‚‰ßAô­0ê jïtë Í[ t8¥н $®GhܸàWÚy¡Ó½ú6…ºÂðÕpÍ[°i'Ìú®S`‘lîÊ_<Î;¿[´ëÓÿM‹˜?~Þׂ߉?TŠÃX™0{,Œžû½t#´Üõ,ÙË'À%RBaª×ýÐ4 îßÌ‚ŸGÃ÷CZ+øïÑ…*6¸î!¨¹n»~^ÓÞ†gf1…^ôº¶Œ‡ñÀã‚Õcá¾ÑELwûX“–`ÛïUÿÀ†’/Ìg„Ûaû8” V摟·Ã®Ãg^ßQ•:BK†?sþ€¿–Àþ£ÏÐ(tX½ûÂ'?À¼¹ðÝHxäz¸wR^13‚{Á¤U°ýOxù¨rr["""Uñ§§­Ãlúg/.ÓÍŸ_¾ÄŸù_³…ÓgØdž<¿tF=‰y+}«v¦§{§Nhu|xUÉõ+ð|˜1{îïÙÐúrøñMhoȪÒåðãHøï‹põ¨u¼ú ~üÏthË€+ß…7€'ÛÃ`v§?†WúôöN©öíðîßðÆ£0:<~02WÉ{}Á“pùçOØi^7ïßFOÂÚ× þÁz«ï({øâ#üôþ Ü~0b+Üsäÿðãoðòó0ì.Ø• Qµ ]w¸»u^¿nðm7ß&"""å…‘šr|÷íа– —_›Þ„æÏÃËËaHãÒîol¿ “v@Ÿ@ïåEDDDÎTZêÉÏt•È>e‚‹æCÕðŸr­øpT¹šÖ€”uðÒ0¨?(oú\DDDä\©¸¡Ñ€ÛgÀí¥Ýb0l¾>üvÿêÐc0|úìñÕÏ""""çB…žž‘3WØôtÙØGDDDDÊ4…FñJ¡QDDDD¼òÁB“Ýó?aÄKÙ°u'I&ÑõiÓswÝÚÚÅoADDDDJ—OBã¡m[Ȭܖ>ûQ5ÜIÚæLúîÚéáózPFN‘³TB«§]¬ûxÿý¾2Ox—þÑçèœ:)¶s¸zÚNx¥ \äºJèg9g|¸¹·‰+;·;“ýëg1âû·~˜ «jnZDDD¤¼ó]ht¯føÍ1iŸ †Õ»<ÄûÏö£¦2£ˆˆˆH¹ç»g­ voØÊ¬töý3ñßÌ#ç¢gx©¬à("""RnöLc -„±8üËPny庿3žÿµqú¨^)içp!ŒAx\#ª‡Ù¾#³d‘sġхë¤Ò&V¯d§HtåP;#"""RÎ!Œk Ão›Í.¢M\ •CLnXÀ´éËðÔ¿™«ÛéH‘ò®ø¡Ñ^ƒ=š±ë÷ü°(‰” þ‘µi~ùÿzG_š)3Šˆˆˆ”{%´FDDDDÊ«s¸FDDDD*…FñJ¡QDDDD¼Rh¯|wöt™äáÐØgY¿,{»Á\ps3ŒÒî’ˆˆˆH9TáCcæÚ_Iø%g@_,EDDDΆ裏][}wºt¹”º|^ý¿I‚±Œš¾†”ީ튈ˆHYäã‘F“Ó>dÒnü ·o«>+~ļ¾˜›^/í~‡‡„߯2z§î—· üœ •–V»"""Rùt¤Ñ<0›Ç¦Ò{`Â|Y±ˆˆˆˆ”*ß4Z)ü1ò 6w|ŒÇýÎlŸU|rçóg—ûÙ–vt^ÕÀyå‡\óz·c)Ù5ý~xòO*_wî_§Z©;-×!ñÝ/8S‹:ϧÃeÕ1<Y{ýu¬Þ`}×ÿQsû(âîÀÞ˜»‡Òî†f8ÏxÎ$iÙ7 ÿb:K7í'ÓBTÍFtðõ¬•×G×ï¼|åSÌÊ8z#¸©ëˆ¼oxbÒ[\Q)¯as×B¾5…?VofwRfHu·ÿçÚDüÿÏæ/¸ãîÉ4~îÚ¬ú”1sW³;˨zýxêý»ic?ývEDDäßÃg¡1sÅ(>þ«·ÑžàÄß}UíÙ±…z^k*gšäìXCê!ó³Ù÷ÓB"*;pmšÎÒ§Ãk…mC<Û¾˜Jãž÷pü`E7‡Ç¼Djµ&DÔ!iã¶½ú ¶S8¿KèuÏÜ?ƒ×ŸýŠ]îbÈ]-ˆ4³sÃR–îKÆäHht¶ã¯'0Ør±ìƒÁ¼½÷jÞ~¹5l~„ç›/öìÛÄ6G3®ÜŸš•ð§mã·qŸóÄ,>úô9O耕ꑯÐöZ~û!ªÚ²vÞæ¼×Π]ù÷ðMhÌÝÀ¸f~ãzU¶a&ú¤Ö³çhMóÏÆÐœ\v>y¿ý˜Qx9ËF`ß—èuÝ2f_÷ÉõÒyL6÷¹“‰ ¤{ Üž¯xì@ºûQÎľ–¿—î#aÒo´¾¨~g¥<Û׳1§&W ¼ž®òhÑî"z(åOxÕj„ã""ÐÀp†R¹Z5ªò@³Í¼Ò&ÿ•–´ŒHäχæ³pÛm4jh/ø+—ÔØ ÿßeD±Ôª×úŒÛ‘„F;&}À÷9—óÆÕu°§×+‹œ¡Á¡a8 0ÂÂqÚCð gàöÇò–®½ˆ ¨EL¦¬Xº ÷æxÒÌ>DÙOÕÂÉìµP×ñ33GŒ úªÎ´lG*ÁœAy’Xþý—|3k)›v'“áò`Y&O8‡SÌü7q„ƒæ]:©AC9MÅfÒlF|³“v÷%ÎÊ"+ Ü9n,À“›Ivv~β{ôŒF¾ý~çÁò,è >ò½-/lVf®ÂrYlÕûóìë¹|9n6c_ýž÷² ¨ÖÜ4ä)ni~†{Iæ²þ‹Ç2ÑEçAÿå¥öµ‰ð·aîøž§ŸŸ‡§°oR)"P{VŠˆˆÈi+vh´l'!ý0‰¯\Ï‚W ¾öë W0?f¹fåqq«àÙû`QÙû’ò^ ÆyƉØNå¶x¢í03Ù»f.£Þù€/_ùš–ã¤å‰Ï Ž‘y¿î ü²7yz`;ü\v%AÖ©†| 0ÊlŠ‘²¨ØQÎVç*^øðB²ó,ÏÆïxîÃ%Ä ~ƒÛ;Ô îYÏ»–%2gaÛM-¨¼˜ S7`bàŒkDhq˜-ˆj-ûpËå?1{ä>¸B£ÓÏ 9ÙäºÉv.¹¹A¡!ù~™¹Äÿõ7ÉÅè–÷vEDDäߤءѬFÃÕ \s¹çàÄFD´8iényeÃéYÆ’¾°7¦Ç{ub¯îrF‹`\‹ÞåÁŸt½¨%õª‡Ã¾¿ùþû øµxfþ'–¶S»AŒY¿2aV[®kÓDtÍÊÛ{CÚ· cÚœ‰Ì½ôQzÔt±í×Oy{æ!œÅúõziWDDDþUÊã¤ñ°°Üy&¶â&;a7¿L½ÄOX3k3îˆ&ÔºûYÚ\tfÛíØcšÒКʌÏf±79‚«Ó¨ãݼ~O?ªŸÔMÕ.âßá›þÇÌt7¦£ýñý.|àeî}ï}>¹ë ^7¨ղ·>ÚŸÑ/N/ÆýziWDDDþUŒÔ”äc“¡aáE•-\ëY}ý¬Ý!·æŠÇ[ù‚œü›{ù‘žƒji‰ˆˆˆThi©)']«x#ž-lzòE¶ïqã9°…û<`‹¦Êùqew·ˆˆˆHWñB£•NúºØá›GtCª]?„V{¯ˆˆˆˆªbOO‹ˆˆˆÈ+lzZ3¶""""â•B£ˆˆˆˆx¥Ð(""""^ù`!ŒEÚÏOÒïÕ?p¸n'öæŒþO“39–YDDDDÊ ß­žvÄÑÿ±[h|tCƒ Ø eŠˆˆˆT¾ F%uº˜‹uZˆˆˆˆH…ãÛ@˃+×…éÓJEDDD¤´ùn¤Ñ½ŠnêŰ 7Žð:´ësÞy11~>kADDDDJ‰B£=² ½né@›Æ1DØRؼð{Æž‡¾ÄÈgº©k‘r­dN„±2Xòöí ù©ÿùz7ÕÒr‘òâÜcÓú¢¶„y¶±q«»Dš‘s§ä†M ›EDDDÊ=D:n·Uð’•Â’yËHsÄÑ´ïÖÚˆˆˆˆHé(~¢sÇóÅ}o°µQZׯA„#mýÈ”…‡©uÍ3\VMC""""å]ñC£-ŠÆçUa颩|5#…l¨Ó”î÷?ÆàkZ¢•Ó""""å^ɬž‘rëÜ­ž‘ E¡QDDDD¼Rh¯EDDDÄ+…FñJ¡QDDDD¼òYh´²¶3gÄÓ ¾îrz\Ò“+®ÌS£W’ayoY’3"ýáõ g_GüðÒçp°œÝ»ˆˆˆÈ©øæŒ?OSŸ}€w×Fpa¿Ûè_7„œ¤­¬K9Lì“FÊøÉðò&¸ávˆ²—voDDDDŠÏ¡Ñ"uÁ—|¾<„¾Ã†óHû0ŽsMñ+‘2ÀÓÓ™,›ÿ™û3 íñÀXX‡aÚh=RO1U¼æ+¸¸A\˜´N,êÙCoƒ6õ!<B«ÁŃ`Þž|…ràÖ0 è7rC#GÞÏF|¾ÿ ë)CŠ?ÒèÙÅ–m¹TjÁ¦ÏcÈÔåìÊ¢F‹K¸å{é]?ÐÝ<Ë®%À³w†¶pÁevÂTqÒTès7Dß@úB:ÒOHž°Î ƒ_‚5Á~&ƒ+ûÀ‚¿ ­àstM˜ó?¸o;Ìšum€ÑÑgXŸˆˆˆHRüÐh¦’šf’µèS>ŠéÁÏßJ ÷f~ù ¯É$ä«g¸(¼,?a„`os˜ñ1´pƒ_<\7±`Q¿Kà‡K ^ëR~êSÖBÛ6y×¢c!¨†?Ô¬ u y¦ñtë)+|òL£iY¤g7àþî¥w”œGÓJX{ïD¦üv/¯Œ*•ikGKXí:Å‹.X²jÜ N­ª« IDAT~ tíÎB#n˜÷¼1VlƒÔ°Lp¹aÿÁ³è˜¯ë)aŦÑ"8ì±-i^éx4tÖoBœ¿‹Äí»ð»‘à†Ô,¨YðC‰ÿîâçáò¡~#Lü–¯€¿ÇC};¸Ïâæ|]ŸˆˆˆHI+þH£½:1Õín\@bYX–ejiL>Nˆ†ÌŒ‚ _r3À•ÿ‚ &~ѷ¨'àèš¹» Ý<‹v}]ŸˆˆˆÈ9àƒ‘ÆZ¶®±}«O=®MëØ˜ë¤N½Jk«B+† †;†À¦GðС5$.‡}ùÂÚÊ%{BÑì©Î|×–ý N±"ÛÏÈ‚ìS¼~¦õ‰ˆˆˆ”6l¹c#¶ÏºýÍ'ϼËäß–°xî8^y}2»+÷äê.¥7Ö˜ ³ÇÂèI°ÿÄQ<\÷DÿCFÁ¡Høžü u@¯K`Ëx¿<.X=î ~§¸±&-Á¶Þ«þ !Åsöõ‰ˆˆˆ”6Ÿ#hDvãñ·ŸàÒÐUŒzùIžzcÛj\Åso?Ä¡¥—„<‰èª] i!ñQ}aÆ'°ë¨Ÿ…놋½ ¸ò]x£#<Ù‚£àæñðäÇyÏ ¦öíðî˜÷(´mM΃‰Ͼ>‘Òf¤¦$› /;øÜ¦7¡ùóðòrÒ¸´{#"""R>¤¥¦œtÍ'#e’‹æCÕðF‘b©Ð#""""ræþ]#""""â3 """"â•B£ˆˆˆˆx¥Ð(""""^ÿA÷JÞ»ñ!&í+ì <'mùŽw¯ª¬t*"""RŽùàìéºôyôEZåä?Ïâàï#ùpn(ÚF)0Šˆˆˆ”sÅF8q»—ÿš¹› ÷aov5ÝcEDDDÊ»Itæö_˜¹ÞF«^SU™QDDD¤Ü+Hç&~ö/lóoÏ¥EQz'O‹ˆˆˆˆ¯ø>4æ®fæÜ_p)ÂEDDD*Ÿ‡ÆÌ¥3™ œ /í@ˆ2£ˆˆˆH…àÛÐh¥ðçÌE¤Du¡W›@ŸV-""""¥Ç§¡Ñ:¸ŸgR½Û¥œçïËšEDDD¤4ù04šìùu&+rc¹¤Wœ¾«XDDDDJ™ïB£¹ƒ_f­Ã¬ß ì>«VDDDDJŸÏB£;~6¿l1hÒ«µµ7£ˆˆˆH…b¤¦$;ÿ/4,¼4û"""""e@ZjÊI×4&(""""^)4ŠˆˆˆˆW """"â•B£ˆˆˆˆx¥Ð(""""^)4ŠˆˆˆˆWßT“ÍŽ9_2bÜVn?L®$u[õà¦{n§{íß4!""""¥Æ¡Ñ"õ÷wx䥹t»“ÇïiBHÚ:¦}þ%/=–JÐWÓ1Ä(~3""""Rj|]¬þõ7’B»ñÊ“7Ñ9 5Í웹öù…Ì_ó;ê$j‘òÌÏ4Z€Î@ó9í€vC-"""Rîù 4úÓºÏeĤ.`Ü„ìMÏ"m÷ß|óí"\®æÊ–e)ï|tö´‡¿çéW&Ÿfb6›ÝÄ ¯ÝM»=Ï("""Ržvö´OVOg®Ëÿ½>«ëƒ¼Ò³A©ÿðÓW_1ôqo¼{ç+8Šˆˆˆ”gÅæfŒÍúšƒ=äbl-i›Í]wŽáó™}xïšjÚRDDD¤+~–ó$°e»›€Ø:TÍW›½V=j;Ü$nß…§ØˆˆˆˆHi*~h´…Q)Ü kûfv›Ç/{·²Ãm£RT%´€ZDDD¤|+þô´=Žž}šðçcyî·öŒ#8}#¿ŒÇ–ÀÖ<ܣަ¦EDDDÊ9߬ž6“Y;y$_LYĺ])¸ý*Û¼+×Þ5˜>BÐ2‘ò£°ÕÓ>ÚrGDDDD*ŠÂB£fŽEDDDÄ+…FñJ¡QDDDD¼Rh¯EDDDÄ+…FñÊG¡1‹­3ßãÑ[úÑë’î\võ<õÙvæú¦öò,g:DúÃëJ»'""""gÏ¡ÑâàÜ×y䵟9Üôfž~í†\KâÄÿcÈðedXÞk‘²­øÇš»™óýBRÜÆ»_G];p~;b³îâîñß2÷–¶ôÖ™0""""åYñG= lÙá!¢i bìG/:¨Û®Q¹kY¾.§ØMœ-ë0L £g@ê©F. É»v~(4¾>úF^˜0áØÛf| -ÀÅà×MÌרSþ~ ‚ï§C¿È¼Ë][C|#xkt¿ 4¡/"""eIñGíuéÖ=cÅ7|4c#‡²³HZ7™÷ÆoÀî00ŒÒÛÕÇÑV» ÷/hh?ùõäEð·®½þx`<öÞ£åݰl9\†=¼+tpÂòeàpÁ’P£+4>Å èÚœù+vÁœÕ.‹<~Ù¨]›Àß‹ÁUÌûñ5$:;uoÊã—…°ô­Áôëy)×üo27ÞÂþaá¡evÔ,ù ˜6¨]D! RÒ 8üò_€HM!oúÝ ©YP)²à‡ þù?7L£ <Ž~Ã³Ë ý°B£ˆˆˆ”=ÅŸžpÖ¢×_ÐíÞ½ìJÊ!¸Z-"÷Žæ®œpšÕ‹.³;ˆGDÍ„}I@•S2 <2C.ù‚c$gChø‘脈`ÈÌ(¸ð%7\ù/8 *â®…I÷É ¶PòÅ͉ˆˆˆøOóœ3¬uêÕ¦r`*ŽŸÁ¶JéÚÜéý%ÄJ†aƒáŽ!°Ésòë¡­&އì^s»|ã€v­!û/X˜vüõä°Ø mÚ ~èЗþ|‹nV.É ›Ç8¡{H\ ŽиqÁ¯†5õ<£ˆˆˆ”=FjJò±q°Ð°ð³ªÄÜõ3}³“ªc·%³é·iL[’CÇg>á…žUJm¤ÑÚ =ëÁü° .<1¿Z0ï1èó!tzþÛ²à÷qpàfø°O^±¬ÅpÁÅÒ^y"÷ÁûÏÀÂj°h´>ò@äÁiÐú:è<>é¿Á€ëáÏ xu5<Ù8¯\θ¬+ì¸ ÂaÿVXü dÝ#®9WŸˆˆˆÈÉÒROÞÎÅ7ÓÓa8ö,dü¯»Hñ]¯^¾›K/0x!ÑU»@ÓÂîÔ€noœúðâ'pûpð„CËîðÌyÇ‹ž3¦ÀcÏÁýý!;Z_?¾y<0Dõ…ŸÀý/CÍû rKxäaXÿjÁfý[À¿ÁËÏð»`W&DÕ‚vÝáîÖ%òQˆˆˆˆ‹OF˪MoBóçáåå0¤qi÷FDDD¤|(l¤±¬®Q)> ͇ªá? Œ""""ÅR¡GEDDDäÌý»FEDDDÄgEDDDÄ+…FñJ¡QDDDD¼*zŸÆìÍÌ=‰ù«×².>Ãî&Ü;æcÄœœ5³wüÂȾæ—Õ{ÈŠ¡å¥ƒxèÎnÄøRo“23‡í)_o/xNtmWDDDäL9Òh¥¯eöô¿I hH‡¦•Oy¼•ú'ï?ö*Ó’3ð©ÿã‰ë²ç‡yløR2¬S¼© I•ÃêñnrLïe+B»""""gªÈ‘F#ª/æöÇf˜ìø sW» )e²{æXf'ÕaàÈ'¹¡8Ÿ©[¸wâ7̾¹-WUÑ,¸ˆˆˆHyVôô´aóþУ•ÊÊ¥ñxjÝHçºG«s×¹#Õ¿ÌÒ•™\Õ+Ä}=#™¿ç°ì\v¯7qÛ ëØ‰¹+ýly#¦¹.µËdKÚÑwd3¹AvÞ·~:ýL\TÞÖ+?Èeç2iû,¬PQ]ýhõ¸?Õªl×ú'›ûåõ~0Õ–d³æG陨ÈNã¨n?ývIñ8×Cn„Ønvœg5•KâN,ü)¿^Ð"àWþ™³‰ÜàÄ>øí¯®=_Ùôù#YùÉTön:€'  •.¼ŠæßIGðöldíõ×±zƒAô]ÿGÍí£ˆ_¸OxCbîJ»še?EDD¤,*þÙÓæv¹±×®EM;x²3qûáW3–6»÷à!._ )yÖž\þ¸'›Ô.t|ÌA i’ºÚÍžÝä…F?íg†ÒÊ„=/¥ó×N?zŽð#Ä•òÕ·ËC²ÓNÃGü­f`¤˜$|šÍÜ;,.›@”óÄÀ¾·²H½Ðó¿$Øarà'†ufí«n·‹OäÒ<€Ê]í8‹ùaºæ}Æúúm bߦul}õU¢:Ž$®º 0Éüùæ<ñ3™¦#"GÖn’f|Äo«é<îeb¢ò§A7‡Ç¼Djµ&DÔ!iã¶½ú ¶S8¿Khñ:*"""e†Bc:éΠ`ûgðÔíÃø§õ3Œz6˜`›ÅŽ´ ÎõcÖ&³mÄÝãOívª\è¤ARþ5 ü€ ÀÏ ¨¦B™­SÝ:¼V5Òdç@7 ñÕü¤SÏÞÿçG `#¬ÑÑúôÛ-Ôº‰‹¾y”èÌÉÌï9”ÝÙkØ¿ÎE\up¯&þƒYdzl„\ý>½^è†Òlþ¼ù1¶ïü‘Uco¢æCÍ <ßjŤ۸ÿåÜAüàkù{é>&ýFë‹úà§ÑF‘ ¡ø¡1?{¡AA„„áÀåӪτQ×N„_.[ÞÈ&h ƒª­ìDT7N¹Ç+·ÉÞQ9¬™ìæP¢…+×LAvráo©r™óH`,>£I}7ø¦2 M[S)pÔ$$Ü€}nܹ€?VÂRöíö€½!unîB€¨ÚF½cÙñÅ6Ò–,#ÃlÆñl„tíEd @-bz4eÅÒe¸7Ç“fö!ê\1‹ˆˆH‰)~h´…làÊÌÀu)C'vÀJžN†i|öaí,µü¸è3‹•ŸºX3$‡Å™àW×I³W9ïü3ïMÒ{™ÌùÒ¢Öƒ\ÜÙF@ µ9‡y÷»°<…ö€€È²;Äf8ìG~'Ø À:òVj2¹`"(òè­U¢0Øvüõãµá >ò½ ç‘ß·•™Ë„sú\‚ˆˆˆ”„ÆêÄÖtàÙ•È.4<<»Øm:©[«z©ä†  ýét¡?x,Ò—»X=4›•åPõתžø bQܶO÷àu0ïq»s/¸N5ïn€QNŒáySÊžƒd2¡²°ÈÞ0ïyУ¯»w‹ì}°¨ƒ‡ì}Iy/ã,§Ÿˆˆˆœ¬øÿY7ÂhÕ¾¶ÄßY´íè–<.6-ú“=ަ´oTì&ŠÅnÒÞ×Ú0’L2 ™5·ùÙžBC …'œáF+i›ìb>¬Yt»ù${Ø1!—Ms<§ª>bÔjOÕšvðlaûØdyÀÜ7‡øŸ°°Ú¡=ÁþjÖ«žÉ[=]µ[ñWOÉq¸”OüLú䇘6·öìC俀­f?ZlrÂã6œže,é{Kqcz,°W'öê.Z#""R= üôösLØsüÈ’Yï=Ï,lÄ ΘûšãŒ°Ž<ôæÓ~0š1¯Î!;¨&-ûå¡Á.…à`«í ÊÊa󛹤´ ÔFT·º?ydk›„\@û5Y¬}%ƒ-©`9óí—hÔLÛ²ø»_*`v¾-^öcÍC¹Åêg‘í–A½_¡G@í|û4Ö$ºûU4ÿßÔˆ:ñj'ìæ—©—ø kfmÆÑ„Zw?K›‹´ÝŽˆˆHEb¤¦$›ð /;Hy’sï!?ÒsP­s¾àIDDDJFZjÊI×ôÔ™ˆˆˆˆx¥Ð(""""^izZDDDD Ðô´ˆˆˆˆœ…FñJ¡QDDDD¼*zŸÆìÍÌ=‰ù«×².>Ãî&Ü;æcÄØÎ®œˆˆˆˆ”KE¦:+}-³§ÿMR@C:4­|Ê}øN·œˆˆˆˆ”OEŽ4Q}6µ?6ÃdïÄ™»Ú]¬r""""R>==mØNï¡ÇÓ-'""""å’²žˆˆˆˆx¥Ð(""""^)4ŠˆˆˆˆW """"â•B£ˆˆˆˆx¥Ð(""""^½åŽ•Â–%+IÌ2IÞœŒi™lY<Ÿù›íƶ¦C½°¼¼O·œˆˆˆˆ”KFjJ²uô‡Ð°ð‚¯º×ðáM÷3ayÂÛlÄ Θûšç¥ÎÓ-'""""e^ZjÊI׊""""ò¯SXhÔ3""""â•B£ˆˆˆˆx¥Ð(""""^)4ŠˆˆˆˆW """"â•B£ˆˆˆˆxUôö‰Ù›™=zóW¯e]|‡ÝM¸wÌÇ ˆÉŸ5Ýì_1ISçð׺íì>˜å8Úõ¾…ÿ ìDugÉÞ€ˆˆˆˆ”¼"G­ôµÌžþ7I éдr᧺X,ýöf]ßÁ<òøÃ hË¿zšßZÄñ] EDDD¤¼*r¤Ñˆê˰©ý±&{'>ÈÜÕîB qþC£éQ³ þG¯]Ú:¹yú—‰Ì܉þ•5 ."""Ržæ 6¯‡F;‰ÎŒ@ê6¨ÝL&IC""""å^ f±9>OHÖ°—L""""rΔHhÌZ;†/ççÐèút .‰DDDDä\*zõôY0Ìçí'p¨íƒ|4 Z<-"""Rþù44Zi«ùÔk, ¿‘aÏõ#V‰QDDD¤Bð]hÌÞÄwCŸabÖ%¼ðþ`Z†x]A#""""å„oB£+‘é/>Ág;ÛðÄûÒ9Z[숈ˆˆT$E‡F+…-KV’˜e’¼9Ó2Ù²x>ó7Û ŒmM‡zaV*}ð8ïünÑnPgü7-bþ¦#ï7œToÑ‘F‘ ‘""""噑šr|#ÅÐ°ð‚¯º×ðáM÷3ayÂÛlÄ Θûšã0w0æîA|_ÈÆß¶pú ›Ì“çëáF‘ò"-5å¤kE‡Fù×),4jÞXDDDD¼Rh¯EDDDÄ+…FñJ¡QDDDD¼Rh¯ŠÜÜÛ“0Ÿ/¿Åò•«‰ß•Š‹P.{}*Ïtʿ-Óßå‹™kØ”¸C©¹8+Õ¢Ù…ý¸ýÎþ48×¹4—Ä!XøS6~ý‡sõ+] MÆæ‚§ùá¿SÉ=ºáL÷Ñ©»_áÕš{ÙóÍd’R B/D&%u""""eN‘¡Ñµiã§/"÷è…B“v³cñÏ,\• † ›®[Y2å=Vǧ2|ø –޽ÃkÕº5n3…´5ÛÈ>qÿò™{Ø3vvÚ©^íz…FùW)rÐÝ‚Þ7ý—g_»Î!…&FÀNõŽ·ðذ/ùaæ¯,˜÷3cŸ»Œ6‹ìøÌ\_ÈI1e€­Õè6f,=¿z”êA¥Ý‘²­È‘FgËx¬%àú“åöS…FM.D“c?{q/Ú}4›i‡ÓI˰Nñ¾sÀ•ÈŽWocõÔ5ä6 öÁ×hu}ìgP…•ð¿\ùIDz¯‡=Ï]ĸçü¨þâ\º]é󮋈ˆˆ”%E†Æ3câÊÎÅíJeû¼é,I6±…´¢m#6q†Ü >b©ÛÀ†÷ul}õU¢:Ž$®úi4ÁÔh?ëÎÄ0SX³j_7âS†àÁôxÛwGDDDäß©ÈÐhy\¸rsÉÍõ`Z¦;—ÜÜ\\.OÞ˜ks'ýʪ­ûHÎpaš¹Z?™+³°°Z¶±…ãnËEꆭœ26~ØýLr&k¼RDDDþUŠXãaÃ烸wlB¾‘Âtf?s³[Ì>sÍ< Ìûøä±Q;ËÂl¡­¹¢G²qTkI|â’?¿ƒé‹êèç ¨ÏP: hp|?s{,•ÖTÄŒy±øÛDßõ­»†–戈ˆˆ”¸â¯žvÔ§ëÕ=H_¶Žmû“–éÁ^•zçuåªÛn¡gL™ŽŒ@05þ÷:-ÒÞdÓ›ÉX¿’tËNh«t,ò‚JÌÃ/Ò$c;Vl'mÍJR-'Ž$Wéu]DDDä1RS’Í´††…—f_DDDD¤ HKM9éZYüÿvë€aPÿÖ0{)à€4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IܱZ}IDATHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4¤€$$i I#IHÒ@’F’4]~Š'ûÛIEND®B`‚gnusim8085-1.4.1/doc/help/Makefile.am0000644000175000017500000000122213327034702016753 0ustar carstencarstenimages = *.png source_tarball_files = userguide.md htmlhelpdir = $(htmldir)/help htmlhelp_DATA = if BUILD_HELP htmlhelp_DATA += $(images) userguide.htm endif EXTRA_DIST = $(source_tarball_files) $(images) DISTCLEANFILES = Makefile all: userguide.htm force-update-doc: clean userguide.htm userguide.htm: $(source_tarball_files) if BUILD_HELP $(markdown) -o $(srcdir)/userguide.htm $(srcdir)/userguide.md else echo "Missing markdown." \ "Rerun configure and check for 'checking whether documentation can be changed and compiled... yes'!" endif maintainer-clean: clean maintainer-clean-recursive clean: -rm -f *.htm .PHONY: force-update-doc clean gnusim8085-1.4.1/doc/help/tab_data.png0000644000175000017500000004462413327070175017205 0ustar carstencarsten‰PNG  IHDR…[:’sBIT|dˆtEXtSoftwaregnome-screenshotï¿> IDATxœìwxEÛ‡ï=%½'¤÷„$$Z ©RA¤Z»b¯`ADT¬ˆ‚¢À+" R¤J‘¡ tH#½÷œÝïrNÎI!„½¯ë\ÝÙ™y~3;ÏÌì쬓%!#####(nwdddddšªæ“•EaA>¢$!‰bÕ¿’Ôx‹ÆŒK„FKP(PTû×ÔÌkÌLÍ‘¨È·$A#¦{WQYö²~‡¬©vd] G’j:…Ô”dòór±µwÀÙÅcÓòRP(@hÔÆ·¹Rî¬$DQB’ÊÅE…dgg‘œ”ˆ¹…%­E…Ry»³{G"Š"€¬_#"kªYÃEñºS(È/ 3#v:£¼ËÅ+w|ÕeP«ÕXXZáìâÆ±Ã17·ÄÄÄø¶åQFFFæVPårs²puó(w8­ÓÒP*•¸ºy›“…±±ãíÎÎKcNÊ”#kªYѪOãâæa€[¶l!++ KKKú÷ïWL+ IXYÛ‘ž†¡Um÷ž½äää`nnNTîw^:oÓÆGÖT;².†#Qmõ‘FÔ („ŠÃºqqWÉÈÈ`àÀ 8¼¼<._¾„$‰z¯m)?A! 5¨“’ÈÊʪҫ  €øø¹÷"Iòˆ´±‘5ÕŽ¬‹áT)ˆ¥BY§v‡"55•°°0’’’ %6ö,))©téÒå–ç¹9 T(5úWb8y’ŒŒÌZz]¸pôŒ Ú· kŠì6Kîz§x 5ÕŽ¬‹áH’t}¤ Šèê_½z…¤¤$|||HLL$;;›ììlâããñññ!55•K—.ê¼¾%ýE¹^uU¶„ÄDRRRñõõ­¥—¯¯/ÄÅÅTP-‘ÊU]2‡¬©vd] §Æ3("ÚG 6l 33“ÐÐPÒÒÒ°°°àÂ… øúú’––†——{÷îãÔ©Ó 4¨EÏ™ ‚(¢«šmÛ¾ƒìììz????ÒÒÒðööæÐá#œ;Þ½z¶h½´!ߢ¬©vd] GBËËkÚ$LNN¦_¿~"I111ôéÓ€­[·Œ‰‰ QQQlÛ¶ ¦ •JKÔ- ½ÔÔÔz¢R©ÈÍÍeûöíXYY¡P*صk7©©©´jÕŠ=º×3‡¹ìþæ5¾ÛI‰ µÖ­ÜñëJßûÐÉÕÀ—Ç4çX5ë3. ùšPÓúå¡®ìI¢Öã–––5ôòööfûŽ´nݺ†^–––(åMéƒÑ¤§§`ooO—Î-¯å."õÜ’Í q7mç(ås’‹ªaõêèÒ 33‡Vdf¦×++­ë=º¸#S9²~=±}£¸¯N§ [Ó»™›ÒEÊ!zÕb6Z>Ç æêñ¾–$ñ§ ã®~hØ0.\¸@ô¡C´oß777Ë_Ü222¢°°³gÏÒµkWJKKI¾–Œ££#ÉÉÉÜÿý¬[·Q#’’’BrJ ÁAA¨Õj=9ÔŸ‹&`Sǵ謀ÌÄsÚ¶ŠO_ßJßWÞãé.vú{§Rµ±7¥Ý…Âý÷ âÒåË;vœððp­zÅÆÆÒ±c4eRSÓpp°'55µ¦^¢HZZ:iiiø0Â(¸¸¥Ë7}î¹e*,Ü ˆ|ˆ …a£¹Èšo¿áÊ}3 qo<çØtiw#ÓfÌ$öì9~[ø3½úßÇöMÿ40Ñl¶~ú ‹ŒŸbÞ«‘˜PƵß1}a!ÏþÏDØ7|—H)}?¼Ë¼}Yå•1vnøµëÎýCúd{k§ Ñ´äàž}žoÎà‰Ð뀆„51y…’ѳ¦0°Usmë‡^]´Ö‹ÊS‡ÙkD»BªŽKE øg ›÷äbJ’‰=m:ÑgÈ`zúZÖn”ou½hÄûZâ†é£ºÄóõó%=#ƒ}ûöH«VåCû””N:…¿¿?III˜˜˜‡$I888 Ñhppp`Ý?ÿ ¶¶¶ü·s'QQ=ô8†òü–®µ)/”ÐDöëMè—Søþ‡ùù¿Á=¶‰›¾`æ²ã¤ä– ´t£m¿GxfT8vŠJËʈ]ôèéúÚBÞì®Ös]ÝuŒK}¼½ÉÊÌbïÞ½´iÓ¦†^111øùù‘ššŠ©©ÇŽG’$ìíí«ô²··gË¿[;;;öíßO׈ˆ:ƒ”s€Ÿ?_Èq‡{xpÂHÜ,$r“.pAa†y3»¿ëÒ®:'OÆÞÖ–k×’quuàÙI¯к5o¼ú«V¯eñïK±´´dÙo‹ë™ ©{~bæÂËø?ñ.OÝŒC¨ˆ¯ 'M롼=º&šB²¯Åòßš¥|r,‘7¦?F˜Ù­+ýšJäddQ¦IcDzÜü ÕÚ#)kË×^ Dr!+W„V-ã9—¡u­6™‡ökÜŽ—‚Ë]‚”Ã’O¾b}š3Ýúã)o[¹ñÛ±‘Ÿ§Eûüžîb{ƒc¸½õ¢>µž)èÑ®s§N8;9±vÝ:z÷.Ð|ôèQz÷êEvv6†°°0 ())©±JÉÈÈ333Ž;ÆÉ' × ¤ãÿ Gî=^ÿƒ-{Ó‰dMཌiöæé'V³`é·,òþŽWºš#H*|†¼Å¤^ö(0keu_§G@}u-<¼=ŽŽ­Ø¸is ½zôèNnN.€N½üüüjéuúôBCÛêLOwš3ùöD½2û+nèöˆªªŒs¿½Î¸ßÔt™4WºªHúw6_üy‚Ô¼R”–®÷ÍÃÛ]wŽb6§þYÂÒ-G¸’¥ÁÄΗϾͰÖ7hRËòŸ³Ãf,S_郋fÈ}zþâE\œ ààá#<äáÀô¦òÈ„§xûWùñç,úùGìílQÕëa½†Ô=?2cþ¼‡ç£œª-ÅKãȪßY¹ûq™"V>y`üxúúª8:ᄎҟ§?ˆ‡@$nåT¦l ä/‡嘀ÿòNLPáe¼=í_vœCXµ~­K¯±où¯ü¹ë4ÉEÆ´òóÄ(_ëªzj*’•vNØ%mfÕ¡~¼ØÅ¢¢ž—qaÃß3wÁ©8—œÜj‘éÔà AÊàÀ¯?²êhÉy”`ŠcPOvRqfç>N^É ÔÌ…vƒcâýXTÞTb&'×,aÙ¿G¹š#`íÙŽ~£Æ18ĦÜ1KÙýs!«öŸ#.5—R• û?zœú¯uéÿÕ£i© ÷ ÚÓö/QîŠ9ýçÏlHñaôÔ7ìiT°="hýõ‡,Xø;áÁÏÑÅ¢vëQw½0n &0©[yùÕº¯#D®l_ÌÂÕ¹˜^ŒÒÒ™Ž£_çù¨Vu>—2x¤P‰»‡;666lÙ²A°°°ÀÛÇ›¤¤$¢£‘——‡J¥âܹsäççcmm @ll,ÆÆÆ´iÓ†¼¼<ÒÒÒèÔ©£Þ4¯ÏüÔ )8ûàm.r4! ö˜z¶£³gù9_Ÿ1\ÝóÛÎÆ£é@e=QÛ¸àáéT%ˆ]§;oúõrssÃÚÚºš^æxyz’œœÂ‘£G Ö+55•ðöíëLKéà„£2“»’æÛ­ƒ0^÷¿Âs÷Ø# `f_È: 7cž¿[3‰ÌSëøßsYâõ/t1C „ +?çó4tþ$ûXPš•‹¹ã •&²õûÙlV ä­ç{ët†jwðàa.]¾Bbbm1ìA‚P(”H”ïG¥PÔÇ!”qm×\¾ùåÞ½Ëó=¹.U1±Ë>çÛ½ ~ä&ØåsâïEüï«%8|6‘ÀÐ@Ô{Oq&k(vH¹œ?›„:ðA|”¤%5…± Fh()ÑFuk-p|ñç|¿Ç”¨Ï󘻒ŒØÿøû‚¶U!5ѯ©D^v‚ÇpÆ»nà»Õÿßq(ÊòQÂßÛòÿ–Ë~"=§˜òæ¡.=ž¤½q>ñgbÉöÅKOy£Ê¿À¦ÅËY¸Ô›>#GóÂHc²®dÑòy¬ôÿŒGU@ çW|ά‘£žcŒ»DÜÎ?Y6k%Sßg„¯¤.>BŠÓC<ÿx æb> gÜ•uëß0]t\—~ˆýçÌh0Æ%1ìØ“ŽMäDúW9„ TNôÖ“unbÇ‘<:Gi™Fºšõ¢¡šX#„¶ûZŒ_ÅÜEG±{èY¦†Ù"f'Q`ã(¦¶V Z3zô¨ò*^ gggDQ¤¬¬Œ¸¸8Ôj5>>>dddàííMff&—/_® ëììÜä«[PA)Éÿdñª}œM̤XmºPDXª'‚†^W‘¼]á « _©—£c«zëåèX÷jÁ©O=‘ÀœÅßòú!/:ô¸‡>}zÐÖɤFE0²qÆÃÝ©Æ130:V®äô6'nßvœODìÒeÁÖmLÀãÁyú>ךβòž&ý?/å·”¼øà Ð36D»ýÑÑÌøð}xhÔ˜ª-ß›6þýú¡P(xîé'yú…IXZX<}¤9»Œ™G q9í‡R^4ÿlÍ$ôñ)<Ô¥üÆö~ Spf÷WÄÆ¦ º"äfÝæ$<ü˜'û»¢‚)ŠŸÂÚuG¸oRÌ0õhKûߪ:' ½uÑziÑû9oΠr f$‘T¨ÀÃ× mý-¥‡/Þê2.'¤"bY»SYG½ò÷7XÊÊÿ¹ñ¾Öäæ+™Ú&˜ÖÞÆ€·~«ë;}t#BÅ÷¶lÞBJj*NNN”••¡Ñhpppàøñã8VÌ¥;vŒ°°0ÒÒÒÐh4XZZ²té2[µ¢_¿~:r¨;obÂy.(pvs+køò«õ(úNàÅ ¾X Ilžó5«¿ˆ¬%ñªžëôPߺVùmŠí;þ#-- GGÇz;vŒV­€òi¦víÚÕÐ믕«ppp WÏ{t¤ Æ5êI¦G ã\ônvl[Ç—VÑzØ$^ˆ¹Îœ•‘rh¿¯=À¹Ä,JÔæ¨ E”þåÎQ“x‘ËÅvt rÒ1z’ÈØöóJìüÁ£t°Ñ??jˆvó˜Sõÿm×½gg0£GŽ`ôȨ \ê+ØÒÎ>†=ÿ,d•ï$F„\_Ñ#^»ÊÕâBÒ~z‰ÇçW^!¢)S`”U–át ù•ÑÇɽ' ó«g8[ìͽm­(ßô°ôð<žy|^Eb*,ÜÃþòcôi% OkñÚUÊìéìo_ïU$ú)—¦v¦(íÛr·Õ|ýÏn†ùÛ³ak !#ïÅG]Â)SÈÏË/¿uôèQ;I6v6P”KN åƒ … vÖp&¿<¼”t‰+%åõ©êŽÒ™ @[þ<Ío3ßábdîí׋NÞZœUõœ×ž>ÒmP]\KN¦ÿþ@ùrBsssRRRppp [d7víÚMJJ –––Jhh(›6mªcxWsò¨*TY2Û—mäªY8ÏGØRs«Rž~øÚZ ™âl!T]% jŒŒ  / R•(%Wõ\§ÓâŠÒiàdeJJнìéÒ¹3ûöﯡWXXy—lÓ¦MzãŒì ˆB@äú¯þŒW,d}øtF¸i/Æÿ÷ßmBÑ{<Ï>Rîÿ;‡C•$}pËÀ.x'ìfã‚•„¾3‚6úœ ]ý¦„ GáЉ />Lèü/˜ÿÅLò'½Ícá6å¥*I ØùôÛ õ©þØY‰9‚ Ư?íãpv$­OÆáÞ…0ûëöª‚†óÎè0LÔ&XØ:à`e\u£ëÕZ¨Ø”²A ™¾U6‚‰© `LÈÀ¾¸MÙȲÅVVuçµn¶dcj"QXPÞ€ úô «V2J•²Šw™T¨” V[ÚàE€‚…^ýkÛ]ÿÔÄähö]²¤Ãð6Tú…­3Φ"§/]¡´g7ú Mü%®–*qvqÔº`¡®z¡á¼Ú¥ö`À›ŸÓþä.6­_ϼ©ëØ0òmÞâS+ïUúòš>DQ¬Ú+•ʪ¿EQ¬ŠO’¤ò¯ú¨TU/tU^«Ï'HÙñœ:ƒQYY×ÎqxûöÄ[Óç¥'èa# ¹zâ"­gËŠÿ°‹ôÄJ™Aj~µ8|½Ôü³{üûã)¥’cÕ‰}×éBФÁzU&_—^cŒ{XìWläZªîjŒ  ¿ªœcéÕ‹ÄIL|(ª†s¬Dá쉻j3gN'£iíªµ§¡öèË1oúO|ó½=ï¿Úç:Úôº´³³µ###[[ÛªcE !žÿ”Z& 4Å(Z÷¥pèoØÙÚÕ%Hµ ;ÓãÙ)X˜~Â7ß~†òµwjYn«z#W¯‰8vw×:¿jÑ¡7]Í¿dÇîr&âÖ©#.ŠëF æNø¶ö«±´±½Z»xãe´‘˜ ”ù{Ök~Wo}” )(ccc@áÒ‹aëøþ¿TüFO¤|–Ä#(¬èÕ+õéÑ€WÊmÜÄ™Ó)ˆ­]ÊFÍ5NÇfbä勲®xÝúë2»Þ9I>x€+VXm¢È8„¨;öîþ›-ý¸Ï½Ú9M ;Wnçšy8…[hµÔU/nJAû}]~ΧÐ~<ÚƒˆßÞcú¦íœ½Ï‡¶º€ õåµÚÆÅųmÛ6BCC /Øyüøq.\¸È=÷DáààÀ† prr"((Q±µµåäÉ“ü·s'’$‘’’BÛ¶mQ(¨ÕjŽ9Brrùû ºû¡¦–(N¬dæ´•(T¦Xµr§uèPÞxé^:º‚ϼ81ƒ«1s}¢Ê Z;™WŒ,ˆ;‘Sßÿβ/ 1u¦ý(?ºö×sÎ\U¨¥ã¥˜„„¶ïø¶mChWÑÃ?y2†K—/Ó=²ööölذGGG‚ƒƒ«ô:qâ{öî­Ð+•ÐÐÐ*½>LJJJÕÒVm”ž_ÇüÅø{ãheŒ”—È‘ÛH2jÍ/%(\ðöT³aÏ6ùõŃ4r-;ÐÙÕgi[WíÆ¶«;VÊ Ò ªÙkÙ‰ûz¯fæÊoøAzþ6¨òÓ(vŒ £ûõpÊVÝyú¥d¦ÏXÂ÷k|™ò ·ÎI]/õèÞƒ?ÿZNFfFÕ1ÇbO`‡ãø¹(m=‘ÊŠ”Fh2.“òë lLð¤ì¯?èѽ‡Îxk!XÓþ‘×y2w:sç|Ó{oÐßµ#ƒz­æÓµ³™£JÏ{TÅÄç9Ò³‡?¦`DŸžN¼ÿÏϤ¸Ñÿ)ƒ—²ªôimÞ‘ÁýÝøxÍ7Ìæ!úÙ£.:GR±þ¸õ¾¤%QX Æ&FåuX°¤ËƒsÎ"޽œ+lPal¬DÌ/ HKK=zhwuóŽ ¾×…éÇ|“áôp‡¸+ø;ÞA‡WÌ×A=õ¯÷Ëkâ5쿊uÇÑÔxx`BÛ‘¸÷Ü7ü>}Wô¥£-ŠÜ8ŽmÛÈö‹Æt}v,Võ_^zSšè¸¯»Xcëi O;ŒË28•æ–hYU…ö—×´´„»víÂÛÛ›³gÏrìØ1 666¸»»³gÏ^<QY¶|9EEE¡T* ªzC7((A °°ŒŒ ÆWþ6¯NWnI䤹DNÒeAåLðîó öyFg•sžšÖƒ§n8§ïººÐ5*ݳw>>>œ?ž'N¢P(°¶¶ÆÝÝý2hàDQäÏ¿VÖÐ+88˜ôôtA¨ÚOªR¯ÌÌLFz¸êígmÖ¨,1Ï9È?¿þCjN Skœ};2þÍ‘ôm%DŒ~Œ3ó–³â›h4¦N´áGD¿ûyþñL­Y̬ÎÑÚ?§Ê§&y›×-–²bë¾ZQ‚ÒÒ•ˆq!tp¯™ c¿¡<;<†©ü̺ð÷楽KR׈ÞÝ̓Ñ©u¼øÂP.~7÷þ#0qt¡àÚ6ÿÝ¿1¯Π:ÊVD>ù—?ø”ßç­#pÊ‚ǾÍk–KùsÇb¾þ«LíðŒM—T4‚J¼ú dýÏÄøÝG¤«áo7(½õimDëáoñ¶Å2þز˜¯Vå#ª-°s¤³[Ý[´è¦PLQ1_m©½ûðø“5ƒ›CZ…€%¦èQ_Œh=âM^7úåk~àÓ°ölÏÐ7Æñ€Ÿ!øõÓ¿¾³GbâöÇÛÐi¼­Ê‚e¼÷þkW³i÷Ìý;ÑØ÷€.<>y(½ý­ø®ËMh"h¿¯;xÆqpí–¤äRª4§•OÆ?s^uà%r²³$€3§c k¯õIý©S§‰9uŠˆˆRSS)++ÃËË‹èèhüü| jÓ†¸¸8vîÚM§N066F©T¢R©()))7ÙÈQ)--¥¸¸˜èèh¢ztÇÃãÎÛ¼LN?г“ 6vµ§+Μ‰åÔéÓtíÚµ†^Ä×ׇÀ€âãؽg;w6H¯ƒÒ=2wwî0²*VYiÓ¯. bwüóc¸téAÒ]8M\„Y`Ï[‘ź)=Ëâw¿&uØ'¼Ò]÷ÖMIC5½#©‡þõÓEäê_S˜ú_0ïÎO›´M™!dedÔtj•(ºñDaa!ÉÉÉ$''“›“Cbb"yyy´ lƒ$A\|666¨Õj ÈÎΦ¨¨¨jÅMQQ™™™ V«±±±!.>AgšÍýºmÚRTTT¡×5rr²ILL$??ŸÀ€ |ŠÉÖÖÖ`½lmmIHH¸•õ¡I1pW-Ì{â<á®9„ó„_šØ!”zå"W/ŸbÛ‚ügÚŸ#š‡C€†kzçÐ0ý륋&Žý’°ëÔ…Öw™C­Ï*×F©TVíð©EŒŒŒ*¦2ÊÃwêØuÿ¬çäÉ“dgg#I––„†–Ï©Ÿ8qœÜÜ<AÀÚÚš²²2:uì 3½æMy5¬k®²R/¥R…XC¯r:tgÃÆœx|ºsc šDvÍŸÁ_q*Ûôä™—À§5-~C¼ê_]4q8pÍŽNOø5ì%®;œZÏ$´Ï¿={ccc¼½½INNÆÈÈ777âã¹|ù ^^^¨Tjî4ˆƒŠ»›?ÿò ÁÁå{ù$'§0ñ‰'ˆOH >.ŽÎ;£R©ïÌí~«V¤jÏüÙsç066ª¥W||DÛÜÜ\Y°pQÕÞG)))Lxü1‰§S§Žú7¼ƒ¸#¿„¥ôfØGóv»ó¡ƒ;RÓúÐ@ý룋Ò{$Ÿ/YÏZµ_^Ó1Ð:}æ 9|˜œÜ\ W¯^ÁÃÓ“‹—.âåU¾O„Z­"²â½GÇVüûï¿8;;¡Pxz¸ãéQùtòN­ÄUëlµžÅÃÓÇ“[¡×•+WðôôäÒ¥ËxyVꥦ[·®U×µju]/''' îxx¸kM玦¥7`·YSíȺ޶÷´ÉwÏ=QìÝ»77Wú(éêÌ™Xâãã騱ƒÎ¦}È!z㾩¾w’6¢¢¢Ø·w®nnô¿·ümíØØ³ÄÇÇÓ!\÷þECܸmÆ´”ºÐœ5ÕŽ¬‹áÔ~¦Pý)j5l¬­4pÀõ0@›ÀÚÔ8v× Õ=R°±¶f`¥^X©—ÌÝWgšYSíȺŽ$Ýäöñ22222-Šª‘‚$Š -ÿaUc H7lK!S?díYSíȺŽ(Š×_^“‘‘‘‘‘¹>R$RS’ÉÎÊ¢¬Ì°ï ÈÈÈÈÈÜù¨Tj¬mlhåèt}¤’|â¢"\\ÝPµ õð22222uSVZJRbÆ&&×4ggeâ,;™»•Z³«ÙYY×BYYY‹zcVFFFFÆpÔj5ee¥ò’T™ëÈNAFFFF¦ ½ž‹=(/Z•‘‘‘i1(ÿÀ6ZÏéu éiôx÷ìÉcY騨Ùßîl4;Z%^´ IDAT’.-əٲa- Ý)ÈÓG @÷×›ïnZ’.-É™ú ;… ¤KK²EF¦>ôq!y?¤ëûCÉšÔ¤%éÒ’l‘‘¹A¨û¦òH¡!È…vZ’.-É™z ;… Ï7k§%éÒ’l‘‘©²Shò´‚vZ’.-É™úpûœ‚”Áñ5ÿã¯C™ºûd†„¹ÜI †”Ãé‹Y¶7»ÊK©ì]ô9ßoIÐÆ ´š@—ÆÊ«ÞtZŠ-Eœ_ÿÿœÍk^÷ÐÍPC·bâþû•Çr[Ž}·™ÛçÄd®^͞˺ Ó0·Ûê4gøuÒxžÿå%†„—29¶~ÛÏåÔ¡s6çìãTrÑMéÜ$º4R^õÑRl)9·‚oÙI\aÝúÖφPC7Ò¤h~Ÿý?Žä7§VâÎÅ@§ éýIYÛ˜1v(Oý‡IøëŸÓnŒ0Mù«œZÐò“rùoæ†==ŸSeµÏ—þ™§‡=Â× ž¾`н›nöæ(ê‘ç[¯sSêr«ëD ±EJcû’udvÇè03)‡]_>ÎÈaC:t(ÃFŒáñçßbƼ•L(lœ4T?VFåÿªñú8}ÛY²>ñ–¦ÙR~ucS$}?‘«›ÖpXeƒqÌÖ)5àšŠì5F˜&ü•gGÒ‘W :öì„yê^þ;UrÃùRÎìÜKªMWz†™6<‚'ƒÞù”ÉC|PÖ#Ïú44$LsÑåfóz·Ø¢‰ÛÊú–ôz +@’4äeç¢i3Š>ù„éS_gâí1;û3^}“9{ÓÑÜlº ¨Ÿ -£*ÝŒƒ¹¯¿—7mâté­K³¥üôaÐ{ z):κI„Ž{ŸÎ»ÞgÉÚƒŒŒÄ¢úˆµ$‘]¿Ígé¶“$ãàƒQžDͺõ…‘29ôû<–ï>ÃÕäJÔvt}ú3Þèm‡ I!zùB–ï8Á•tëÖ ›ø$[›!H…\Úü3?þ¹—s©E¨¬\éüèT^ëãX÷9]öÖ¡¬Yûžt±ÚÅþ1L ǨʶÓìÚ—Ž}dOBŒD7~ÆÇKŽ’œ[‚ÒÊÐ{ã¹1±WÔakÏ\–¿ö;:Ì`ö£þ(õÅCyZ9‡eÊÞ‹œO)ÅÜ-”>cŸdLWgtn–^—ž·S—);Îܧ¦qièwÌ|Ð’Wó/®Âû½y&Tu—Ú"ríà~âl:ód뚥¬°t£MP&a‰êß—°Ïßföœ |‡^¶‚þtÄLN¬ZÀ¯ë£¹”©Áľ5ƒ_ý€Q‰,«^?¥töÌÿ†?¢¯p-#—bÌp éÇÝTÄlÝÅñK锘¹ÑaÈÓ¼0,¸¢Í¨§n(pèŠçÒ͸ð8ÁJe'£ŸFp Ù6°›¼qO¶ÝX6k=ÿ¥vã>ÇŠj*pä—ùj‡9}Æ¿ÆÓ*ÒOoá³Õ|CÂäpþÀA’]Æòê³AXhòQ¸Ú PÄ©_§ñÙŽ<ôäÿñŒCGÿ˜Ëü¿àøÝ‹„§®æ›£±ó*3:Ø!e%oo‹ˆWuŸÓiq]îÖ$”ÞÝíÙ¶{'ž§£Iùá’˜]ìËr¥O¯6öØ´Àc¯ÃÞ\"ýøJ~Zü5 }æòZ¤9‚N[s©™9=ñT”QI™%퇿ÈÃ"ñ;–óÛçÓ(ùðKžlk¢ÅˆºõìhvuÑ‚îV[Š8‡ÂoÞzîrIáHÏq÷³ö¥¥lÞ“NÏû-8]g:%œ[úÓW—ÑmÌ‹ŒomIiffN U7LÊ#.æY>ñÖK~¨rϲîçÿñã"_ŒŒ×Ç›½”ò6s˜¬jn gü-–rî\R`«h+SÉÍ;)™ë`Ós:¡&Êöéi7…Mÿ^fÀ”€”»ŸuÛ27çïw*/° .ý{ˆÓ•ÑA™WCý©ìHyûù{c:áÏ~¨HKÀ÷Ù?³”ݧŸ¡½Q¹’á!m ð1|¯g?G÷9&×93"¨O/ÜÖodÇÑ:v5Š8¶ó¹ÞÐÛ·2×f^át©øËÏç®ìz•ÏÆ#F–Û¦ÅÖÚËT ˆ%Ãѯ5J ¼%ñ/±âŸhƶíÁí¢>=;vÔ>¾h2]êÁ]k‹˜AJšˆu°ÆÄ­pöÅÇBäH|š¼ŒºÓis€Uë®âùð7¼4Ô­æ´¶eT‚€©[ÂBüQÒ‡¤=DÿåADÿn´W³ýcNº†쎢!º)pt€#Éiˆ´ª·¶2×¹i§ ¹²­<éó‚_yA¨ýéÛÇ“¶l%vÄD‚Õ &^&¾Ìnmªy𚯦Úሠ—¸RTHÊ·9»ê(š2F(z ä¡vûøåý—85€A÷õ£«¯5J@ÙF÷¹†¢ôéM_ÿU,ÛvœˆžXæG³ý@!Ac£p«ºƒJ¹¶9ÿûkg2(Q[¢*Ô  ,­ÓÖÚOµˆgÚÚQrô2IšøÝ£>=%¬ÔkT] 䮵E*¦¸DÂÈØ—Pyaé”ÅŸçb‘!Ά/_¬ª~ lííвÉ.¦¼RÚ`g1ù•«  ›`„±1ð(U¦. t ºd.%ößm\)¾Æ¢†±¨ú)!%¸£  !‰Rµ¸ªÿ+¦Öß•J ØÑó¥÷Ѻzs®ÀÄÖAmÅýïý@Çc[Y·j5ß¾¾’µãÞçí1R{ê>§SÒ¿…3=´cټٓވ£[9LG^ˆr@¨¸N¼²ŠÏg­EÑÿI^yº56$²á›Yì×gë Ç„$ŠUš× £OO¶ß]…4šR$¤ø»ØÁc#’ââÒ©–^5Ä„s\ÈWàâîŒB_:W+;kÚ4ÒÏ*UJJ%@P¡R 7°NKŃ‘±‘Î2•1 Ü‚.‹N°uW£¦ñl7«já³ÙóÃtÖÿ{ˆ áÝ1wõÃÇh ÇÆQè]žè íœÂ€0µêC o<Ôk¸”(âtgm£$cœÃîcb»>t_ð:“×máôÐÖ´Sé;§MIO^À6bÝþ÷)7ï#÷Ð Ì{L¡³…Pu]É•ó\•‚ynLoÂÌLqµPèµõÆã ЧôGOfbê㇫ÐPÕæ ªçíÕEª²Ë [k‰”øk”HîåO«Ù{×Ú"Øáè  ;- Lo<_ýÿeרöÛz®˜wäåH{”ŠºÓ‘\¼ñT¯#ædš÷š£jmm¶¶z|ãùÔi©úuš4RÓÁÁÉ…ìn ÃvIÕq¼àèöç0ª_(Þ­j<]´GkVþ¾}Ù‘ôµé°û=˜òç§|Îhú‡8 .:CbÑõþ˜`¡?Œ®¶«. ¹×…W~Ί‘ô j…º8«¹ÎôéˆIr4OŠxz9`R–Æñ¸|°´ÂBÍ5Ýçt·ìŒcÎýý\xkÕw$jÜyhRFÕò¬róÂEZÇÆeÛ±íት2ƒäíý/]}VÉàx$ âc8|¢“’dŽoXÆßɾŒ|¹&€¤°ÄÚR"õÄn'ºÐѵn=ÍtÌ·4‰.µòêF§O–ýù?~ð)¥—·$_!§rn[OÝh¹¶˜àà¸é—4QUk¹Åì8Nž<‰º¬ìijDoÝÈ®xú½ú4=l@O:V ¹w,ÿ”¯¤‡éh‡2?™"§îDxVÓíõX—oªü»þº™!¥œç\®!­í´Æ+c8 ¦ åppûAŠÆÑÅáÆ;KÀ1"ÿ_eûž4úÜ× ÿ±ð¾ÕÿX²þgf.ÏCT[âàBWÊ¥tF„Ñ…m'|ÈÿY-bé¿óùtY!˜9àù(Ýz¢ÊºÌ¾•«Yx-—R¥N­»0qÒ0|”PZÇ9¦²Ø%>ºæbÛ¦¿GÍ•¾ñê3üøçÏÌX[€Fe‚¥­þÎÄ]x <Úcsà/f}˜G©Òç€ûðQî÷­x0)8ÒsÔPü°‰…›#,°N=u,Øi]´äÕ{ؼ”3ßÿøŠy"j ;œÂðµQ ¯n´\[¸tê‚ûÒm8ÿ(A*@‰™¥%Šc+˜>u µ)V­< h7œw_HgãŠÆT_:¦„<þ!“­²dã\f.)FiåN· íèâÉMSÝüIÞ¿Ÿ+¶yÂW~Ä|³9ÙYÀ阅„Ö °ÏNzß;HÇÕBùZj­7P>etýgEøÜØ#ÓF¨|ö 5ɯ­ W™mqÖu®6J¥’¸ËqõðÒâÆ,Õ‘_miW «ëÚÚÇëŽÇ Ý */]v4­.†Ö­õòn´EJgÓ´I,±x‘Ù¯Eb)h»Vü†¦sãùŠ:u£ºêkõ4ë]§«ëVÃϯLãtßY|6ÂCÞåSJ¥’-ÖUëÜé˜7©ŸTׇHÊÏÕ8-U«öÓ§®0µâ¬óÚó¢-NòTË2é3¿ÚÒ–ô_[ûxÝñ¤»Aå¥ÇÖºO뱡öX·nHðî³E°§×ØAXøe'+Vöh« º"Ð—ŽŽ:¥¿×N³Þuºê|)—×,b³æÆr—B#p“«îN®ï‹#S–¤KK±ÅÈ$/>*qÖ¨b5A‹£ …C??„psh™66-7·úè.E’$Y-´$]ZŽ-Æøßÿ(ŒŽîLLðì5¯k_Ó#¶‚\û´Ó’tia¶´ kjÓÒíkbnjIêÝŠ„\ µÑ’tiI¶ÈÈÔy¤ÐäO5j§%éÒ’l‘‘©TªÆÙa»¥ I²&ÚhIº´$[ddêƒAµþÂÙ3·:w²&ÚiIº´$[dd Å §àÐæVçCFFFF¦‰¸tñ¼Îsò3™*d§ ####S…ìdddddª‚ŒŒŒŒL²S¸ÕˆÉü7÷f­‹ÓúùچǛÆá?òû¾ŒÆ·9!es|Õ\lOl¹6ÊÈ43d§p«‘29³ë?Ž'ô†¬”˪Ï1rPzõÀÈ™ÿ‘¯- ˜ÄîåËØv!¯‘3ÜŒÒ9¼ú¶ÄfËoËÈ4·ñí É[?áåé[±}úWæŒvCA)I{—2ÿ×uì?—B±‰mz<Ìó/æÝ±Ádmùš)s£) Œ‹¿¿ÇÔ¥‰>ú>ŸL‰ë™ù¼ûÑj’Dâoîˆ×8vüN½Æ2²G;‚CÚÑÁÏöpfºÐW^†–gsàNÊ«ŒLù-#Müj>žy„ðwÞÆtÎdŽVž0ëÂË ¢RWd«[8ª³{x?æ$ bgü4ÇYõW,~Ë›ÃÛ¢Ú]aÜä?X;˜g*>D«3þ[…TÀ¹µ³ùzñN'¡¶q§û3Ÿ1es=ôŠ‹Eâ—>Gï¥*‚ž]ÄÜqž(JâØúÓ·,Øx”„c\‚[c”+¡¾%5¥zÊ«µžó)›¦3nM )…*ìý#yxÒ«Œ±Ðó‰Ö&¶%Hþ ¤LË éBéE–Îø…¼a³x¾³†…7fH]-Kbée˜¸¹ã €˜éL3B;V5†faQn"æT:b# =ñß ÄKËù䫽8L˜Âì®HWÉs´o`_ÀeðÌéƒ{R>f¿ÉôÍæ xj*/{«H=ñ¿ž¢Y;}åUf¦§<Ë™xõ≑p ™½¿}Ïœ©sð\ü6º>°|lƒïàŒÌušØ)”qyÅ,–1НGûc$Ôµ·L)që¾dÑÙ@Ó kÊ2ÓÉÂ{Ûj·Ÿ±=Vp%= »zÄßxˆY™daI§ð„ø›7›€ÚÆ__*ûžRö¿üµ1• '¿äÍá®åO;KÎÿ³—7û[‡¨§¼4zËS Xö o· ”@;ûö?»‘½gˈhßtÕWŸ-ŽM–™[I“vnÄÔÍÌû=û^Žo]Üb.¯ù׿$5åCFU ,Õ1i 㢠ʸŽy¬xõQ^þt1ÛÎe¡iÄø5q¸RæHH[§;®7ZWyrþFÎî8 Ùdç4ýz¤úæUFæN¤ G Ùû·°?ë û' byÅQQS†4ï8?USz ¦”¸µðÚœ$¢Þû’—#¯OÃ(lí±%“ŒL*ûÑ%¤å€­½ñßÔ¾ ÿl ÑX¹l9Ÿ<¹”OÎâËGÚ`Üñ •+u™u——-J=çj/·”J”HM.…>[dw!ÓRhB§ `Ýûm†V[¯/^bù»qºçLÞÙPpì'&ϾJÄÔok8…kÁ¶:|–Ò®!¨ÂãÑÄh\쀭§þøoy¦¸wƤÎé5ç)^þk'G·¡c…ÒM´bJÏ@üŒVp(ú ¥mýšõs„êÔ]^ö¨ôœWhq · }¶Üi#8]4é3…¹#žæÕh ±V Ûºâá`Š &³qÁJÒÂ&2È)ƒ ç2Êà FØyxaoƃ°aÑ|åþýìãYóýfŠÃ_ä@% …žøo‘]bÂþ>"âëç„IY2G.ç‚•5V @°ÆÆ ®ÙÆxwºº›×;‚eÆ÷æåÅSø€ i焺ðq…Í|ä ®»¼Pè9ßœÐg‹ŒL ¡y}ZJs‘Óg‹ÉÍà ûªWzóȼ…<¨ÂwÌGL+ú’æ¿Ç†Bs¼#'0ã•!¸ÞÆ®ZYævü¾œïr(QYâɋµÀ™{ÅîY«™³ºŸoÈˆÅ˜à‰³˜e=ù+¿eòÂ\D#+Z¹·ç¯&^šY/ô•—žóÍjýó¬{22“%œŽ9APHh­û÷ì¤ßÀÁMž1™[Ö k‰ˆŒªuütÌ y*TFFFFæ:Íkú¨…#e®åáŸr TËI…5÷¶’w"î”ÇÈ222-Ù)4!‚Õ=¼þS ùÚæÊ%Ö®rqÈÈÈÜ^äV¨)QZáêgu»s!###£ù™‚ŒŒŒŒL²S‘‘‘‘©Bv 22222UÈNAFFFF¦ Ù)ÈÈÈÈÈT!;™*ìþý÷_®]»Ö˜y¹s‘²9±ú'íHj>Ûõˆi^ñ#¿ïËh>yª/R6ÇWÍeÁöÄ;×™;Œ;…¤¤$&Mš$;)C«–²éLÍfßR1‰ÝË—±íBóÙ~ºÞHé^ý[b³›®22-œ›š>ºvíÚM8 É[§3ºOž[šPÑ,%iï¯|ôühßÛ‡{äOWr:¯Z“ ¦²ÿçwylè½ôíÿ?X±¬ë祌¿yµOQQ×½ÆÿÈ™ÆüšŒáè)/½ç›wR^edÈM?Sh˜cÈ:0›·¾9L‰QµÃGX2g#y¡£x}ÚǼ;6˜¬-_3en4E”qñ÷÷˜º4‘ÀGßç“É#q=3Ÿw?ZMRÅü‚TP@¡ÒŸ1ŸýÌ/¿üÂ/¿üÂü‡ã#oyÐW^ú˳ùp'åUF¦á4Ê6•ŽaöìÙ8;;ë ¯‰_ÍÇ3þÎۘΙÌÑÊf]xyÁBTêŠlu GuvïÇœ$A쌟æ8«þŠÅáÁoysx[Ô@[£+Œ›ü«cóL)/—<œh€¿¹Ž Ü$²÷Ïãåíç8\‚…GM|‰‰÷¸]ÿRš˜Fôoßñãßû8Ÿö­»1ôÙÛ¡òË]"q¿Ç»¿$1»•µ'xŽ×ŸèJ+ f°oÁ—,Úv’K‰Ù”ÙõÊ\Þ耢$Ž­?}Ë‚GI(0Æ%¸5F¹ÒíýJ[©žòj­ç| €DʦéŒ[“BJ¡ {ÿHžô*#Bšø;úl ’{2-ƒF[}dðˆ¡ô"KgüBÞ°)<ßÙºÖ]åÄÒ3Ê0qsÇA11†S™f„v ¬jìÌÂ:¢L$æT:" æd’£RPœ–JNISí%ŠK¬é4î->™9™q)¬üà-~8RXq¾˜SóßäÅWñ3…Y³¦0Úû¿¾ý N—T„° ³S¿àû¹ßòÞ(7.,™Î÷;ó*æÔ³8³{‰nÙ2ëk¾šö #ÚÛ¡ò90ûM¦¯É ícSùìÓÿc| еíÆÚ„è+¯2ÊÀÄ«OLžÉ¬é“è¥ÚÏœ©s8Pмl‘ 2-…&Þ¯ŒË+f±ŒQ|=Ú#áLaK‰[÷%‹Îòèœ^X P–™N6ØÛVóeÆö8XÁ•ôL$))V`eÃ÷OŒàsÑŸnÃxî•Çéêx«{r £FóÈà ”@—N>”\žÀâ•{™Þ³Ü]ü¾ò ~.à­á^(€íÜ)¸ô¿/ÛÃèzaŽ€¹ozøVD`ÉÅ­YsMϊ°ðíD·A•ŸGÊÞÉ_S zòKÞîZîéÛYrþŸ½œ¸ÅV×…¨§¼4zËS Xö o·r{ÛÙ'°ÿÙì=[FDû¦«¾úl‘pl²¼ÈÈÜJí®rvvÖ;}$¦nfÞïyÜ÷Ép|Հ·¿Å\^óoÎI$jêWŒò½> "é™40z“ÅQo‚&øc›YøÕ÷LbļÁ·)Gø 7BCì)‰>O¼¦~Wc9_ìDT{·ëÃ3¥;íÃZ±`ß®jz¤,%q×"æþ¶“qi«­PhP¶-©+%4q¸RæHT[§f÷≾òÒwþFÎî8 Ùdç4ýÞúæUFæN¤Qœ‚!¡|Î} û³®°Ò –W5eHóáóÓX5¥jJ‰[û¯ÍI"ê½/y9Ò¾ª¡SØÚcK&™"Tö“K2HË[{Ûš·¬Ò÷Ãxã™ö½÷»ãÇáëÕ´M¦$‰ ( nJÄ‹Kyÿƒ(¿Ìä—±âX=ãCvê»P¨HAl^+aô•—RoyÖ^N+(•(‘šÜÔzÕ=™;˜›v †9ëÞo³0´ðúšsñËßýˆÓ=gòþÈòÚû‰É³¯1õÛ@áB°m‡Ÿ¥´kj ðx41WÛkí%‹Òmj(KÏsðHfþ¸+AéˆŸÑ ŽMD ñ,Ï«&ž£'R1nˆ§J.žá¢ÆO ¤£•¢9î–ú››Ê¸E_¡´­ßí}¸\ }å¥Ò[žÍ狆Ô=™;‘›r †;„ræŽxV_¤)ÄZ%`l늇ƒ)‚˜ÌÆ+I ›È § .œË('açá…½q>À†E_ð•ûSô³gÍ÷›)‘• &°ã·mäzàf¥ ?î«m£8`"=Üoõm+‘ù(—`RœÈá¿°4ÉŸG'wÅ À²;còâå_?àsÓ‰ô÷‘¸¸a>‹/yó𫑘/_Üù“Õ‹6âÐ×e*Iùúš`Ùƒ±Ã½yyñ>`CÚ9¡.[ddZ v ...õr¡¹Èé³ÅäæÎá…}ÕŽ+½ydÞBžTá;æ#¦}ÉóßcC¡9Þ‘˜ñÊ\@Y!™—÷±bÅÿHÈ.ÃÈÚ6Ýžá³§GÞâ÷,ñi†Ý®ßxï\Ê”V¸÷àù/ŸeX@e¿Ý„'?ã“9üôÛG¼ž v­»2~æ$Æ—›é?–)¯¦ñÍo³ygE¢Ú+;O‚\-õLOͰ..(Äû™X¶=òOø IDAT³qºH¤lšÎ¸5)¤ª°¿]º”éÉkùC;2-ƒ¦)”^déŒ_È6…ç;[׺±«€˜CzF&nî8 &Æp*ӌЎUŸœ4 ëDˆ2‘˜Sé5FŠù$ü“g,érO¦·Ô¨bNÿòoÌ;ŒYïgyÿ³/˜9e8îI‡8r9Ï€ùð\.;F¦ÏhÞûìKf}ø¡uyXfÄ>S,ƒc0ójODÇ ”t ¼UŸÛÄÞ³eD´¿~nQ_y)yðµç9ößñÔ„½ô 9¼§€‡>|Hs*¾¼&`؃¾Ý‚PíìØÿìÆ¦×Eá^w^edZM:RS73ï÷<î{a8¾u~]¾˜Ëk>äµ9‰DMùQÕKL˜w™¹óf3ó‡p>4ƒI3wq —¯h®Ær¾Ø‰Ž½©Ó¬z pvÇEÈ&;çÎ^wSwy‰ä§\%YãKŸÁ‘¸ª%Eùo}4É:)œÝq¾-ºÔ?¯22w"MØÕúÿöí-FκŽãðov§ôº»] a{´ -­öF´ic4 €"&jjb^  DÑ ˆ(‹Z0¶¢7bI¨¦Œ1B ’@©MP! ¥P°Ýh…ÙîxAó-†ÊÞt-ÏsµyçÍæ7óϼŸÿ»Ó®=›­ÍýÏ׿ÕÖý‡¨öÚ•uÉßo©¿¶¬ÆU«þ¹ñæúÒ];jùMwÔ5K{S®ŽžÞê©Ýµk÷`UþÈþÆ®zuoUOoO.?“§Õܳ¦Õܳ×¢‰;êŠo=P¿ýüòº|Ú05°ýæªÑqìv¹ÍfuV»ã& µ^µÿu÷í›ê”U?¯ë.>¥:ê²úÄùkëêÕß«{—¨n\úößÙèì•×¥=Ô¬Ë&ì@0LF0 êúÈõµ~ÑÁ#{ìƒÏÕý_½µ¶}ø¶úúçT³ªV︯¶müIýîÀìúäûO­Žz~´ŸAtLjV81Œ­;˜‡ž­mϼ^ûöÝU_xì-Ç;çÔʵëkÕüfÍýÔ­uËî¨þø¦ÚtprÍYú¹ú浯¾Žªöýµó™Gêá ÷ÔÎýƒ5aê¬:gÙ5µæÊKkæp¾k“ë«¿S7Nø~­[ÿúõkêôóê¤cuƒá¸õÎëUãßWWÝvCuÜu_Ýý媿uRM³¤VܼºVžÑYcê£ÂP³Â ¢±wO»ªjÛÖ-uöÂEo;aóŸ~_ç]pñˆvÜØRw~úÚÚréºúÑgfùK3Ý´±Î]ºümÇ·mÝâZÀckûèÕÞ½±®»üöúsë(vtÕEßÞP_9÷]¿×Œ¢0\š‹jõý¿yóçCÝuݽóëµ£í‘7:««Ï2cƒ«ÑHèœR}ó¦ŒöCrO€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€BQ D€¢9Ô }ÓgÔÓO>1³0ú¦Ïø¿ …™³ßsL‡`ì²}@ˆ‘(4›ÍjµZ£9 £¤ÕjU³9îHºº{ꥷ À»L«Õª/n¯îžžjìÝÓß®ªj·ÛõÊΗkO À»E³9®ºº»ëÔÓ¦‰ÂÉSºF{®QÓ¿ëßÕ=µw´Çuÿ~ÑÇó:xåIEND®B`‚gnusim8085-1.4.1/doc/help/toolbar.png0000644000175000017500000002607113327066704017107 0ustar carstencarsten‰PNG  IHDRù&Ç©âªsBIT|dˆtEXtSoftwaregnome-screenshotï¿> IDATxœíwx\å•ÿ?÷ÞéE£fY²dK¶,[¸70nØzÝÊ’„Ë&6!!ù…`—Y ÙM,é@–4B ÀŽƒ 0&îÆ–eÉVµº4ý¶÷÷ÇKFFm$ï|žgK£¹÷ß™y¿ï9ï9ç•zº»2ü££½ €Ü¼ülÉG‹Ì};µÈ¼ŸÃã£tßäm@† 'ŠÂôd$sßN-2ïçðø¨Ü·ŒÈgÈ!C† §(‘Ï!C† NQ2"Ÿ!C† 2œ¢dD>C† 2d8E± ö…ïïÛaƒ>±×㡨¨§Ó1,Ã>ÊD£Qöí¯" "„À0Œ}˜¦‰aq´ÐA–eòòòXºäLü~ZìúÝëÿÅ›û^À懼J ¨·%™¥Ó.çSg}--v}Ô1ô5;NGÃ:ÂÝ5D‚-H²Œ?g2å ¿Å„)—êõßxs3===x½^V,_†$I£zÍ 2|4´ÈëºÎ¢E‹|a´µµÇ©=tˆñãÈÎΑ‘ƒaÇÎ]NBEa\~>……ãGuܽg/~¿Ÿ¢¢¢”ȇÃaÙx#5Ôï1‡ÛÏz‡Ãa477óÚÆM\zÉÅi±kÓûÏñ?ÿº E>þÛ¾}ûæÎó¡ç1LÛ~±|TD~óÛo¢ëúޱÛ윹xIÚm ‡÷>ÅÞÍw1yú f.\ŒÛw!NW>¦©ÒÓ±—¼qñ`=“çÞ6*×olj¢««‹‹/¶>#kÖ¬¡¾¾’’âŒÐ“Ž óõ? €Üå×’{Öu'Ú¤“ cñ×ס××"::rs±MœŒsù¹8—®Dò¥ÇQ´]j½®óp Fw'Ä¢Ö\nä@¶Ò)(%¥Hç˜Úu"´È !B‹Åúý»$I†A$áÈ‘#TTT „ ùH ªªQP0.mF¬©! Ó{ Ó4•ÓO?ã¸Ç¬_ÿ*K—.ãàÁƒ´´¶R1µÇ“6›’èºN<§¬¬ UUÙ¾};“'O&×£üðóߎ|_ýùwÑ4h4ŠaPXXH}}=ªªâpŒ,"’N¯'‹­;Þê÷5 çœÉŽ;Y¼øÌA3v‹a¬<ëœ!³qÓú´Ú0Xê÷ý÷ߺ“s?þ9<Ù‹Â@’dôØNôÈF|ž"V\ü%Ö>ó …Sÿ ·wBZ¯¿s×.:::™3gMMMÌž=›êêjÚ;:˜7ÀdíD¡u6Ñü̃ÄêÞÇURIáÕßÀž›Þ{3„iÒò¡ë}J/>¡ëyëEâ͵^u'’¬œhÑ:iþÓC½îÝ7±ç¹"'ôìo þù÷x*§ã^Žãì%(Y~Àè¢66Þô ¿xï•×á¿ò“HÎQUC'¾{'ê¾Øóó±çåà,+Av:@3¦bƒh‡Ûú6öÊÙ8gÌeÐR8$þðÇßóêúW1Í‹žY–ùØ9ãÚ«ÿyÐÇ úfšfJèûC’¤TØYÕ4\.ÙÙÙhšFgWš®SÇøœs8š››ëž:‘ȈÅ4[ç”añ‚åÇ}Ý¢E‹úÜ×þ0Lk»ñKWšß³¡ÐÔÚEѸl@°}ý™=O£jÇ:‚Áu´5ÄåÉ¡|æÊg^G´å›8ùÌZ¸„ýïÜÇܳš6;iiieÚ´i466’••XŸó)S¦°ÿ~êêê˜8qbÚ®™.šþø ÙÅ>Š—^M¸®Žú_ÝIé†ìòž0›„®Ñôô8•ò—} ­£Y‹S´t1GÞÞJãS÷2áSÿŽd³Ÿ0ÍX˜úÇ¿Nþ¬r¼K®"X]MÓÓÿɤ[S;ô¶VZ¾õ%œY>Æ_w² D¸½n?º¡Z/R(/ÓàŸ·€®ÍoÒ´aßù!¶üô9|½Ñ¡u/£8xgÍF’-ŠÙÓŽi&¢¼²‚¬ØqN(ÂQXD¬î0=µÕøÏ½É~§ïÕõ¯2±¸ ·Û=äc“ZÛ[s£Ñ(¯®utD>)ðÇù£®i(Š‚ßï'Ç ‡Ãtvv‘“3òнaH’DøÝ`DZÏó¡³¥`ÐZ³ôxŠb…ø¢Ñ(ý$½õ~N–e@êw§ÓA8N‹]ËËþ™Kç}MÓ?~<²,c_~j9}æó„Õ=}Žñ:fðµ_>Ê=—üÓ4QUEQ0M“ÚÚš´ØÕ›[n½…OúSx¾³³³ÏïÇŠ¼‚[n½…ŸýägiµçX~ôäK\wå¹|ÿ‰—°;*æ|ÂÒ Œ››z'0™™KfÇú)™|ªö4. ‘PSÚìhmmåÜsÏ%"„`×®],_¶xý7˜9s&.—‹+V°~ýzLÓL}Oœ%Ó ×Ä[TˆÖ|¬©Óˆ¾±™Ö—Ÿ`ÜÅ7©-F¤›º_~ÜòB²¦F¼af¤SÕ¬1MQ1U•¼Ó¦Ð¹¯–ÚGn§ôß¾â |ò4Ò¶öI­•¬ŠeDïÄ‘_J¨¦×ÄÓÆÌ3§îÎ;ðMŽ+7è{ï‚,"#É ‘7&B71»¢hÍí¸Ê*Ð˧Q÷õ/Sú“ǑӴ. ®µ/ãÈÍÃæñ 55‚„e‹l‚,!Žª<˜a L3‚Š`ËÎÃÌ1éZû2Ù—^”æÐ½bÀèèQ$$YÂn·÷ûóp’'ŸúãýÝf³a·Û—ŸßçGÓ5dIÆáp`³)TWWËÈc1M3%ôI ÝøP‘¿êªk>ðܦMSçH—ÈGc1EÁápàr¹PU•P(D[[ Ð í˜Ä2]Ñúüît:Skè6›P¨ÿd½SÁ®ÞÔÕÕõùýСC:tè¯Û¸q#¥¥¥”––÷ØtsàP3ß¼‡Ÿþð[ÔÑøî/þÊÝ·^Áô„À a²uÍM4V[»Ó“rÌ6»‹X¸“þÇšàN(¿‚…<4L¯5ù=”$ Y–¿XIžƒPN E×ÜIÍ÷oaÒùY(Nñ#5œ±ˆÚÕÂU\îYcb‡ÖÝJÝOï`ܼ ü¥SˆÕn]ÅTu$$ UG± ôæzeE(¶~ïʾüöì‚1±3¸sÝ[ž§ìÒKP›¢8³Ð"QšßÙEé£;±íMÛ~‹,ËxÇÛ³0ea3©—'/Àˆ¤Ð›&úÞ=x§Ï ÒÚJÛÓ¿§àúÓbWdçN$IÆáó¡·¶&‰]Ãït`SäT” ä'®’e³!fk+Žüqh‘‘]»ðΗ»’†1hmùñ&kyM–ûÿ9+kðnIÒ®kð±òòò8ãô«eFGA)>yõ¿½ŸIÑvŒÎ&JÎ>‹ÃO}û¸\¦Œª j[=‡» Ëã), V³ ›/€Ùeà w!„‰âò¡«àð9ÐZðæå‚iRóàç(ûê£8 F7çA=rˆægbÒ…ç¢w6a†{°åN¤áå¿Sxí7pŽ›ï ÒüôÓL\¾”èˆxI–²@2L+.IôQSa•ã S LaêDªªÈ*ŸFÝïGÞǯBñùFd—Ú³›¬‰%h ë I™q+Ï£íÝ·ñÆ"Ø^°n ÂNãV®¤íÍMøu „ŽÖÞŽ37žÝ;qWž†œÆÁäd<]ç*iK¼+ƒÛf³át:°Ûm©µsEQe9më‚I‘ïûÜÐEÞ0ô”ý…чC2L¯iïïÝÏóngÃûóé­ÄçöWc©$¸$9ÆW¯¼šp,Æo^ÝÀ¯¡½µƒ‚‚œNçÖ¤O%»búôéD"¶mÛÀ¼y󨬬õëöæÕÍ;Ѧ3‹¨fÐÖfOµ`æÜ…Üûã¿à°ÛX¶¨Yq²ø’çyã¹³qù^¢¤l’äÁP«i>¼ªÝÛYqÕ&ÛÈ/¹ø"jjkÙ¾}óçϧ¸¸˜‚Ë«t8VŸ†}ûX¸p†nÐÚÚF~~­­­\rÉ%üõ¯Å4MÚÚÚikkcÚ´Š1øç¬ zè7¾HÑÒ¹Äkp•Q¸d‡ÿçNÊïzÅ3zeWM¿Üé%¸s³‰UoCöeëSÿ·7)½èLL]S€þþ6EËæY“€ÖFÜY9d—z¨ÿÕ}Lùæ/FÍF3áðÏ¿Aá’Ó‘Œ(ñæC8ЦÐüæ;d-½Š¬ùgÚµ¥cÓë8óÇC4†Öщ¤$„KHÉ5ïcÇ÷^"O2ÜÙ…’“#¯ÎM›È¿è¢Ù=|›Ç ºŽ‚dÙR¸rö‚ñLøØù4üí<Ñv{(>÷B—›ÂegZ¿ÎÒ´X ÅíAqûˆÕÕá™:uDvõæöÛoO[²p,ãó·}vHǤՓÐIwÉ$²ä1º®*ñ`0$›Èô>Ÿ>@¸¾?týèy #="F±Ùlìß¿Ÿââbrsg&¿]ÿk®Yq&‚Ž£¨);"Kùüéw8}ÒU,œt!===©¤ªp8žüÉi×`˜?>‘HY–™?þ˜\3‰¦<ø“ç¹ésÿJCšjÔÑaOu ÓgÍã®>ËÃÿïÏ«Àæðsæå/ñú³+q¹”ü€Žæ­¼÷úˬ¸z#vgz'—•ÑÕÙÅæÍ›©¬¬dÜ8+‘©¥¥…Ý»wS^^Nkk+n·‡í;v „ ///µ<•——Ǻ¿¿šJ}ëí·9sñâ1ú‚Koæp]ÛßÇ[ Zó>î)§‘5ÁKÝÏï¡ìKßµD¼HÍ *—£©BrûˆwFh~s7zLEè:BÓA˜˜º†Õhzks'âÌÎÁ÷àÌrÓ²uÏÀ.BÐðä· ”åâò» ÜÍ—Mç®ýo)—ŽmîBÛš5x¼>Ô#­˜ºdÊ–/I 'ÆÌ…õìܲž3¯x ·¯$­¶ÍŸ?‚‚q¬Yû7Î>Ûòê¶mÛÆòåËö˜3g‘H°ú$—ÌÊËËSå‡íÛ·³wïûÌNS•É $Jnº‡ªo߀$uâÉv¯yŸœŠJš7n¥åÅ')¸ü_FåÒî²Ùtï«&P1™hcm{˜øåG©¾÷“]C$Ý5f.$z`²ÝI¤±ƒžF•©÷|{Ì«º«k LŒÖÔŠÐ $9éÁõâûqäzó½DÞìêÆ^TBÏÁÚÛïì•› # k WH¢«‹ž¿¯%ëÜóQ\nJ.°&ŠÓ…‹Ñ³n-FwW/R,†âË"ÜÙ=b»zcš&¶@%+ {^E×^‹eÄ@z(I^}5Á÷ß0ñýÃH[âÝ@ŒäØþΕy™‚3VÖ^J­ %n¢)@ÖÖ0¦0˜&’i"&f° ³«ÑÙB»2ôzÆ$±˜•Y‹Å}ÞeåŸ ídõ[¯rþ‚™hZ Èv?«ßùSòÎb锫ûDL¢Ñ(º®ãp8ˆD"Ãno{²Úp ºšêꃘ¦É¿ð%žüõ¯ùõS¿é%¦ý|fŽyÊ0u¾ðo·óÒ˯ Ë2ååS¨HÃL\Ó ~ú»µ|ñ+_ ¤‰´0J‰ëœvZ%·ÜýsÖ=õdùÜx²Ê8㲿°ùùKXxÁSòFG<‹‹‹ ¬[·I’ðù¼”NšÄ‘#-ücÛ6B¡6›ªª*Âápªrcß¾}8N*++ …B´¶¶2^zŽƒìöQvûQ}ßM¸æ!Å£èµÈŸ^Díê§FMä‹?s7 O<@Ç‹oâ.;²¯þ Ǹb„!0U¡Y‘GIUÁ¸'NcÊÝ¿¢þ÷Ó¶~ž©s˜øù{GÅ6€¶—CéÇæ=´€é£mo3åw?ŽìÙ:öpˆt…=³œå„È#õòâ+òª,Jdµ -†ˆtGl—³–M-áÔ%$Þ4MLÝDv8Ñ;«%râe`êèZŸ…®Y_`MUCVUPUˆ«HjÝ~¸2‹a³Ùp¹\Øívt]O%\H’Äy§ÝD\‹²nÛÛ¬8­$‰¿oßO‘>gWܺG¦i¢iv»Y–­ZùˆéÉjÀ¾}û¹òÊ+±Ùl!øÃ3O³üŒÅ„ÃaÂá0‘H„P(„¦Íô?ös¤Æ4.»ì2ÀZ.z饗Ò"òv›Â#÷ÞÌ׿û+>ë¿ d»R™Ã®0©0›Iã³h¨«!Ø£òô#_!Ëwt’țŹ×ïÂæÝ–žŸ¸òãÀÑï˜$IŒ³2šuºº:ìv;“'O¦#Ñv´¬¬ŒÎÎNjkk),,Ä4Í´v¥*Â4q ÅбŚŒöìÊîxäƒv"5FHB i"±”ç((aÊ]c”Ínk9G2¦©‚aö;ç tzLÅÐŒ„ÈK}Öâ­ïÅ;yöñæ"Ö¹´4ü_L¦n`Ö$\H"åèéÂ$ªªä3^ôÄ5ܺ"I)OÞWS70Ó|MÓ$ûŒ3(¼öZZ^|÷äÉ`³ ,Ø6žŠ LÃ`âå—säÙgGWä“YèC¹ÈS¯¯DÕ®ÛÚeËxwhÇ–Tœf¤^I’"/@Xåíö¾gͺ…çþÑÛï[ãÙ®é\4óßú©$IÄãq ‘$«N2 ÃøSË.€x<Ž¢(tuuVg¾C‡Q[[ |PÐûC5>]ñŽ×zy8,?Ǽ…Ï}ëg|êúkð¹Æ1a\%ãxw6oâë·\Áçm©kkcëýаaÁúzü%%¯ZÅÂ{îÆ•ŸŸ6ÛŽÅ Jlxm#mmm ëVri~~>Û·ogÜ8ëúÛ¶mcîܹ´µµa~¿Ÿçþü<ùùù¬Z96%lF$ÄÁï~™Ü/T ÝD xixïã.ùّ̘D&h:’nXÑ>MÕÉÆñÈ»àS´lü E §¡5×cs*䕨ùï;¨¸ÿ7(ž±õæ€x0 È–ƒ”ø>^|¡Oxï½¼y!°TÙn'Œ d¼×€âtc¨ !L$ À@óû)½äR·31&(.“.½”C/¼€+DIÚ+È ºª!9ÒÛQÓ4M o¸Ùf£àŸ@>fìý0ü‹á3Ùá ðúëO®p½@ŽÆøú'L܈×"<öì·‡l`$ï$IÍ´fˆñ8†$°dÝ´’g SÓš†ÐTL5ŽˆG1bˆÅb1ÌX)Oxò*jhø‘H$•{à÷û±Ûí¢Ñhªq À?Íý |÷®˜óËþÄß¼^oªŽÝét¦úŒ¤&ýdµ ,Ï[Ó4â‰Ì~UÕ8pàÀq“úúûü)Ngêxè?'d$T”ñÌ¿Âçîú.gæ”\¶ny—eóËyù‰»øvÉjÜ´‰õ7ý SæÌa᪕(ºëêhݲ…?.\Ĺ¿yŠ +V¤Õ¾ciiiáüóϬFB^¯—––òóó8ãôÓxëí·iiiÁï÷‹Å˜3Çês¿víÚQµ­BP÷Ø=ø]Q²|.ÌP[víû ÏaüÇG'Tÿ¡Yµ?¥—]†ÍãÁŒÆèxé%„i’wÉÅØ<J/¿œº^ÄÕÝšŒHŠ„S±§¹‹§‘ØÛEÒn®ÀÑc]P‡Ê=ù¡ˆ|\¨FžØÛØäJâjz³ë%IBíîÆŒÑºŽ ™:BCCª%îºj ¼G¨–èKšŽ¤ êHšžúWRuÌøð“ÈB¡Õ"q’ g²²²¨ªšò¬n\ñ p´†2ÙúÖ0ŒT‡·dA»Ý>¢Lö“Õ.°9‹¥¼ïX\££»5õ÷Á|ÞÜ@ï½wh?]äçfñ»~™;x‚C ­|ÿ›ŸbÁ¬¾ƒT¬­¿úz¯ZEÀïG=XƒÖÖ†;¥¤ €ÀŒ¬ûôõ\³õÝQõè{GÜ’“»c£pÉI»ÍfK5ÔI;V4?ýôÚw?}ÃÙƒÛ›]]äM* ~ÛVšÿø3 ¯½uÌÌ™pñyxä§ø\6+d/»/õ­§oÈÞyI±ÑÓ™zñy#¶Ë?­œŽ·ßÅ¡X9XB ‰â•g%>Jû‹«Ñ:­Haûê¿’wÙ¥ØÜn&,_Nû «‰¨ƒ$ÉDu“œiå#¶«7¦ib¨*’͆Ð4$ûÐö?H#t}Xü¤}MþÑ¿žMTµ*4I·¾ÈIÁ—’‚¯ß“&„sïÞ½TTT Ërj]ÙçóáñxðûýØl¶Toúäºi$¡££ƒ`0˜šLéºNKK 999´¶¶lÀGÌ.°9‰¤D:as{I-’].ë+Á&‰õñäGCä\N;Ý÷Y ÓÄÖOEÁÖû ´¸˜lcûvÜÑöH”x(D°¦ÿâÅL(.fëý°ìGëàhhh`Ãk™5k&sø®]»©©­eÙÒ%äååñÊ+¯PPPÀŒ30M“œœvîÜÉ››7#„ ¥¥•Ù³g§&kï½÷---©R¼Ñ¦û ´¯~œÒy“0ÛÚPZÜ y'SûptaˆÄ˜ [cˆMK­É5²ËÃä¯þ7Uw}†‰³Ç¡È6ŒÖ&TQý—_âœXNÎÒóÇÄ– g/ãïüˆ<›»d5Þ׋?Κ|ï5o!Ø„4èiLXµtÄvùJKhØøn—   cÍ:r/8—®¯£÷j‹­¶uÐú+„ià ¿IDATü‹dŸµœŽ5ë0“ï­¬ šÕL&•¦· Æ4Mõ+ ®½–¶_Ä]^N`Éà¶Æîyç"û÷“Ùe´>÷Å7½t2íáúîpˆûçÏ`·Ù°) ‘x;a5ˆatsýe×WUbªÊÓ/¿0dc“$=y„‰ˆëˆh#NdVöZc)ÑCY6L0Ì£BŸx }ÄÞˆ_ä£Ñ(ùùùLœ81µ+_ê¾twÓÝm•f$›)º¿I”Ãá`ܸqH’dõ¾?ÅìKÃápJ¤ÿécÃ:O,ão¥sÞ¡¯§=\ßI’úx€Æ ˜]Zо}îx W$Љ …è@¬ªŠ¼Ù³©`ÇÄxsó[Lž<™°sç®Ô~%%%¼ýÎ.ºðLÓäÙçþL,Ãáp ( 3fÌ ½½I’˜1c.—+õvvvòÏ×^“¶Î\F¬¾†C?ø&¥3Æ¡„:15ÓáäÐ?˜øÕà.M_ò1LkéN·*r$E?!áú$ÎâÉ”Üz‡teóËP"1D°‹²Ô>úï¸'Uà*™<êv8ü>*ÿå“üõ3Ltú1UdȬ${tÌtÜZ<•0…„‰„d§ŸºÁiŸý4ÿÈ'r6§“üy³éܱ‡,›Óê扎rä¹ô%ÞÖÁ‘ç^LÙ'‘lNzTAþü9ØÒ¼®išt½õáª*¯Ó4ñ-X0 G/4HUÑšj|½£ƒ¢›nòõÓ®×âŽõÕª±%šâ˜¦I§ñ.ª¦S5\ö)ÄâÃÿâ¤D>ɉ¢£½D^õæÍ„Ð'ÊåŽ ½ }¼û„ÈG†oWggÓ¦MK5 Õ˜{½^b±XJˆO%»ÀšL$ÏÑ;Éo8¬Ø÷%âR|Ô<ùÖ×ãž9mËœv;’Èá0’a f(„Ëç#X_?¢ëÌž5‹={÷²dÉRZ[[ÑuÒÒR¶lÙ”)Ö€ßØØ”º’$a³ÙÈËËKUB$/“÷Ê4M›()ýþ?z/ã mØõ8"Cöz8´³…¼+>Kö’sFýú†0ú†ë%Uƒ(òÙ‹Ï&zÉgiZû$%Ó󑺻±¹\äÛ9ôÈ¿3ý»O‰3n¼†ªÕ¯ÒÐÚN®Ã‡ kÜÊ»;Vä¥Ä0,aJ²ÛC{ÄÀŸÇŒë?‘6»ÆÍ›I{U =áÅÐ5$!z­ ûþIÉ•„$!ÙìD4Óë¡`nú7üB`$Æ8I’È»ôR„¢ \'¯(d_táï}­½½wÙßH»'‹›#]ØlSFÁh-nÇDdtì²N8Ò5¢õùT|$Œ,Û AFúm«(%Z*Z"oyõ’aX‚¯õìÂZzAhî™gþÄÖ­ïÒÙÙɆ (((   €ÜÜ\YYYx<žT)[Òk2 #•€–lÙÛûßH$B}}7Þ0¼lã“Õ®$kÖ¬éóûp>Ƚ±qÍ+]øJJ…B¸\."XƒŒŠµ™°äó …ð—Œ,XY9÷þñŽ9Bkk v»ÆÆFÂá0Ó§M¬~NNNjGDÓ4ñz½©É[,#§J!srrhhh‘íÙÆÄyyˆžŠËIsm7¶ŠÅ}ê¶Q¿ö@$U‡d¸)Uöu")¼îVÂU»h9ø…nè ð{hܾ}ìŒPdVþøÛ¼pÍíDc&9v¨qk•>è1'E»“®˜AÈ¡pÅ£÷!Ò1’%Ê.Zžg^F7nÙ†žÊ¥è7U,½mÄtU‘©¼ølKôÓg`é•ÞݺnËÓO3þÆaGJmÏ=G¼µ£§£§gôKèŽm%Û¿e.~òÛuxÜN®½l>áxUëàé¿lCM„R½®¬!›$éÉ›á ²bGîéIxòýtc8Ö›7Þ¼a~ ¡ÆZ;~â]^^.]]Ý©uÎÞÉnÉû—Éä›eªª¦É×$_§ë:]]Ýžrv©ªÊUŸ¸’›?{3¬$Iâ±ÇãÒK/ÒyV¯^Ím·Ý†‚®îÿå㨪šêè6V¯ZÅ‘-[˜TQAèí·‰c 0:ì´´µQ¼jÕˆ¯¥$2nŪ·u8}Bí Ìç•5kصkWª<Ñçó¥²èwìØ‘ªŒÈÎÎF×5,X9b»ƒwÚl:ê÷’;ÎMû‘=b3¾ñ=kïïŒâõ£‡ãØ„µñЦÅQ¼Ã«Ò…$ËLþÚwÙû…«±7µ‘“ã ­¡Ï´9£~ídÇLUUÁëfÕ/¿ÃÆ/?H¸½›,Ó]š 311"±Y ’ŒfJt«:J~6«~ð „×E$Ááp|às;¬vä‰$l§ƒÒËÏ¡nÍëtG⸄‚uVqÔ¦$‰z?SHÄ Ùã¤ô‚åà°§Ú²'[³„d7Ðh4ÊìW^ú d™Âo¤ðÆSOE£Ñ^ßýÁiÕ=ù¸ÿ†õ©×ßñ“3é µÓ"DäNƒ?|»f°—<.v»žžlÕû°GÂ;ÞAN†ë©ÓìãÍ€f‚âþ:QAAÀï÷qà 7à÷û1 ƒP(Ôg+[UUÑ4­Oƒ™X,–j=kº®§~‡ÃÌ™3üš'«]v»»ÝÎʳV²áµ ©ó¯^½zHçÑuP8ˆªÆY¹reê¼cÍÂ{îæ ‘5c¾Å‹‰TUa†BH>öŠ ‚ŠBcC×¼ð—]gUN§ƒ²²2Ž9‚Ãá ¸¸˜úúz>Lé¤IØív.¼àÞ}w+³fΤ¸xO<ùëTùNKK 7Ýx Ô×׳hÑÂ1»geÿï!j¾“æm;ðTÎaÚ7FñŽnàÁ’wÎ4­ù-E%n$CÐ\%ï‚Oh³kRñŸ¿ æá¯Ó¼ÃºwSî|hÌípååpÖOÿƒ=ø+ÕO¯Å.)8U°K r¢"Â&ª0PMT\{!•×\„Ëë5»^“.YEë®ýtî9ˆŒ„b€ÂÑÍÑ„˜ ˜˜äÎ('fvçè8+–­àÞûîzÙÜqP…³–¯ÒDêéîPýt]gý†×†d¨‚Ÿ¿öy.¹ ?‘‘-XûjÏÜ_5âM0víÚMÕ3ÿË„¿=3àkÚ 7(¼úzJ¿xϰìzuý~ø{iOür»Ý<øŸ÷3{öðõdµ+I²¤ï¡ï>Ä®]»†uŽ©S+¸÷ßÿŸÏ7(¾£½Ü¼ô—±5nÚĺO_Ï„âbròóqù|DC!ºÚÚhlhHKü‹«W3aB1íííƒAdYÆï÷3iÒ$ÛÌæ…WsäÈÀjŠtùeC‹˜ÀèÝ·“SÓ¨ÿùwi_óþ0†rß’%Ê#m66›mÈÊA‰¼aôôô i­TÁÍ/!¦­_ö¸|<óÀδmh‰DˆD"ÄÙ½7fhàþȇ·ÛƒÇãÆæËú`Ø„B!ÚÛÛ­ÐVp8äååáá¾Ë'«]ýqì`beú'ë¾el6Ûˆ‹Ñ«Ñîx×ÕÝÍ[›ßbBq1sÊìÛ·Ÿ†ÆFÌŸGvš›yôæTùÿkŒäýì½Ôg­ŒÍÙ²º/ÊH©ð÷XTnÀx{W%»B©íχ–ÿ(}%ò2œj|”¾¤'™ûvj‘y?‡ÇGé¾øL— 2dÈ!èù 2dÈá%#ò2dÈ!Ã)JFä3dÈ!C†S”ŒÈgÈ!C† §(™ìú 2dÈá%ãÉgÈ!C† §(ÿ¤׎2D¤IEND®B`‚gnusim8085-1.4.1/doc/help/assembler_messages.png0000644000175000017500000001715013327071117021301 0ustar carstencarsten‰PNG  IHDRƒÔjQsBIT|dˆtEXtSoftwaregnome-screenshotï¿>úIDATxœíÝwxÕÆáßìnz/´’„^5‚ DEŠ‚ (\ņ¶+(¶‹\A¼Ší"‚JA@TPA"M=´$¤ºsÿH!Éî†È!ßû<ûÀæÌž9sÎì|3gv#5%ÙùGY;ë#f-ßLâ ;1mè6` 7Æx”—à݈°m0vV-^é]O‡m9ÉÆÏ'1uÉ:ö¦@PTKnì{Ý9Ÿ+Ošdmbá’Ã4ºk$­VŒäÓ/¡G\¾E 6O³ç›™ðù*vËÂæF«¾Ï1´cU ge®ú£¨?×&rädÙxS-þ:n¹ÒÆ–e+Ø´ç9Þá4ïz?wkp¶=Ø9µ~*#Víf×Ñ\|ÂѱÏ@z_Q‡æ´ɬ›þ_fý´}I§Èq æŠû_ã‰k‚‹™”“ÉFè¡…|¶º3Ãü ËsÙ¹à3Öû„S#ë©§Ìr®·¢ýjçÐ’×ø×§HJËÁê_“F×÷ãÁÞ-)Ú̶̟´E¿°ëX&†w0ÕkÕå†ÃèRÇzÞû©Èå âaœóÎ0ÓÙ¿e+)‘w3ì¡ܳ±æó™üïÉ„¿óͽ²Ø:õ%^û¡*·|–BÓÙðÙûL5‰ªo?B ïÒÕ[Ãndè]Õ1úu&Ôù7¶,ã͘ÃÄ+_\Ýw(ý#L—}ÂÔW^&û_£éëî°ù®?Md’ºf1?Ñ–'®®KÝ +™9ö+~8v%7U-h‰}ß|Þœ°–ÞCÕ<3å !A.ÊÀExögí~<5¸¶´ßYøáÇL˜M§»û1ìnORÖÎ`´7™Yï4°isNžM»?B¯P;–Ïâ“1/‘óâ86,+N]µã»ÖüBR> Tßü ,a%ÇÁ$-5 KdÔ\À˜Ù‹Ùצ'‘V0“W0ûë4Z ¸ÿ©or<5 ðu¹ÞfÇ*Ú¯õ:ÑoX7B|LNlšËÓþÃGµßgh‚9ìœþ/~‘E«;ñl\ û‘Éã—³ã˜.urÏ{?¹ü¹0(É0ðªO³Æ±XiH|ðQ6<õ=ëþȧYÔjæ-9A³A¯rGáYcô £¬`?m{€-Ê:o5ðo1€'zŒ`ø»ïÑ0êi:»„™¾†¹‹ÕëM¾) а~§gîk¹íɽ]gAË¿ú•Àö¯ÐÈÓÀÚôFÚàë¥{éÔ»6VÀ<•BšéK³ø†Ô­í DŸ}¹³²týѬ°?ÃëÑ8>+õ=¼’µsjÑæ†+ijâ`Ë÷ÿbëÖ#ØÔ,¼ ²Ú¦=®‹Á 4kIÎÁÌ^´–> Û–ê‹òµÃ‚wdcZ4Š¥ì žN¥eaó ¦I×[iðÍLlèÂ#-ÜIüz>¿ÝÀè„ü<þH=…_ ëmê^±~ïÈf´.|V§ö=$®ÂÒß`OˆÃš¹–/&~ûë íU0†©‡ ±,Ç(O”¹ŸŠ\ú.lÀ9“Жª5¨fIãTºûÁ=$fæè[÷Òs|Ñvòó,¸ŸÌÄ$ÀÁ%¸uz<Î=[žfÒÛ_÷lÕsJíw±7;”6ñÕÏN YkÂôµ»8˜Ÿ@l§¨ó¿gÙt|¸NÁAÐ-–k;F°èÛeìè1€n`­w#·7ù™I#³³]':ßtWD`Åy™ëþ(ÙŸ‚B‚1²RIͦ`䬖ŒÌsçþ‹§œQzqÁälØËáü¶Ô)±çߎ2˜¤§ƒw¨7ÖÐ&tk?›Ñó–Ó«^( –$Ñø®›ˆvÏf“7d¤eܲr±^K‡Šõ+ärdõ,>ž³’íO’ãæ‡ít>Ö¸‚_Ïž`'{²BiÕ¤V™ÁVñýTäÒfsü./v§±ÌeJ–—^Þ°Z±`Çn/¼[iÓ~ðHzÄZð òÅ8g%겆ÑùÑþü:ìCÞù²Á%Öc–x~ÎÝo'G1Óá¶ä²céw$faÊÃݘR¼È8ÁÒM}hÐÂÜ"¸ùù÷h±q ¿˜Ï[Ãæòå]#y±G îNʬ.û#¹TZmV0s°›vÀÆÍf>/{ ÀÄ´Û î•µLÚQº#3È8 žž€ºÜHÍa ˜:)€µ¶ö<Û6ƒd¼=!3=ÃÕzÝü+Ô¯¶Ä/3öK,7 äñûcä‹ßËê¢öÛóÉÇ‚ÅZ²/(g\ÐJˆümØ\fAÉÿÿ™³<(ñ:K(j¹-`Ï!;Õ®Ž(}Iâh}…ÿ·„väÁ{aèû³Ù 1…e–°:Ôvÿ’-¿Á^·`šˆüClÙvÚu·8h?8ÿ8MÖf–­8IÝ;^bЕþÅ^“ÊÊ÷^᫥븷ÙU…7n=¨Þø&4éÈU“‡1|á·l»5†&6Çe]õGÑñ½d=w”Á%_“»‡ ¿%ãU»a Ÿ3Ç<ÌrŒ‹³vœY&“ô /O ,a×qK³¹Œ[šDl߇‰wðÄÓNgdb7Á­\ûÃù÷k\â.ö™ x°÷54ö1Àô"Ì×r¦NKµZ„Y¾bûöã˜±Õ Îò+ºŸŠ\Fl®öm{ê>6mÜÈÙÛ°ñDœ]¦ä9c™çþ­éz} ^œ;†×-=¹¶~ܲ³/­:;ÄáíàÚ»ØuÁíÿAß•C¿&çL™áÛŠÛn®ÉˆÙcydz"L¿û”ÙûjÑõ–x•Õ–¢ºMÇ¿(sÃrV§×åŽëUåœ;åxµaîôïø95k²Ö±ä7;‘¡xægÓþ ðóÇ×€ü#k–¹ì2úÀY>¿NÊ<°…õ›sðÌIbÓâ™ÌKЦçcÍñL‹~&Ç6ÿÄúC5hvþí(Ý‘YœÎ‚§†?mzÞCgß4Ú\_£`.Vìœ6ÁÍÅö{&9î;gýj ¤†¹%3¿'¨mÖ“$e»‚ hCç¶Ó=k=ï ¡&Y»‚=ùЈrŒ‹æˆä2åòžAÞ¶Ùükäìb?q£åàÉ ïp¾«ò¦á½/ò¬ÿf,È¿gžïP¢úre‰ƒŽCFÞÅ[&’wæ‡ÔíóÃ=&1mμ˜ Q-è1|·Ç8þ$8ù4‘yŠ_¾ÿ…¬ºwÑ:´ä»ß j›b§Nåû•Çi½—ŸçÎç£#iäZ}©Óšv£¶rS—]þ(Õ?¾ÔjØ€À5sûb:¹V_ª×mC¿ûrstáO£*í︕5ï}ÍGß´¡Y¿¸?ß{YÙàáåqæGîÑ7ðÀ#F±>6ððòÀ<–ÁiÀßÅöÛœô³~5¢ogÈ'™ðù‡Œú2“|›'~AáÄV÷-l†-ïއ<&3ÆX–¤»S#¶ 6ÃÀjüŸÆEä`äåå9¾80Œ²o–žQ…óÐEï÷’ÏÏü¬øx©:|ñË00”•µžRõ:9ë°Z­ìß»›°Z‘e/PX_ÙaLÁcbšEÿ/kÝÎÊ´ÛiÔW¼M¥–)kÌJõEñöW¤¥•ç²*ݧ×ûgúµŒr'û‹ýÀg<1d)_~›~qVí¹üX­VW.ÞÜ%”e8KýÌգ˕y€.o½Å_RÁõŸ{`pv(Çä¼¶³t}ëß2Úu¾ý]eÊ\‡Ãõþ™~uVžÏ¾U‹Øa§Fˆ–Œý¬ž³€ýU¯åþÚÅ¿6­_p.•‹“O]þÎþn"©4Ì Žîø™y?&r<õ4vÏ"]ϰG{ç®}A*/#/7·R¾¬6{wï¢VDÔÅnŠüÕŠ¦€ §¶ œW6"—)«ÍöøÒÙ¥D€Ê©h Hã/r†Ë–^ÎL4/,"•ü/ij@D¤€Íf«¼3E¦ •yûEDŠ»vlÓ鱈H%g˜š+©ô*õ=) 0…ˆˆ( DD…\jÌT6Ïÿ€)Ëcw´Œ=‰Þ± ÷;^ÆûqÖÏžÀôŸOV¼ŽËYÉ>¾}.•Â@.-æ Ö}1ƒ¯·§8þö¸™Ìö?°éðéŠÃÜ~˜ŸfÍä»?Ò+ZÃ%ÃÌØÁ£¤gçŽtèØ‰ž£ Ãå‹Jôñ…ès¹¨JãÊ~ŒÕ“Çñîüµ8íGTB?Þ›&•àO<™©,{¥?¯.=A¶,6/ªER¿M'î¼û6š†–õ'ÔE.eylûø%Þú5’ ƒ&Aå×Ån–üåJ„A»§?Ïs32é0h$‡îgÁ{ðÏ—}øpÌ­Ô¸ì¯#òIOI%?¾clƒWn&'ldñ§ï1tõ^F0”Ö¾• ¥ò°aã¦#TëðOz¶mXÉseåvîØçnâ‹9;½í-žìÞ7 ¡{"w ÿŒù;ºð@ýÊqflDШa³£f­IˆÎ¥ßÃóX´öaZ_ÉÏ“Ç1å»ßØs(•÷Ú=þ>#o Åb?ÎÚOÞf¼ŸÙuBb®äÖAЧyÈÙù8ûI6~ö>æþÄö¤L,Þ!„ÕnÀ-ƒGÒ#&ÕAÝÁœ÷<ÿœô ‡Rs°DÐü–vßT±öc,?Š)«vsèX*YøÖôfz^íÆÆÅËX»ë(9>´é5„'{7Æ¿TžÙÙï¬~3“_Žç?Ó–³-) ·Àš\õÀkŒè\‹³2€¼#¬úø]¦|³ž?ŽÙ ŠkGŸGsk=Œ ·Û$uõyìûlKÊÁ·Vs:Ì€«Ãqs4¨ÎÚ³Ÿe¼Åä%8˜éA1¸§™e×çl›s×óz¯'ØuÇTÞ¹3 `?<‹GïžA13ÚÜ ì'Y?ã&Ì]ÉÎyxU­GãèßÐE™³m¨ðåmçÀŒ¹f€úƒ¦ð~¯ã¼ál;š8{e±jTO†ïêÎĉý‰¶ìc»?ÈÀ/3nÆã4Uêüíœ3$öC[ØšìM£qgÞÞ[oýš-[O`¯_µRÞd°zyãaä‘“¤°ý§• ¿—Cã——†%" Ùlø$Ï|npÝý#Tö,žÈ„§Ÿ"û­÷PßÈfÛä'ybF ý†òj|æ‘e¼ûÚ7lM²CŒ£º ‚ueÐswêkr|ýtÞœø ïÆÎàùö¾¤±gãF’cñâ3q¸ÚÊœñÿå?ï×å–ƒxþ^$¯œÌ&ü‹)ñÓx´IÉCœóúÍ=³xõU„Þ;‚ñW„bžÜGzÕ‚€³;)ƒ,6Mx’ç¿­NŸÁ£Rå¿L}ƒ·ž}›êSŸæ ¯Š¶Û$;'€–w=Eߪ&{¿Â‡/<õ#NAð·tn$Ÿ …@B‚ŠíÖ!„úCâ‰dLªþÕí»8Ì«˜ùùjõžÀˆ»cpÌäCÌ2¾)¶òÒuøD·¦mtᓺ~ì^6€¯¶$’ß>¾p ¼k5¢eÓúXiDÕƒËYùIíº¶§µÐ6|ó ›6ÂÞ$²ÄËpZ?)ɤàGËf͉õêžy¥ÝI™yêfÎ?F«¡oÓ¿C;4‰ÕwNæ»MC¹¢MEÛm¡j»;¹§KAµnY›œ½÷2mî*4ëˆOÉátÑŽ6 ~dÎ’cÔ8Ž'»‡¬£‰»­bs»‡³mv)ý'f|¾‡è¾“ùç‘猱³2WÛÐÒ£bcTÀÀ-0ŒÚÑÑg×™[þM*ÍÀ§ÅU4±cåšn»9#{;›vÄj„矩ZþoJe´YúÏ©W:9+FÑåÚQO 7j'pßËCèZÝ‚£ÏÍåïÛÁ®ìj´k~ö@k­IÓÆU˜üóvöåw nâ6~ϪBB«(ÇÓeÊåЊ)¼ÿÉ÷ü¶ÿ8Ùnþ¸eæcm˜ã`y !UB0N§’MÁé­5˜*A°1=£ŒO{8¯ßÖèVîjñï éËŽëºrÛí]¸:6«‹²üý»Ø}ú4‡GwãÚÑEë2ÉÏ3ð8QV;ηÝE/ §Q|9kwq ¿#q%Š]µ#oÿ$æU¥]Ãjå:»w¶Í®ä%nç÷¬‚ý¤äòÎÊ\mƒµSÅÆèÿż’ŽÍ­Œûq5)7uÆï lΊ£[Ë@aþ¦Î KPA$s2ÙE»JÎIŽŸ‚  J3ˆnM0öÁ6x»yáZêAždzÌ´çcÇŠÕz~=iß=ƒ‘/ÌÆÒå1†?G±Ÿù£^äG'¯±¹Ù0Ì\ìv0ÀpÃÍf`šöRU—õ»EÓýµOi³v1sgÎâÕ3˜=p,ã‡“2«i‚%„ëŸËÝqÅ=¼Cý18ù§Ú]œiÚÁ°”½ºjÇÞÂWÙËù¡HgýaX-Ÿ—稡Î6Ây™³mp ¬Ðy8ZŸ«ípÅàÊëÛà6z?%_Oüºu«Ý6U+ãDó¥áœ‘±„ÅÓ (“Íë?s•xzÓZ¶ä‡ß ¼s¢—>Ã/œú êS/6аr5"Ž:îIlÜpèìÅCþ6l>†GLV°†EQÓ’Ä–ß’Îë‹99»·³ÛÞ˜Ûõ¢‰Ž­GM¿ Íåªßð¢f«n<:v¯÷ dÛœ…ü–ë¼ÌZ«QnÉì:`',2’È3ZTñ¹€{Sî.~ùõ$Þ±qÔ,vœ4 î®ÚQ4vëÖ&–vÄQX „#ûRÖu›µV QnIlÜpüó*+G_V`Œr±EÌzö¹Â-\ã·¯–¬gåª}D]ÝŽZ•å r :wšÈ­1·Ý^—ÅS^çšÿàº,x÷²›=Â-q•ã“Deø]EïÛ#ylê ŒñÀ µMv/žÈ´=Qô’P0ÔŽÛ:NbÄ”—ï݇V-å|hî¤n·Èhjò9ó§,!ôÚh­Ç8œqá¾Úãª~ûÁ•ÌûÕNtjxæ%ñëÞ4ðÀßâ¼ÌhGÏ.ÓxbúH^²öå¦FÕpÏ:ÊžSatîÔ°ÔÜ~ù™dìÝÀšõ9xfbý¼ÉÌ8KßáWà `èG~ýŽ5jrEMíðkKŸîQ<6m/p/]›TÃíôföŸ.»m3–ÚEñÑ'ï3&&—N1~px7©…Uí¸£ËT†~4‚WÌ~tŠÅ–~˜¬×Ð6Æy™³mð:T±1rÈÅv”êã°’}îƒáÙ”®7…ñÀÌs(=ŠÛŸ‰¨4'”—"[ɧѽ_楬q¼7ñyŸö!*á^F=Þ•0¢ žÄ|W=ßáƒO^fX2Ç\ÁÝ£å®ú…ãFW=þOz¼Ã¬I/0/̓Zõ«a3 ,NNô­±}1ä8o~2žgf§cwóÂ?8‚úa~dêÎUýyɰ|ú,Þ=xŠ›aq <òLob¬ë¤ |hþÐ8^ xÉ‹Þâ¹Éà[•:Ñþ*~ÔnÚ˜àŸðüiäYý kЖ‡Æ ¢[ÝÂ;1–ê\ßÿ~;Ÿwæ·¥ÕC ·Ãð Á€±Œ ø/ç¾ÅðÒ°»ûS¥fS®Žô-ÕÇÎú¬ÄôygSß`ÒÇ/³4ÍŽ»_54§n°p£éƒãð.Î{á³±FÐþá–$ÄTqZælÜ*:F/Q]lG©>Ž/Õç6lÔéÚ“–Ÿa]ýÞ\¯Ë‚¿5ýq›‹Ìž8•ûï[Dó·¦òP¼>s'—™œÍ¼ÝÿY÷ŸÂ+7WšûŽ—"}þRùìY>‡-öZ„WñÃ’¶‡Ÿ~Æžy IDATxœìÝwœÕùøñÏÌܲ½R—Þ{¤w°a#±WlÑMLŒÆnL¬Q¿¶Ÿ5vìbAŒKDT@ªéR–íw÷–™ç÷ǽ»{·ß]îêóÎk…;sî3gæÌLfΙcŒu¸ ”RJ)¥”RJ)¥”R 0v”RJ)¥”RJ)¥”R?šLTJ)¥”RJ)¥”RJÅD“‰J)¥”RJ)¥”RJ©˜¸ Ã8ØuPJ)¥”RJ)¥”RJý h2Q)¥”RJ)¥”RJ©8‘ÈHdÊcà L ›‡;ã¹4—¨”RJ)õK#ØÁ![0=ܵ¾ØFC‚éMÀkè:*¥”RJýrˆ€íØ$&&Ó«gÚ¶mCbR¥>;wîdíºõ”ù|˜–ICù¸æŠ—•˜È´žíÒ&“I^öúü|»3¹?l'ÏWÖ`hàI$ Ѧm+z÷êÅšµëp»]Íïô^­ŸíÆ.Ϋ|Qb]eLÌNäÇî­˜µaox ïLTJ)¥”ªŸØ´š0aÉ`ÐbÂ1Œx÷a–”Uíig|û Ø`bº<¤¦'ã5ë_ŸâÒ! ËEBR) ®H¾Ï¦´°„Ò í88X.‰^“ ßO $`Xx“HKvcB•D¡]šÏÞ½AÄ0q'$’šìÅeP-™HÔ¿:7\Ÿ²b¥!;\ÓJ =3 Oõ˜Ñ«}–Ÿ>âÉ'`xæ>]\8u§L,Ó„@A.»÷8îd²30jı)«8^‚†é›”Dj¢+ªáý,) t"Û³,Ü I¤%¹íž§J)¥”:$8ŽƒÇë¡[·.”––ÖÙƒ°ºÒR›n=º±qÓˆccDÞáÒñ2<&'wHÁ.Š!‘X.PÆ©S™¿e>‘Šxå´g¢RJ)¥T=£GÙ +´™?dпoŽÐ†Eïï 'åœ =NäÒ³&1¨c:®²"öl[ÌkO¼Ã÷…þº×;|º˜³J·,‹’ŸÖòù[/ñêÒ¼^Œ&þþ$¦ôê@›ìT’,?{Ö/áƒEùt;Ž!Ó `ßÎ{‘§>ØŽá‰ÊÚŒ¹ô^&¶lA¢7+?}ƒ'g­ Ì[uÈŠAyÏD‰¡>-vÚq1¤]Úd’d(Øò!Ý;— !¢ƒVù`FÕEVwŽ>ïD&$ìÆ½áVÞÚTZçqZiW~ç¼G_ã< ´úe®¹ÿ3òÌjq¶´fò¥'3¹g-2RHñBñ®øòíyùë|Üîð~úKÜt9ê"NŸz=Z'¿ˆÜ]ÛYÿÉÛ¼ðÅj®”RJ)U…ã;w ´ …B ¡ ƒÚ³iÓ¸-³Îx ~Ro”‰'ÔoJÛÜe%8Åwn]½‘sZ10=€åż³c77õéZQÆ#ÂÔÖ)¼½£¸"^9M&*¥”RJÕÉÁ;`2c2Á¿â3^œß†+{O¥Ã¤ tÿ 6GÆ:i£¹øªß2,Á¦xÏNvÉn™„øÁ¬gát>åzþ~b\¡bróý¤´ÈñêDÆ·ðÌê¦Õ‚>#Ð#‚¾"J$™Ö}&rNÛOI™CRvÆœu¡=71su°²›¡á¥EN&EEÌô;îrn¶îæÆ··R5›I&ÚÄPŸ¶ ;j!TVDq™—#D‰Uß©S5[Y3™Xmûõ'w¤œ(ÌÍû Xsx¶a`X-è5¢?Ý!XZD‰?‘ôœþó‡«àÎ[˜µÙÁp\ôšq#×ÙË)aÏŽØimiÛµ?-r¿à•/w¢o^TJ)¥TCÇ!++“`Ð_19J¬D²³2Ù°a#†áª7Þ´iÇÔcîÜÿbÛ¡zã L5°}ÅàTþSéIýúðÏEK¸¦k;\¦Áë·qýða8ÂÊà¡ Sݼé8ñʹ4•¨”RJ)U;S‘„%‹–±oý6¾Ú9‰ãsF1uÀžZÂÌmië1ÿ÷ Úe–*ÏÕãõ¡._WW<'D$X%™(Eyئ‰„voöª½äÅ0± ³F<ÐaÎJ)¥”Rµ¡Ã˜±t´ÀHÏM¯Ž¯²Úê;áYKø¬Ð‚À̺÷~vu$SFõ£Ï¤Óè3êp^½ý>>Ú]÷ºOÝ.L@›ùâýUä»"I-qpJ6Q(FÕ^†á„„˜¦…aØÁȦibÖ6ô×€`H° 9Ž*#^f6©>uÄ•B‹ìDÜõÕ§Žã#{b§-tKĸ~oóÝ~Ú''TÎ[S½ƒ£RJ)¥T-,Óbß¾}$&&T$õöíÛÛw-ÈÝ—‡ËeV<«Ô`éÒoëŒ ÙõÆ[V –@T¼9y¥\?l(}|¹ ÂõÆ2{õ*$X• ƒo‹\.wç=홨”RJ)UƒƒÙc#3 ¤l¯Ýõ ‹‹Ë»®Yt>áZþvtÚNÎÿeoçøçß&‘¸w{KÜ´êd‚”’WèÃê|wÕ±Nr—0ÿ« t•ÍÈßßËË3 )qHMðÙƒ7ñÊ:»j?ªMrR£]ä³ia-™vÃÃŒ“d²R½˜”ñÇ Y40Ì\r÷ØHj2cÿ|7ÇnçõµM©OC=Mzž{?sΩ\%%_ðàM˪ÄqÕs ±·±~ƒŸQýÓ˜ðׇ$Áÿ%÷Ý5—mµíµãU}½ìYÊÇË&Óå°L¼òa&^Yß1UJ)¥”ªÛãâ§ŸvÓ¦M+Gb~obùóÓ®]»ñzÝŸk‹7fÌèzcÔïã|?'e€WœðKˆ½ovIx•ÞâpÃaný¡¼‚”9°0܉îÏ{.}TRJ)¥”ªÆHåð)CI3ÿ+XU•ÏL[¿[Îî#Ûжõh¦öýˆ7BAròѵu{ºµ²ñíû‘%_Ìå¥%X]ê^‡ÀŠWâ‘=ÇrÌÈ>tl‘JšSFþöm^LJÃ×°HpX$xÂS„¸½.¯+<â×ãÁÄÀp Ùºr=Ûº´¡EFY(ؾ’oÎå?_þ„ƒáìåÓWgÑúÔ#Ò1D°ÔÆ’&Ô§®gI^7T$碊‰ËK‚Y5ŽË¨ÿ8-~õÚœq<£z´$3Ó$o³A²e`HµúÔ¨5òÕ³÷S¶õHÆönM’S@¾«‡÷LCìðøi}BVJ)¥TC\–E€ [·n''§m½Ã‘£Y–Å–-ÛÂÏ)VeoÀÚâÅÒÓ±¾x>ÃÃ{Î̤bFçÀæ5U¾oåaEMòb¹x}¯E©é&)*^9ãè#'5nº¥”RJ)¥~Ö[„Â]»)¬Öwã]\<ÈÃŽÿ>ÀÿÙ‚Óp¥”RJ)G(..!§]éUÞuXÓ4ÉË/`玤$'cšUÿ ³9â•—pIf)ã“J+Šu´øØ—È“ù‰µÆ}g¢RJ)¥”úµ1’uñ?™ÑËO^~)FJ&™I.ðodñÒmˆ¾3Q)¥”R1²,ƒ””DvìØAii-ZdU .öýy×®ÝìÛ—OjJ–Uó‰£9â%§$òD>lÀÉ©%$I(–ËŽÄ+Ãâõ‚Dæ'‘š’Xk<WÝoÍVJ)¥”RêÈLÁ,Þ®’Ödfeã óÓÚUüoÞ{,Ü%õÌ*£”RJ)U“år‘ššBQaùùù¤¦¦’”˜€åv`Cø|¥cZ&ééI†y@㥤¦ðÏâ3Ÿ‡q ¥ ð”‘m…“й¶ÅrŸû)uyIO÷ÖϘvÌ欔RJ)¥”RJ)¥Ô~²C6@€@ÈŽ¼‹ ËÀã²ðxëÖýÀ¤I“ªô>Ô6_xð²‡Ë4 …jOÆ+¥”RJŃ&•RJ)Õ,ì@†ËDþWŸÄÄäz—×¶Þv “†bÿ¢É^¿8“osNçâ)9˜ûÎt{qeáÐ"ƒALËŠ© ”eË–0hР*Ë•úl.·›`0¨ÃÒ•RJ)Õl4™¨”RJ©ø‹ôLÄr!ŽSo§±a]áoO †T¼ç-ä±L>L¸ò©—±—鎄 L†u=æÐë&¥ì^·ŠŸ’ú2 C"ûóÖ:)ÝÀü§ŸföWÙãsè|úÿqç°%Üütºü^.\Àú%_±zÔta¿¶`Xv0"ˆ€mÛ˜¦‰Ó@6—ó/˜Á™gžQeYnnnr¶msÞù3xö™çã·q{-/_}‹^ŽçõÃÓPù8¶ûþ0ÍpRM&*¥”Rª¹h2Q)¥”Rq'â`X®òõAÓõ’‹z2hÐ ÇaõêÕ¼·ùŸœ{Ôo«”{úý·8mð]”””ͺuëÙuDTl¡dÃ^zy._­ÛIaÐMjËôw*¿;e0*»úÙ÷ÞÃÇÝÏ€ö ûÈfýðì÷8óO§o† OV¬@9íÚÑ2ÅĈìº!Äm˜¯i¹@D L3Ò×ñ sÞ²eKÅß7nÜÈ7ß|S‘$›5kƒ¦G•e«×QŠøâ¡¿òðy0] ¤f·£ûñœð›£è—eQ·$²srh×" 3–}[»ï¿ŠvSJ)¥”jšLTJ)¥T3’‡ÈúJ}†ßïç‰/£Ì)Âãöù«”󸼼øÝ_H´Ò˜žp3n·_©¯"¶~Á·?ɲ–“9ù’³è"l_Çz#‰$ãÀ‚5"ÿÙ¯­ÊnV­ÞC‹Q—sì°žá©gD&ð§Û'"â ¡ð>Ê1o´Öe‡Â0ç®]»âñxøàƒp‡©S§Ò©S§*ejÖѦ¤¨»çÉÜ|îa$„JÉß±Šf¿È?¿ÝƵÿºˆÁÉud™Íöuõí-‚#±í}\Ú}¿iD¥”RJ5/M&*¥”RªùHÔOŠ‹Kp¹\,[¶ŒI=Ïç“MO3aà‚¡²*åŽ<ì0>\¶Œ±ÏdíÚµdggSZZVÛÞ¼ŠÕ%-˜ø·‹9¾w¤gÖàáL$œ ‡ÜÇ¿^[ÎîâVj;úO9›‹OB–ég飗qϦ£¹û_'ÓÑ W~ßü[¹ì•tþüèŒðìaé›/ðægß³yŸCz×áœxÞyÙ-©êV±öùË9åy7#ÿò,Wö‚“ÇòÙÏóòß°¹À £ÓayÖ¹œØ?³æû€ÃÎ9×sê‹îgÝÇí£¿åÆ?ϦõqI¿êÛìëYW{Õ¶¬6/?—Á#Jùöõ§xãËulÙ]HЕÉð ïà/㊘uÕµ|6øŸÜVw,ÉeÑsòæ7[Ø•[„Ÿ²º å¸0­gr¤—hí~ í¤”RJ©_6M&*¥”RªÙTä¡ê&ZêóaY)))tiÛ\!>]þ<ãô!ÉNÄøCA>]±šaí§Ó%{ÁÜu¸\.|>_El³e[Z[²ì“%ìêr8-Ý5·•ÞëÎùó‰d§@îòÙ<óÊÿcfç‡øÓˆdú é‡çóïYµï·tÈ6«WlÀê}!}½e¬~ñîû¢%ÓÏ¿†ße³ìͧxöž™´¼ï†$VÝiÁE—¯áO“Z``˜åFÄϯÞÎ]ó Æuçv¶|ü*/Ýu'[nãÔnÕ*,&­§^Á5ÇuÄÄÀ›Þ JÊß(QÇ5üwÁÏš—b¬g4£·üï5•ø|x<ÒÓÓñz½ôh5‚Ò`!Ÿ¯x›Ñýºã²L¯ÙD¯VãéÛf"‡–-[â÷û)))©RÚêH.½d+<{W|Ý™¡ã&2õˆñ hPÑ#/±ã@†FþÞ¹Ó™lùâj>úa;öˆxû ¥¯ëß|³¼€#&¥cøWñÍ*›^gô#±ä+Þ]°AßÊÉ#Â3Kwþ݉|{ùë|¹æ|‰N†ëãIoM»v­1'£œ’%Ì™¿ƒN'ÝË%G·ÅèÛ«-¾-Wóλ_sìŸG’TíØ `¥¶$§]V$Ž”D¯—*¥âÆÔ³’¥)mokÖ¬áÔSOÅ4M^yýܵÔ;Ri!r˜6mŽãðî»ïÒ¯_ߨº" @ÐGÞöU,|e[¼}9²OB¸„aÔ¡?ƒûv«NîHe"µ|ÿ Hhׇýºaч>Y{Xvý'|³)Ä žµ·ûò\*¥”RJÅ&•RJ)Õ|*&©{ÒÒR’’’HJJ²,ÒÒÒ8Ü{Åþ<¾^÷9n—IëÔ¾Lì{6I‰I”••‘ššJ(¢¸¸8*®IÛq¿çîQ§°î«OøpÁîùË›ô8éÏüõ7½I6‚ìZò6/¿³ˆu;óñ»Rp—9X=‚ ‚‘<ˆÑýMžúzÅÆáYõ5Ë}8mh:²ãG¶øKÙóÈÅœùhyÍì‰'χHZe2'º· ãTì§³}›ýÙ ïÓl'’¤jEß>Y¼þÍFv†FÐ-z>‘Šã'ŽS%mXe}Åß§1õ¬«½šÐ†ñæ÷ûöîÝ‹¯Ô¯ÈWgYA,Ÿ/\¦¬¬¬²ž‘?ƒKá³ /3\¤vÊiW]È”€]ÇqŽ:þ•?ÕÊe·¢¥QDQ±]g»pšKTJ)¥T3Ód¢RJ)¥š”Å•è!¹U•••bYŽãŸŸ×ë%%%…G^Æì%AŠJ÷rêèkñûäææRZZŠˆàv»)++­W$fÝGO§Ç˜c™6ûvn|õÞr'YÿáçaN9Ÿ?^Øtcó~€%C„“4zæ¿ñMá0Ò‹¿ß KÙ™Œ»ìF~Û5:ãgàMOŽNKd˜s$É]·H5‰Ì”æDå ¤j®®ÆæÊÅÑñ%ª ÒˆzÖÑ^µ-k¨ ã-àóùðù|”–ù)-,¬µ\y}RÓ*’‰@ ²ž‘?]ýN㦳‡èN %³%-ÓÝ`Û8NmCÅ©ò݊嵕3,,$§öv?ÐöD9J)¥”úåÓd¢RJ)¥šD%½êL&úÙ¶m¥¥¥ 4ˆÒÒÒpï2`hë“¶mÛ^%Î÷ßÛí& ÖWÀ¤í€>d¿:—{ll‘Þ\|ÊXú$â¡MŠAtr(yȆyâ³O>%m©Í ‡’Œ@›ŽtpÏåÇí²GuªòUsßÜx=à+)Á¡<¥g´íJgÏŠKJqy(? Ñ5(K`q‰¯Îd¢Fr+:w鞀E;ª RÇq®±¼¶rÑÉÜ:Úý€Ó\¢RJ)¥š™&•RJ)Õli0URR˜1cHHHˆ9îäÉ“)++cþüùqƒëßã©…~zôëL«4/R¼oç-`‡§'Çt¶°J:ÑVþËo|BúȤYyì.‰ª#€§“F§ñÏ7^Æ•:ž«%„{¨%eÚä6ÜñîƒáµWgaõ÷ífÌ8›aÃçºk¯‹Zc`ºÜX„†êJ°Õqœk,¯­œ‰Ëã‚P€C=íÞüÊÛÐ4->ýì3F ?Ë:hƒ­•RJ)õ ¦=•RJ)Õ, —;àG\žz{µ1œ·Þz»Ñ‰*˲øÝEFõ³ 9v½ß;HE@Bý¡ÚV`‡úzE]µ•lD „PÀßpýìA;º¾ÙFÔ·‚2 ··b™iš„B!LÃ8à=¯þëÕ 4„ÓÏ8µÁí†Á%—\ÂqÓŽ«VV°ƒþŽEǹÆòÚÊÙýQÑël÷CÁ .—>â+¥”Rªù蓆RJ)¥š…éròû°\îH"ªöža—\|!—\|a“·SW\«Šnš8ÁR,Oe2ÑårHðzêmÃæ2uÊd¦N™sù_ï¹PÙ†¡&•RJ)Õ¼ôIC)¥”Rq'€áöàøý˜ÉåKÊ_1§oX9tFe{8þ†ÛSÑB–e …¯mÃCUÕ6´C¶oVJ)¥T³:pïƒVJ)¥Ô¯†AR›Žø¶oÀ0ŒÈ;ï xõ:ÀÂíaT´‘oÛzÜÉi‘žn™™ìÝ›«mx«Þ†{ö´H)¥”Rª9hÏD¥”RJÅܵ/Ûßx„´ÞC1Ý^0Âx‘wÚi·ƒ$j~" (Ó0‘ Ÿ¼¯æÓúÈ3LäUË–|þ¿/hß¾.ËÒ6J)¥”jšLTJ)¥T܆‰•’AjÏAlyîv’:÷!©So¼-ÛËaY˜–, Ãtahâ£Ù‰ã NB6bÛ;DÙîmø6¯Á·ñ{RºôǛӌp{x½^ÚµËaþühÓ¦ ­Zµ$#==»vífçÎä´mKVf¦¶‡RJ)¥šQX¯ÿž¬”RJ©øqåí&ñû„òv*)$T\€í+†_íd‡a˜–– 3’Ôõ¶lGbÁ$w€•Þ"œHŒ$¢DÛ¶)..fíº(**Äï÷ãó•â÷ûèìÎ**¥”RJ)¥”RJ)¥bRkÏÄÔ´ô]¥”RJ)¥”RJ)¥Ô!¤¨° Æ2홨”RJ)¥”RJ)¥”Љ&•RJ)¥”RJ)¥”R1‰o2±l=óÿý/®¿üNq\bÝ.ÄvÄzþ•‹ç}7œ{>¬› ‹êxG_Ù8þø²%<úÌ~ÒÂq'À²&œW±ŠûùK»5b?bºÞ"ê}R)¥”RJ)¥U…ùRýgÿÙ²óõËdÒÄKäå­vâíŸàw"\"î"kCûȹœˆk ÈwA‘àb‘ž.‘)ŠD丹H+·Èõ_×.¦rŽÈk§Š¸Ú‰ÌÎZ¼CdZªÈQÿqD$´Zäð‘+ÿ'"A‘ëúˆ´¿L$ "Ëÿ!’8TdUdßWÞ&â6E.x¯2^p…Èan‘©UÝ‘MˆxDf•5½~Û‰´Eæ ";œÑbg‹<~„ˆ{°È²`åâ9牘n‘;W7¾~kîq»Dnú¦²\Ñ"é‘»ÖØý |.ÒÅ+rãÒšëÞ9[ÄS×¹kýl‘G&‡ßò`åwß<³Úñk‚zÏ—h‘:$L)ªeu¬×Q¹zK#¶Óyëù%.÷¡€È;Š´¼H¤t§È±é‘ë¸Läœt‘îW…¯y‘Ù爸:ˆÌ‹ÚÉüwDÚ¸D.úoÍÐ1¿ú4çù×@»íÏ~Ôv½Ìû¤RJ)¥”RJ*jËþ*z&ºÁò AO«éqä'˜û5t˜ }]á¸SZG&d‰êMãê ý<ðü5ðÈ›°|+ÔööȘÊaÁ'} U¹ØhúÀÒÅQ³·žþ3-ÒÒÃïðJIJªõøñÂä1Quéãrà»%µ×µN©_”Ñ¿…6û3$>‹¿ çîõÂʱ“À³?õó >Q[@:°7¯‰ñ"êÝß||=Zg@b"¤N†ÍAØÝØP±Ö/_} 9 wùñ3`ÂÔCg‰X¯£fÑÐyëù%^÷¡rf¸èøðD,{«÷æ Á×ß@ÂH“R¹8} wÃ7_×?<ºÉ~ç_c®·ƒ|ŸTJ)¥”RJ©Cѯ"™/¹ àK?Œ›v” L ¥ŸÁGQÃÔÌ.ðÂ;p´wƒ;A‹Þpû'UßS¹äÀžç =Ê’áÆ¯¡8¯ê/¡åï¬4M0"­k˜€ vÔÆ„p¼ÊžÅ…L24²~åÛjÕr?'+B~ ¤gV=‰“2À¸‘õ3\Õ¾o„ëé8M‹Ëþ.þ;L» ÒO‡YÁ7ßÂÒW¡›¡Æf|b­_ K!3«êñKÉï!òÞÓX¯£æÐàyëù×ÌŽºÒæÃë[ª­((‚äŒjÉÍÈðBaAÕW)ÄÍÏàükÌõvPï“J)¥”RJ)uˆú%NBÜl>ž %Ìü ÌŒ^aÂ{ŸÂi'T.j7žšØðãpëepËy0~-Œó4¢œ ²Ó¡ÇÉðæåP½C“™ I4>1 ePPxË@~!¤fÔÜF½¿ÛÇX¿êýMc»!# òÃû^¾ÝÒ|DgššR¿úÄ{ƒ0ë5hq.)ûàíÙßN>Ò‘ÃJ)¥”RJ)ßÔ°á«ïØZê¿>G6,^ÈÂõ‰‡0¼kZ\{-ÅÌó_„…9páMû%Þ¿ä¸ÓaâȨ^(œ6 þ8¾ÀXøçÀ¤çà¤é0 3ÈVøAÂÕý$¦rL¿ ŸÇœ»z¥Ãî°ø(= ;© ÇÄ„·®„.…0:^û,ÏÙ'×ìa“9 ðÈÍÐå\HqA×!ÐÊÝŒõ‹¡þ§\wN‡€ÛÏ…àb¸ù½jI’x×/Þñ\pädø÷«ðê¹pF7XùüafÝÃeû óxà¸b$x-hÛ Ò­FÔÏ„SþwœW?ŸşµÏïÿð×zÏ ,vì+qÁæ!p§C»Ìp¹X¯£˜ŽK#¶“XÏ¿hq¸Õ¦Û™0ñ0×Ý£–y9ô}.=nÿ#dí‚o€¢ÁpÙäšq:~1i†ó¯±íVï~4öz;ˆ÷I{+Ür ¬ c…´8/J)¥”RJ)µßâ:›sp¹Æë£9¯£XÎ…ö^¸ö«ø”SM ×å!KÏ{¥”RJ)¥b¿d¢”°ä•Ç™¿3‹a'\Ä•û3gß<{=º÷sjNóò3T · çÿzœϼ·]y¯À“ßìÊ5ŸµoÃmOAnm «_£ÆœÌ~öÄáüßõ&L<VäÀmOÃs÷ÃYCáÓ™°Þ®å du†¾÷ïBß÷.u¬ëÿžs‡.«àì£an~e9ÙWLƒ'wÀ5ÏÀ“WÂÃ1WA4>nøýÓ0kVåÏCgµûo±^ý:r`æ½P4.‡rªiôº<4éy¯”RJ)¥TÌ\q‹d$1⊙Lm× où²£&Ñ9p×0‹…fzËŸ÷¨êÀ_Ã¥óà¡)`D–Ÿw l*;¨USPc΃´´^Û—wÚ:ðʰwüot,¿”΃J è®å;œþ4œ¾›øì5Øžo? '$‡—´ ÓiðÆ0mZxÙÆçáÅíp͸rPxY×}0æAxéZøC‡ÆÅÀ„¡ÇÁÉ­ös'¥ÿƒÿgÏ…öõÜŠc-§šH¯ËC’ž÷J)¥”RJÅ.ŽÌnZD'ŒDºtÏÁròÙ{»&JÌ™ 3߃¦V#/¾2þ2©2`¤B×–U‹­€«N„އ·7T-S>œòÑ·aú HM€Vàž/ z5c‰Z½pÁðÂз5$$C—‘ð‘/\ÆÞ7̀úAz"¤¶‰çÁÇ;£E†ãœø"C/WdH[<µ»iõ[ñ,LìIIÐc*¼¹±æ¾6Ö†Y09³ûDxnEå:ɇ3[BŸë"Ê+VÀÌÁ;VÖÖ«¯.<¼£áœ.ðÌ̪Õ͆­;!±=TÏÉ[ɽÀ§&V?¬m8¥½†'Áô ¡k´Ÿ³^†‘m µ#ܵ¸jyà ÉQ Ko2¸ p•ÿs„À'@¨'œÐ¯²Ü¡K>ø´‘ñ¢ øË ¡}q¹Î£ä~giµ]—±^¸Ž¾¹ ¼­àöÿƒá ! zN…—WÇa^¿v ƒ+&6²\þÚ ú^_Ç0Öòõ×Â_âY®®õõX9³òþÒs*¼ú0dV{B¬÷ÝÚ†»?…Î^øëU·»cœ9Z$ABt9 .¹Ú5ÿ+½.c±}œ9 ²’ ©Œ=îªY.–ÿƒØÎƒêûÓõ¡”RJ)¥”š}–R݂֯Ҟ9o”½n¼.º~jâo>Î.øúGhw8thà¨VÁô ðܸþ˜÷:L-€3ŽUËJ1Üù8\ò:lZ —f À’`Ó⅃§7Âã!xh,_·Fä7e{3¬t‡Ç¬y0ûq迎?––¿Ð ÷-‡M›àÉéà mÞ´NoÑøúí}޽ 'ÃëïÁ­ãáï7Añ~$~¤nºޏæÎ‚)Eð»cáÝÜðz#.<6¼ŸGõt¶Á `ôùЧ§fcÎÜpîù°n&,Šñ|µrÁÀ¾P0®}vÖ×Ö¬MáÖÑõ” Á:žxZ/†³n…K_‚ËÚÁ¿¨LtLººïƒ{î‡ó!o#Ü}/øƒß‹²aípuƒn.ù ÔîjÁ†µ•‰¡˜â• À_{Bb"$µ„ã®êØ÷x\çJá×A¿¿Àë/Â$?\}]Æz}4â:prá¾wà¶Oaϸ<.8>(Ü¿ý ~÷½¿½ zÔs¾×ZÎ £‡Ã¦¯ao-ת³–n‡ÃÇÀØx–Õ¸®óysḠ!o<¼úÜ1þysí÷—Xî»±r¶Â…'Á’öðÄ{ðá[ð÷S!oKµDÛ¯ôºlHÙ8þø²%<úÌ~ÒÂq'À²ÚÞ‡ÛÀÿ¿5æ<(ëõ¡”RJ)¥”Š(,È—ê?ñâ[ñ˜Ì˜ãEþò Èú’:*9æ ÓEŠª­ ­9í¡NfdvIZ˜Ÿ¿/¯à‹íñåÁ×ßBý®ÐzÃt£tíÅÖ]ÉÐã ¢_ZÁÁõỉE3nÛÙàí +éÀ«/CÆ‘0 {~•{W)ÄRÞL¬h%µ€¾ƒïÿ ·ŸMVÁ—Bû.ðYy3T7'9nBž é‘eÛ©iÀš¢™<«¾‚“Ïàxãcøp¶ ŽëãË™1Gd¦AFõòßÛhûKëÏÞ§ €C€+ŸWÎ…%¯Á‹³Ê6–÷y2T¬Czc¨I±û²²Týö*ú5®t¬ ßM*»ä7Úó-˜ ÷¾}.‡v›¸Ù6W?Ø5&ÎŽô¸ù8íXLŸk›Ã~µcµ|˜09²,¸M±éŒ»CRyñ›ûÜ­€„–°{¼x<6 ¦,ÜʪÆ;Ù}¹Iù0i2TÙJ-jÎè aò¤ò·‡Øèßo½ˆþþ$I’T$vXŠ V}ÏkîäóŒ¹ûÆ#i¼üz\-¨ó—F–®ÅíÿŸ $Ô§ IDATŸc6æÃò,Xúd +ÙG8âF’k¾Ø„ ©ÄÆ{‘/Žá ëã*Øß†>v©]r?¿â&܇?ýo„‘‡@íÿGùÝØ/ÚãˇìuP½Fɵõ©5 yc…PÈ(¾a`2Òauv±/¡ñpÊÙ0ørxc œ¹^ùŽ»Ò+8^Ô×A)‡ž éýaÄ‚²Åo"*ýÚ$À}"?W?ƒ®gÁàWáýÿ«ø¾q…ýÇÅA¨ðÉ¡8   Ï]šÁÔ'‹–vm: /ÂGEžŸ™¹Ù[^š‰ –Bv22 ¯Çhû+÷Å€® Æøv*в‚'[¡D¨ZüÓ±ô}YYãVj¥ÆM­Y+·|oº€oÀ‡Çmü3asq {Föò›8ÖT‡ï÷‚V`Â:˜? Ò;Eþ‘ ÖqQ˃•k"‰²â×NJf©Ï×B›ýÜ­€¸¦0ì-¸én¸ë,¸h5¤·„AOÁµ]7ýšo´Ï¿Ë}@Ö*¨–Yêï°*™ ?f}Îo£¿Uð:€èïI’$IEbŸLÌ™Åk7\ÇÈu=¸ù¡´KÝ9þ÷<®tl _LŽìOÖ(2vƒƒÁ[Å“Y P3Z £.,õ%ˆKƒ”Š ¼%ý…о€–‘#_ƒZ§Ã WAÕÂæÜŰzK²Ñ_"dVƒµkJ9È]y[³gbdåÀŸ•X™ i™%¥þ±pøµðâkÐt.Ìmgu®øxQ_¥T=NmϽTê»vRª¥’E‘dhÕ”MÁÝíè}|23ó©Æù0åG¨Ö{AZBë$øô§È,¬¤xhÕ òçÀœ|èPøÉ’?~.€Ý[~ØDÛ߯Ž'¹~âvÒj«ÁZø#‡¢ ¬€´ô-Kt„À=¯ÀAwÀAU·"® °7Üù5|­O…C^ƒ'Šï Ãq…·`¬ã¢Uøù²!éºáÒZ·r·ðóeÃ5VüéA^ùŸW zÂ3=˜÷ þ'Ü|&t™oôbÞ ;Ë}Y8 sÍ È-Þÿ:X™iå|¦mêï· ^ÑÞ’$I’JŠíWò¼…¼{ëU<½¨ƒî¾œÎµþßøƒ•p÷@8{ÌÚÒ’º‰pò)|}½é¸ž]`áwÐZ·.ùÓ²A“±îÈY©¥–ºMz–näKwR2°rÊ{<ÚãK€Níaádø­XÖ컯#_"·Øzøh|ѯù3`üh¿oÉó Õ€³‰OÃõ¯ÁÞ§ÃÞ[2c6Úë ´8ãLøéÅREâ¡IãH1¹Å^ˆÜy°0 ›ݤ‹ç–}­Â‹aÖj¨]·’ª)ÅÁ.5aõ0·Ø½“?¦çÂ.u ¿°‡ ë!?ÞžV÷Ý[079¸‚ýy¥×ï0v$¬H‚ýÚ•=Ôàxã9xîíØTsŽÖ&ïŠÆåÀ‡Å*ìæMÏ—•½ž!ºóð(|šWœ¾éëc³qq°ßþ°|<÷)ôê ‡ö‚Ÿ‚¯³á€N…÷y¬ã¢=ߨ¿#,Ó‹­1þ߸-ÿ|©^B9°lUQÛ’`Ù¦þÑ%š מ q¿Á¢­úpÛ„å¾L€}ÚCÎWðy±×yå§0!:t,ûT›TÁë ÚûC’$IRI±›™dóÕÃWrÿÿö9³3ɳÆ3nÃþI¡Dêíy­jl§ÿ]_ c_‚qõáœ;¶¼ZãÞ—ÁåïÀ=GÀÒËá°Ö°z*¼»$’(„`À ðdW8¬?\9ZeÀï?Ä`Ý ðÄ14Öý%@ïðôp~:œÔ ¦½ Ýø2°6í n<8 .Ù’ã¡^3Ȉ¯ÀñÅÁqÁÇÁ àÑS`õgpõ‹[¾|"ý¾q4͆«Ák·À”úðæ±e“Ýφ¦ÏÁ׉ðÈIü’ZLT×A9š Ýnÿ®…æÅÚ9¼gŸ Wœé+àå»aI8§gaPFÅGö*Û«ä-Ã)ðÄqE瓳~[A™å$ÀüyP HÌ€Õ+p² ‘%â]ÇŸ מ +áå;aJ*<|rѸ»§>÷ž™7@½ùpËðë™pJ£ ö—7v†©¡ÛžP; ¦ýžxZ^§7){¨ áæÀôŽÐ¹/¤o£ª¬›¼?*Š\Ï»­†ªÂK7ÀÌFpßQe¯«Íoð;Üû,ìu9º‰õüÑÆµ=ªÝÿi W6Ö½aÕíðs ¸§eåÅEu¾qpÜ%pç8ã¸ýtÈ›7ŽÞòû¼úAÐ!OÝ =®†„áŠÇËn=°þmèþ3ölÁBxäa¨rì_lÚ¸÷eù×iï ¡íëpþIpûEPã7xè:Xµ7ü³G^¨Ðuíu/I’$©1«æ\0/zN· sçÎeºô îüjû•IÌû*Z&Aý3‚à-¨6Y\ø xæÒ hß(ª$Aæ®A0àŠ ø®ÔË¶ê‡ ¸êè hZ#’ªA½ApÄÿÁ;sŠb¢­mAPXí2)Î.U³Ä9,‚ûO‚©Aœ{ö ‚WGnây«‚à‰3‚ Iõ ˆÉA0¤TähoÊsAÐe· ¨’:Á7AfÒ–WsNª¾=šA•*AЬ[¼ðÃFž—6 ‚´~AðKe_Ū9¯ÿóI…Õ«)V͹ÐÌQApÌ>A™ÉÕƒ`¿ãƒàíŸKŽ9ý?Ap~ÿ hÕ0Rƒ ¥fì{dO¼>“jí/å :®q–$I’$I’vd±O&æOá±S/aÔoa%Q¯Ë%Ub6”$I’$I’¤m/vÉÄøútêµ;‹ÿ÷)oŒ_FÖš’kìʇÿ‹ÎîÏîæ%I’$I’¤Z%`‘$I’$I’´#ÚX$I’$I’$í,L&J’$I’$IŠŠÉDI’$I’$IQ1™(I’$I’$)*&%I’$I’$EÅd¢$I’$I’¤¨T^21oCÏëE—.‡rëçy•6Œv>sîƒä„BŠƒ¤j°['¸úUXlï£ÛqÌx?Ë7÷š…áñžPõ(X½¥ýöÚð¾U…××oÅÁK’$I’¤¿¤JJ&†Yôö#ŒZ’LR¨rFÐN.Î~Þy†? ½àÞSáÌW ¼½m1ã?pÛ3°|s/Xj4¶7ý°Éþâà´W`î\øüFHÜòÖ$I’$Ia •ÑixéX)›ÃNéÂØ'?®Œ!´³ A›îЯyä×£úÁš60â ˜4u~ì„àÄgáÄ­ì&­¤Ôÿ A’$I’¤SìS2A_ y–Ùüƒ[9?éï$Xo…¡£!;ÊåÈÁøì8ýø$wãq¡ Ø¿-,‚…EíùßÃ^Épöë0ìh[ªTƒ¦ûÃÇk‹â'5R ¥t>ÆýVvœiC¡[sHI–½`ø£P=îš^2.šq æÀ g@‡fQÒêB·3á“_Šú)˜R`À9°[:4ì#_ýëBZc¸kBt¯ãŸÖÃ陑¥ÆG¾¹ UBáÒã*ðÌï%c¯Z´4¹ÜeÎé¯VýW 3¡J*ìuügNÑã¹c¡ï™0l<¬ui»$I’$I1O&®ýöÿª9gµ/ÕbݹþÒ ÀõçÀÀÁðëf–Öþþ-Ü{´iÝ/„¹u¡~ü&žóA\u¨^úª à³ëáÉ|xx Lù n>B…I¨œ‰pDø²6<þ¼ù¤ƒ~ýáûb Ìÿ…~çÀŠ.0|4ÜÑ n½qû4nfÜ‚ù0-1òzŒo> {Ì„#úÂ7ŧù03žzêL€SÃù/Ã?À¿Üô>†e$ÃýS"ˇ €Ä½áã9‘ßç΀k‹M‚ǦÃÜŸað1è/J¹?€®ðÂR¸vŒ½²à¤ÃàìHL|¨5þ¯+4Ú.z¦,«øX’$I’$)¶b»Ì9w:¯<:†ŒŸ wí8 cÚ»vpáløh8 oO†:À©wÃÇCËŒ²ñë×ÂêÕ·Þ¿žžmo€Ö¥“ŽüÑ >ꮯm¹gÑÃï??Ô‚w_CS#mû¥AëcàÑaH #„Å{À[OÃ^ @wHž^ÞÈ mfܤðF’OéRþÛÞœ ;6ÆÃagÁ!à“¦ð{8¹'Lÿ<üvd&f›M%ZK©Õj»¤B(ì MÊ{~jï µÃP£J ú‹FoÞŸ¥Àëï‘5"Í]ÛÃŒVpïèy.Äï/~M‡×^„î‡Ç¯…}ÀÀsáÄîêZjI’$I’¶¹ÎL,`þ¨‡y}ýáüßÑMØÒ\ƒv\ í`Jä~-K]yãa¯†0à6H8Þþ~·Ÿ[~"‘<¸¾¤¥AFpòSÐöüj}j5‡v®mà› P¼ö{fkøÇðå<˜öèÀÍý aG˜`‘xI’$I’¶¹˜ÍL /Ë//bŸ o E°Žuë }>P»–œœ’ª$VVùhýÕ%@jUÈ[Y+aeV$i´Ñ¤s\0 Nj U¡ash˜¾‘ØìR{#E?ÈZÕ2K%«@f2ü˜©Ÿ+×@Fõ’ö”L6^‘|Sãn‚Äþ7ÂÈC v „‚£N€ü‚’±q…ÄÅA¨ðBq@ìLÉÄ|XžK_€Œa% çA|ÃÈuQ:äÂÊÂëfm>TMƒg&J’$I’´ÍÅ,™,Ç‚Õ+Xxûñ|z{ÉÇ>¾¹ãžÄãÃ.`÷J©­¿ºÄýá«ðõ›‘e΄ÄÖpÂépæ©Ð©~©'„ é>йy‡Špå=–‘kV@.Å’Të`e¤e&!³Z$Ѧ(ɹn%än,™·©qó`äkPëtxá*¨ZØœ»Vof?ÉÝ&s| P3Z £.,›LŽKƒ” ¿°è+ö  ³ÂÐóDxêKèß’+ãà%I’$IÒ&Å,µ×ä(n~ä rŠ%^ f¾Æ|M‹ÿæ¬NõiêÚçZ°î¹¦W‡kî‚¥ßïdètBäçþÙ0üYò ¼7N¼Ví ÿÜP %Ž»L…3.€÷ÆÃÛ÷Áu£7±{S w˜3†O‡‚<˜ò\0t˦c¬M;ˆ›ƒï‚é3!«Øòêœå0Ì›ä@°¶ð÷y°xEÅûÛ úÐ.Ý~_} ¿oØß0n€N?ÂaýáÉ7à“àµ!pÙñpþ¨HXx%Të £¾‡y_Âmg›H”$I’$é¯À- 3 #•‡ët¶ÑÎ0L„½‚G^‚ÎåUV‰ªûÁè7aÿ¥pá8úRÈî ï¼ í‹­•­~8¼3Ò>‚£+Þ‡ëo„”$WtMmŽxþ}\½/T« §‡«‡fÛh†î®gÁ'Á'—CÇÝ¡Í^0²Xá—O¯†ÝšBÓÝà†/`ýXØ£)4m =ï†ü ö·A|xöQ¨2ë t7–=ž¼'¼ó_î>úôƒÝ³kBßö‘˜¤îðêCÐÏX—œ—$I’$I[#”µ²Ì|°´ôòÊëJ›6ëØã&¸m2 j½½&6æ=­ï€Qó¡oÕÍÇK’$I’$í,Veg•isÒb#€ñã Î)ð4‘dÁ#wÃ.Ý m}Èšƒï†fgF–aK’$I’$ýÝ™LTl„à¬ÑpÖö>Ž­ŠƒÕSá‘gaÑ\z „§®/ªÆ,I’$I’ôwæ2gI’$I’$Ie”·ÌÙ,’$I’$I’¢b2Q’$I’$IRTL&J’$I’$IŠJ °¬zïj޼ã òJ´ÇÓøÔ'ú6ÄÇn0I’$I’$IÛXì«9'´`À§Ñ±Z¨°!DJã†N”$I’$I’vp±O&†ªÓêÀnt«Ú|¬$I’$I’¤FåL ÈËÍ#\)K’$I’$IÚb?31ÿ{=¹7w¯É'!£ ûô=›‹ÏéFä˜$I’$I’$iŠa21D|6ô>­Z7$3.‹ÙŸ¿Î+Ãoâ’åƒr]j¸òY’$I’$IÚa…²³V¥ÓÒ3bÓ{°†¯ï;‹Aÿ­Î?^|‚“Y†E’$I’$IÚ¬ÊÎ*ÓV¹Ù½P5ÚÜ‘ô‚¹Ìü9¿R‡’$I’$I’T¹*ª`8L@ˆ8'%J’$I’$I;´¦ø ÈÏ/µb:ÈâëO&±*¡m›Ç¾Ö‹$I’$I’¤m'v¾ü<{Á¿ù¹UÚ7«OfÂ*æ~õo~¾‚FÇ\GŸºNM”$I’$I’vd±K&ÆÕ¤õ^»0qü[7DâpÌ]ÝÿœÔ™÷îE¼qõ—Ô>î(ò?~“ìê=i7° x–¥ëÑäúÇèÔ§¡‚™L=þ8¦LQëÜ[h0ïf|>Ÿ‚Œ–4<ïö9aw+|s†Y6ée{ö]&Îúµñ©ÔlЊOº„Ki9ƼÿqÛ×ðþŸû<ÁÉ]Ÿˆü1±Wº—~Õ#‡Îs/¼ÉSf³dÙ*©õhµ_?ÎúÇ t¨YrkÁìg9û¼ÿÐúÆûéðýS ûh KÖ%Qs·#¹æ¡óèý¸’$I’$iëÅ.™X°˜9ss©¾w&³ž¹‚AoMfqN õ÷ìÁiÏaͪÆl¨ ¼LfVàyß™%¢ €9@k"¯ÚZ ¹ðñx`Fã¢.<–f@Í(Ÿ³–È‚€Gˆìg¸kÇÝ’óØãŽ#6ïïö—AÚ^í©½6Ìúù?ýGx#9üößÏɬ@Þ¬w™xm:é­j7}sŸ}‹Ö‡üÆæ³bØ`²ë¶!s×T–Íü¹w\L\ý7Ù¯KZ…/üûhîºþyw:—AçîIð MŸÈÄßV¦0™˜¸½8‚A“È}¿Í}·Iý8€$2Š­;.ømsvçˆhP;øUsùì•g¸jÐ:}êlZ%–:€`=ß¹åÒû.¡Nür¦~2;òXÆ•$I’$I[/vÉÄp6٫¬ÿ6ìÅÙ7NýüÙ¼7äIî´–Ôç¯ãàmýÅ>¸ ¸œÈì³h“M_£€ëô¶0]øûB`o"ɲ¡D–ô®¬`\´ €¥D–öF³÷`ÐX@dÞÑD– WtߊžÇö7–ïïö”О=žÆä²èêƒùì5åÇqTí?˜ÞÇMbìq²r·Sè<¬³ûžÃÌ… X]ñÅŸB÷WþEÍÄùÌx,ßLü£>£ýÁ}IªÀ­X0ïGf®o@¿Sާk«È{îs0‡•ˆJ&£N]2È#³jˆPbµëÖ¥n9ïb‡³¹½Cñ–v´Ë\È——Œãó¹gЪe|É'¹d7>‰ÇþÕ‡š!€Æ4Ú­}…Ç•$I’$I[/¦{&†ƒ€Õ9͹ðæó9¬fØ‹¶Õ—2õü‘¼ùÙùt>¢æ¶]þü(‘ Àÿ¬Às§=€A‰IÒ€ê›é+Ú¸XJ R]y5ð5ðo"Ë£ŸaËkwGsÛcÜÊzÿÂÓªJK'1¡ô ãSIJV¬!¿€ÈìMâHíÚ›UѰW[¾8‰üÙ3XîKÍøPV|£æ4Mx1Oz–w÷ÙWo5‘ÄDf´­RJ=g0€Èrâ—¤břŖ Ô#R "³ÃD–ÌV$.ZqD*$/+|þæs!`ßÂ?w'2£ñ "EGºWpÜŠœÇ¶7ÖïïŽ"„BÅ’òþT@PP201mÆšq‘$$¬]C^yùºMˆ«7€ëïÊå¹WÆòÒ¯óà:Hi´?'º†ÓöΨà?äòã³W0hdÏü'ƒ÷Ý•Ìä8Âó_çÚ›>¡ ¼Þ¡ªTϬú×Ù‡U’$I’¤¿±Ø-Œ¯GëOc IDATzñ@@P¼=‚lëTÀ" ‹HB+­ð§/‘eÃ'Y>›W,~ p‘¤Ô[”M–ÅÙ_o_¬}NaŸ­*­x Cáó—Wð¹9ÏðÓŒ»5çQÙãÆúýÝ”¼ñÈùmiaS9¿-‹ü9¥‰¾ëã©Ýñ$®ºïyÞxᅩxärº%|Ãs·¿È”¼Í?»„ü™|òñ|2úü‹kOéF»–MÙu×]iX Öml«È„\¶,I’$IÒ_Bì¾¢‡2i×¾¡yßòýò¢¬@Þ¬iÌÌM¤Én ·|Yä–hK¤8ÇçÅ~"rÆw¯R4/3—ÈÒ×YÀh ~9ý…€CˆìË7­Xû[D*-\Á¸Š8¥ð-Õ«Šý^^åäñDl­X\‘óØãÆúýÝé°öýaÌ—Cxéx¦¿50!Z´"mkîú¸ê¶ëËi‡7'nÅo,Í/’˜”ësÈ Ê>¹äæ†HIK-6K9—_}SáíD+6®$I’$IŠ…®:Ž£qß“è2êVž¼î N=˜úy³yïùÿ°¤ö!\Ü%sÛÎML*Õ–G$YÕèXØ—ï7ßþPÛ¨SøûDV§ÆÎÎ$²¬— ÆEëà|"Ëz~#RDä4àl" ³öÀþDfåe“ˆìYØŽH‚®¢¢9í5ne¼¿;•8 &ñuÿý™H>á‚âëÑøè.*¾7þ.~/®·c·zðÛ7¼þút’ö¼˜Ý“KGdzkó&„Þÿ˜ïwä¸Ý3IŒK¡VƒÚT‹â[²oÇtÞþp$z9½ä1÷㧸oÌ$nÕÇÑfÆ•$I’$I1Ó- C5ºså}ëòø«¼pÛhV‘N£½âÆ Ïaÿ´¿èŽga`"‘Yt7—z,ŽÈL¶>…¿×þ \J$±•F$É7˜’«¸£‹VxÈl¼'‰ì÷—J$ɸaLp"‘¤Ù[Dö¬ œUx^¥÷ŒF4ç±½ÆVEÞßí. Èl|ŠÛÚ X<é§ÞÆn Ÿä‡÷g“ŸÙ†Fç]O‡ƒÓ*ÞSö´ ÞbôÓïóëÊ5P­­8»þïHê•9Ì8ê~1͸Ÿ—ýcVçNØ—«FÝK¿ê!¥rÐE·qþƒñä¹ý¸+”N£v½9ýò ½õÝ­8ßÍŒ+I’$I’b"”µ²Ì¢À´ôŒíq,Òß[ÞL9þD¦Î„Ô3†Òïʽ+¾AÁL¦S¦‡¨5è9³‘…K$I’$IÒY•U¦m›W–TŽ‚9̺úVæý’OÁÒ9¬X\qµØe¿1ÜÐT’$I’$)6L&JÛS°šÕÓ¾eéüˆK ¡VKê?ˆ½®¶½L’$I’$© —9K’$I’$I*£¼eή¤”$I’$I’“‰’$I’$I’¢b2Q’$I’$IRTbW€%ÿ;<ñFý.çÁD:\öUÛì¥$I’$I’´ƒŠ]21¾)}/¿•½×¯ç°üCxä£4:u¬i"Q’$I’$IÚÅ.™Ê Å]iQ¼-¼„##~÷£éÙÐT¢$I’$I’´#«Ô _xÞŒù1޽{w£Ž¹DI’$I’$i‡V‰)¾|fŒý€¹ÉûrèÁ5 UÞ@’$I’$I’¶ÊK&æNaÌG‹¨¶ÿ¡˜a*Q’$I’$IÚÑUZ2qíÄ1Œ[šÁA‡v"Õ\¢$I’$I’´Ã«œdbÅ—cÆ“U³ ½;T­”!$I’$I’$m[•’L –Î{ÖR¯û¡ì•\#H’$I’$IÚÖ*!™æ—ÇðmnczônCbì$I’$I’´Ä>™žÏïO#ܬ'½šÇǼ{I’$I’$IÛGÌ“‰ù3ÆòÁœmz÷b×Ê«-I’$I’$i eg­ J7¦¥glc‘$I’$I’ô±*;«L›s%I’$I’$EÅd¢$I’$I’¤¨˜L”$I’$I’“‰’$I’$I’¢b2Q’$I’$IRTL&J’$I’$IŠJŒ“‰9Ìÿðq®>ûhúôèNÃŽáœkžà£ù9±F;õïBd¸kú–÷1ã ü ,bw\’$I’$I*+†ÉÄ€ìÿÝÏeƒG±°ñ±\y×ýÜuÅQÔ›7’ÁW<Ä—«Íô¨rÌøÜö ,oï#‘$I’$IÚ¹%Ä®«<¦|üËÒºsûÕ'Ó¹ @{vŸÍ±7}θ.ã€c7œ$I’$I’¤m*¦3!‰U©_ÔšT¥ Ä¿Ñ'j'¬€·‡ÂÐѽ‘‰¨?<ÝšCJ ´è£~Ž\9ÅÌ΀Í £*¤Õ…ngÂ'¿ Z§gB(G¾¹ UBä÷Pxæ÷ ö'I’$I’¤ÍŠa21™ö}ûÐ0ûS^ñ-¿®^Ǫ%ßðò«ãÉku4G´sVâή`\  ¿–³äxÙ[Ð÷<Èî#FÃà.pÓ Pz|Á|˜–égäxóIØc&ѾÉ- J†û§Àܹ0d$î ωü>wœX«‚ýI’$I’$i³b¸Ìªu¸o qíí—rü“a‚P»ŸÌmwŸA›äXޤNF< ¿î£‡=€n4ŽY24©¼Ñ£d[—ÚðßžðæTèØ!ÒV«1ÔvI…P24Øš”36Úþ$I’$I’´i1­æ¼vÚKÜrׂ®sûCòà­ç³ßÚ7¸áÊ瘲Æ,;»„v0%r¿‚–¥“zyðõ·P¿+´ÞÂA×^PfÎj>|r?ôiu2¡jUHëóóà÷å[p`±îO’$I’$éo*v3ÿ0ú‰¡üØ` CCÃ8€vìÝ8‡sÏÆ3cúòà1uc›½ÔŽ#²×Aõ%3Ø©5 9T2tÂMpøƒÐÿFyÔNðOpÔ _Pñ¡cÝŸ$I’$IÒßUì’‰ ˜3/Ÿ*6¡N±lQ|£ÝØ5!Ÿïæ-¦“‰[‰Y Ö®)Yp%w äoȃ‘¯A­Óá…« ê†¸Å°ºœ}7+ÖýI’$I’$ýÅ.·—NõŒëæÍfI±$MÁŸ™ŸGõšÕ± óÎ-X w„³Á¬Ò3þ S{X8~+v}|÷5”®’³R«—\þ<é=Xº‘•òIÉÀ:ÈÙÈãíO’$I’$Iå‹]21¾‡ômCÒŒ—¸ñöWùè«I|õá+ÜqË+̩ڞ#z5qVâÎn-Œ} †Ž‚ßKÏú‹ƒã.‚ZŸÁ àõ°à¸úE(š½{Àœá0|:äÁ”—à‚¡Tj9ômÚAÜtxp|ÿLŸ Y[ÞŸ$I’$I’ÊÃü^»x'÷]Ü‹3‡óïk¯àÚ{G2§öá zàV44•¸³+X  Nh[Îúšýaô“°øvh¯‡ã.…ŒâI½ñüû¸z_¨VNW?Í62µu׳à“à“Ë¡ãîÐf/¹|Ëû“$I’$IRùBÙY+Ë,öLKÏØÇ¢ܬ{`›à¶É0¨õö>I’$I’$mUÙYeÚœ.¨Ø`ü8¨s üÃD¢$I’$IÒNÉ™‰’$I’$I’Êpf¢$I’$I’¤-f2Q’$I’$IRTL&J’$I’$IŠŠÉDI’$I’$IQIˆmwëøyÌS<öò'ü°x5q™»Ò¾ÏüóÌ®4LŠíH’$I’$I’¶­ÎL XþÑ]\vç{¬h{*×Þy;ƒŽmÌ‘·0è±I¬)S3Z’$I’$IÒŽ$v3ÃKøðõÏÉj~\yMãýö¡ñºs9oø«|tZGú× Ål8I’$I’$IÛVìf&,`Îü2ÛîIÃø 4ÝgojæNeò´õ1J’$I’$IÒ¶Ãe΄!!!žóãI$—%‹–ŽÝ`’$I’$I’¶±Ø%ãêÒ nÌŸOÖŸû#†Y1{Kƒ€µkÖඉ’$I’$IÒŽ+vÉÄø¦tïقз/óèè™ü‘³ŽeÓþÃçŸ"Šá$HI’$I’$IÛ\ 3|ñ4=ñ®ì“ÊÄ{rä!‡rÌ¿þC•OcÿäéiX~E’$I’$IÚqÅ®š3@b#z_õ,ÝÏÿ•ÅËÖS­n#jü:”s×g°ûnµb™¹”$I’$I’´Å6™X(1½.MÒ`%ã‡fnõÎ\°Gbe %I’$I’$i‰i21¼ø=}yuZ7$#n%³>{›·¿.ààëN£C•XŽ$I’$I’$i[‹íÌĪé$üò9Ã?^LVAjí¶'Ýv§tÞÅ%Î’$I’$IÒ.”µ2(ݘ–ž±=ŽE’$I’$IÒ_Īì¬2mN”$I’$I’“‰’$I’$I’¢b2Q’$I’$IRTL&J’$I’$IŠŠÉDI’$I’$IQ1™(I’$I’$)* QEåÌfìÐQŒ›2•i3°"¿ ç{œ“–ÍEæÌÿ€!¿ÈS~!'¥!í=“KÎéNÃäXº$I’$I’¤m)ª™‰Áꩌ}÷–UiI§¶µ m,.ûKºâÞ^ÖšS®¹…«NlÊ/oÜÊMdMã–$I’$I’´ÍE531T³?w¿5€¸P˜_G^ÌGSòˉ ³dÌKŒ]Ö„S†\Í Í€ý¨Ÿ=‡óG¾ÌØS;rÔ.®ª–$I’$I’vTÑe÷BqÄml:âA6ßMœAA£ƒèÜtCŽ2‘ ^þ4&~·v«T’$I’$IÒö»©‚á_X°8Ÿøh9kY†ø©—Çâ…¿P³Á$I’$I’$mk1L&®fõš€Ä”j$ü>škŽ9ŒcoËUªQ-.`ͪ5¸m¢$I’$I’´ãªœM ã«–’BjZJ”å¢%I’$I’$ýÕÅ.×—Jjµyk×_óPnÙ€`廬 ‡¨–Vm£U %I’$I’$ýõÅnfb\=7H `ñBÛ±`ñ–„iШñ1L’$I’$IÒ¶»db(½÷mEÜÂÿ1~n~ac³ÆÉ/ mÙ·]J̆’$I’$I’´íE·Ì9ÈbÎ×ß±p]˜•³WÂÌ™0Žq³ã©Ú¸=vK'DõûœÊ¡#¯áÕÁw“zfWjþú!Ï¿¾ˆº‡]Dï]*g{FI’$I’$IÛF(;ke™"Ëié%òà‘“/dÄ/áR‘q4<é1†]°ÇŸYÉœycyúá¡|ðÃrRЮ÷Y\2°’+ç$I’$I’$ÅÞªì¬2mÑ%%I’$I’$ý­”—Ltí±$I’$I’¤¨˜L”$I’$I’“‰’$I’$I’¢b2Q’$I’$IRTL&J’$I’$IŠŠÉDI’$I’$IQIˆ**g6c‡ŽbÜ”©L›±€ùm8ØãœÔ0nËâ¤J²þ]¨w \ù=\Ýz{$I’$IÒÎ%ª,_°z*cßý†eUZÒ©mmB['I’$I’$iÇÕÌÄPÍþÜýÖâBa~y1MÉߪ8I’$I’$I;žèև∋fša´qÚ)+àí¡0t4d ×OÀaí ³*¤×ƒƒO†ÿ.(¶øC8ù¨‘)µ óé0î·²Ýýðd¯ƒê5JfÄSk@rñi†ù°< –¾ÃJ΃ø†‘db’$I’$IÚ“‰Úf2kB\~[첑 d¤ÁšK±$ß:X™i…ÉÃDȬk×”,¸’»òŠ7$@Í hq,ŒºJO˜ŒKƒ”Xœœ$I’$IÒ߀˜3ÁJ¸{ œ=f”}<³3tŒ‡‘Ã!§Ôcùù…H€}ÚCÎWðùª¢ÇW~ ò¡CÇ„`tj 'ÃoÅŠ½|÷u$ ù§DèÙ~ Í¡uë’?-¸_¢$I’$IR´â¯¹æê›K7&'W)Ùd1çë L™=ÙS¾äËÙ9ToPƒðï ø-\ƒÕ“# ™hã´sún>ÞZÇ_KMŒ«MWÀ#÷Ãç+!-–Lƒ—n†7ªÁá-#q»6€·‡Q“¡vMXü ºf5‡'C½ M3aؽ0£!to K?󯇅yÐó|è\+×¢5|r<ö9$W…UKàëà¹ÛqЯí¶}™$I’$I’v¹ë×—i eg­ J7¦¥g”lÈÿGN¾¿„KEÆÑð¤ÇvÁ‘õÒÑÆi§”?vï «O©ÏCõò2ÇaøâI¸õIøj&d@»žpÝ¿á°FEa‹Þ‡+n„÷§@NUh8Üvô¨W²»ž‡ oƒ¯CívpÙápËpÕ÷pu뢸ÕSá¶›`Ä8X¼j6‚}zÂyƒ ßn•ñjH’$I’$íØVeg•i‹.™(EaÖ=°ÇMpÛdÔzóñ’$I’$Iúë*/™èž‰ŠÆƒ:§À?L$J’$I’$픜™(I’$I’$© g&J’$I’$IÚb&%I’$I’$EÅd¢$I’$I’¤¨˜L”$I’$I’•è’‰9³ûô¿¹öÂÓ8ò®téþ¼º(\*(Ÿß¿}“'n¾3ŽëÇ!=zÑï„ó¹ù…/ø%/ö^a¹@'"güf©ÇÆ'M€*@3àV`}9ýü ¤õ€+u¥b^ºµ¤Â~¯ÖnÅñG3nEâ´Ãʳžï_+`}™ÒI;縒$I’$é¯#!š `õTƾû Ù-÷¤SÛuŒR^Ð&¾ú$c³:Ñ£/š×Nà©£yíùk¹ø—Ûrug2C1>úŠxø(} p°üÿÛ»ó(»ªßã¿[U™GHB@ ` ”!èˆÃ3ÇVlµ¥±E…–…vbVPÛEE‰ Al”Ib2$@"ƒLIeªÔpïûãV TØ*“|>kÕZÜsÏ={ß@±V¾kïs’|4É6InI=&ÎMò½•>óL’·§꾟äá$§$Y’äܕλ'ɨ$‡&žä/I¾™dv’Ÿ¤ûëAKÇ-=MZóõË3cnòªw5¦Oã?þ¸ÀÆ£(&V†š3¯:< •jÿÙñ¹qFûjNêŸ}O¸8oÞfËôYqì-“³}ë‘ùÜo~–iÞ/‡o±vUÿ-ÉW’œ”äß»¼WIrvê«W8:IK’K“œ–z`L’ÿé¼ÖíIvï<öL’³’|6ɶÇNé2ÆÑ©ij“<ždd7ç_:néy°Šbb* ‹ézeø6[vù\¿¼j§‘iœº O-¨Õ·ý®oµ$''9$É^k8gÇ.¯+©Ç¸%ù{ê1±–ä7IvN²ÛJç–äkI~ŸäÈ™Ç×XÝÖéS:îËÔÒÿ]ž;¾ÑšGÿZM{c%ý¶ǫôËÄÃê J[Ûò‡½—f΢ŸhÉ•;µÔÿ±wSö»e@Æ «¿¬=Ü–ég·fþYôD-µA öúÞÙãßúdë.¿¢µ{[rõa­vÖ€l}[Kf^Ý‘ÅK“~»ôÎ~—ö͈ÆòqŸ³°#ónìHëÐÆŒžÜ˜^kµ"¶5óNÜ/7_Û’Þ"ãûþ6÷Þ0+­vÊèã¿’}ŽØ1+»xÚE™þí«òø¬'ÓÑwËl¶ÿ;2î“ÊÈ‘½ê§t<»ßóî̸¯’áùl3÷¹ÿæ‡Ó1dçŒúç/dïÿ»ÛZÎ^YÊbâZ[–Ù÷?’Žûfç‘h_ä´$×%ùs’ºñ¹;“ Íó¡±#Éœ$¯NýOmi’>ï7&¹5×Xšú½oMrNê÷QÜ®›ó/wmæÇF¡öXknùXKš'õÍë>Ó”~Õjšg´ç±Gk©¥swzï¦ìóëAÙ£šw¹GÛr×I˳p\ßlñúÆôz™¿úm¿»0ÝqÏ Õ?O̺'ž~z†½î¢ŒѤš¥×œNº.K«•4 ž¦eæ©_›ßÿe^¸ô?3jØÊ•°=Ï^rZš·›¡Û ÌSÌÌC§Ÿ†‘¿È¾“½¼‰À+À:‰Ëî¾$ߟ¶<»3%¯°.GZƒ–$ŸNò¯©¯.,‰·$¹"Éç“ îÖ'ÛO’Æl¹¯ìô‚³*é3²’>IúöOÒ»’þÛ4dàjB]Ã~}3y¿ÛjójæÙžGîO†[eY¾Cï¼í?z§_%I2x—ÿk(wݨ%Û¾/þè_3|é•™vÐòhËÌüýž¶ŒÑ'iŸ‘ûϾ>K;2ðˆ³rð©“Óç©©ùãQŸÉÜùWç/?|_¶9a·Ü.´6úÈL¾ôSÖëáÜÿáwåÎÛŸÈ#Wü><$½­N€µÎbbõÉiùú—.Ë3{Ÿs§ì”®‹¡Ö‹sS’ñ¿tã3ó“•äIN\Ã9MI%Yͪ¬œsy’ÅInKrF’O$ùnº»3nwÎc£PyUc†önÍœ3ZÒÿȦlµGc†Ž¨¬ýórÚ«yüË3óÊö<3¯–¶ÖZRMª•´¬!*oùÖ^!ñ嫌í›Cgõ홋¥’¦]'d³¾Iš¶ÉÀ!•ä‰ö´/iMÒ'µGnÏv$;gû£&¥oc’­Þ”]Þ6:ï¡,ºíŽ,©î–Ï]¯!_p6ï—$ÛfÔ›wÍ]·ß‘öÙ÷gQõ ó`xQë$&Öý%ýûWró÷æÌ/–Ñ¢$>šä«I¾‘úý§“úŠÅ¥Iúwù̳IO2,õû%ö^齆ÔWý5'‘ú“ž“äÉÔWír­J’}:ÿyrê?9&õ‡±LîÆ÷(·»óc£QÙ¶w¼°–éßiËÌ—çÖ¥IïWõÊn§÷Ëköí~á{ê[KsÃ÷kÙöø¾yà éÛ¯’ÚìåùÝqm©u¬vé»ùÆ»$¯ÒÔØV+IC%õ_èZ’¤Ö¼ ­µ$ÃÒó•¾’¾[K%=ÿþóWK¯A+–I7¤× ©$©-]’¶j1^TÏÇÄ–YùéNÎÏ–½1§žõáì>pEŠùI¦ðŽéòÞ”$c’Ü“<·drI’w§›Uã[cê÷œ“¤=ÏÿÉÍIý~…»¼Ä|öH=0Þ›îÅÄÒq_îüØ úïß'ûíß'é¨eñŸÛ2ã -™þ™åÙê·}³Uwb|{Gæ^Ó‘>G Èkz®UOÚjkøL%©l ­¿\•!Cë[“;žÎÒgªÉIjiùûÓõûM®xÿ¹ï^KËO¦–íSIGZžxªþVÿ鵉þÀúÔ³}n›—k¾tR.œ¿gN<ó_sÀð ø·ó]SøÊÍ+ýœ•ú7>=Éó|pkM}kó¬$¿J2r5׫$9(õû.Þ³Òñ«R’®tluOlþCêQo›n~Òq»3?6^• ܧwÆ¿«!•§ªYÚ¶ê) }’´ÔÒ±Ú8XKÇò¤×Ê ~¹Ÿº©=-kЉ…^|Ü•,èÈ×µfÖ k˜=¤²í>Ùj›Æ¤cNæþð¦,ëHªOÜû¯{$µ4fÐÄ}2àÿêÈÒë/ÉCs[R}ò¹ïªûRM%McvÉ 1^RÙÊÄÚÂ̹mzæ-«fÁì©Öª™së´L›Ý˜~£'dâƒS©5çOgÿ[¾ñ¿µìýþÒgÖ2mVçç+½2büë²Ëæëñoë“ìßåX[êÑml’½:Õ’œäê$_HrWçO:Ï= ÉV¯I=HÝyîÃIÎNòþÔ·1'õ09!ÉkS_84É©ß+q÷Ôƒ_w•ŒÛóبtܰ,×_^Év7f³Q•äÑöÜûƒŽ4îÕ;[¬æÖƒCÆ6¦òó¶üõʦŒÐÆÆ¤ßè†ônLÒØ˜‘ûUòÀÕËóÐýòªí’×´äÖ+ji|™‹„_tÜ•ÔkË_N®?Íy«É/ÿiÎ/ªé5ÙåoÉÃ']—ÅWž_Þ¸Y[žIëò¤a›Ã²û‘c»Ü{²!½:îÈm‡¾6·§=ÕŽZÒ8"£˜äá+P ,&v<’k¿þÅ\öXõ¹C×ë”\Ÿ†Œšr^.ùø¸4՞ͬ{O[µ=üþiùãÊŸo’CÎ×fÅßÊIDAT¼2ŸÝw#\úSMr{ê«Oíò^Cê+ßÚùzó$×&ùdênP’c“œ–%JÆíÎylT¶kʰÚòÌþ¯Ö,~º– jȰÉ}ó¦ÏöÎÀÕüÊ |wßì3sYîþò’ÌiNj½š²ß-2fX’J%Û~a@ö:uYî<¬9·¤’ÁûöÎøÿì™'´¾¬y¾è¸LCú¿íËysßí2ýÛWåñYO¦£ï6þ¦wdܧ>”‘úþ‡ß˜ÁGýgv˜÷í̼~vÚ‡ŽÍ¶ÿüùìyà  2{ØÔTš.Xe#â ÁC6Ä\ÖŽr÷{Þ÷U2üÄ«sÐû·Õ×à%,j^¸Ê±p© °1€"¶9«°ÍXkb"PDLŠ4Õ2;S/¾"ÓfÜ{î$϶ͱ—œŸ)£Vn‘Õ<:íÛ¹àç·ç¾çç©%Õô¾cöòÿ&g»¾ëæ ëGQL¬-¾;S¯¹3Í;ÏÄ]—eêŒÕUÍ3ÍÉÒ-öÊ!–­†ôÊ¢Ù7功žšæwä»§¾9타MVÙÓœkÕTÓ†J5ÿìø¼ïüö|d••‰«Ó–{Îþåò-òÉ˾™Ã‡WzpêÀº²öOs®4¤a­:`c†l60•´¥µm•f lBÊî™Ø-Õ´µ´¦½}iþþ×ësÁådÀ„Ofÿ­ìq€MYÏÇÄö9ï¨rÅÕ¤Ò;#&³>X¶Ñ`“Öó1±qLÞsÚ¹™¼lqž¸÷wùÉÎË¿94ß:é ÙBP€MVÏÇÄÊ€Œ;>#“dÏ×fŸ-—æè/Ÿ“¾eÿ|jÏ^=>°~¬ãµ‚• ³K¶®<›¹/HuݬC=ÛÒ¶Ê›«yrÆô̯öËð-­ër ¬CeÛœk 3ç¶é™·¬š³¤Z«fέÓ2mvcúž‰; N¥mfÎûÀ×óðnfÏ1£²ÅÀjž¾ï¦üòš;Ò±ãQ9bï¾ëø«ëR¥yá‚®Ë 3hðhŸ™sÞw\.{¬ëF册šr^.ùø¸4UÏ-?WþïÌÌ~ô©,\Ò‘>›o—q–c>xhÆ µ.6‹š®r¬,&¯(«‹‰– EÄD ˆ˜€"b"PDLŠ”ÅÄ–Ù™záùÜqGç°ƒ^ŸI“?–ϯ¾øgÚæäâ~s&MzK¾ts[LØŠbbmñÝ™zÍyªïΙ¸ë©¼ä'ª™ÿËsrÅ£}Òû¥O6E1±2ìМyÕe¹ðk'çClÆ—8¿úäÔœÿÃæ¼íÈIÜ“6¼²mΕ†4”®0¬-Ì-}/³_÷Ѽw—^k?3`£Òã`Yz×rþŸvÊ>°OôôÅ€ ¦gcbë}¹ôÜ_gÈ{?šƒ·ð høG҃ů#_qv._þö|ìˆí_ò¾ŠÀ¦¥Çbbõ©©¹àGó³÷Ñïʘڲ,[¶,-ËÛSKÒѺ4--m©öÔ`Àz×ÔSª=97,~6ó¾üžÜôå¾÷ÛSÿ)ÓFMÉù—|<»õ؈ÀúÔci¯aûwäÔsöOKíùcü4_<ç¶ŒùðùÀÄ‘y•½Ï°É*‹‰µ…™sÛôÌ[V͂٠R­U3çÖi™6»1ýFOÈħÒoëì<~ë|¬­ý†ôJC†n?>ãwéµ.æ¬'e1±ã‘\ûõ/æ²Çž¿ëáõß:%×§!£¦œ—K>>®ç–8¥Jóµ® ²!æl$5/\åX=ÍøÇ&&EÄD ˆ˜€"b"P¤,&¶ÌÎÔ ÏÈçŽ;:‡ôúLšü±üx~µËIµ,ºî¤¼ñÀsà ~Þ#¿so:z~îÝÓšdbêßø]Þ›–ä½I¶OÒ7ÉŽI¾”dùj®so’·$˜dD’K²l-Ç-Ñ–d»$•5üœßåüÅINZé»ìäËIjk16ëAkæ¸w.Ým\.?ù¦tý­Z¡zÓçrù¸Ýrén?ã&æ–[×|Ùêãyì’ 2ó¼ogî½-ëdæÀ+OSÉIµÅwgê5w¦yçñ™¸ë²LñbW“Ã?stöPé–Ç~xAî›ß˜[¿'Ûí»^¦ üc+Љ•a‡æÌ«OC¥šÇv|nœÑþ"'o–]ö{CÞ°ÙÚÖ³uàoI¾’úнïò^%ÉÙ©¯F\áè$-I.MrZê1Iþ§óZ·'Ù½óØ3IÎJòÙ$ÛvcÜR•ÔæÊªc¾.ɘ•Žÿ<Éo“ü*ÉAk9¥†=>šÉ—|4i–?N:.-ÞÐ3^‰Ê VÒÐ6XëH[kÛ·l®Wµ$''9$É^k8gÇ.¯+©ÇÂŽ$_é:¿I²sê+þV8,õ­È¿_‹q×Ö_“ÜšäȼðßàåIöÉ W+²éh›—‡O?&Wí»g.{Ã{ò§ŸÏéöíjüw¦î¾[.Ýý¨Ü7¿#IkûâÛ£'äwW<³.f¼B­Lì–ö¿äÜ÷œ3—´§iÈöÙûæø½!£z÷øHe¦%¹.ÉŸ“<ÐÏÝ™dhžIæ$yuêjK“ôé|¿1Éý=4n‰&éŸä𕎵'¹'ɤ$ŸOòÎ9îŸäI^ÓÃs Çµßtnno¯¤!íiòž6=1{¾zT†6,Ìì›/Ï¥?9%'<}Z.:yR6_ß;Ÿ[’|:É¿¦¾U¹4êÝ’äŠÔ£ÜàÎcÕ$ͯç%Ù#Éä$§¾:pAŒ[¢%õ{%¾-Éð•ŽW“<›ä—©o}þqêù|êÛ¤§w9ŸL-µæµ?=#Û.½87þµ<Ù23¿§-cFô)¾Je«·gâÞž´ß•?rLî›ß˜a:/“ß¹ù:œ;ðJÑ£+ûïûþ|vßç_OÜoÿìÔôœxíòëcÈû¶]Ïa97õ'-ÿK7>3?ÉQIÞ˜äÄ5œÓ”dP’ÍzpÜR¿Iý^ŒGeõ“Y’zHÑyl«$û%¹2ÉGÖÁ|è!•4îypFnÑJÛ«3th%Oþ½=íKZS_ °á­ÛºW î•Áå_ä¡-ë£I¾šäs©G¶Å©¾¤¾º¯ëÓ‘“úʾÓ Kò£$+oÍnH}Ubsê¡nn’‹RwÕÔ·D¯í¸¥j©¯„‘zì\Y%õÀùê$[®t||’~©ßg‘ZCŸÞõ_ÈJc*•Ôÿ…×6ì¤V²î— V«©¥’†õ¼(1ó“,LrLê‘mPêCéH2%õmÊm+¿$É»SWåù8¸Bcê÷Gœ“úý W˜ÓyÍ]ÖrÜîx,ɯ;çÙ¯Ë{MI¶ÏªíiEÚˆ®ÍËQI¥’$©vl8^Az0ñu¤½½Kɪ-Ìm¿»#‹šÆd×zþY//j×Ô‚róJ?g¥þOO}+ðŠ)µ¦¾mxV’_%¹šëU’”úýïYéøUIz%9p-Æí®ËR_Ýxäæ79ɽ©GǦw~fÜZŽÉÆ¥aHziHjmi¾ïÁ5?1½Ò;}’¤šåO/°¾èeY«¶0sn›žy˪Y0{AªµjæÜ:-Óf7¦ßè ™¸ÃàTÚïÏ÷>~FÜeR&ì82C›å¡?]_Üül¶}çÉyëÖëyiâÀÔŸd¼²¶Ô£ÛØ${u«%9!ÉÕI¾ä®ÎŸtž{@ê÷Lê« ÏJrtç¹'9;Éû“lÛÍq»«#É%©?•y÷5œó$ç$yg’ϦIÿ#ɨ$ïXËqÙ¸4ÉÖ{ožûç=™ßý`®ùÃŽé×»)ýùBö›²Óó PGg³$sšóÌïϯ~7:}{eøGÎ΄×Úߨ„•ÅÄŽGrí׿˜Ë{~Ôõß:%×§!£¦œ—K>>.M Ãòê×l™ÛÿpUþûW Ó’¾ÙlÔ®yÓqŸÉ‡ß¹{n¬Ûl«InO=ÖÚ彆ÔW*¾µóõæI®MòÉÔâ $Ç&9-ë~ñIf$9#õ-׫³uêÛ OLòÿ:½>É׳æ‡Å°‰‘ŸújÆ/ú¯Ìºev–üuz×3hÅ]v³ʨO~)c—\‡ïš›E3§§¹Ö+MO­í{€¤Ò¼pÁ*;  ²!æl$5/\åØú~, °‰€"b"PDLŠˆ‰@1(ÒTtVËìL½øŠL›qwî¹ÿ‘<Û>6Ç^r~¦ŒZµEÖ–ÍÍ?¸0?ùíôÌ}º-}‡o—ñÿt\>ôPéééëKQL¬-¾;S¯¹3Í;ÏÄ]—eêŒ5œØñH®úü'òÍ»‡fÿÃŽÉᯘåO=˜{>›åIôܼ€õ¬(&V†š3¯:< •jÿÙñ¹qFûjΪ¥ù¦ï绘CÏ&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @BUILD_HELP_TRUE@am__append_1 = $(images) userguide.htm subdir = doc/help ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(htmlhelpdir)" DATA = $(htmlhelp_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/mkinstalldirs DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTKSOURCEVIEW_API = @GTKSOURCEVIEW_API@ GTKSOURCEVIEW_CFLAGS = @GTKSOURCEVIEW_CFLAGS@ GTKSOURCEVIEW_LIBS = @GTKSOURCEVIEW_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ GTK_VERSION_REQ = @GTK_VERSION_REQ@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATA_DIR = @PACKAGE_DATA_DIR@ PACKAGE_HELP_DIR = @PACKAGE_HELP_DIR@ PACKAGE_MENU_DIR = @PACKAGE_MENU_DIR@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_PIXMAPS_DIR = @PACKAGE_PIXMAPS_DIR@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ markdown = @markdown@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ images = *.png source_tarball_files = userguide.md htmlhelpdir = $(htmldir)/help htmlhelp_DATA = $(am__append_1) EXTRA_DIST = $(source_tarball_files) $(images) DISTCLEANFILES = Makefile all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/help/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/help/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-htmlhelpDATA: $(htmlhelp_DATA) @$(NORMAL_INSTALL) @list='$(htmlhelp_DATA)'; test -n "$(htmlhelpdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmlhelpdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(htmlhelpdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmlhelpdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmlhelpdir)" || exit $$?; \ done uninstall-htmlhelpDATA: @$(NORMAL_UNINSTALL) @list='$(htmlhelp_DATA)'; test -n "$(htmlhelpdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(htmlhelpdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(htmlhelpdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-htmlhelpDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-htmlhelpDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am \ install-htmlhelpDATA install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-htmlhelpDATA .PRECIOUS: Makefile all: userguide.htm force-update-doc: clean userguide.htm userguide.htm: $(source_tarball_files) @BUILD_HELP_TRUE@ $(markdown) -o $(srcdir)/userguide.htm $(srcdir)/userguide.md @BUILD_HELP_FALSE@ echo "Missing markdown." \ @BUILD_HELP_FALSE@ "Rerun configure and check for 'checking whether documentation can be changed and compiled... yes'!" maintainer-clean: clean maintainer-clean-recursive clean: -rm -f *.htm .PHONY: force-update-doc clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnusim8085-1.4.1/doc/help/tab_io.png0000644000175000017500000005011613327071037016672 0ustar carstencarsten‰PNG  IHDRƒ]áPMsBIT|dˆtEXtSoftwaregnome-screenshotï¿> IDATxœìÝw|ÕÚÀñßÌ–t’MBH'H€`5€"" ¨t{¿Š Ûõbïz­¯z­®`E, EAD‰Té]jBzH%ÉîÌûdžlvâ‚Éóõ³ŸàN;ûìÙóÌœ™9£+ÐBѪ©gºB!ίEwƒ4t²Nb圜ìl~ÓúéèØ4 E•#W(ª›¦9>œÍСC)++C×u¶lÙÂÀ©€Â¯+W’€§§'ƒ bÙ²ehšÖ¢/ájèDT«Š•žÇšÏ?â÷+¸ãÂH—oao(~‡bÅÊäçç7ª(‹…AÑÂŽ¶ô|¶.þ‘?C‡3²‡?ŽväähýjÇ¥)1Ò)Þ±”v1ø’dÚ¶’ý6‡'µª»óì7h¨Uÿ c³Ù0n-h£éÇÉÞ½ƒLïx"½þ \_ŸãJuÖÆª¹c —phëöÇ4îgÖ@üV¬\ÁØÑã nÛ¨¢dçd1{Î7L¼üªF-wÖÓ²ÙðÃì¼`7 ¤ ÄqiRˆôc¬þê#æûÝÃȦ®ã¯¦—‘¹s™>]IŒòn–ß¶Ã#???.\Hrr2~~~ÄÄÄðóòåtêÔ £ÑHQQ?ÿü3~~~¨ª}ñ÷5kÉÍÍ ((ˆ>½{5®Dz1«ß›Â« ¨Ð@5yÑ&8‚Ž ½9ø$‡y¸¶Û>æ½õ&.~‰„H¯Æ•¡¾b5P#ÎX¬Ð)Ý·Œ™³³v÷QЬF|ƒ#‰KËc“h朎†â—ŸŸOpp[òósµÎ¶Á! MèÇøéß“™áq+Ü—Š'VŽ.ÿÏM?DÂíð¾AM ëÔºjôÀ70‚Ž=0ò² èjùkþ\92¨Xó·¿½‡½ÀM‰§ÖGæ=Ë£_¸òÕÇÑBvOÆ¥øè,~öv¦yÜÉŒ‡UÕ“~gå63=ïKÄ«jzÙaVÏý–VnbofšW0í»õå±£Ò©MÝÆX/bå›÷óŸ•ùUuÿàH:'ŸËec‡“xšuö›ï^}™?/û?£šç·íðœÁÈ‹/âÏýûùãM$''AHHf³™²²2vîÜIJJOlVÙÙ9‘ÍÈ‘#X°`𦑓“KNNqq]ØK¶QZXŒ­Óh¾¢;fkùG÷²qù|^ôOz˜{YÜ>Â^Cý³g*VzáïL{e:›‚ÏeôˆðÕ)ÊØË^ÕŸ³ìwíjÿö3/¼ÄÎ]»ùlú4»˜ŸßL¥°‘½ê¿¼4}?ošÂ­§“ªÖg¯«£xøÊxÚÊ8vt'¿Ì›É‹¤óàsדäý×}ÎcªS˜W€Õ–Ãò/qa·ÑDÕhƒô‚ÕÌš¿— =Œ‚" ÚþM».OQ—†Â£Ÿòª1!?m;<“¹¿»è mfÆÓ/1?;ŒMàŽØ@ EÙ°ô{Þ4í÷>Ëýk'ÝFɱ"lqãyüÚd<­e¤ocÙœOxzýayùVÎ9iÍ|×LG. ÞgÐ!&†‚ü~ûí7ºtéBÛ¶öÃø¬¬,¶nÝJÇŽÉÎÎÆËË›?6mB×u‚‚‚°Ùl€}owÉÒŸP…ÀÀ@V§¥Ñ¯o_—ºM¿0ââãí;áú>—îÿy†§Î ¾Ó½ ÐÉXú6¯}³™ìâJ ~át|%7ëA`õ/ÜÊîÏàêÏLô¹û&÷3º°\=œì…‰XÙmgGIƒ&ßÈÈøªò9½Tk®&Æ@;ƶï?gæ’ (°áˈÛfL§SÂRº“Y/¼Âò€«x|òÂ×Åcí-Û¶d±pôh&ááaÜ~÷dâ:uâÁûîaÎÜù|úÅLüüüøò³O]Z§ìUòÂÔ´¿á_LÔŽê¢ÚrØ0ç f¯ÜÆ¡|6R¸ôšk¸ ÖÈÆ&óÆa<ÿÜh¢TC³ç±eñüëõQ(~áÄÅu¶×Õ®I$GYyø™¥,ß2‘¤>&ç±®<ÊêYŸðͯÛÉ<îAێјKÀé¯ÄiL5Ž@`;3~dκ¡ÜÕÇ·ªÑ²²wáwüáF»ò" ‹j¬Ëa<¼Qô<~ÿäCæl>®ªëAJ{+÷=¶˜¥›®£GÐòØ4{Ÿ/^Ïþc 1=~õõŒJ¬ÚáÕ XÿåùzÕ.eRa²Ðçæ¸ ŽŽ•3îdÜ ýîŸÎC©.™Î´Ù«Ù“SޱM½®™Â½ƒCœv%U§ääs iË¢Å?rþùç°qãF@QaIII”––PQQÁÞ½{û•4f³=xÞÞÞüñÇlß¾ƒÄÄîN¶ZC[Œ¿…Sfóóïy ˆÜùLœt1oüm øø«÷ù¼ýkÜÙçDš‘ö#'sǹA((x™\X®.Wš2wÇÊÜŽC>›Wn$'6…`S}s5%ìý ¯|o£Ï¸[¸¼ƒ/•Eø„œòË«Lç§wßæGuÿœt¾ãDàbüöìÛGXh(]ããX³~c£"xî©Ç¹öÆ[yøÁûøpÚG̘ö!AŒ.Ÿ„·rô×÷y󻉹~ “Î åd¨ÊÙùå+¼õ[0—\;™KØüÝ >~ãs‚_¾™øÄxL¿mcGÁ(¢Ћس+Süh: £ž­©ž˜±QQaÌ ÇZ/eÓ§¯ðî*/ŸÄõ‘òvþÂw{u§ÉÀyLuŠ£Dãšð…ügîR§Œ"Ê`?*ønY1É×\‹ß—ÿ%·°{úi(·pŽG ‡wìäXôÜsk Æ’½,þtÓgÆ0d•Ü9Áƒcg3cÖÌîü2ׯ ö|ý ¯.RH½â&FêZñ _¾ú*?ÉøXè…ì[¿¬vc™tC<>Z jh0‘††ãß`\\ɧü[ÏþU»¼I¹¬;:P¾™e¿æ`t;E›k/geÈ„!Ì}ô–­-¦ï`¿“퇃õÛë†Õ^7ô vñ/þ¯º‡k¢ààò™|þâ‹”?ýçç¥r@mC{Mé™há•Dʉ Ib|8´ú1–ïIGëÓ‰õÄJTd»Z¼+ËÊ•8{c¥´Ê­7áOßâuíé9ð\† H÷vžµ>o£cPº‹Ž5úyn»8¼vL´ª¿¶\Ò¦Í䳬žÜõÈ8âœt‡¸¿5kÖóçþ¤§gÐ%>ŽñcF *P@­ºTÐ`0 ª®wiØv}ÉKÊðÌ)‰ôâµ|ÿS>‰7<ÆØ>ösÌ 9üñÀlÒvÞ@îÉt1Ì`ÃæB†žçR¹*t¾"Žê³WšÊÊJ”ÊR Òw°|Ö™ã¹ Þ PŒµZ¼žÅ¿æÑqü¿¹exÕÞ[þ²‘N>—ó˜VRT|£¯…Ä‹.&~ùnέ=Lúi!›óDß0Ö͇ýÇŠÐðAqsªî›ô ‹£{×X Ätt çGÐkHo’Œ@ìXù;wf¡Å‡£”¬gÁD~ž[†…£ÝâC9~ø1æ/ØÀÅw÷Á¯¨îœ“[]çtâï .κÑjØÿ•õûoìöIaL73::ZÞÒKU¢;µÇXÏÕèŽt0YùóðQløÖú­Ø¯!±RQY•¥äÙʲÏrÐÜ•a]<ÑJ~ã»EGh?în¿(HèJÙÁòݼµ\z_?¼ÑÑQðŽN¤gâÉöI·ÚÿšˆŠ>ùÛ¶£P÷!)!Î<€.ÅÀèj‡Ó¸±cì+­UQBBÚ¢iV«•C‡a2™èСyyyÄÄÄŸŸÏþýû EÓ4BBwÅHÕŵ’µn_ÌÿÝéT˜|0–i:W:YAS—s½cÎ}±2>èžë;†ÝkW²|Ù^_8‡Ncîfò¨x|š[ú>ö—Ò«k;ÉQ'oÙù "ˆKžºŽž®ô}:_ÚÚµ¼ðô“ÄÇÇ1öЉhš=ó<ñÌs :UU¹ã¶[¸íλñóõu¹›H Œ§GÐVV}?9±w3>áä:Úу,/#ç¿÷pÃÔKhج*æ‚2ðK¦_Â'|´vEçÂçàv•Çpa÷6(ØÇŸª\ÿÿ¸áƒªñLfܽ×3¤­‚³XkGrÄDïÎAM¸"ÄILõRŠKÀ+Ð CPwFöŸËÿ}¿’1ƒXøS .¤ƒ©‚m^PR\bï~vº[T  €ãEV`?¸Pô‡%öùõŒ?9Pa¯OÕ=±†PºÆ[øfãŸdØúÐÑÁ‡WŒ¿“¸4öÈ@Ï"í·=øöG73Õýñ:'ÿíÒzjü»rÍ;Ü8ñªcÄ/*…˼™¡m´]{Ù_Dﮡ¨'–UÃèÖ5Yë÷’níG'¥ÆúN]=çÉ q2*1Ÿ¹Ÿ½/døð!ôéÐÆáNnM.Tw‰ñÀ^þ 999„„„`µZ±ÙlóÇжm0`ï"éÑ£999Øl6üüüøvö‚ƒƒ|Þ¹Ú.€vtûKUBÃÛÁáïyë?‹QÏ¿†Û¯Å_É`éûï°ÎÙ:š¸\S®évW¬sq©——:œas_æé¯§óCòsŒhb tgû ~ñ}ˆ9²’EÍ&ñ_ãéâìÈÀ…øM}ïê/[ôkW­¨5Ï•Æså„ñ˜\¼dW îÅw]NâÔטúÚK”Üý0×'Ø]%€ÔÛfT‡š'T<|P…äÔ$>ùïjÖK¥Ó–­äEö!)èäç5vÇ¿®LÂÓ䉯%˜à6ÕžÓXÛo“mÒI@§1ÕK)-O/OÀƒ„ñØ"¾ü´ 븿¿…cxyꔕÚnÅY<(¨³ƒÑ€‚µj\ňњ®UÏÓäsœŠ¯Óø×ùØÕç ÚrÝsÚÑ4~ÛÛ†^ºbªzO %ÌKcëÞ?©8?ó)k±ÜÇþJ#¡ámQjíÛÿeìv9^s^&O|-mië¢nèh5ŽHôZå©Y®šk<åÿ”ºïbŠâ¢)o’¼y9 ç-àÍeÁ•ðø˜ŽuÊ~’=–jSïbÌÊÊbèС$%%qüøq|||ÈÊÊ"88ˆ>½{Ó§wo‚ƒƒÈÊÊÂÇLJãÇ“””ÄСCÉÊÊjü­™¬øêGy÷`pŸ@¬÷qHcèØAt$*&–PßD1áa†Ò’2´«©t¶œ§~1á¾Xy™Ô… ²9š­79jh4‘ÆíˆíÔ‘Øö„ÔHàB¬ÃbhoÎeëæ#X÷‰œÇT/£´<<v­“ ¼jM×8šö¶éEÿ.¦“ï›»s^ÿ@ ~Í⃕µ—·f²ü›Ÿ8êÓ“ózúÙûåOY¿âJ§NèØ>’vm<ìGU/5<–s.Û·e¢U¯3ƒíÛóðhK¸Z£œ§~ÌößvqéÉe«§yš8œy™GG¶aÏ?±³ÒIpr5QC4M«>Œ7 Õÿâ=°ghMÓ0Õ7cXÖ½ð;¶oÇd-ãØÑ½løe«´að¤ëI PÐãÕóÓœ•XúEÒÆGNi¨aÄD›X¸j‹;^@9ùõ¤·³å¨Éû6Y¬*÷,`êòr:w‹!¤zq:-#Ã܉áí MŽâ׋‹ÏŸËK³ßä=}4;`,É¡<¤/)‘'ç3´Àm÷dòÜ Ÿóî¼Xãxï£øZÉËËÃb±T¿w|úEh{–‚¡žža[9j§ (õ–@‡ë­Cñçœkà–¢çxÿwi÷ă Oá¢Ásù÷ü·yÇ0Šóâ‚0–çq¸8„óvÆKÌ]r^;žü~Y¥ »5ÌåKRÎbí“Â%Ã"x~Þ›¼ÍX†t Ât|7å.¬Üé‘ÁqÊÊÁÃÓlß÷Süè3úrvû“28´ê3ñð0 •”r\??'ñpñsפø¤pÉ…a<÷ݘê9Ž‘phÅ×|w8‚‹nH®:_Ð€ÆÆ¿Ö}Î @-Õ¿  ÷ÕÄ›j.ãIâ•·2|×k|úÔãì¿øBzÅ¢dãOßóÓR&~mj®³žõ×CñIáÒáá<ýíÿñç圩sð—/™}8‚‘7÷ĻެUE %¶½‰ïWÎfaçaDëÙ¶éE?ÿ],ÙªÕ>OkÛ—€¯¾.œAv8PÝ‘#Gøyù/tïž@$ûY£-[¶òçþý HíOPP .$$$„nݺ¡i‹…Í›7³ê·ßÐu¬¬lQU“ÉÄúõëÉÊʪ¾ì²~¼ü|Q·Îå•ç碽𠎠c÷K¸R›ÎbF2é†|fÌû”W•¢=ñõ£c»ªžrÅ—¾W^ÏŽfñõ›k±yµ£ÇøŽôêd9ÐïŒÄJÇfôçp ßò=Ù…¨^þ„ƦpÍC¸ ­45žtø0øÎäëŸ>â¯+0ø…Ó÷êzFÖ.…GÇQÜ>n+5ÉO2¦}ý]7 Åoà€|óí,òòóªß )f8„\ó>K4ºõ8ŠÁŒ-o?YŸÜÉ¢#ÑX¿ýŠ:^q} mI½åö?õo¾ø`ñ]F·«æ~¿™|³üSþïÛ2ð $ºï•ôHUãg ýá$ü0­/&5Üõ=dƒ³zŠ™NãþÉþ_òÕ’OycN šÉ—ÀÐxzG4|g©Óý½œãå`ö8™PM1C¸á–Ú³yxz@N)e€^.Ä£±Ìtÿ˜?cÖ¼÷øw!øGŸÃ¨¯æÒŽŽ;/Nj\ükæ‡1ª1M×Áv8Õ‡èu]gŒ§öÚùöàú§Ÿ£óÜÙ,Z1“w¾-Aó°Õ¥?7=1š âüQN]æ”õ×_ :_þ/þiþ„/æ¼Íó…àß>™Ñÿ¼ŽQÍè5ÏYÔY}'Þ̶w¿àË×Ö`ó åœË;‘s€´¹ßóIf•_BbS¸þŽKi¯:ŽÅ‰:¦Ü¿O¨gïꫯ¿!""‚ŒŒtÊÊŽ£ª*þþþ„‡‡sôèQ.1MÓøæÛÙ¤¤¤`6›ÑuÒÒÒZwÕúøØû]ËËËY·nãÆŽ©¾÷鸞ª¡’X5MCñs¤|ï¯ä}t ‘ÃÆãFÙÑùñ;oú ŽL§«rŸNù?²Ç¼Èä áFM‰éßV#â_ŸÇÑ£$&ãâ¹>_Oá‘å <öÆut=ËGÚinŠ¢°yÓFŒŽŽ¢»wgÛöíôïŸJvv6V«•öíÛ³fÍbcí—+¥§gTwc(Š‚Ñh$((???À~÷­¦iTVV]9¡i¤§géàÌæÙ¬:%±rAzÙ<:ÄÿÚì™v=a}’ñû¯´»ùc7&‚ ²¦L?ÎÞÅŸð‹×0¦ô=;pgeÿ.šÿš{ä®ÄÈvÕiéöº‰N†Óêþ[s8E—.ñ¬ß°ÌÌL²³³0™L¤§§SRRB|\`ï±X,˜L&JKKÑ4 Ÿê9?NII ªªâéé‰ÅbáÈ‘#Ë®¡u+çšzòÝ;þQ&›ÍVuT¡SZVFnn.ÛwìÀÏ׎c½î Ê÷oãøŽ5´»â>¿0˜QŒ&PìtPªþ¨gÏÓ«„9EתƳ«zê¦chƒg§ø%&óË7ð蘈¹}×&­_×uò ÈÉÍåüóϯµ÷_ëy §‘lÔªu*Š‚¿ÙŒ¿¿?ÑÑÑüüóÏàïߨ„Ðb“¢(”ïùߤ¨mÁ»Í™.’âl¡¨ÔÚT±ï(⢨ø&  |ÏxÄtkrƒ››G\\ªªVïÁÿN¬÷Äãt;wîLNN.þþZO‹MZažÉç‚Éó´N¬!ZÝä‰gd' 7üÒôuè:eeeX,À=CiÛ·¡Ä‘#GÐu½Qí^‹=kª( ºµÕìQïÉá &œR !ÎzªŠjö@·VœÖN¤ÕjÅ`0 W=pÍ]/UU«Ÿ Ø-úÈ@¯¬£Š\)$„p‘¢ª`ô°·§Áf³a4N¶ÒnbPU¬Vk£—k¹É@QP¬•<<í×דá¥ëHQ‡j°·ÖÊzÛ WèºNee%ªÁ€^õŸ»M&*++Ý5Õ<»Ìúq²wmdËá²æùÈͱ>]CÓl(&d¥ÿ IDATs“¿P!D+¤((&3šf½iOJÓu›ÍVuòؽÝDŠ¢T_vÚ.è”î[ÆÌY‹Y»û(EV#¾Á‘Ä¥ŽåƱIØö1ï­79pñK$Dz5!t§hŽõé:ªÑd¿j@!CQííG»wt]G=Ñ=í ›H/;Ìêy³ùaÕ&öe¡yÝ­ÃÆŒáüN~ö‹ô~|î¦yLbú?á €•ŒŸÞà‰©Hºû)îì\g¯^mB׸KÉ@/üi¯LgS𹌾q¾:E{Ù«zãs–ït+Šâ°;Hº‰„õj¶¶A¯·›H/ÚÌ'ϼÌüì0\|9#:¢dÃÒ¼ÿøïl»çi&õ´'„ª[¢ìk±‘µâž¶.·?Å¤Ô ½ÎÚ›TR—’íÐvv”1hòŒŒ¯ºyâœ^ ª5—•ÝŸ=ÀÕŸ˜ès÷Lîg$céÛ¼öÍf²‹+1ø…Ómð•Ü4®* cã7Ó™“¶›CÙETèuýSÜÝßÑúÌMúBqFè5^ÕÊÙúå,ÈìȵÏ?ΨhcÕC/úŸ›Jç—§ðá´OHI¸‡~¾5×a#ë×wyæýít¸åIî=7µ¾^¬&ö­»” Áí1ä³yåFrbS®÷ñFÚœÌç¡ àdŸÉ?î|&Nº‹·Nþ¶|üÕû|Þþ5îì㢲oý²ÚeÒ ñøh%¨¡þ(d8\_cÉ‘¢Ñš©m¨nÇkv•ofÙÊ,ƒî`x¤ŠÍV£EWB<áæ>ú=ËÖÑçÜ{ý•¤/›×þ»‹Ø[žäÞÁ¡¨Ú)GUenêyV—’Òn(·Þt„w>}‹Öµ§çÀs2d ÝÛyÖº‰ÏJTd»ZïyG%‘Uõ?1>ZýË÷¤£õéDÕÍÔxEu眄Xªoض:^ŸBü}ØÓÁÉ(@Ë;BF©Jt§( õtñ(Q±Ä˜¬üy$ÁØv|ÎóëÊø÷ n‡ªku}¥Æ:šÂÅÈ&ÂÝÂs}ǰ{íJ–/[Àë çÐiÌÝLÃå¬d­›Ãógwz&Œe†Î•M*¬Bü­Ø ìÿ¨qt`I«ÿµ¦ŸœëÄPA]9§í&~û!_w˜ÌåÝýï$ÿ•ÝD'(æ âR/#.u8Ãæ¾ÌÓ_Oç‡äçQÿüÚáïyë?‹QÏ¿†Û¯Å_É`éûï°®iemé&B4Z³uU EQcl"ÅF˜—ƶ½û©8·;§ž µÜÇJ#aamíêjÛÞÜrßDÎyÿ%Þ{ù9Šï}„{Ô›šzOC¯»ô 2© Ads4[Å„‡JKʨy>£òà>éq ;ˆî±‘DÅÄêëB¬O!þVô¯©ñ2uã¼Ô@òÇ*jO³f²üÛedø¤pnO{Ðul´eÀ¤§xð|øùÍùxS!Ú©ëÖõ¿öÈ rϦ./§s·BÚx §³aÑ22ÌÞÞj1Ñ&®šÇâŽEE~=éE¨¾˜Ÿæ¬ÄÒ/’6†ÉÞþíž|ˆaá†S¶Ù4.$›ÑŸÂ5|ÿÉ÷dV zù›Â5Mà‚¶ àKß+¯gdzøú͵ؼÚÑc|Gúɤò™1ïS^]TŠfôÄ×?ŒŽíŸe@q°¾F$¥züpÇ#÷I7‘¢>öýqÅÞŽX?蛢(ö'™izÕ=g§Œ\ê•ÀµÏ­Õ¨U£‡ªŠâàá6:6«FÃÇ:¶Êòzæ±a­¨û®®CEe%Fcã›ö– <¼Ð­•U·t˨¥B×èÖJóé³f4©¨¨ÀÓÃ\• þÊËaN´e:V«$ƒ:N$ƒúFüî»ïÎ@‰„g=]C·Vžö‘Á`Àjµ¢{˜©> \Õÿß¼åä:mV›ËÝC5µØ!=uŒ±TädœöC*„­‡^YAENjËi=“Æb ''·Æ½NÊ_2š¾R5šÝ‰ídçdãááÑèõ´Ø#]×ðhŸ@ÑÒ™xÇ&Ø¢Œ&0PPìQ¬PÑzèµîÖu l6°V¢—Rºo+^}G4¹kGUUBÚ¶åו«ˆŒŒ°?ñL±ŸDVôƒS45Ù(5Z­ª$ **V›íÛwœ|N£‡±n±É@Ó4L~þ˜;÷ oåÌAa˜ƒC1úYP ögŒ ÊÉe!Z͆f³‚fOºnÃZ”OEÎQ*²cŽîŠGX ••M:GQ<<<ˆˆgñâ %$¤-þþö+~ *Õ€¢*ö¿.2躎M³¡k:V͆f³'˜ü‚23³ÈÈÈ <,Œ@‹¥ÑçD[쥥`ÿBŒFZi!»7`+)„ò2´ŠãèeèM¸Wñ7§((ªŠ¢ÐÕ~/¢bð ÄÐ.SX ª§/VkãYÓ‰§³s×nŠŠ )//§´´Œòòò&­ûäå£*Š¢`¨º4Õ@Xx8a¡íðññÁ`p=Á@+¸´ÔþÒ To<’¡(jÝI‘­Ó)mñ‰+~4M£²Î3ÚwF´iÓ†^)=«ÿÓI0޶sâï‰dÑ-:œ 5ñŽæÛuùŽ÷Û\™Ç펳ç‡Ïø~W±›ÊTΡ_¾`öE®mï¯jøþ¶ßÒM$D#¸?h™¬™;—UûK7®Ìãf»¿æ­ÿ­àP™»Æ¼V¨ÌXËŏçQøËÚ½¿é÷nÊz™;ÖòÇÁ³ë³ ÑXN’îô¥,ã…«Fqùãß“¥;Ÿÿä âÍ1›^z?¾€üÞWse’7ŠžÏ¢'Ç1þ…å?eÞò/1~Üãü§ævMÄŽº ÔŸùü‡ChNb¥»ûVñ}¹½__¿ cF1jÔ(ÆŒŸÈ “þÉ ÌfÍ‘2×·cÛÅ·/½ÈgëŸY^òjèÕ0'—–:[\ãàây¬7àµu v å†.¦†Ñ«Š¥Û×_ï&\™Ç´C?ñÃf??Û—6Ô.Ó©åÓküã´÷L=ºqñ°öÜ·x1ÛGÝL7ß–¢€Ž.ßW Nc¢Û(>V„­ËÉçó×0>>ßš­Hç×Ϧ2sÙ2Êë¾ø€Y+wp0³ S ýn{™ÏD±e±vÖtf-ßÌ\ ÿN}só-Œè䢗ñçÓøð›ßØ}c›pz_÷8÷ ixZ­©qtM‡zsK'' g}–Ï‹ÂÕorÿk{ôô+ÜÐÍl‡ùîñ‡˜c¹“׈EQ ïÛè™?òûÞèßÀ³š]i‰ZÅ÷Õ¸˜¨~téÚO€¤ »€¤Wæíw>¤[ü¿lÑI_ô2Ͼ‘Ì¢ m"I¼ðzBPu¦°²ã£0ú#3©}ÊÃM.,'ÄÙã4’αß²’y†— aì-ðàb6~õ>S_ø!ÿ¹‹äì¹¼ùáZ‚&ÞÇ =Ñ ŽPdA´ƒŽ§Õvœ=;¡v¼Œ˜S£¥Y©¨¨¨µ÷XiÕj-ÛPùRúÞÄ­©÷ñÚû³è÷òÕøýø>_f¤0韰TD íLgß™ìÞ‡ßÖaÃçüÊ™Öò}5&&õ,£†pÞÕ#™ÏL~\•Ëy#ƒè2œëCNî¦Ùü÷Óÿcz‡÷¹?Õ§jûFbÇ<Âä!Á(¨ø›\XNˆ³GÓ“žÉò6pÞs$z*ÎÁy±xé~†Oì€ЋÒX°,¸«ŸaÒÈvö@‚/.]Çö«qaïöI¤$væÄþ±^œÆw‹rI¾ýE®HõCboÏbý?f²rû?8Ç\@‘îKrBwâ:x±'‹_èxZ-ZY9þÝ‚ñ8eRÅïorí„7ë.cêáRùRRÚÐ÷æ[H½ï Þ}·ßuGèyǃ ¨ÑT¨Á„ÆÌ4ÚâèØÀy.h%ßWcbâ€K_ ‡3ÐÆ»}2}ª¦uìp-~½¥»£¥ÆW6s@8ÑÑ¡µyW–âlÑäd`;ð3?ífÈíÛÔ™ †Dóý’ŸØ9þfº™@KßÏak0ý»×ø‘Ծȕyj¼]‹väO/#ë­™ðvõ»Ø¬*æ¼RÔÁ#Ûc5ÿ{òvÎE¥_¬?ÀÐÅñ´ÚÛ,§¼BÇìqj*c÷«xúúdÌ5Þ«Øø1OÍr­|:þ(múqãõ)Üýú2“ïäÁµ÷3P^^~Z}ñ­æûj.Õe¯ähÚ,>þv;ŽäQaòÃXfÃ_édM]Nˆ3ÃI2pÔüT²sé2”eÆc˜Qs’’ËÒMWÑ-Å³êŒ…Ž®Õ<›]ó¯îÚ¢µÓyEW<7óÿáÓ÷Ñ㉋;‘l9dçBp»`Ô†Ú†.ãiMß—«1©÷0Àz”eŸýÀŸîM ¢róêݸcâù$ù( {î«Ö*¯‡JŠKÐtªT*8[Nˆ³K×–:x¿tãrÒŠã¸bh"1m•ZKx ìÄì/–±úX*ôaÌÈ(ûæß¼Â• KÆt|éÇOî³)¾Î穯­ M.»0Œ§g¿Âkê.èÚSy‹B28Ï̵,Ú¢Ý>Ok›•€_|°u<­öçö$6. mñnþ´ ¢ë)ýõ•¯ú¯“òy•ýÁ§SÅwô‹\ÛõŽ+Xõàç|¸$…LJٯ’Ѳö°»(„N ~'ºîx$žÖõ}¹“´c‡Ø²e &kÇÒw±ö§Eüz8€¡÷ÝÆÀ=¢=aú}ù3–ÑøòÈ,ÕO~65œŽ1&æ­ø–q#h¯gsÌ¿ý-ç¤\B¸[ãÏè…¬ùy Ç㮦Oð©×D(„ôM¥ó'Ÿðóª†\Ü–ÎW=Å“m>æó¦ñÒ¬b4“Áá ô‹ò®ês6»0#Þt¿ñii3ƒ™K§òï/ËÀ;˜˜Ôëè?8cÁ~VÏžËô£ET|iש7ß=†¨l`Zm*a½ú9s¿ï¹Ž®ñ YCåëDÖÜù‰ xbTûq17\Ê”/g²&õnúøêMK〥77Å6Ü;îðÊ™V÷}¹ xûù¡þñ5Ï=þ5ªÉ‹6m£‰ë1Ž)Œ w˜‡½ÁŽË}ÿÈãÃo¦ñÂüRlFOü,tõ­ ¡ý¯»-o~Âÿ^Õ;ŒžWufÀ'Ë q–QÒV­Ð»&$Ö™¶jç_x‘ƒ¥ýØ”ª›jÜðS5-§îµ9™G9ÑW]ï&O]öÄ|JÝ-ª×ÙдSßÏeñ3wó¹ï]¼}*~ʉmÖWûzkÅÆQùê‹cÍ÷Ê·2mò3l¿àU^åð(ƒÁÀ¡ýûj_ÿ ­íûÂ…˜8ú Ô§z¶}Êg«=V|ŸÇQL„ø‹ –,œOßÔAu¦mߺ¹‰c5øÐ½ê¡"uç¯õr°NGóÔYgƒËžZ–úÖéB™NP‚|ÕEøÿþ_n©ƒÆayꉣòÕÇê÷*Ù?o?ÚÎ媋"~Q ¶/­íûª^ÂÙ õ¬³ÞB×7ß©«rñóH"g©&^MÔú˜;Oà®ëtv™m¸'.VÔà$.ŸtÉ>8ÝæÉqxÄ !\×´«‰Z%:¼Ž8·íÝy=øÚ»¸=½¡+gZ)‰‰®“QRÃ…®‰3¶=é¨Kb"„Ëšti©8ûè¸9Qý HL„p´òˆÇº$&B¸®Á#£ñôF¸î£ëò}Jb"„ëü¥ìݵÃ]åÍ@¾¯º$&B¸¦ÁdÐ1®‹»Ê!„â/öç¾=§É9!„’ „BH2B$!„H2B$!„4åá6M¥e“öÑë¼;w-‡ËüˆIÏ=“'Ò#@qmºh<‰i]!êå¦#+û¾x‚Çg¦Ý“¼øèÂwLeʳsÉÐ\™.ObZ—ÄDGÜsdP¹‰9ßî$xô[<4®;& »ùW?úsw^Â?:9™~ꃇ…sÎbÞc*1Â!·hé[Ù–ïMbJ<¦ª÷¼“z‘`Hgë¶\¬N¦ËN[ã9‹ykŒ©ÄDÇÜ“ òs) € KÍyÜòsó±9™.cO6ž³˜·Æ˜JL„pÌmWéõ>zÜõé¢ñ$¦uIL„¨Ÿ[’j ÂB>yù5Ä+òÈ)Kƒ“éòóm為,Û;‡GÆ]È}ßåÉc›‰Ä´ë¡­›’•}_<Áã3Ó‰¿îI^|tá;¦2åÙ¹dT=tJ+ÚËOÓåÖIÿÇÊ›{ŠÕÂILOå¼ ÑZ¹'Tnbη; ýHŸó&2åÞaxløŠ¹;m€Fú÷oñnš#Ÿ~€¡~2¶ü铘Öá´ Ñz¹åIgZúV¶å{“˜©ê=ï¤^$³u[.Z×"'¼Á¬+TÔÊßxÑ…jñT‰é)\©‡rM´Vn©ûZ~.d©±9 ‚Û@~n¾½[U凨Ü$¦µ¸T…h¥ÜÖVèH7…8ó¤ Q?·$Õ„…|òòkœ¥«È#§,Aùy ·z(„cîIá t³”²yý.*«Þ+Û´–­¶pºIW†p ©‡B8æ–Ș’=6Ž…3^ãÈ[t˜yïþHyò]\opK„z(„cîI‰ø,Ï÷¦>ÁÂ2bRoä…É—.»cÂm¤ ሒ¶j…Þ5!±Î„´U+:â’3P$!„…% çÓ7uP÷·oÝ,ݤB!d :!„H2B$!„H2B$!„H2B$!„H2B$!„H2B$!„¸mÔR@Ë&í£×ywîZ—ù“:ž{&O¤G€T’ñÛL¦~²€´ÝY”{¶£ËÀË™tçhºúÊ#GšFbZ¯ë¡­—›Ž ¬ìûâ Ÿ™NüuOòâ£ß1•)ÏÎ%CJ7ðù;‹(N¼‚žyž)Wu£`ÉÿñØûk9îž¶<Óz8©‡B´bî92¨ÜÄœow<ú-×ÐÝ|€«ýй;/á]ûpïGÓ1šªŠÓ?ã®U<¹u G´Þt”άÆó–˜Öá´ÊnDëå–&AKßʶ|oSâ1U½çÔ‹C:[·å¢ÁÉF @+$7ÏŠgD$ÁrôÞdÓÚ\©‡B´VîIù¹@¥Ææ<‚nù¹ùèµæ®äЂי±+žënŒ+m¸š—Ä[…h]ÜvYÇ•¨œýóžå¡wÒôø\kr¾ˆpBbZ“kõPˆÖÇ-Gª% ùäå×8¯È#§,A–ªŸg%‡æ?Åýï&õ‰×¹o@\÷zÚ$¦5¹V…hÜ“ Âèf)eóú]TV½W¶i-[má$t³7P¥ü—Gß>HßÇ^ãÞÔàVÝh5‰im®ÔC!Z+÷t™’=6Ž…3^ãÈ[t˜yïþHyò]\o-“EÍ&'éf.j—ÇÞÝyöå3Qí òpK)[‰i]Îê¡­˜›Î‰ø,Ï÷¦>ÁÂ2bRoä…É—®•ûؾ«œ¢¢w¸suÅ 1\ûÁtn“jãÙ$¦u9©‡B´bJÚªzׄÄ:ÒV­`èˆKÎ@‘„Bü–,œOßÔAuÞß¾u³t“ !„ê„B É@!’ „B É@!’ „B É@!’ „B É@!’ „B É@!’ „BàÆ'¡e“öÑë¼;w-‡ËüˆIÏ=“'Ò#@-?¾ùŸ,XÅ–ƒh~‘$ž5wÝ>œžn+aË"1­_CõPˆVÌMGVö}ñÏL'þº'yñÑ „ï˜Ê”gç’¡Š™Êr# ã&óì«/ñð•Éšÿožþl76÷°å‘˜ÖÃI=¢sÏ‘Aå&æ|»“àÑoñиîæ\ýèWÌÝy ÿèêK¯k&ÓëÄüÉq”­[Î{þä8ñqK![EbZ‡ÓzØŸñ „[Ž ´ô­lË÷&1%žc÷NêE‚!­Ûr©µS¦•pdÍ7,ÚáGŸs“ðrG[:‰)ÐÈz(D+ã–#-?—²ÔÈ=A·¹ùè„P´øÆ=ÿ+eº‘ð åÑa¡r†û4ILOrµ ѹ­]Ðq~‚ÎgÀ½¼ÿÁÛ¼ôàXB×½ÀÝ/-'OwCáZ0‰im®ÔC!Z#·$Õ„…|òòkˆWä‘S– KõÏSõiGl— ¸ìNž½³…K¿fY–¼Ÿ‰éI®ÖC!Z#÷$ƒðºYJÙ¼~•Uï•mZËV[8 Ý‚ê-„¢((X±ZÝQÂÖ¡µÇ´)õPˆÖÂ=W™’=6Ž…3^ãÈ[t˜yïþHyò]\o€ŠmÌûd ];â­Qxp-s¦¯„„I¤†ÉO´I$¦u9«‡B´bnºéÌHìÄgyæøë¼7õ –ù“z#/L¾ŒpôÒb²výÈ¢Ù’U¬áM÷÷òÚÍ£ˆj¥íÖé’˜Ö§áz(Dk¦¤­Z¡wMH¬3!mÕ †Ž¸ä I!Ä_aÉÂùôMTçýí[7K7©B¨N!’ „B É@!’ „B É@!’ „B É@!’ „B É@!’ „B É@!îLZ6iÓ¦pý¨ ¹`ØXn~êsþ(¨ï‘[62zŽ+‡ ᎙Gä¹´ÍBbZÍåz(Dëâ¦d`eßOðøÌtâ¯{’@øŽ©Lyv.µZ&‚ßßæŸo®§Âìž’µ|Ó“\­‡B´>îI•›˜óíN‚G?ÄCãÒ缉L¹w¾bîN[õl¶Ãsyþ¥ $ÿëa†KVs˜Öàb=¢5rKë ¥oe[¾7‰)ñ˜ªÞóNêE‚!­ÛríÝ•û˜ùÂÿ(ó“zûËóh›ƒÄ´—ê¡­”{’A~.d©±9 ‚Û@~n>:Vöý*_r]Ùskoµš…ÄôTÎë¡­—Ûú ôöKõìùà‹b.¾s±&‡³‰FÐ$¦õj¨ Ñš¹åȪ% ùäåk@ÕƒÇ+òÈ)KPÇÒ–Vp€´»/ba`qÈIDATVÕ2šÍŠþÁµ\ºçæ<6iÏC—˜Ö£ázh‘4!Z5÷$ƒðºYJY·~•ý0e›Ö²ÕΈnÁX¢fzbÙÉÃtíOfMy–íç½Ä“º»§-Š‚ÿùÓS5\ƒä¦Ѫ¹§M0%1zl g¼Æ‘·24è0óÞý‘ò仸4Þ€ª†íSc~[þFK8QÁ^²Ç֪Ĵ'õPˆÖÌM;ˆFb'>Ë3Ç_罩O°°Ì‡˜Ôyaòe„Ëî˜p©‡B8¢¤­Z¡wMH¬3!mÕ †Ž¸ä I!Ä_aÉÂùôMTçýí[7K7©B¨N!’ „B É@!’ „B É@!’ „B É@!’ „B É@!’ „B É@!nµвIûèuÞ»–Ãe~ĤŽçžÉé`LYÏûŽûÇ¿ÊÚÊ“‹Ú_Ëû3n£‹Œ.Ü$Óz8©‡B´VnJVö}ñÏ,eðíOrgð!æ½÷_¦<ëôWF¦‚^ZJ™¡3ŸÿÛ˜Š9¨ÖÚh5‰é©œ×C!Z+÷$ƒÊMÌùv'Á£ßâ¡qÝ1Ý͸úѯ˜»óþÑÕ€^\D1íè”Gg§k.˜žÂ…z(Dkå–}!-}+Ûò½IL‰¯~î®wR/ élÝ–‹h…ùUÊs²)¬ÐZp‘ÄôÿÛ»ÿ¨ªë<ãO.?T‘;%/˜ä((W0WË#GgÇÊNPø«3ÔNmÍ&ËugÆ<投3º9+¶a­–GÏLºùc]´‘FÇQZ² ºVŠ˜"\$å‡îÝ?òzÑ‹ˆ_öð}=þü~Ñû9ïóþÞ×÷óý~ï÷s¥öô¡ˆY®jj‰Àfmõq=lD†ƒ«Ú…8ßd!üN²gL%õþ4žxá-žj1bxÝ–jz¥öô¡ˆYv•ÔëgÕݰ”yü~óvvýé=ÞYñ$CŽmbÑ¿¾C™y¿»nšjêË_Š˜•!a`±Ú°â¢ÆÕj"~¾†Óu`µY¯<<@ÌßMâW³ÆÑãËÙ_¡ÉûMSMìC“1& ì¬õ:ÂŧŠ q¶Øq$ØÚ„Ç«I{g3{M;Ò‡"faÌÓDÁI¤OŽ#wý VÆÌd‚­‚Ù»iù,iñà9ξ?ìå»qD‡[8wìc¶¯ßKSܓܣC´CTS_þúPÄÄ úAƒ2–ðrc«×f’ÛFlòt–Î}»hnÀõÍA¶lÙÀñ3Í„ô‰fèØY,jwèíjêËOŠ˜X@A~žw˜#ÑgGA~&¦vÁDDäVØ“»“1É)>Û;‹u™TDDô¢:Aa ""( DD…ˆˆ 0""‚Â@DDPˆˆ Aa ""( DDÃÞZ xª(X—EvN! ½‰MžÊœ¹Œˆh½¤H µŸïaË–\öú'û>Ê«åvEÖMPM¯Ð®>1ƒÂ ™²™,ÚTÏø§3;ò;V¯aÁ’0ÞúíÃô·4ñåÖE,Øpǃi<>o:ý£bˆ2ë—V§PM¯Ôž>1'cÂÀ]Äöm¥D¦¿Æ¼)à †‡”óØÂÍ䔦2kX Ekyé@žÈ~“Ôè`C†ÕÝ©¦WiGŠ˜•!çBžJ'%®PGÅsñ+)4i4ŽÀJœ%Õx¼µìÛ¸ƒUìœÿ>FÆì¥¼[|s/ÔxTS~û°KG'Òµ ™x\ÕÔÍÚ*{z؈ ‡òjÞæ>.n¢ßèûÈHAt¯:Šß}•UóCèº#Õ¼×5:®ù°jz¿}H¿®œH3ìÁ˵oÐyÏVS]oáŽ{Òwg<ƒãïbÒ¿Ì`¬§?ýõ´ÎØ:@5mÛõúPÄÌ ‹Õ†5®V_Açk8]V›KpA^ÎÖ½ü%Õ³/Qáp¦Ö¼—5nF€jêÃ_*&ÄÌŒ »ƒk=ŇŽà¾°­¡¨g‹G‚ K¯ êïå«âê/ì÷Ô~Í×® ì1ýôcˆŽPM}øíÃ.H×2¦ÿƒ“HŸGÕö¬Ì9À¡ý›Yþ»Ý4œJZ| Æ31-óûÞ ë¿?æHiÿõïëù[Äþûp±u„jêË_Š˜XàÌ'g¼Ø·_”ÏŽãÇŽ2hp\'}Œëð1 qóÇ`ËžÏ ñ/æg'Qiª*ß_Á+{ûr÷Ðc†ØÍXTÓ6øéCÍ“ÅÄŒ wÛ·•™þó¦ 'RÎc 7“SšÊ¬a6îf»ôçžÛy{O5£f/'5ZGh‡„¨¦>üö¡¸ó2ä[ÁSé¤ÄJâ¨x..«š4G`%Î’ê+g÷~Çuø[Ôdþéþ(ÝÔè ª)pƒ}(b2Æ„«šZ"°Y[}\‘áàªv]±8»§r÷6“òøwG£[SM¿w#}(b6†$zÛµên _îÚIÉïeÒ=}̹No§SM[k_Š˜!a`±Ú°â¢ÆÕj"~¾†Óu`µY/ž-GøóÞ n÷f]¦·³©¦—´»ELȘ0°;H°ÖS|èî ÛŠ q¶Øq$Ø. ÂS^ÀG'¬Ü5vˆÏ¼voªéeííC32¦ÿƒ“HŸGÕö¬Ì9À¡ý›Yþ»Ý4œJZüÅ'8¼Ôvr4p(ÃãL~ ÛiTÓ+´«EÌÉ “Å e,áåÆ,V¯Í$·!ŒØäé,ûöKqÔÂñò <‘)D›ô÷PO5½R{úPÄœ òó¼Ã‰>; òó˜01µ †$""·ÂžÜŒINñÙ~ØY¬Ë¤""¢Õ‰ˆ Aa ""( DD…ˆˆ 0""‚Â@DDPˆˆ Aa ""öÖRÀSEÁº,²s ©hèMlòTæÌÍ`DÄ÷KŠxÏ}Á{o¼Î;{‹ù¶±Q ãyô¹Ÿ“:$L‹ŽtjÚ?}(bVÍ š)ۘɢM•Ä?¾˜e §aÿ|- –äpÂxëØÿêó¬üØÊ”ÌlÖ¼6ŸûCö“5Ï3ÂnG5mƒŸ>11cfî"¶o+%2ý5æMN00<¤œÇn&§4•Yƒ¿ àëúèSLº»?â‰UÊÞY¡øX c‡já‘Ö¬šúðׇÃLX‘ ™x*”¸BIÏÅõ¶B“Fã¬ÄYR'0Šèþ|óÑA*ݪJsªOŽ:@;D5õá·»tt"]Ë™ÇUM-ج­²§‡Èp(¯váµÄ“þ‹gøô…UÌœ~€ñ‰å×3ù¥L’ÃŒa7d‰QM¯â·é×uƒéb†=Mä½î-KçNådË þ!5{°Kcî*äd‹Q#ìnTÓ¶\¿EÌË0°XmXqQãj5?_Ãé:°Ú¬pö¯d¿’KäŒeüò§éüì+x;k2A»_eÍz#†ØíxUSþúP1!ffLØ$Xë)>t÷…m E…8[ì8lœ*ãë³½p{Ä¥õ’D\Ø9Nž¨ÓµÜðª¦>üõ¡~t#ffÌÓDÁI¤OŽ#wý VÆÌd‚­‚Ù»iù,iñXÜ#µ÷ßüO⟺—Á½¾ãðηÙW?Gî쫃´,Ѫ©?}(bfùyÞaŽDŸùyL˜˜ÚyŸä©âàº,VÿO!LjMžÆœ¹Üyáf^cù¼õúvzŒZw?ŒÉÄéÏ1=Å~éɹ1ªiüô¡Hw¶'w'c’S|¶v""Ò¥®:…ˆˆ( DD…ˆˆ 0""‚Â@DDPˆˆ Aa ""( DD…ˆˆ`Ô+¬ÊáƒJ¥¡š¶ÁOŠ˜™!aà©tRâ %qTü¥EUB“Fã¬ÄYRMsýYÎFxïËW­zþ(Ž|ÃWå:H;£šúðׇ&HÀ¨0pUSK¶Ö«Iõ°®j–‰$„gï¶?s´ÞžFª+«hô¶ànö1Än'P5õá¯ÍY‘ïvÙ˵oÐôNá™…Óxiù2þñ_ô ëÅyOFDè§ŽPMÛv½>13CÂÀbµaÅEË\Xxü| §ëÀj³€…¾cŸaÕÖÔžª¡1¤MïÿŠéëm ¤…Ê;F5½šÿ>1/CN-v ÖzŠÁ}a[CQ!Î;ŽÛåAXzq›[㇬y·”ÈûÒÛ[‡èMQM/iwŠ˜1—‰‚“HŸGîú¬Œ™É[;²wÓ4òYÒâ/ç¾ýŠòÊo)+ÚGÎÖ=TÞþËf"ÔvGª©¿}(b^Ý3bPÆ^nÌbõÚLrˆMžÎÒ¹a·4óÉš9¼x 'ö%2æÉ,~óàHúûûåÚTS_þúPļ òó¼Ã‰>; òó˜01µ †$""·ÂžÜŒINñÙ~ØY¬Ë¤""¢Õ‰ˆ Aa ""( DD…ˆˆ 0""‚Â@DDPˆˆ Aa ""\ç­¥öè>ûô‘c‘[ÈsÍ}× ƒï¸%ƒ‘ÿt™HDD""–   Ün·ÿ¿‘nÇívŒ¥O„•o++DDLÆívs¢ò8V+gj]ÞªS'9S[Ks³ADÄ,‚‚‚éAß~QüèÅö“$BÓIEND®B`‚gnusim8085-1.4.1/doc/help/userguide.md0000644000175000017500000001003113327105466017241 0ustar carstencarsten## GNUSim8085 User Guide Copyright 2018 Onkar Shinde Permission is granted to copy, distribute and/or modify this document under the terms of the Creative Commons Attribution ShareAlike license, version 3.0. A summary of the license can be found at [https://creativecommons.org/licenses/by-sa/3.0/](https://creativecommons.org/licenses/by-sa/3.0/). Full text of the license can be found at [https://creativecommons.org/licenses/by-sa/3.0/legalcode](https://creativecommons.org/licenses/by-sa/3.0/legalcode) --- ## Introduction GNUSim8085 was originally written by Sridhar Ratnakumar in year 2003 when he realized that no proper simulators existed for Linux. Since then it has been improved with features/fixes and ported to Windows thanks to help of various minds that are inclined to share knowledge. ### Features GNUSim8085 makes it easy to learn the assembly language programming by providing an easy to use user interface. The application currently has following features. * Program editor with interactive input wizard for the standard instructions * Syntax highlighting in editor to distinguish between instructions, operands, comments etc. * Support for standard instructions of the 8085 * Support for popular assembler directives * Complete view of registers and flags * Programming debugging using breakpoints or with step by step execution * Easy inspection of stack and source code variables defined * Easy inspection and manipulation of memory and I/O ports * Printing of program from editor as well as assembled hex code ## User Interface The user interface of GNUSim8085 consists of following components currently. * Program Editor ![Editor](editor.png) User can create new or edit existing program in editor. The editor has syntax highlighting to distinguish between between instructions, operands, comments etc. The ‘Load me at’ input allows specifying the start address of the assembled program. * Assembler Messages ![Assembler Messages](assembler_messages.png) When program is assembled the status or any error messages are displayed in this section. When user clicks on any error message the editor highlights corresponding line. * Registers and Flags ![Registers and Flags](registers_flag.png) Values in various registers are displayed here. Also the status of flags such as carry flag is displayed. * Data conversion and access ![Data Conversion](io.png) User can easily convert data between decimal and hexadecimal format. The I/O ports and memory contents can be accessed by specifying the address. To update the contents enter new value and click appropriate update button. * Data details ![Tab Data](tab_data.png) This tab lets you inspect values of various variables defined in the program. * Stack details ![Tab Stack](tab_stack.png) This tab lets you inspect values at various stack locations. * Keypad ![Tab Keypad](tab_keypad.png) Keypad provides easy way to insert assembly instructions in case the syntax of an instruction is not known. * Memory details ![Tab Memory](tab_memory.png) This tab provides easy access to the memory contents. By default only first 1000 locations are shown. To see next locations, enter address in ‘Start’ text box and press ‘OK’ button. * I/O details ![Tab IO](tab_io.png) This tab provides easy access to the I/O contents. User can also manipulate the values by simply editing the cell contents. * Toolbar ![Toolbar](toolbar.png) Toolbar provides quick access to various actions such as open/save/print program, assemble/execute program, debugging actions etc. * Assembler Listing ![Assembler Listing](assembler_listing.png) The assembler listing window (accessed through menu Assembler -> Show listing) provides the hexadecimal opcodes of the program. These opcodes can be used to run the program on actual hardware. gnusim8085-1.4.1/doc/help/tab_keypad.png0000644000175000017500000010467013327070740017545 0ustar carstencarsten‰PNG  IHDR„Z‰*ŒsBIT|dˆtEXtSoftwaregnome-screenshotï¿> IDATxœìy|åýøß3»› $!wHp„pC8•K@oE°`ÕŠUëÑÖÚÓ¶Uªþ¬¶µZmÕê·j­Zë(Ê!rƒÈ%rƒ @ûÉîÌóûc\»ÙÙ$;»…ç×rdž}æ™÷gfžyžy楲¢\ ‘H$’s5ÜH$Id +‰D"‘`B (J¸Ëñáê]“®ÚGÓýLA¡¶®†ŠòrêjkÐ…@èº÷oëP”!T„j¿PEUQ›üÝ¥k ñ tíƒÀµMò8nXü ¾wKPß‹xD)»>þ„×qÕ¨]>Ȩ­é˜AõÁ5¬8’ÄäYÃI9˯ßÞTÖÝOŒºRÝÿhš†Õj5¯´íAœ¡èÐ~NwÍeHÏ.¨Àùùß¹"ÖUg;5ß³›#ÖÙÁ]5ñçKeII)))©”•×BHMI£¤¤ôìëÐ ÙòáböÏœÊy +Þ³N@'Ð'¢’­‹^gYÜ\©•Agß"@ !..Ž¥K—’——G\\ÙÙÙ¬^³€þýûcµZ©ªªbõêÕÄÅÅ¡ª®]ö‹-[½ÍþäädÆdÁªùüï¿á…ÏËiÐAµu¡[J&ý†ŒeÚ¬ ÉË0øŽv„Ÿyš£—>Ξ]‚+ƒ¯bµ±s…Í‚Ú#«xëíål=tŠ*§•Ø”ž ˜p 7_3œ„NvÐý>H>ö8â߯¼ ÀÔ™—²zùÇÖàç×å,ÿý¼lÿ!¯Þ;™hœœ\ùgøÇQ†ßý0?šÒþ‰½DžþÏn(sí¯ÖhâRz’“7…+¯™Å¤ö¶ÛnQµJàä×°å9îøë×Lúåc|XË}Aãć¿ç¾w,Ìÿãý\œ©gÀàØB|ö‡{xÕ~/üt‚{ßð,ÚÎç¢ñÃ!Þß‹3'øâãYñùnŽV#¢“É8†éW^Î}ãZŸ[žË¬vb“2é7b"—]y!ƒ;ØKЉÇwãÔ~v¶Ë.½„o¾ý–;¿"//ÌÌLÒÒ\¿DEEQWWÇ=zšS£¨¨˜””dŠŠŠ¸ì²ËX²d º®S\\Bqq1ä¸ZÖ¨­¬Fë5÷ÎJ”³Ž²S‡ùrÍGüù¾µL½ë^n“húÌ|mõG†Ë•¨ü‚—Ÿ|…¯R¦põÍ×’+¨:y˜ÃjWb"ì˜öú3pѶ{ï>’9uê4=zdpÇïa@ÿþüâ§w³hñG¼þæ[ÄÅÅñŸ¿Þv¾¢ÅÓëžcáKGxûCÜu~ j‡z4j*ªÐÌåóˆvÖQ^°—U‹þÅÃÛóùí·1²=ÁhUî@ÉÛJ$¨,-Ç©³æ?˘1øj²šœ‹Dùç¼ýÑaDåU:¤þvg¶ ý÷eÛ6sÀ>‚»»ªQ½‡7þßS|RœÎù3gs[v"jU>;×,ãå…[9p×ýü`\b‹JÁs.»Š{ç Z«£âÔÖ~øÿog¿xä&†wŒÕ{¡­fUŸìlÊËÊÙ´i$5ÕÕ¿[XXÈž={èׯEEEtéÒ•_}…‚ääd4M\W½Ÿ®ü EQHJJâóÍ›9oüxC](J\rs]µó‘œ?u CŸ]È‹/½JnÿŸ0)Aprå_ùÓ»»(ªv`‰ëÁà©óùþœ$yk '‡þýs®ÿ7€q?~{γøž/cmï\áp¥ßÇþšd&ßs3—åºâ‘c˜Ü,U;èìýø ÞútGË5¢“úrñ÷2» -µxû±'Y“ð]¸g:þŠëöè ýúÈ2ÒÓ”;€-ÛwpMVOyèn¼ù6îýÅOyñåòêË/’œ”ˆÕ}/ƾ-“ÓëŸãá¿ï¥Ï­r÷ÔîX<ßÔŠØöÎk¼³v7GKuâûãê›off? ÛŸ½“'¾½”'Ÿ˜K/@çØů>ÌÏ]€׃ÜÜîýu£{;ùéýËYùÕ÷q¾‚åâñÿ|EaU–¸L†^t#·ÏËkôí(`ãÿäí5{9YEZN6Q5`C¸Ðæþ©SQ^IÝI:¹‚EÛ.âGãbÝ'/'‡—~ÀΘ º×WQYÕ$­˜‹Þäý {9^¦Ó­Ïh®¸á.ìÛE”òÅ¿^dÑ—Ç9]ZM]Ht±²Ýçì>ZŠ£k#.¹‰[.Ë%ÖsÞÓËØýáügå—«Tˆï5‚‹æ]ÏåCÜÝb¢‚/ß}…E›q¼¨ ‡517ý–I{æ/Ggòè#W“åŽÁñ÷àþU¹üú©ï1ÈWÖÞ.#QʶÍé2òn\õA=ûÞ}™¥…}˜ÿÀ/¹¼W”;á(ÆOOÿ¿<Ì?_y“¼Áw2.¶õ ^‰ëÁ€9®}cÐpò²œÜ»p%kv_Çðqöv:yˆŸïŠ_«ã{¼ÎÑÕ¯óÊâ-)©Ç—Îèù?ç®É©þ»•[m“—7’´´T–-_Á´iÓøòË/™4i"U•U >œÚÚZ8|ø0àaå’×µkWvîÜɾ}û6lh ´Æ’ÊĹ3Xú›÷YýE)g&?`×Ýu)‰]e{—ðÚŸçÞâ‡ãºº7ÜJïËîáÎ)É((tM¶øž_Šh¶+KJwÒ,eìÚð%Å}G“bó•ª=8üþ“<ù±Æ¸9·ò>±8Ê«ˆIkqÔ9 øìoe…z1¿ºkšÿÊ ©¿"·lÙÎ7ߥ à$s0wöÕ¨ŠPÝ£”, ªÚô27Њœ\ýWþøâúÜú ?™Ö›wY=û^”?mHåê÷rkr_½÷2ÿ÷‡WIýË 1˜¨õ»Ù[:‡^É ˆJî/ jàµôS¡ÀGT{4Q8ihÐ@D‘;ƒî¾’äAÉ®Åüó­gx5ûYî9/EÔ²óŸñôº®L7ßϲRºÿ3Þ=$°p8‰ º¢%k7ôXʳ‹W’?ú*²,®ÖÁ«ªÉ»áFâþóJ*ëq @¬çÀžä™M)\~ã=ÜœTî^åµ§Þ å‰[i¯!ÿ*zÍãîÛ²±ÖfùëoóÊ[ÙL¿v>?¼ÖNÅ—ïóêÛ/ð~Îܘkøú'ùã2… óî亞‚ãëÞå?ü# ü޹}m *9²}…ݯ᮹Äè5¨é)ô´äbÛ´—ýåW‘•¤€¨âëƒ'±å^M? šv·J¶±ùPWF^6;@ÃÖl,!aÂ-ÌôVn¬Ý¹`ö,yx9kvT3v²®£¸ö ͵o´ÛI< 'ñu|ëù‹xþÕ/Iºæžˆ^q’Úä–­—Ö®\‚X[ff&ñññ|úé§(ŠBll ½{õâôéBv|ù%ÕÕÕX­V:DMM ñññ8p»ÝÎÀ©®®¦¨¨ˆ¼‘#®Ï¯ÈîÙôŽÑùªà4:ÉtÍÎhϰþìŽ~?k¾.@×Ï>•NVÏîÍdù^KŒxs])Ý/â¶ïŸà¹×ŸáçÛz3jÒ¦OŸÄÐîÑͶ7hµ;X²ìYW?Ê.íÑ܉îþ[+aóËoñïÂQüè·s éëñèZwóÖ­<öðïÈÍÀ5ó®C×]+|pá#̼è"TUåÎÜÊ~øcâbc½]Fmå+mÿ¿ùý¶:Ò¯{Œ»§e`mò Q½™W”2â¶…Ì=ßu@÷¹µˆ?þ/÷ÝÂÈa£d}‰­;+˜9=¥áköVpâÜù#œ48ÀQKÙ‰=¬zc)Ç¢1s`4èÒkc{¹Ö×·ÏuÛø+VÌG;ojõ|¼¦„þóïçöKÝqÜ•oVmg¿ÁBÛû§ƒªê3XcvÉ¥ä®YÄÒݳ¸m„ãŸ-eWÂTŸÁ¶àÛŠ*tbPª·òñge [p?׌s9É^PÌΟ¿Ïæ é~Æ2:cCõÅÂ’OmáË23},íÀØ¿á)(DÏíR³%+NÒëêG¹ufT`pn:gòïç£%;¸ôÇãè €B—¬¡ŒÒ×»ï {-¯²cW%]â8Âoræ Àß]E£Çl‹oQ¼u3_Çäqå ×É_/=ÉÉ:•¬¾½ñuÍeÉêK¶ÍÉ·'ŠÐ‰k}Ñ5Š£–ò‚ý¬yûSŽGåranDÍæv;Áéú«åñ­UUR%b6p0ý³í@và­Ö=]FëÑ9×Ìv¥vOÁ«( ii©èºŽÓéäøñãØl6úôéCii)ÙÙÙ”••ñí·ß’žžŽ®ë¤¥7¬°uÉ=ÿpR¸mo~ô‡ Êi°Å`­Ó±ä8dÐÞïß¹Ìse£Çä[ydülmÝÀšUKøóÒEôŸýcî¹*—˜v:Ð Žðm}cu÷SA JWýƒ’¹ü¡ï1*ÁH?¨±{/ýý9ï¿W-û€­×5K3ÿڹ̿v.6k€ÝØý{%y #Sv±~ñ˼Û÷gÌï=€ôßr´¾Ž¢¿ÝÎwÿîù¢ŽæT‰*«ƒ¸QLªòÒ;¨œ:•Øo÷r ¾/³†Å£לUŽ-Ïqóuî²+Vâ²Fó_ÜÂE© §·¼Ëë|ÎÁ‚2ê­±ØÎèX8@€^p”|g 㤠´¼÷nðB›‰D-Õ5Ð%© –ä¡\vþbþòñfç$³ô³B†\;ƒ>¶övšê×*OãX}Åÿ¸›/µpR^çcm* I p¦ŠÊ\—›jIñ°¿Æ•^œü†£ ®ýÊÛ;kIgPn"ï~ù 'µqôó³+)qyœ7ä_üsëWTM™Ḻý¬ÏfÆÐnm\ù¶£B…lÙ|„ؼ«8¹‘õ9¶¿Àí ^pýG±Û39?¹‰é© ú×íwâKÎt®²•?þkŽL˜ÎŒ‹¦2&ÛGEÕ¢ìAMnçÁ3wýê5k)..&-- §Ó‰¦i¤¤¤°sçNRSSWwɈ#(..FÓ4âââxïýE¤¤¤0õ‚)Ám% Ÿ:·µ*é=ºCþÇ<óìrÔi7pÇ}‰WN²òùçØ(v~¯=cšÍr¥D%3`• ˜0‹™‹Ÿàáw^ᓼG˜›ÙN"ЩB\î8²Ol`Ù?ßgدç20P Á{¡ñO_4ë ‚@÷ÔÔqÜrÏu þ¼ð‡…Tÿô>¾?ÚÕŒP™t×}ÌîÛôF’Jtb ( £&Äú÷l­˜DÎî]”dLjäÆõZ‡ûnI[4±‰©¤ÆÛݸ@;ö!þË'¨.à‡7÷#^)`ÅsO³¥Ùµ¿û}­¶#P Áå½ÍýSÔR[Ñ]¢;C.¾Ìû—ñŸ×»±Ý:‘ŸŸˆB]¢uµ®“·"( LøÁ½\Õ§…“„Ê[­Æbµ àt_™+ X±Z@º7M»ïß+±äMοþñ9Û+&Ð÷J{ŽcxrÕA;ŽYýôV>ÿ&ŽQsâ©ÔÄtÒ»èìûæ(Ž †Ð²žÐò¿á˜ÃBzFšÏÁ.ÖAsøõüáDÛ¢‰ML!¥›Ý›N£NüaËbÖ/Ÿdäîõ,ÿä^x` K¯½—ß\Ù§UÙ=eˆÂÂBfΜ @YY111’’’̸±cø|óf ‰‹‹ãÌ™3 îjg._¾<ø:O³î¿+8Þu·K¹÷ÇÅn¹f2Cc]HozCG±a‚Úš:tðÖŽŽc¾ç‡Ž<õhž+;=‡$ùeœ*г}Ôô^ô´®`ÿ¾Óhý{ø¼²°eMçG7 â…GþÁÓKæw?Nzçòfþ|¨LNJ¦´´”ÄÄDïïμr ú×+Áâ£S@«Gí!uWý›ä¤äÀ÷(Ö ¦üð!b»üž??õ–_>ÈMÃã\Ûkû˜£'uºOÊ¢Õ­±£.âü˜'Xµv7•Û è9n,=”Æü•˜tú÷ïß8t±IyÇsL ä×^À0·ï ÏÈ#j¾dG}Âîù8sz·¾¹×Ö®çͦ­ ¡ŽÚZ°Ûí(€š1•Y×ð·µEô› ®ž;ÑQP羚·¤÷¢§mÇNé¤MìÙÚ‰ÞòQ3²éµœýû Ñûg¸NŠÚ)ö(#ªw6–¶òUˆ5óbþÌš {¨ú²€Ì1£Éhc HðǬÎé-_p´Û(æå6é²aòø$6mø€O/À¥=›,Ó Y÷þjNÅäqM^¬ÏÖŠÓ¾ýû5Öê¡CNüœã\Ë¢é>ì"n6‰ñÿ~G–¯æà¥}êç>Ÿ¡QFm¡ëº·×b±xÿïù+k®ëX­Vï[žïBTž`ÿ¾}ØœuTœ:ÌŽµ«øüD7¦ÞuD,ÒÅr>[´ÄózÒÍRJqm“ Ô ²{ÙXºñC–÷»,Š©ŠÅØ@ßó[ öW¡råøz /­©'gp6iÝìˆêv,[ÅɨþÌêmi·%n —N[Ìãï?ÍßÅÕLÊIÀZSL}ÚxF÷lLgIÈî>Í#½Áß>ìËýWgû½¡Ùs­]N™|ï½ÿ_JJLK«ïÅ,’H»áy,‰½Î3(–(´Òo)ü×Yv¢Úûï0eò>ól\_“õ*ñŒZp/wT=ijO?MúÂ_sqæX.›¾ˆÇ?ÅÓêl¦ LÁv¦„ãÕÝ™6e]À>ˆ‹¦u羞çtM&—Ü™Úl[ü÷íX{ô"C|§ï®%iBÝ,¥y} ”˜1\yqO^ô'žb.3¥`=s€‚3mçëÛ¯¯eg¨«{t”ë„¥Ä1îêïp(¶šÑSÓÝW«Vìv zM-gÄÅæ’©‹ùÃGå9ËU\0 k})ùÕi\0)‡öŒzWbFsùŒ ùàY^ŠžÃ¤žp|Ý;|ŸÉ% òÜ}åm5ˆétçw¿Lam&3oËh{øy°Ç¬~Š/6#~ô|4»YÍÐkofÆ¡§yó‘…u!£û$¢Vgçªe¬>bç¼;¾ËønÁ!í?Ç÷¸n‡ølŸ «Wvg){OÔ@Lm^÷šíôĉ¬^³–¡C‡0Â}µº{÷¾ùö[&N8Ÿääd–.]JZZƒF×uÙµk7mBAaaÆ CUUl6Û·o§°°Ð;$Ó7ºÄÅ¢îYÌ“.Fµv!.%“~C/çgw5y0-û2îZPÆ«¾Î—Õ¢[£‰Ï _wwϹËøù7±ÿ…·yçé­h]º3bn?Æ_à{þ}ù%<®š5Ž˜Ê-|ü¯)ªl@íOzßÑÜðËk¹0UÚë šA×ÝËÏcßâÏþÉSï4`‰ëÁøë‡0ªgóRØû]ÅsöðÀ_fIÞï˜ÝÛ÷%HÓúÀ—ˬž½¸þº[ýþÌ×søæ¹ëÈœ1‡è´ jO¥àÓŤÜúóû7°õŸ&ëÂ}jUS™ðƒqäGyý¹Å |h6Cn¸_Æý›ÿ®~•?½S]“é=þ»Œ›ŒûÊÎBï /aè’ÙÝÿ &f¨¸ßnÙ:ÿ¨ÙWð£ï—òÏ^åñOܾ2èß=Æý(ú_û[~ûÿYñ*O¾[ƒn‹%9}ãztu­ÃÏæyŽñ6Ï}¢ž3õeoliÙ²§³àÖæÉìÑv(®¥ˆ£ ƒ¿{/?‹{‹w×¼Î_Þ«ƒ.Iô?Ÿq“hW…QôŸûK~õoÞþðïü¡â{äª_\ÏýŒtØ[è=}C>y™=ý.eB¶ŸF º>(ø‚Íù Œ¹!§ÕÍc%n87>ø9-fù†ÿòü5èöDzÇ‚û®bZN·v>Õ'~Îq£zgËGKy£° ‡%†Ô>£¸áöKéÝV ^€RYQ.ÊËJIHLj•à¿ï¼Kff&'OPWwUU‰§Gœ:uŠK.ž…®ë¼ûÞûŒ=š¨¨(„ÔÖÖ6{ú6&&EQ¨¯¯gÛ¶m̹f¶÷IÝÿ%ÊË\7¥«öQ^VÊ©S'6|dÐ}»5ûWsò7’>v"§¶l ã¶3pjh ÚŽ¼öË?Q8÷I~>)¾›™æ¡( »¾ú’ôô ŸûæY‡ã ¯ÿæ/ÍþÜ3±í´u̶FçØ{÷óÀÚÁüæ700ÂgæélÊËJ=]F¾ :”½ûöqþù(**ÂétÒ»wo¶lÙBß¾}((8éíÒP«ÕJrr2qqq€ë)]]×q8\£Wt]§ à$={ú¹ÛÉ´q“® Ðô*:È+·®¹SÉøþ+œ|í2¾ÿ ]s§š8uO=EßæSǾ^ö*kº\Ì}ããÛ¼j U˜Î¦¢£ùÔ‰3^þ/Öv™Éoƨƒq¢gó'I³€þçXe€0ýõÀ¹lß±ƒÓ§OSTTˆÍf£  €ššr \]%‰‰‰Øl6jkkÑu˜˜ïLžgΜ¡¦¦UU‰ŽŽ&11‘'NüOžäÚºA%]¦¹¿àÏ^]O§ßãÛýýv£°îðÎ1 i§rÇÏ®¤5’ξîQFgs °þ¥Çx︕´pûO® “v0N´ã_ðÅ©$Æ|¿_ëèç†Þ©l±XÐ4 ‹ÅŠ®ëDEE5ëÂ5*¥Ë–±{÷nÊË]ÃÐbcc½#d¾úê+ª««HHHÀét0jÔ!Û¨P¨›Cºj›¦ÃNÿ§N]–lf?úÌnò«H,ÿY=ýµ%›Ù¿©Y ŒŒKöµ<ùʵA®áì¡qØ©iÂn";;›Ó§OEff&ùùù=vŒÞ½za³Ù¸xÖ,¶nÝÆÐ!CÈÌìÁ?_yÕ;?Oaa!7/¸‰' ÈÏÏgÌ˜ÑØl>çWˆxÚÚ¹¤«Àˆ@w•%íÃý$ÛY]!´éÄ8+„•Õ‹íÛ·SUU…ªª=z”^½zñÍ7ßÒ»—ë9|›ÍÆùçŸçý^jj*+W® {÷JVVO²²zú\Ïÿ mí\ÒU`äÁZ¤ßÖH'Æi|AŽŸðäÉ“ù|ÓçôÈÌd挋8pà ùùùŒÊó?ÇΕW\Þé… üï\Ò•ï*˵óP‚xÏŇtbœÏ!$ÄÇsñųšý.7w¹¹B^´H¤­s˜tY„é·5Ò‰q„w”‘´fé©c!ºŠ"]v&Š‚p¿ÂUÒéÄ8B׃iá.ˆD"‘H·…PTxšŠòrœÎ@S@K$‰älÁjµŸ@jZwW ¡ðô)êÏœ!£G&Ö³h˜£D"‘HÚÆépp²àöèh×\Låe¤ËÊ@"‘HÎ9¬6é=2©(/wUN§ó¬zJ"‘H$ƱÙl8ŽvÎÖ*‘H$’³Y!H$‰ íIý؇.¥J$ÉYƒª(ääô¹¬Í ¡´¤˜ñ&7û][z!ä“~P×;ü/7ö‚zˤ÷ÖHçæ#›O°Î7o\´£BhŠ‚úúzÊÊ+())¡ººÚû`Ýý”¤g^‰o4MCQTUEUUE!66–¤¤$’\/@o<é½cHçæ#›O{œûÂP… „àðá#T×T“‘уÒµKïŠ-‹¡•ëx®~4Ms_íjëê().fßþÄÅÆÒ¯__¯Ké½ãHçæ#›O°Îý°BBPV^NqI Ó¦MkVK7{á‰lËFu;T…ø¨(âããéÕ»7«W¯&9%™„øx齑ÎÍG:7£Îýa¨…PRRJnn.ªªzkIÇñxô¼_9''‡ââoФ÷ÎG:7éÜ|9÷‡¡B]] € V(p9UHNN&??ßëXzÒ¹ùHçæãϹ? µœN'‹!ß|RTUE×uïÿ¥÷Ð#›tn>-ûÃP… iV‹±ÐbQUœN§÷ÿÒ{è‘ÎÍG: ˆÀW IDAT7Ÿ–Îýa¨ËÈáp Z,÷$4Xm6‡·Y'½‡éÜ|¤sóiéÜoº@ !Ð4ÍÛäxèPUÅ;l ÞM@:7éÜ|Z:÷‡¡ AUUÏ"¦I'Ê×òÄOþÊW}oå/Î"ÕÇðZq&ŸÍ‹ßeɆ]|sº §-žŒþØxåõÌ©òé#wò²ý.^ùÕd¢Íߟx\G’÷6]‹*6>ósžÝXFƒª­+ñ©=é?l<^:‹1=ìÍój+&yI„c´y¤9ïßAÆÅl"ÍyS:Ç9+"ìüâõ܆ŸTÆÛ  À@çøgKøÒ–@—}KøäÐ4nÐ|únQ³—7>΢“)Œ›9‡ÛsÓˆv”q|ÿ.ªT×V(®O¤l>Knï\kÔTU¡å^˃7ŒÀ樥¬à Û>û€'~¹Šé?¹ŸÛÆ%¡b$&áØÆHsÞY¾ÇÅ|"ÍyS:o¬ó‹±¯D“O¸©ßÍ'ËO1tþýŒÙ¸·–lcvÿóˆõÖäõìûy>(èÍü…2·o”÷ÂcìÄ(BG×+"k›ÀßqÞ2rí.›Ûƒr]WBCF1ñ¢é ÿó}<÷÷—ÔÿLIl“È©Âç¼³|'L—†6Y¤9oJ'ûˆmÃe0|àÝ6÷ƒ#áûèT|±œMLàò‰ý˜téx,Û–±¾HoLsf+×?éZ.϶¢iºwN]ÓÐtw:϶…{›ð¿ß„×»×^óÎ躆&’™4ïb²kw°òót£19§w¢ï`ÒÓÎCí?ÌÛÔ†s_Ñbteëù3l?â4kWì$~ÊtÛÑÃg09ñŸ®>ŠÓF+=AA­JV¿^X„ÿ¼<Û/%ÂèÝ€ë¶<Ò½Ù1:§ Nâ0³~"Òy'úÖ‚HwN;oúc’3‚m¦¯\Õ·ë"|íØ:ÖéÉÔ)Ù¨B€¥/Ó¦fqbí5o *«wÛ»MŸÈònÈu[›=c0&ç°óNõLºsØyXüGŠsŸþpg.„ÁÜ;W¯åXýi^¿ç:^oºH)cÕ®¹äæE£$¦Ó=Zgÿ7ÇpL‚Ï·E{·Áµ=áÚ¢¦ø*Eø¼sÝ–G½à0GjTÒ3»cI¬ “09Î;×·D:³÷ýÈqÞóü‡£%ê¦rÓ¾©°P¿‡5ËÈ™û ·ž×8DQT²éÅÇY¶f×8Xë&ŽíƦõ‹Y93‡Y=|œ~œû#` AUUÒRSX¿a#=33]ÍÅuãÇóð…¬Ìƒ@ilÈá–ª¨85½{÷1jTžwšZ齓ÎÍG:7Ÿ œûÃаS»ÝNff–¯XAzz:©©©$ÄÇ»î^[T,ªEU\˪Ý'B4]Cè§®¡k®¾¬¼œÂÂBNžÒ¹ùëÜs^o‰áa§ž•tëÖ1cF{$Õ1<„§Ÿ¯esNzï|¤só‘ÎÍ'sñÆ4×ý„¶‚ä2LŽçŠÒ$ßËý/“ÞÛ‡tn>Ò¹ùtÄyKŒÏe$õõõ”•WPRRBuu5B4¾$Bahœë¹Œ¦i­šw±±±$%%‘”˜€Ýno<é½cHçæ#›O{œûÂP… „àðá#T×T“‘уÒµKöJüã¹úÑ4ÍûDfm]%ÅÅìÛ€¸ØXúõëÛ¬oUzïÒ¹ùHçæ¬s¬>œÎÁãÑsS-''‡ââoФ÷ÎG:7éÜ|9÷‡¡B]] x¦r•t..§ ÉÉÉäçç{Kï¡C:7éÜ|ü9÷‡¡‚ÓéÄb± „gŽI(PUµÙœåÒ{è‘ÎÍG:7Ÿ–Îýa¨BÐ4÷ÄH2b!Å¢ª8M¦Ù•ÞCŽtn>Ò¹ù´tîC]F‡Õbq½æNN*2¬6‡ÃÛ¬“ÞCtn>Ò¹ù´tî7] Œ<•{š²ªªx‡Ò» Hçæ#›OKç~ÓÊHÑøØ³§I†([þ7—ëZJ‘Þb¹^ÆŠ…ó¹ñ×or Fo¾¬a ÏÜ8Ÿß}Rì’a4Ïp|Àë:R¼‡$î´óÿ°–3áÞ®q.êŽóùþÂwß ó¾Ãünã§=Ã;ÛKhºß‰_¯‘â=BœwFLŒÆ-ìŸ&ÎÛ"ˆ©+D›t:Ç?[—¶ºì[Â'‡¦q〯ƒS öë÷øãsÝùýϦҽÕC-Ën OÓñå6œÞ›ÒÉ1pM{[~ç¢f/o.|œE'S7s·ç¦í(ãøþ]T5¨MÊa,mzïáw#11·HÀXYŒW¢ÉÇlêwóÉòS ?c6.ä­%Û˜Ýÿ8†ÃQ®PÆÀó›pmS¤8?³‹•k ‰Ÿt-—g[Ñ4Ý;®ihzð1hÓk8½GŠóΈ‰á¸…ùÓ†s_®<Ùzþ4íGœfíŠÄO™Î`» zø &'àÓÕGq6IçÙÉcGÞÄO¯‰ãó_dM‘ÖDDðyšõcä²ÎtïíðL ZÅÄäŸHq®•ž  V%«_/,¢”AÄ ­R‡Ó{¤8ôc$&†ãæŸ`›^Æ+Wõíú‡0ï£[Çš#=™:%U°ôeÚÔ,N¬]á†&i=èVú\ý#¾›µWÿ¾œ§h^þ`ò4ý9ÞCƒÆí §ïpî>l•ë :~× Þ#s?*&ã9Î}`|úk¹sï0®^˱úÓ¼~Ïu¼Þt‘Rƪ]sÉÍ‹n¶£ !ÐIgæ7²óׯòÂ'W“Ôd™á<ÀðµðxoJbàMëÚ¦pl•‡p;WÓé­³ÿ›c8¦Á÷°†`càÇk„x·ó@‰‰±¸EF£ÔMå¦}S¦P¿‡5ËÈ™û ·ž×øiQɦgÙš\?âN-ÁÆÀŸ×Hñnç0#i"‰PµÌ XíÎ l©ÉáÚ©¹d%7=CgrÁù}Yüßul©ÇÔnîíõ”Ïýï„ ¸aÓ½üm«ωÊpžñæ×¾ó½7%1ÀÛ‚„‚¯ß™éÜÎÈy ˜¸÷¯¼öðïùæâéäe'a׫):z´K¸**¸ˆÊãìÙÛäªU¡[Ïôް<ÁœЄßy Ç争i†ÒDÊ[Œ X!(Šâz‚Pîî(“&ªØ¾~;õ9ó•(Ð[ŒáJsýÞ|“õ›K˜r‘Í»ÅMO0BÄ3ñ¦ù¬ß÷ N!z¥ñÒ¹ùrî€-UUIKMaý†ôÌÌt5;×Ex"+s£( 9ÜÁR§¦±wï>FÊóNS+½wÒ¹ùHçæ„svj·ÛÉÌìÁò+HOO'55•„øx×Ýk‹ŠEµ ¨ŠëoYµûD¦k]àÔ5t͵ӗ•—SXXÈÉ“§ÈHO')1ÑëPzïÒ¹ùHçæÓçþ8ìtü„É®jÕÕÕ8pʪ*¨­­¥¾¾>rFD0ÿTEÁjµ¢( ‰‰‰dd¤“‘žNLL KãN/½w éÜ|¤só Ö¹ç¼ÞÃÃN=+éÖ­cÆŒöHªcxO?_ËæœôÞùHçæ#›O çþâi®û mÉ5d,˜Ï¥1H¾—û_&½·éÜ|¤sóéˆó–ŸËHêëë)+¯ ¤¤„êêj„Þ—B! s=—Ñ4­Uó.66–¤¤$’°Ûí­‚'½w éÜ|¤sóis_ª„>|„êšj22z0pà@ºvéâ]qÓþ@‰Ä”ßþ‰ŒèÒâÛù‹à—oY¸á™…\–9cœ=®Ãí=”~EùZžøÉ_ùªï­üåÁY¤†Y¤8‡Ðy”¯Ù!8«‹*6>ósžÝXFƒª5š¸äLúçMáÊÙ³’žìŒL_ÄÔ"bšt¢f/o.|œE'S7s·ç¦í(ãøþ]T5¨t*JËqhE|öÆf C¯&1eëyãƒC4ˆ”Ujˆ´HyÒ—[ó½‡Ö¯ÎñÏ–ð¥-.û–ðÉ¡iÜ8 ð«ýBGd8‡Ðyœ¯ÙÇôÙî\£¦ª mÀ\üÞ(¢u”ìå³E¯³pG>¿þ파1» 6æÕx… š|ÂJ=ûß~ž z3áƒÌí彨;qŠÐÑ…Fyi$gR°”÷¾˜ÉO΋s_9øzÉûìˆéAÆ™**ªDl“ßljÉÞCì·~7Ÿ,?ÅÐù÷3fãBÞZ²ÙýÏ#6\­„ˆp¡ón$_3·“³ß¹û£Äe2 '‡h€A#ÝÛÉ=÷-cÕWßcäy_VÓ©ôjl <šl§ûÁ‘°}ÎìbåÚBâ']ËåÙV4M÷Îw¢kšîz'kUE5JïËXpQW¶¼¿œcN×÷õ² ¼÷i%c®ýÃãÎPY~&üÛ„ÿcÁtï!õ«SñÅr61Ë'öcÒ¥ã±l[Æú"ýÜvJï†ò•Î;}_wo•7?]CØìDᤡÁÎ}a¸Bðdëù3\?Zé jU²úõÂ"ü¥j ²ª[l"C/»‚§VðñWµœýôcv&ÎàªñéÄÅ@EeZX·¨iÈü*fy©_qšµ+v?e:ƒí‚èá3˜œx€OWÅy;¥wcùJ罯»6ÉIƒ£3µåœ<´‘ÿüs)ÇìƒÉ!Î[c¼BpUß®ˆ0~Ü›©´U½šêèÒ55qWMVÙøÑ:Šªwòɧ… »b&}¬Ñtí5U5ˆpnO³Ox¡_íØ:ÖéÉÔ)Ù¨B€¥/Ó¦fqbí5œÃÎCéÝH¾Òyç:® tlyŽ[®¿ü€»ï–•™÷‹ra ‘áÜƧ¿Fx7Vƒ¹‡%1îÑ:û¿9†cê|ÞŽÔk©­…èh;BX|ÉLzÞ»”7ÿÕmÖÉüêün!ˆŽÔÖÔ¢ LS)dQ3Û{èü:8¸z-ÇêOóú=×ñz³•–±j×\ró¢C¾}-‰ç:ïV#ùšÌÙî\u—ß:dÜG[4±‰©¤ÆÛ@ÓÐu_B‹Ñ5ÕB0µÏßÇ:„‰c»Q¶~1+O4øN£×R] öè(WíØý.YÁ†Õ_Ósæ,Z‚(ìv¨s1ìÛå¯7Û{¨üžÙÚeäÌ}'ÿø$ô|ž|€9ý«Ù²fUfögG’óPz7’¯tÞùç@‰I#»Ooz÷ìNrWÍá4÷žM ç>º…à]Aذ3rÞ&îý+¯=ü{¾¹x:yÙIØõjŠŽ¤0í®†3õ`·»‚(ˆaì5×1+¶š±¤¹§b·[Ñ«k©ÓÖxÁ÷qb¶÷Ðømع-59\;5—¬ä¦²3¹àü¾,þï:¶TŒcj¼¹ˆ çºýÚ@¾ÓL}á¬wîÙFᾩlÒÖ´…Q£+EQ\OêѤ+ñc¹óÑß‘ûÞ"V®zƒM¥uè¶3û3j–M¯§î DÙ£¼eU³¦qóm º¦á)¾=: Šj¨‚Ø0nŽ á‘aöÞÙ~õJ­ßN}ÎßüS¦Löfö @QPU‹û­Jîß Ïp1k”œœm ²V­QX §C kÐ_}gaíºuŒ7 ¼Þ;Õ¯Žbµùw­X°Ú, 9pj&õG¢sWÁB³_·™¯tÞ¹ÎT« NÎð¶|9ߺy#ã'Ln•vßž]ƺŒ, N§UQ"£… š®£ùYì¨÷·¤ÍQï÷ûf#48Øl·¶Âê½³ý¶åZ8qÔž‰±³‰8çîB…d¿¯YœÎEÄŸ[üa¸Bhhh ÚÝl"zÅμ—$8Žf¯”ÞC…tn>Ò¹ùøwî ZÂ…çö„p÷‘I:‚‚¢4:ÔœîyáÝHï¡@:7éÜ|ÚvîCÃN)))AQEq¯¬Ý%•¸q9T¼^‹Š‹ˆ²7Îq"½w>Ò¹ùHçæȹ?¶TU%-5…õ6Ò33ÓÕìP\7~w_Ÿ¬Ìƒ@ilÈá–ª¨85½{÷1jTžwšZ齓ÎÍG:7Ÿ œûÃаS»ÝNff–¯XAzz:©©©$ÄÇ»î^[T,ªEU\˪Ý'B4]Cè§®¡k®¾¬¼œÂÂBNžÒ¹ù´Ç¹/ UB>BuM5=8p ]»tñ®¸i Ä?ž«MÓ¼OdÖÖÕQR\̾ýˆ‹¥_¿¾ÍúV¥÷Ž!›tn>Á:÷GÀ Ás·º¸¤„iÓ¦5«¥½}}Èþ¾`PÝE!>*ŠøøxzõîÍêÕ«INI&!>@zïD¤só‘ÎÍǨsj!”””’››ëíã“Áé<=7Õrrr(..ñMzï|¤só‘ÎÍ'sj!ÔÕÕ‘€g:WIçârªœœL~~¾×±ô:¤só‘ÎÍÇŸsj!8N, Bxæ‘„UU›ÍY.½‡éÜ|¤sóié܆*MsOŒ$#R,ªŠÓÙ8 ´ôz¤só‘Îͧ¥sê2r8¨‹ë5wrR‘aµÙp8Þfôz¤só‘Îͧ¥s¿éeäy¬ÜÓäxèPUÅ;l ÞM@:7éÜ|Z:÷‡¡ ÁûØs›tâL>›¿Ë’ »øætN[<ý‡1ñÊë™3RåÓGîäµÚ«¸ÿyävm2ÖÖ±•gnù%ß}–‡.n|_o›ùå%™úÒñ¦x\ŸmÞµÝ/qçÃK)õ±¶¼»xñ·Óé&鑿ÜmÇÁƦg~γËhÐAµF—œIÿ¼)\9{C’"ï®HtÞaÇ¢œÜÉó;-r¶sÃS¿þ파‰¤»"Ïy§8î (`2û¯N”7w…èÔd”°îQÆÖl¼BM>¦RÏþ·Ÿçƒ‚ÞÌ_ø sûFy/"ÆNœ"tt½Øú %cßÿñÔ;™<üìžr7Ý#ùEV}pVxW¢Óè›ÓÝû+­`-;LÊpÏôt,Ò¹ŒÇA‰Ëd@NуF0º·“{î[ƪ¯¾ÇÈó¿Å4"Îy'9ï*¿“A΀\WជÉàºÏeäù˜½Uõ»X¹¶øI·ry¶Mó1tJ¸j^K™Ü}]wzòi^êówމ÷¾dÃ;ÆÙH~fãy„ßÇ¢³Æ;M¶áÌAÞzê5Žôý^—‹]„áÊ)û"ˆ8€{îϯmv¢pÒÐàDˆ¨Öß3›HuÞiŽ}§ +m8÷EP]F4vºW¨ —ž  V%«_/,~O'œØ‘7ñÓkâw/¾ÈàÞ?ã‚„Æ4a0?silÌû?Tþ×½7~¥†¯þýVã'÷Í ]ÑÃHtî‹`â€pÒàhG-e'ö²úÍ¥³fæ èˆèþŠTçç¸ÇOsãwžö~S‰¿ßþýŒjnéΡmç­ ²ËÈ]›Z‹»¤´µÞ¦¿×­ô¹úG|wÏý¼ú÷åäü2Õ“·üó ~“³Á»ë?•[_ã…ÏÓý}ÆÅEÀ¨’ˆrî ãqplyŽ[®Îõ;ÅJ\Öhæýâ.L!¶£ 缓»ûšmC¿Ëà r® IDATFáé¤S¬±¤¨"¼×ßeänú›<׈’˜N÷hýßÃ1u6Ÿ…Mþ)ÐIgæ7²óׯòÂ'W“Ôd™¡ü„¯k“³Å;€¨ÜÂkÿ·ÛŒßrýèˆè’‰$ç¾&Ö!óxà†<ºØ¢‰ML%5Þš†®GBû ‘HsÞiŽ=åîšLϬžÍî!„û]F÷㣠„g£LþX‡0ql7ÊÖ/få‰ÿé<›-B舤)ÜzÓP ½Ïöz¼;šáüÂðñwåtVx׫ØñÆklŠºÛæå¾#Îyã Ä¤‘ݧ7½{v'¹«‚æp¢é° ‘î¼3»·Åó‡¦ïsˆ8ç>º…à]iØ9o÷þ•×þ=ß\<¼ì$ìz5EGR˜v ×Mˆv¢iP pæ{ùÛV77 ä71-,Ï!ø>NÎïõñ¯uÕô½b0ú¡½ìi²&ÅžBvßTº„Azd9÷Epqˆ˜›™myÎ;ɱû¼+ªòÙ·g/Moã+Ñ©ôí›B¸Æz5°BPÅUÃéѤ7•ø±ÜùèïÈ}o+W½Á¦Ò:t[ ‰™ý5Ë&ì÷|<'&@ˆx&Þ4Ÿõû^ÁÙ´Üó˜ÿ(‚p_MÀÙæÝIÁW_qZ;CÁ¢?óûEÍWcɼ’‡ÿßwèkºôtî ÃqÍâ™D¨óÎpì¾wîŸ?<ò~³E–Þsxì‘Ùd…åÉ´æÎÛLYYQ.öíÙÅ !ÃZ-ܼqcÆOàóÍ_0eÊdo¦a ˜¢ ª÷[”Ü¿:º¦¡é ZmXpâp¶ØhÅ‚ÕfÍSó3¹Óûê; k×­cü¸±g•wÅbÃfñÓ‡fê‰,¢û¢½qˆ "Þy‡+¨VV'}!4œ&ïãàÛùÖÍ?ar«´ûöì2Öed±Xp:¨Š¾\4]Gó³XsÔû^&œ8ê}Ìò ?³l¶Æ[Zg“wálÀWÂIÄ:÷E{ãaD´ó;_Îýa¸Bhhh ÚåXä^…üïá½Áét4{… ô*¤só‘ÎÍÇ¿sÕBö(<ÆÂs;]ҥѡætÏ ïFzÒ¹ùHçæÓ¶sºÅ‘˜˜HII Š¢ (Š{eí.©ÄË¡âõZT\D”½q‚ôÞùHçæ#›O çþØBPU•´ÔÖoØHÏÌLW³CqÝøñÌW#+ó Pš>œÎÁãÑsS-''‡ââoФ÷ÎG:7éÜ|9÷‡¡B]] 4¾S@Ò™¸œ*$''“ŸŸïu,½‡éÜ|¤sóñç܆ZN§‹Å‚ž9F$¡@UÕfs–Kï¡G:7éÜ|Z:÷‡¡ AÓÜ#Ɉ…‹ªât6Î-½‡éÜ|¤sóié܆ºŒªÅâzÍœT$dXm6‡·Y'½‡éÜ|¤sóiéÜoº@y+÷49d:TUñ¤wÎÍG:7Ÿ–Îýa¨Bð>öAM:q&ŸÍ‹ßeɆ]|sº §-žŒþØxåõÌicÓ3?çÙe4è Z£‰KΤÞ®œ=‹!Iå¬xäN^¶ßÅ+¿šLt¸7ÈÇu¤xï°gO>uù|þáû|²ñ+Žœ®BN¡×àqÌœ=›iýãç(óHsî¶bq•í=îzx)¥>ŠlË»‹;n4”?"œ‹*66Ým]‰OíIÿaã¹ðÒYŒéÑzºhQ¾–'~òW¾ê{+yp©þÞ k0™™¾"ˆ©+DÄ4éDÍ^Þ\ø8‹N¦0nænÏM#ÚQÆñý»¨jPhÔTU¡ ˜ËƒßE´³Žò‚½|¶èuîÈç׸•‘]qÍ«![¾çø Ÿ÷Nñ£ ªvñ¯…OðQQ/ý÷KB­<ÆŽ•KxþÿßÞ¹ÇGQÝ ü;³»Ù@›M$„g E”74 ‚Z[Ä'øBmñQZ¯zû®¢(>Úz{û°Ò¢½m­õjµ·[- §àƒ*奢•§<"¼ÈîÌœûÇîìn’d–$3ƒž/ŸÙ9;sÎ÷73gΙ3g6²õÖ{ùúò]ª¼åÜŠ¶b¡ÁœD4‘eÁÑMO±è¹} p ]O•&ígÎ;ï¿å—s÷5gˆÖsdß{¼µüúÎ ¦Þ6ŸÇå§¼4Æ`÷ò—øg .Û^bÉûS˜3$Ýk)í¦s{^íW"åÇUÙþìb^Ø×Ÿ+ÞÍe¥Y‰‹Š±§£Ã8 ”n% )+‹]ýŸr£ûkÜ~ç+¬x÷ZFŒÇCeŠ“þ8q)äylyæQ^:0ˆ9ÜÅÌ~þøzÆð…É”=ôûí=ìV&ts¡Jð”s+lÄB@iY¯Ä7ô}¯ðà+;é1ã.nŸZ„Ï3eÁ;ÎãÛSr{3dHylÿ6ЉӦrúOïdѯË)ƒ¿Íäp|¿lüK–~ÂiWÌg̺…ü饷¸xðr›ï¶vÓ9‰M¯ö¦À#%^ñG\û9¾™WW$tæå|y€]7óºŽnÄÓÅsXfèˆ@,4"-%Ê„õ±àš÷Žò||3+Ö&<érÎ룦¬GGWzröåçPTó+ÞªÁø¼;og,ŸÕoçO?{‚K¯å[W–t;ÿ^vžfÿÕEgÎ>Ÿõ›xõõªø~iptãRÖSÁ—'âÌ Æã{ëÖ2š­Ón:÷§Ãv…`®ÖüÛ­?ú§{ÙW¯ÒwP?|Â:],Ë‘h„ãõÕìÏüþevOeä)ÙÉ4®–ÆÌkÛ‡ŠÓÞ;ʳþé^ö׫ôÜ7Íz ”¾¥ hìß{ÝÁòyѹÕ»±„¨åÿ]ÄßjÆqÓ-Ó)R ×óoþñ¢s«s½2 Çà“}ûcû¥8Àªeïš<•Sƒ‚ìÓ§3)¼ƒ¬ü-õ›vÓ9V¾Ìª„ »Œâ+n¶?cÅTZËGüó苘{õ¢ØgŠŸn}G3ûÛs9§`ˆé]Çò8qÃ{ÇxûãÅFúõɃҕ8xʹ6bOwìÍ'xt¹`ê÷¿Ê¸nµã碕s@êC\B ïZÍköáì›  ¾R¦œÝ—%Ë_ãý™s¿E`7ãØTjúkBÄ‚%\ÜË”p½² ¶´‹èÙÃHë7ž?ÿ°ÙÜuÍHº²É R €®c©e)MGwI— ·¼w”g%\Lqƒ­;ÿMdòid5[…¾ëC>Žú)..Dq!^rn…­XâØ<ñ»µ¦ßÁÕò=‘÷txÆy+çcßN>¬S)*é…""ìX¹Š]xòö+y2uÊVl¾Œò‘Ù@”÷l¥s»GVF-„Ô¾)×ðcâØî¬_óW^=·Œóz§9<âÁUrz2``ÿØÍ"!УZ‹4‰r9’ù6°¸rrÅ{GyœÊYù¬]SɲiC¸ OÊzôƒ¼öÜ öçŒæòQ9ɘ8‰—œ[a+µlzê ÖgóËÉòÊ>¯8·:hxíÙ¥ìê:’¯ ÃñwxmÝÊ.»›&¤ ‘ÇXÿØxåµM\}Ær#[ì¥sãærgµÜ?H‚Œ˜}=·þ’'î½ÎŸÊÈùZ}ü{~‘++²ãŽß,J·a:òR !Ýgnyï Ïdq꬛8ÇOøß…÷òïóÏaôÀ0ê±Ýüsåˬܤ▫—ƒ+û•·œ[Ñv,.鱌?®®¥tÆ©ïoeKÊ·•`”ÒÅcáÁCÎãçqlÛ¶l% 5pô“lZµœõ{CL½õ+T„u×òF]—Ÿ]Nß‚T‰%œõ…RþúçÕ¼qtãÞ³—îìó°k´Í AQ”Ø„†@¤Ôâ®˼Pþ\%¯®xŠõŸ6`r— fÔyQt4;®­OöB´ÆQD|¤xÄ{Gxè2Œ9  ì…çxyí³üº²#¦ÏÐ/0wÁEL”ƒ0܈€[Ñj,Ùûî»г¯ò§ÜWÙô«¾’ ¹÷‡³(õÄ Ç<ä\¨tí–‹º¹’‡¨Dõw¡[a ƒ‡Ïä;·MgdOº~Œ·×¼McÙlF…F³ý´Ç˜ zúiÖlØ…o‹tULž^àð37M·šòØÑj±mËfN6¼Å ëV3f|¯oØÈäÉ“+õÄA¢(¨ª/þV¥øg†ª?€¨f%A±‘Æ’¯¾ó±jõjÆ à ïíöœXª¯ézD|ؤáB¹<íÜŠVba(~>«Çfu¢QÝõ‹/:WýYøT'h!D<z|¼Cü<¡èhé*>üèQ Å^:Mwð^`çonXÇøŠI-ÒnÛ²Ù^—‘ÏçCÓ4TEñÎU“è†n±X6Z.‹¯ÀFç"Ñ(@²ØÞÛí9±"tÍz=nàYçV´‹mOfé:^sÞîó„Ј&ÄÛMç,éœ[a»BˆD"d³0¾t‰k4-Úä‚Ò{g!;tî<ÖέȨ… ‚Y$nÅš·ç%í@AQ’u->/|é½3ÎG:wžÖ[aëIåp8LUUŠ¢ (J|c'œSIœ˜C%áõÐáCd“3,Jïtî<Ò¹ó´åÜŠ6[ªªÒ³°kÖ®£OII¬Ù¡Änü(¸‰¬Ìí¢$ră¥**š®³uë6F™˜¦Vzï ¤sç‘Î'çVØv ))éÍÒeË(**¢°°¼P(v÷Ú§âS}(ªûWVíiB :Âh†Ž¡Çvú#ÕÕ¤sç‘ÎçDœ§ÃV… „`çΩ­«¥¸¸7C‡¥k—.‰ §öJ¬1¯~t]O<‘YßÐ@ÕáÃlÛ¾ƒn¹¹ TÚ¤oUzoÒ¹óHçΓ©s+Ú¬̻Շ«ª˜2eJ“Z:ÑׇìïË5îPQBYY„B!úõïÏÊ•+)èQ@^( ½w Ò¹óHçÎc×¹¶ZUUŸR^^žèã“ÁéLæMµ²²2®JMzïx¤sç‘Χ-çVØj!444——‡9ͱ¤c‰9U(((`Ïž= ÇÒ{ç!;tîUEÓ’SäJïtî<Ò¹ó4wn…­.£h4ŠêóÅ^s''é4üÑh4Ѭ“Þ;éÜy¤sçiîÜ2][+2+7›²ï°Š¢¹?æÓzÚ›ÿ¾ðŒóÖ°QͲûçñÛà×yü»“Èv7×–Ø™¾"ƒ©+„KM:ºšôò˹ûš3Dë9²ï=ÞZþ}gSo›ÏãòSvlƒÝË_âŸ<ºl{‰%ïOaÎ@;Öç$éÜzß»¨ÛÊÓ DåþŒ;÷Rn.ïIvô»·o¦&¢"Ìu ¹Œ»¯E¶Ö@õÞÍ,ýËo¹góAê7ñêëU"ö.Ö£—²ž ¾œ}óT!ÀWÊ”³û²dùk¼?sC™­Ïq,{ïvJkù‹Ýø0×Îz8ö™â#oÈ4¾vçÕŒÍI³ §ø¬:7‰ü›×7îF ‰n[ÁªÝÌèãR÷œ‰—œ·Æ‰œ+¼’÷æØÌ–ýé¯ –på )M¸ƾ|X§RTÒ EDرr»ðäíWòdê:”#¬Ø|å#³3XŸ°ë°ÃH·E¯{÷…ëè•m°ý£]DÏF •uN»Š{¯EÖñ¨üùox·K?Ê{œ-Wó¬}VáÃçå¹½e\sÿUÔ/¾‡?/~‘ÓïžI?ë/u:žrÞœ+¬Òy»¹Ê¨…Ú7å¦`sûæçÚ^{v)»ºŽäëcÃpü^[w„²Ëîæ† Ý’/›ÇXÿØxåµM\}Ær±¹>7kqåäiïþaLÛõkþÊ«ç–q^ï4góû] (éSB6%Ütë>æß÷$‹^Ì]3úfö¦¦Žä³êˆì¬äÑ¿dȜۙާ'ÆÍ—òö]áÑ—FpÏÌ~Òy[؇8š>—謂óI¼5ylÛ¶l% 5pô“lZµœõ{CL½õ+T„u×òF]—Ÿ]Nß‚ÔB%œõ…RþúçÕ¼qtgw··>ïôyÛ»AF̾ž‰[É÷ÞÇGçOeä€|‚F-‡>~ƒ=¿È•Ùñ&~s”]Ƽ™›Yðüïyyä|©Ä—Ÿ|fOhäïÿ¥³¸mj!jŸ/2wÆzæ¿ð8/¹ƒ/õ–Î[Ån< ³L^n!Ø£Í AQ”Ø„Fì$éüA¢Òµ[.êæJz Õß…n…% >“ïÜ6‘=}èú1Þ^ó6e³FÓüõ3AO?Íš ULž–Ýöú 7Bª â#à$ñnz eÞ (®’WW<ÅúO09„K3ê¼(ºb^B%¡2`Æõœ»þ>*Ÿ^ÄoN&ßñ‘¾ŸUç­~†¿}\Ä §SDü `¡ÐïKs˜¶ê^xf=·M$ïóî¼5ìÆCˆ–û·§hê¼Õ”ÇŽV‹m[6sʰá-nX·š1ã+x}ÃF&Ož”X©ÓSýYøTÝ@Bˆx^tbLJ‚êàSt´¨Þ2 ŠÀzM6Öç,ÉWßùXµz5ãÇ8 ¼7)ªê‹¿åÊü‚9 ’X|Јj©;¥Š/àGšf8z }ÖøðûŒh½É÷¤óL°ÅbÿvŸtÎßܰŽñ“Z¤Ý¶e³½.#ŸÏ‡¦i¨ŠâJ ®GÑ[M!ZO#4¢)³+¶¹>ç"Ñ(@²?ØûÞSÝ0,Ó§_—Žq/ŸmçéÕJç™`/mœ\&s+lW‘H„ì`V<`ÞªOn’PkZ´É+¥÷ÎB:wéÜy¬[‘Q A³HÜ>1o«KÚ‚¢$êZ|^ø8Ò{g ;tî<­;·ÂÖ“Êáp˜ªª*EAQ”øÆN8§’81‡JÂë¡Ã‡È &gy“Þ;éÜy¤sçi˹m¶TU¥gaÖ¬]GŸ’’X³C‰Ýø1È•y(Ɇñ`©ŠŠ¦ëlݺQ£F&¦©•Þ;éÜy¤sçÉÀ¹¶†ƒAJJz³tÙ2ŠŠŠ(,,$/ŠÝ½ö©øTŠªÄþ•U{Z„膎0š¡cè±þHu5dÿþO(.*"?N8”ÞÛ‡tî<Ò¹óœˆs+Úv:¾bRlƒºNmm-;v¼Ç±š"‘õõõ466zjT€WIÿRQ¿ß¢(„ÃaŠ‹‹(.*"''Ÿ/¹ÓKïíC:wéÜy2unž×›c{Ø©¹‘îÝ»3fÌèD€d Ú‡y@˜ý|Í›sÒ{Ç#;tî:ʆ,”`J‡žÊ øÁ%„p7&^tžŽæ~ã?§Q¼íwüìÿJ¸wVA3mê÷¼†·Ç¯yþéV²²Øùç”38£gÿñÀJ^Û>‹òÓ3š6®ã±éÕþ\Fæ—šÑ&¼®ˆÏ}b¹<–Ï•À|„?Í"×½›¾„F$iòн¨f$ÓX9Nü?an÷cxÙy:šûÿîë}.·^Ù‹{þëüÏÀû™7&”x±ŒçÆõ{Ùy{üZœÔ.9dÓHcÄp¯\­8OGF]FÉÆ½‡v2ÀÌOtã/˜3ë‰O•Ð9Üñë›8×@6¢“çFëCÅ=ïq·o,â«W/j¹80¼™U+ÇÉ2x!ÞvžŽæ~㹂Ü×ñŸ—ÜÂÇãÔþßä¬<š¤õ ÞvÞ¿©p$˸ IDATß5УõÙ»åO/ç“îc¸ªÜçZZwÞ’ »Œâ…÷ÒU$ò8í*î½~fwâÏ¥‡Ú,¿^Ë{*–lj‹ÞãÛô›ÍÝל‘r"ï>Å}ÿOӦ㔮!·»‰Rñ¢ót4÷›ú»ágàE·pÕ–ùüá×K)ûNa<ÞÉ*^tÞ¿æðÙsí¬‡cËyC¦ñµ;¯flîǡ㻌RšGn®9f~ºЧoŸ&÷šÎÒ´kÃkX]W»êÝœ%§'JK›Ž2: Ô5Ë›•ã¦W]^Ù…<é<Íý¦äKAçΛÃ;ßÿ.¹(~߯cÝ^q<é¼=~›]fÿ€ÊŸÿ†w»ô£¼wÀ1°{Ö˨…è[ó@›èç¦õ{fœÎŸ]¬.¬ÝôÞŠ[ÃÌOê=KÇæró ïìŒÛÄ‹ÎÓÑÜoJ¿uìÿò'sÃuoñ½ß<Ï¿£0ÈKùOÅ‹ÎÛã×LÛµ€’>%dSÂM·îcþ}O²èÅÁÜ5£ofo"ë :«…੃Ä$Þ!jö°mËÖ&ÝJv!¥³š×›¤?N\öžèÝié.ñ9"Ñ $ŽífËæ\‰T Ýû ¥^ò"Ì[-„tŸyp_oó÷&•± ¯âz®Yÿ=~õf4‘ÖkxÒy{ü¦¤5/še—1oæf<ÿ{^y_*q÷å>v¶Y!(Š{‚ЈKòÒAbжýy~|ÿóMùú_ʃ÷cFÌÂ}Ÿ€Ê3Þ“GFË ¡É >ƒ•ü׃•)©ŒúÚ#|k’ÙÙ”<àÜÇ£ÎÓÑ<‰ß›¶È„1ñº+X³íq4/å?G·ÇoºcD¨ ˜q=箿ʧ×0ᛓÉwmd]Sç­¦/|é½3ÎG:wžÖ[ak¾p8LUUŠ¢ (J|c'œSIœ˜C%áõÐáCd“³`Iïtî<Ò¹ó´åÜŠ6[ªªÒ³°kÖ®£OII¬Ù¡Änü˜szÈÊ<””ÇÉãÁRM×Ùºu£FLLS+½wÒ¹óHçΓs+l ; ƒ””ôfé²eQXXH^(»{íSñ©>U‰ý+«ö´!Ð a4CÇÐc;ý‘êj<ÈþýŸP\TD~8œp(½·éÜy¤sç9çV´9ìt|ŤØuÚÚZvìxc55D"êëëillôÐH ï’þ¥¢( ~¿EQ‡ÃQ\TDNN>_r§—ÞÛ‡tî<Ò¹ódêÜ<¯7Çö°Ss#Ý»wg̘щÉ@µó€0ûùš7ç¤÷ŽG:wéÜyÚrnEFSl¨ªÚj¼óª÷P”dÒ/·^&½ŸÒ¹óHçÎÓçͱ?—‘466r¤ú(UUUÔÖÖ"̹;âOÚçúyF×õÍ»ÜÜ\òóóÉç [OzoÒ¹óHçÎs"ÎÓa«BB°sç‡ÔÖÕR\Ü›¡C‡ÒµK—ĆSû%Ö˜W?º®'žÈ¬oh êða¶mßA·Ü\ *mÒ·*½·éÜy¤sçÉÔ¹mVæÝêÃUUL™2¥I-èëCö÷e‚w¨( ¡¬,B¡ýú÷gåÊ•ô( /Þ;éÜy¤sç±ëÜ [-„ªªO)//OôñÉàt ¦Gó¦ZYY‡W%‚&½w<Ò¹óHçÎÓ–s+lµÈËË#1ÿ·¤C‰9U(((`Ïž= ÇÒ{ç!;tîçûO³£Îhš6òϹ‚KÇzyï)¾}å5Üõ×Ýè‰t ›Ç\q=,;€ávù áÚSÞ[ùÑÞ^ÄWfç÷è‰ÏDÃn^æçÜuë\®™=‹+®¹‘ÿ¼çaþïíªØ饟“Èysב×Ê5³æñØ?ëӤרóü¸rö|^:`8–Ç“Ýy»ÇX÷ó¹jÖe\vÙe̺âæ~ã{üð^bK•æ ç­‘ÁÔÂMºØtéÉœ(PÿÁsüdQ/îûæÙôjñ0c,eÖËùÆ¥ï0ÿÙż8böõCÞþÍRêFÞÌצ¢¸^ºt[÷ˆw Dâ9—x.ë¶òôÂQ¹¿ãν”›Ë{’=Âî훩‰¨,ÇÉ㼩kƒ£ŸVÕ±ü©—8ï´Ké—²ï‹#kxê…÷‰ˆÞ9¦#zzé)_ï:o¿cºšô!—q÷µ£ÈÖ¨Þ·•å•O²pÓ¾ÿã‘ãÆCvö¼Ú¯DÊ[ˆô?§Q¼íwüìÿJ¸wVA3m“ïù8ó\¾éþ¼øEF,8Ú?ý†¥uc¸åƳÈ÷±Ÿþ8qß{k4ñÜÈögó¾þ\±ðn.+Í2/N;q:Š00¼VŽ“Éy×ÕŸ‚bzì{™ç6žËmºÅçÃòÁKϳ)§7ÅÇk8Z#¼U/;o¯ãøÒ­„!eedœr£ûkÜ~ç+¬x÷ZFLhûE5Z®V°7)eÂÝ3?)¿ûzŸË­ÿq&u/ü‚ÿy£C¤ŽgN~×Pû0cÞlJwÿ…G~ñ0‹—60~îW©¹_&«cÁ3ÞÛˆB ŽoæÕU y9_àG×Ä\4†®£ÈïÉì<Õµ0¨9Z‹ÒÿK\?­+o<¿”]Z,qd-Ïýãc.ŸÅéÝŽs¬ú¸ûy?Yœw„ãx‰û¾¡#A²ÐˆD4Ï8O‡í Á\­ù·[̼¤þ.„ wÄuüç%Ýxý±Çxíž" õÛô>Ÿ›.éËîoqdø\7¾»«å‰•¡íCÅmï­åÞ´¬º—}õ*}õÃ'ÜÎW[¹>§îÑŽÕ4È sÚ—f0ô“eüýÝzÿã>ÎÌñEtˣǎ¢»ž÷“ÅyûÇV ‰F8^_Íþ÷×ñÌï_fWðTFž’ípi2«2ì2НX¸Ô®KÝ®h–ÃÏÀ‹náª-óùï—RöÂxºfß‹ü›×7îF ‰n[ÁªÝÌè“Ñ,à‡åqâ²÷ÖH6Ù@‰í‚ŠW󚎓Éyªk£–Ú:èRÎÌIÏñ_/®æ’²,ùÇA†_q.ýÇÙÒêjê^,Góϼ༽Žãy¾±ˆ¹W/Š­KñÓ­ïhf{.çôÀòÙܤý鯉»¶s%¶+M¢ä"AçΛÃ;ßÿ.¹ˆü”e1"|øü£<··ŒkúÅ÷ðçÅ/rúÝ3ép² éi¢æ ï­ ƒØó%\D¯lƒíí"zö0< ´MN&ç©®…QO}=dgÂÏ©_<—>ß{™§ÿØ·ü“øîº#„ ;[P_W!D&ÝŠ—·Ûq<ïþa³¹ëš‘t d“.¤0]Ç0Ò•ÞrÙܪý}Dx ÏìŸKÍ‹YÜxŸŸÈŸÌ ׯ¾Êçy»‘Ä&„ ñƒJýÛA†\qÓû `ÆÍ—Òo÷ó<úÒÇDÝ.—–WNnçËúÇàèÁC4*9äváÆÄ±Ý9²æ¯¼º7âü}–œ7smÔS[Áì¬Ø…R¯³¸`ÄQÖ®ü€>çžÇP¿@E0 ñ“•ûeðºór (9=0°?ýûô¢ «‚Õ\½‡Öi-„ÄÜ Q.3ñßSäU\Ï5ë¿Ç¯ÞŒ&Ò¢ïæïÿ¥³¸mj!jŸ/2wÆzæ¿ð8/¹ƒ/õvwh^úãÄÞDù òW,‰g|Yjõv–VnÇ7dÃrAdÄì뙸õ—óÅKÂÐ1t½é󊂪úâo¼ÂL˜zêNç­»VñgùA‹¢µâTõgáSt´¨îúÉÉ‹Î;Þq+ç$HçüÍ ë_1©EÚm[6Ûë2òù|hš†ª(._© ôh#ºåï©I5¢ÉÙý„%’6¡Ž–~£‘h”@ y+Ö;Þ“=ŠÑ–.!Ð #}\<„×·îZ'ÚØ¶aËãÃ%¼æ¼ã·rNr‰tέ°]!D"²ãM'!ܯù>;$.¡Ñ´h“WJï…tî<Ò¹óX;·"£‚f‘¸­k÷‘´EI:Ôµø¼ðq¤÷Î@:wéÜyZwn…­a§áp˜ªª*EAQ”øÆN8§’81‡JÂë¡Ã‡È &ç9‘Þ;éÜy¤sçi˹m¶TU¥gaÖ¬]GŸ’’X³C‰ÝøQ„9Y™ÛEI6äˆKUT4]gëÖmŒ521M­ôÞAHçÎ#;Oέ°5ì4 RRÒ›¥Ë–QTTDaa!y¡PìîµOŧúPT%ö¯¬ÚÓ"„@7t„!Ð CíôGª«9xð û÷BqQùáp¡ôÞ>¤sç‘ÎçDœ[Ñæ°Óñ“bÔujkkÙ±ã=ŽÕÔ‰D¨¯¯§±±Ñ£_¼Nrø—Š¢(øý~E!S\\DqQ999ø|É^zoÒ¹óHçΓ©só¼ÞÛÃNÍtïÞ1cF'$Õ>ÌÂìçkÞœ“Þ;éÜy¤sçi˹Mó©ªj«A2§“´DQ’AJ¿Üz™ô~bHçÎ#;O{œ7Çþ\FBÐØØÈ‘ê£TUUQ[[‹É—@!lsý<£ëz‹æ]nn.ùùùä‡óƒ-‚'½·éÜy¤sç9çé°U!!عóCjëj).îÍСCéÚ¥KbéýkÌ«]×OdÖ74Puø0Û¶ï [n.ƒ•6é[•ÞÛ‡tî<Ò¹ódêÜŠ6+ónõáª*¦L™Ò¤–Nôõ!ûû2A;T…PV¡Pˆ~ýû³råJ z Hïˆtî<Ò¹óØun…­BUÕ§”——'úødp:Ó£yS­¬¬ŒÃ‡«A“Þ;éÜy¤sçi˹¶Z äåå‘x·€¤C‰9U(((`Ïž= ÇÒ{ç!;tîUEÓ’SvKïtî<Ò¹ó4wn…­.£h4ŠêóÅ^s''é4üÑh4Ѭ“Þ;éÜy¤sçiîÜ2][+2+7›²ï¬Äš² P\/™½­Û¯DÊÛˆfÿxÅÛ~ÇÏþ¯„{g•L—ŽF¶?»˜öõ犅wsYiVâ‚dìÄé(ÂÀÕwÀ§?NNzïJvOJËz%>Ò÷½Âƒ¯ì¤ÇŒ»¸}j>é<3ÒÄAéV²2²N9ƒÑý5n¿óV¼{-#&´ýbG9œgêx|TNfïÉÔñîÿ.âo5ã¸íÎé)†k%:Yœ§#]‘h¢õÙ»••O¿Ì®à©œ{J¶ë&'“óÌGˆnüsfý"±%twüú&ÎÈh^鎣uç-ɰË(^»]‹'¢Õ,/†ŸÝÂU[æó‡_/¥ì;…Éô"¹Ã)^(C:,““Ý{ì—co>Á£ËS¿ÿUÆuóȈ¯;OGš8DßXÄÜ«Å>Wütë;šÙßžË9=ð^Nç™:Ž÷5N»Š{¯…ÙI§øsé¡ ÷븎ï2Š7ÿ=0׈H4ÉšæEAçΛÃ;ßÿ.¹ˆü”eJ¸ˆ^ÙÛ?ÚEôìa\È{k¤»’û,xÇÞà‰ß­%0ý®–ízYL¼î<éâà6›»®I—@6¹áB CÐu Ã+íƒ$'ƒóŒ›yîZ@Ÿ¾}šÜCðÂ{ìîµ̉§Ü ˜àèÁC4*9äv¥Iß]ìÿò'sÃuoñ½ß<Ï¿£0È̳Çvgýš¿òê¹eœ×ÛcU‚Å•ÓIï]Ô²é©'XŸuwÌ.'ËCÝuÞvžŽôqPrz2``ÿ؉HôhÛO¥º†çŸ€csŸxë‚IgµœX”*Å’èpÆ— Vogiåv|Cæ0,7Þ¢ƒÄ•…ùÿ¼Šë¹fý÷øÕ›Q’µ|³¯gâÖ_òĽ÷ñÑùS9 Ÿ QË¡ßã`Ï/råÄž®=‡þ89ù½7î¨ä«k)q*Æû[Ù’²%؃¥…tqIº·œ§Ã~ÕA…0t ]ßÇQPý|hDµfV|ø>УhzJžUõÅßÈ„¹R ]GwáA„ä«ï|¬Z½šñãÆ|f¼+¾ŸE@èD£ºã'2¯:OÇ ÇÁcxÙyûÇÒøÓœô…ÐÑ\ØÇ!½ó77¬c|Ťi·mÙl¯ËÈçó¡iª¢¸Rƒ =Š¡[.E6’v±Ðˆ6¦éKÝ0ÒÇ%„€H4J ¼¯ñYñ.´éÂà6^tžŽŽƒñªóö;önÒ9·Âv…‰DÈfÅæí+‘“‹DM‹6y… ôÞYHçÎ#;µs+2j!ˆ`fDZ0o©KÚ‚¢$êZ|^ø8Ò{g ;tî<­;·ÂÖmŽp8LUUŠ¢ (J|c'œSIœ˜C%áõÐáCd“c¤÷ŽG:wéÜyÚrnE›-UUéY؃5k×ѧ¤$ÖìPb7~Ì9kdežJÊãäñ`©ŠŠ¦ëlݺQ£F&¦©•Þ;éÜy¤sçÉÀ¹¶†ƒAJJz³tÙ2ŠŠŠ(,,$/ŠÝ½ö©øTŠªÄþ•U{Z„膎0š¡cè±þHu5dÿþO(.*"?N8”ÞÛ‡tî<Ò¹óœˆs+Úv:¾bæ[ÓjkkÙ±ã=ŽÕÔ‰D¨¯¯§±±Ñ#1¼Nrø—Š¢(øý~E!S\\DqQ999ø|É^zoÒ¹óHçΓ©só¼ÞÛÃNÍtïÞ1cF'$Õ>ÌÂìçkÞœ“Þ;éÜy¤sçi˹Mʪªj«AòÂ$N^EQ’AJ¿Üz™ô~bHçÎ#;O{œ7Çþ\FBÐØØÈ‘ê£TUUQ[[‹0çöˆ?]hgœëç]×[4ïrssÉÏÏ'?œG0l<é½}HçÎ#;ω8O‡­ AÁÎR[WKqqo†J×.]Ní”Xc^ý躞x"³¾¡ªÃ‡Ù¶}Ýrs4¨´IߪôÞ>¤sç‘Î'SçV´Y!˜w«WU1eÊ”&µt¢¯Ùß— jÜ¡¢(„²²…Bôëߟ•+WRУ€¼P@zï@¤sç‘ÎÇ®s+lµªª>¥¼¼<ÑÇ'ƒÓ1˜Í›jeee>\•šôÞñHçÎ#;O[έ°ÕBhhh //súWIÇsªPPPÀž={Ž¥÷ÎC:wéÜy¬œ[a«… i>Ÿ!Ì9F$ªªMæ,—Þ;éÜy¤sçiîÜ [‚®Ç'F’ëT|ªŠ¦%牖Þ;éÜy¤sçiîÜ []FÑhÕ狽æNN*Òiø¢Ñh¢Y'½w>Ò¹óHçÎÓܹeº¶Vd>Vn69dÞy¨ª’6Hï ;tî<Í[a«BH<öì‘&¶éWÜøã]\øßrqï:Ö=ü-Yw„ˆª?›n% 9™ />aù)ÃØöðúßžgɺwùð@ Fvú:Žs/¾˜)ƒ»á…‘Φk/z·"53ŽüŽy÷¾Ì§i²ùu»c*ݽ :Ï8Õ,»¿ ~Ç¿;‰ìËkšî뮄 û0xøxιà<Æôn9½±¨^ÅC·ý’wKoàçwŸG¡GÜ»æÜaÇï?Í þN—+È=3úÄß×.hø×ã|÷UÍý1?˜ÖÓÞ{Ú‰é+2˜ºBx¦I'ºšô!—q÷µ£ÈÖ¨Þ·•å•O²pÓ¾ÿã‘£ j6óÇ…ñâ¡b&^0‹óå£ÛŦW_bñ]Ùzë½|ý ù.W éÜzÇ»©ñPÍàN"*’ŸÝô‹žÛÇÐ §ÐUñZI<æ<ö:‹­Ç÷õò˹ûš3Dë9²ï=ÞZþ}gSo›ÏãòSN.»—¿Ä?ytÙöKޟœ!m¿F±óqÙ¹ƒŽ³†\Î7.}‡ùÏ.æÅ ¸°¯¶ðôo–R7òf¾6­Å‘RÛÛ‚ý A¤ü¸höJ·†”•ÅjüSÎ`tÛï|…ï^ˈ °å™GyéÀ æOç •­-oº¯ë¢€3gŸÏ€úM¼úzU|68ºq)ë©àËqæãñ½õ kҹÎ µ3æÍ¦t÷_xä³xiãç~•Š»ÎÓ‘A×Ulµæßîþ1s”ò›ÐˆD#¯¯fÿûëxæ÷/³+x*#OÉFÿt/ûëUú î‹O4_—Ò·”ý{ »Rš¶ox·.Íó'jyçñ·šqÜtËtŠ(÷ IDATÃõ\6ͱ7§1ik9½2 Çà“}ûcû°8Àªeïš<•Sƒ‚ìÓ§3)¼ƒ¬üÍñR™y÷†sçÐû|nº¤/»7¾Å‘áWpÝøî^ζ·$Ã.£øŠ…ËíþdŸÈKôE̽zQìsÅO·¾£™ýí¹œÓÄþøW„‘>ïFr'pµl–ljG¼[Ñ"‚co>Á£ËS¿ÿUÆuóðè/9OÝVºí¶¶<õ¡#!Ðw­æµûpöÍP…_)SÎîË’å¯ñþÌ9 uóV‚›ÎÝrù7¯oÜ ݶ‚U»+˜Ñ'£·´›JíO@ÄxáòÑ- ÃÌU}ׇ|õS\\ˆ’Ò¤tšt[ö’w+šÇC{ƒ'~·–Àô;¸zX¶gó sžØ–hÒµag¹±o'Ö©•ôBv¬\Å®Æëî˜]N–›>íà%ç¦+åÉ*írí¯=»”]]Gòõ±a8þ¯­;BÙewsÄ”áÔâëû¯¼¶‰«Ïpñæ²›Î]pÙYÉ£;È9·3½OOŒ›/åí»þ£/àž™ý2{KÙ —Û^²Œ[Ο˜¢|Pù+–D‡3¾¬µz;K+·ã2‡a¹ñ^ ¿ ”vYœ:ë&Îßñþwá½üûüs=0Œzl7ÿ\ù2+w©¸åjÆåàêI7ýqâ–w+ZÇñ•üqu-¥3NÅx+[R¾©{0 ´.nrIÁSÎãû²8¶›-›sI^¶(tï3”þ!sù¶mÙJ@kàè';Ù´j9ë÷†˜zëW¨ ê6®åº2.?»œ¾©²K8ë ¥üõÏ«yãè8ιW;í8wüï(ÅmS Á0Pû|‘¹3Ö3ÿ…ÇyyÌ|©wç¿øÇ®Ñ6+EQbO"ÞEìôA¢áçQ¿äy¿x-¦ïðKøæuÓ(L43Á² hÒes>@Ù ÏñòÚgùueF0LŸ¡_`î‚‹˜2(a¸yÂUb]/ñ~J×½[Ñj<4>z÷]èÇÙWùSî«lúU_É…ÜûÃY”zæÅWsß—µ•ü׃©òŒúÚ#|ëL•®ÝrQ7WòЕ¨þ.t+,aðð™|ç¶éŒìéC×ñöš·i,›Í¨°Àh¶O÷3AO?Íš ULž^àÂs7.;wÔñaNËz†¿}\Ä §SDü^šPè÷¥9L[õ/<³žŠÛ&’שhê¼Õ”ÇŽV‹m[6sʰá-nX·š1ã+x}ÃF&Ož”X©Ó'&Eõãó©˜/û†Ž¡ëñ{Á ª?€¨ÖVTŸ/þ&&s]F|]îl“¯¾ó±jõjÆ àºw+Z‹‡â ðYìÝB'Õ=Ñ…äMç±}ÙŸf쟡EÐ PýYøT'r!D<¯ÍŽEGKçZñáø@¢éÇžpî¬c]øðûŒh”¦ºU|?ªÐÐ4£ÓމtÎßܰŽñ“Z¤Ý¶e³½.#ŸÏ‡¦i¨ŠâÊ•ªÐ£ºåRôh#–‹›§Õ ›iEˆD£ÉF¬ÛÞ­h-B‹ÐØö¤ŠžÀ{ÎÛÞ—ÛÞ×ÛX‡Ðˆº ÷;íØ ’6¡Ž–~A‡“ι¶+„H$Bv0+°¶›»$®Cдh“WJï…tî<Ò¹óX;·"£‚faÞžæ­xI;PP”¤C]‹Ï Gzï ¤sç‘ΧuçVØzR9SUU…¢((Šߨ çT'æPIx=tøYÁälŠÒ{Ç#;tî¤sç‘Î'SçV´Y!˜w«WU1eÊ”&µt¢¯Ùß— jÜ¡¢(„²²…Bôëߟ•+WRУ€¼P@zï@¤sç‘ÎÇ®s+lµªª>¥¼¼<ÑÇ'ƒÓ1˜Í›jeee>\•šôÞñHçÎ#;O[έ°ÕBhhh //sŠiIÇsªPPPÀž={Ž¥÷ÎC:wéÜy¬œ[a«… i>Ÿ!Ì9F$ªªMæ,—Þ;éÜy¤sçiîÜ [‚®Ç'F’ëT|ªŠ¦%§&–Þ;éÜy¤sçiîÜ []FÑhÕ狽æNN*Òiø¢Ñh¢Y'½w>Ò¹óHçÎÓܹ­N]±ûãl53$‰Drr ª*}ûlñy›SW¤û’D"‘H>›Ø›àB"‘H$Ÿyd… ‘H$ ^!øý~¢Ñ¨Ûy‘H$‰ D£Qüþ@¬Bå…ùdß^Y)H$ÉçŒh4Êþ}{É ‡ùXhý>)ŽIEND®B`‚gnusim8085-1.4.1/doc/help/tab_memory.png0000644000175000017500000005117213327070773017604 0ustar carstencarsten‰PNG  IHDR„Z‰*ŒsBIT|dˆtEXtSoftwaregnome-screenshotï¿> IDATxœìÝw|eþÀñÏÌTÒ !@¡@ ý;v±áÙŽSìí¬?õ¬‡'6Ä R”¦€Gï!t© ¤÷º;óûc7!}7…€ì÷í+†ì´g¾ûÌóy¦)y¹9:B!œžz® „âü`ÐuEQÎuYÎ{ºn=˜’X5įåUÝvŠŠ ÉÍÉ¡¸¨M×Ñ5­òwEü›»¼–Ðu@QUE­òÛÝÃ__<Ü=ѱ–UÚ7Çèº. ¡1¤Ak‰_Ë«ØvÓÓNSX_@ !¡a¸º¹[LEAU@¹àân­O:š¦£ëÖŸÒ’brss8š‚§—7mƒ‚¥}sPeB …²þOâÔ<¿–§ë‘•IÏÞý0 çºD­ÆÚÈ+T]e“É„—wBBÃÙ±užžÞ¸¹¹ž³2þ¥T! ª#$NÍ#ñky::ùy9„…·Ã`0´X—Î_Á` ,¼ùy9¸ºëâü%èTé2rÄÚuÿ#//OOO† äT‡bÙØœ=Vu‘ƪåéºNii)¡áí$¾UèºN_²23$.jT—QJj*999Œ3€¥K—râÄI""§¡s°bI¬ê!fËÓu,šÅZ¯$¾Õ(Š‚E³H\uæ¤rÃãíÚ½›¬¬lâããIMM G:tˆÌ¬,zõŒ?ëe=8R¯$Võ“í²åé:hÍÚ]t® sž1 hMêƒtÝvBC;™’BZZ:ÑÑѤ¤¤››Knn.'Nœ ::š¬¬,Ž?ÞZe>§t]bÕöâ'O×AÓ,( g,? ë(Š56Rç£ë4|RyåªÕäææÒ£G222ðòòâàÁƒtìØ‘ŒŒ ¢¢¢Ø²ubØÐK.è.‘†NŠJ¬ì““Ê-OGÇ¢i(ª!Ô¤¨,š&õÎAvO*§§§3bÄŠ‹‹ÑuÝ»w3xP" ðÇÚµÄÅÅáææÆ!CX¹r%š¦]З½5trÊ©b¥g±iΧl º†{.‹pøv÷†âwâäqÖ¬]Cvvv£ŠâççÇACˆoרéÎ{z6IË–ógÈ(®èéC}»Õc* _]š~RY§`ÿj–ögȨx/ðý7»'•5ÛÝÖ›[TÛß:‹£ÑØz¥m ½„ô{9íK\„{½•ãó«¿b·±jéè…OÚÍaãøÆ5A ÄoÍÚ5L7‰ÀÀ¶*JzFóæÿÀ”¿]רéÎ{Z:Û~ù…}—aL ¡jL¥k¤M ŒžÇæù_²Ôû.?_“AKnߺ#ooo–,YBBBÞÞÞDEE±jõj:uê„Ñh$??ŸU«VáííªZ÷7nÚLff&ôï×·‘+`ý3øh}e¨&wÚ†Ó1®ÃF]JB¨ƒ7šX³ð·9:æâ"ÜW†ºŠÕ@Å:g±B§èðJæ~»ŒÍN‘o6âALâ¦NˆÇ·…cÐ Å/;;›ÀÀ¶dgg6jžmƒ>ªÐsùí_ÓùÌõ>z(7ÌœZýo^˜}œ¸»ÿÉ]šþP¯šuÕ芗8{⊫/¥«ßÙ= <Ó†½²õo1õý\üä›ÜÕ³f=°p|Þ“<úµþýuˆí«ñæ¿3tÚãLíë×êOæk¨/ò\ÅJÏÛÈ'¯ÍfgàÅŒ›:™p/üÔCR=ð<϶kGûrŸ{éöí?ÀW³?`èÈ1¬Zös •ÂBúºÿðÊì#t¾uw4'Øæg­«cyüÚž¸YŠÉ=µßÎåå)<òÂÍÄ{œ½/¢2¦ †V'/3›rK:¿}¹˜Ñq“h_¥Ò³×2gþÊô0rr5hûíʬGÓÎ!èdoÙÀ>מ<ÐÍšô‚$æ¼ü¿d„pÑÈñÜ凚‚«—òÉs›Ù7íIîìïW#)œÛúÑ•ç:¤êENvÿûßÿèÒ¥ mÛZéÓÒÒHJJ¢cÇŽ¤§§ãîîÁŽ;Ñu€€, `Ýë]ñëo(Š‚¿¿?ë7l`à€u¡(Þ¡ÄÄÆZ³s\/.z1ÝÿýÏúŒØN2ØW'õ×wyã‡]¤”cð£ÛÐk¹ubOü+·r3¾z˜ë¿0Ñÿþ˜>ÐèÀtuE¬áŠu.be9žÌÞ†LŸÊ±¶ ¹W_†T«‰1ÐrÙó󿮨ÆÑ nþÑŒ¾ûqÆwª–¢}|ûÒk¬ö½Ž™Ó‡Z_qù˜?ŒŸ˜7sêyû¿ˆºyÓ. áL¨JÙ÷Ík¼ó¿@®¼q:Sý ÙõÓg|þÖ_½Ø±˜þ·‡½9ci節žÏÁý©˜bÇÑÁ©u,Muuà eeÀ¥áXëEìüò5Þ_çÎIÓ¸9Â@Ö¾ßùén7!èµþQ÷Xù¹ù(‘×rKøbÞúqÇûM$ÒzÎ:~\žGß©·áýÕ{dæ–‚nJIþòEÞXÛ–q·<Îíùìüñþû¯Ïhû÷ÐÛµãIÉä¶¿ž¿O‹Æ˜%Ÿ}Ŭ/;pÙµ70ýZ7r¶~Ç'sÞ廘·™ÚÕ”qàë—xù|ÝÜÐŽ­žËœ—_¦ôÙ¹¶“ ´<mÚÂé¿qÿí]ñÒ PCÛÒÎÐ —?v³'k"‘ èyìß›‚K—ÉtT^ÿ&dnaÃz]Ñ W€²$V¯ËÄ7ñ6FV&c0—Œ¿„ÅÏ.cõ¶ú ©£ë¨†êõ£Œƒß¿ÆëK¯¹‡):Ç×üÀ7¯¿NÙ̧™m=Ã[·‘~¶ÿ w33Þ-7•¢€šG/µãdMšý…‡‡ãããÊ+P//OÚGFrútÛ¶o§  £ÑÈ(,,ÄÇÇ€}ûöáêêJ—.]((( ==„^½ì.¯Þ@GÑÞScgÊi4ðhOŸŠ L¢<9¾þIVLAë߉ЦÂÅ7„vÁÕ‚áÈt59'hÝX)Á#¸ãÖ“¼÷å;<¼¥=½_ÌðáƒéìVm}ƒ¢m,^z’vã^äÎ1aÕc¢Ù~[2ÙðÉ\¾JëÍ}ÿœHŒC_Gâ·iÓVþ(å‡Ù÷§Bçkb¨<›¥Y(//G)/"'e/«¿]Áq—X.u”c­leÙYtœô/ndýŽºxrì÷íì³³^1mø¡Œ¼üŒ^~Ä_y%]~ûE;/瞎._Äv¿—¡]4Q&3GN¦£á]» i ~è…X¼<•Èq/rûÈ0T [l%'ždÑâmŒ¹¿?(¸·ëN¯¸è3ó7[Õܾ-ùyäëžôèÒNQ®@”ýµÖ*w@ ØÄ ã­cëzå5AAmÑ4 ³ÙÌñãÇ1™LtèЬ¬,¢¢¢ÈÎÎæÈ‘#„„„ iAA»’¤vÉ+þa&mË|¾^´‘)9”™<1k:—Û™AS§s¼bµ^¬L„ ¹ŒçÀ浬^¹˜7—Ì§Óøû™>6Ï&ÆÀ’r˜#¥þôí\O‚ÔÉZù>* àÊgn¢·¯#ý öã·aóf^zöibcc˜pÍ4Íš}žzîFŽªªÜsçíÜyïýx{y9Üe¤øÇÒ3 ‰u?Ïf~ôýLŠ;såŽvêÇJ‹ÉøÏÜ2«b ‹YÅ%§¼÷ŸnÞIþÅCð<¶—ý¥Q\Ö½ ÖçU•oýˆ»nùȶ0#^ L|ðf†·U°kíÔ1Nšè×9  W‰8pA/¤ <Ü1Äsõày¼¾p “:²xy=®M´©”$w(Ì/´Þ×uòGK‹Iÿ.®û FL²‹©v.[Pñó÷…’<òJO@ñ%À’ ‹¬óJ*¿~ø[ìÍ£‰Ó5åzæÖŠ•â@LâÕÄ$Žbä‚WyöûÙü’ð“›ÝÞ©8ïØþD\ËÒOçÑã“èbïÁøÍúà½Ê¯\ú ›×­©6ε“'qíäI˜¼œW ìËÔûþFYo0ëW(¼ÿqnNðµ6ÀºŠ/‰w>ÎØUO"©¸ùz¢( ‰ñ|ñŸõlÍM¤Óî$²"úpf}]'òkãq3¹áåH`×ÊÛn¬­·7©oC¯<‡pæÿµG*¤°ÜÜÜÐq¡û˜‘D<þ3_}Þ†-ÆÁ<6ÈÈÁÍÍú(m ?O{‚ñÑ5bâç œ¹²K·í¡«F åhºu(F lëœ9ŽÑ9S»ªVµÖUûKñ¢÷à^?XÇæÜÁtÞ½‹ÌvéÐÐÑ‘R-FŽÒNofýŸÞôžØ…Š| ú…⮑üçQÊ/‰£fž°œø“cåBBƒê¼H¡¡úaá,ÜAbjǨG_£×î?XöË/|4s1K&?ÎŒ«;Ô*{]·=jê|iiiŒ1‚øøxJJJðôô$--ÀÀú÷ëGÿ~ý -- OOOJJJˆgĈ¤¥¥5~æÓ¬ùn9Ç=z2´¿?æc‡9®Ç0bºGGÐ.*šª't®.PTX\ÙËPnoºzÔ¬°Ñz±r%"¾ ¤s*]or ÔH"ŒYìM>¥ž%™Ú ç¾ÞNÏÜżýþJNÕ7¢#ñSUC£~ÅÂໟdúÅ:«ßy•/wå[²H"Ly;¥FXåOþ* àÕ{=“Y½6‰mÛSïÛ‡Ð*[¾âLt§ŽD·'¨ÊÆÄ:4Šö.™$í:YÑà°jñÔëùÑŠ),W7WÔÐaŒé•ËÚ•‰¸ìrº¹¸âæ Ŷ½ykLr9šªNxåO(îjõ¬ÆÞ|µeWù[ ‹&Ê%“ä=§Ñ*†›SINε}4a5ÏT[¯Þ#¸Ès+ßÍ–-)DôïG˜ÒÀz×#»4NoÚÈÑ6½[¥sÈ5Ž!üÉYû+NÔèI°¤±fÞ*Ny&08Á«Î£¼†ê‡õûÏborÚ™mÔrŠä}Ù¸´"´¡j^ÏömæFpÜøØ‹üct-[Åþ*˜CW5DÓ´ÊCzƒÁPùwÅgÖYëhš†Ñh¬¼a«bZ{ô¼“ìMNÆd.&÷Ô!¶ý¾’õ'Û0tÚÍ$ú*èaíÑ—ñÛüµø Œ !‹Œ¢*3PC‰Š4±dÝB–u¼”vdïÝ›~ö¦«·@MÏãg+Vå3ku)»EÔÆ½ …mKW’êÒ‰Qí MŽâÝ—1Ãðʼ·ù@Çàξ 3( @Ÿˆ3ãÚâÎNóÂKsxa4OŽ‹ªw¤¡øùûù“••…ŸŸ_åg%³/G;ø+ê¸ïÄRŠÚéRŠÇ~…¿Ÿ½ó­Eñ¡×s{þ |øÞû?õ#ÃúpùÐükÑ»¼gË%1K³8QÄ%ƒ;ã®.]~I0Oÿü iEጼ#ÔáËUöbíÙ‡+G†óâ·y— 䩥̼vßMãS\ ®®.¶=oL˜Â(¯ú Aµž•ÁÕÕˆVXH‰®ãíÝ+†Ïç¥oñ¶:ža]1•dr¼ ˜aÇà^³µ¯¾À:~ë(ž}¸jTÏþø|äö7.ŽÐ9öû7Ì;ηõÆ£®,R•kWF æ‰Erº0œËï µ•ÝÑ9@;ÅÆ Çðés-1ÕN¸Ñ}òT.;ð6_¿ðGG]JŸ~¨ùÇÙ±r)«»2ðîëЦñ~Šg®¼,”~ú7³Ü&28ޝùžŸN„sù- ¶óõ¨gûîßæ¿%ë´‹ôÇ՜Ş“…àéMƒû½º§žå­ïË0x‡1àú8zGT/…kDZÜ=1‰™ß}Ââ„§ß¾înœ†â7xÐ`~øñ[²²³*? *dþÝð!¿Hts ŠÁKÖÒ¾¸—¥'#1ÿøƒ ®Æu1´%ñö{8òÌ¿øú£ÅÄ>y5Ý®{œ¿{Ïå‡Õ_ò?ƒ»?‘®¥ÿ`°Þîc ýðQÄýò IÇæøÝ {õ:M|ŒÇ½¾á»_òÖüB4“þ!±ô ¯ÿª7¨žê¯VJI ¸¸¹TŽcŒÁ­wV‡‚«› ¤R¨ƒîÄÝðzÅw«>ãï‹Á#€ö®£ÿp«ÒÃ¥Ûþ]1ïŠçËUÛK×AÇ•Îû¹|Á×óßåÅ<ðiŸÀ¸ÇnblG—ÊijηJ$iéåt_ü1»;]Å PµÁ:Uy:¢1ù e#NøÒ÷†ÎµN+ÞñÜøÔ3t^´€ek¿ãß Ñ\ýˆˆéÏ-OŒeXç6M¼§Å…N“åa—¯øváü+|"{1ö‘빪£“õ´q½#³iÑæ¤åSnð¤m‡ÞÜpטj÷ŸÔ¤ë äåæè9ÙYøÖ±—õÝ÷?Njj ÅÅ%¨ªŠaaaœ:uŠËGBÓ4~øq}úôÁÅÅ]×)**ªv÷­§§µ¶´´”-[¶0qÂøÊ;uÿJrl•ĪiŠ_}JýAÖ§71rnA¡Ÿ:ÊÉå?áëW¸vld"h®òý|9ãÿHÿ2Ó5ð8‰V”“Å©S©ôˆïÕŒgöü…”ïãóGß mÒk<<¸áï@QvíÜNHH¨ƒuNãØO2ó÷nÌxýºœçOæii9ÙY]FuУ{wö$'sÑE‰¤§§c6›iß¾=›6m":º))©•]Š¢`4 ÀÛÛ°Þ¥«iåå¶+*4””T""ê9Ûy>k`{“X9  í•kÇÁøÜø?¹™ÐþƒIÝøÁ·}ÞŠÉ Œô£'(ÖK8´ì ~wÉŒçG2Î\dÔÐÂ_^)éGNPL —~Æj÷Ñ<1ÀÇñóðŽÆÅrœ Sñï{ œ, Ûyüu—.±lݶӧO“žž†Éd"%%…ÂÂBbcbkW‰ŸŸ&“‰¢¢"4MÃÓÓ³òIž%%%¢ª*nnnøùùqòäÉ¿d#×ÐÉ)‰•}M=!ï{ !SÿË©/ï%dêq½¤…KÖK Ìz‰ êr w=xΣƢzL/ÐŒ`IaÍ^àûc‚º åî¿_M£#ëj»ÊÈÁ¸XŽodã)úÞÚÑþâ ‡Þ©l0°X, F4MÃÅÅ¥ZFïÞ ,Yº”Ý»w“““€——ñ¶~ô;wRPP€¯¯/fs9½{·âÝ‚ì’K¬Öœ. ÷®Ã‰z1¹Kã CãŸŸÅøÖ_²Cª^vz¦ëwðâ«}YWGë!j2¯ÍžÜ¨¢]HÎ<Ü®ž€í?pWW¢¢¢8}ú4...„‡‡sâÄ Ž;FûÈHL&£Gbóæ-t‹#<<ŒOgVù|ž´´4¦Þr3'O¦pâÄ úöíƒÉTçóÎ{ U,‰•}NÑÇÝÊt‡Î*;)ÛkRïc7!ìÛ·ví"Ùºu+ùùù¨ªÊÑ£G‰ŒŒäÏ?Ð>2“ÉÄE ¬œ®mÛ¶üú믣ª*íÚEЮ]DËù«h¨bI¬ì“ ³åILí“9æÌ rê92dëÿ·ž°ðpF^6€}ûösâÄ z'ÔÿŒ«¯º²Å {~¨¿bI¬!fË;sVY¾êß!*عÁ×LJѣGUû,66†ØØ˜³^´óQCÛ›ÄÊ>i¯ZžÄÔ>‰‘côÊ«Œ$b‘85įå麎®i (ßšÝöj[aŸ®ëÖÓÎuA„Bœ{•Géi§ÉÍÉÁl¶÷h!„ £Ñ„¯/mƒ‚­Gi§OQZRBhX8Æ è2G!„ 3——“šrW77볘rs² ‘d „NÇh2NnNŽ5!˜Íæ ê(!„Ž3™L˜ÍåM|Z«Bˆ Ž$!„NùP¿:隥ÊBˆ ™®((}ks—Ù@û¢ëºÃ7Ð)ŠõñùõoúÃÙ&!hùÙ”ÚIÉá]˜ÓO¢[Ìè3Ø~+Š È‹h„vhº®¡Œ`0¢Ø~ŒmÃq‹îkÇxTo?ûóq€®ë”––’“Kff&•¯ËÕl7ÎU<ßQ‹EQPUUUQ///üýýñ÷óÅÕÕµI‰á‚OŠ¢÷ë7”Þ…{TW¼ºôÁ4p´­¬B5 (j“Ÿ×/„økQPÐu 4‹mçÐ3å9锥üIÖæ¸F÷ Í¥×4ëNg]×9tè0„†…Ñ¥K<ÜÝ+qƒÁФ†»¢L‹Åvt¡ST\Lff&É{÷âíåMÇŽÑž÷ŸJì¡dï&‚¯yÅÛ .(F¨ Öh(¶_êùó,!ÄY§èší¹w¶·Ih:†à(Ü:õÄ;a(§¿y ׎=pißµIó×uìœ2236lXµ£€jï±hFÂQmóT|||ˆŒŒdÕªUàëãÓ¨¤pA'EQ(=¸¯øA¨müÁ£Í¹.’â|¡¨TÛ T±î,⢨xÅ¢ôà\£º5¹ÑÎÌÌ"&&UU+÷äφŠùV¼š·sçÎdddâëãÓ¨ù\Ð @ËËÂ-áb0¹5ëd‹Âyè&7Ü":‘·í÷¦ÏC×)..ÆÏÏhÇ“[—¡ÀÉ“'­¬kD»wAŸEUÝ\†êâZç ãÉ“÷uyBˆ¨*ª‹+º¹¬Y;’f³ƒÁ€n{¡]ký¨ªZù&Æ›-< IDATƸàôò20º¢ÈDB)ª FWkûÑ ‹£Áp¦¥n%UÅl67zº ;!( йƒ«›õšã:2½t# !jQ ÖvÃ\^g»á]×)//G5Ðmÿµ£ÉDyyy£»©Zn·Y/!}ÿvvŸ(n™Õn‰ùéšfA1¹4ùKB8!EA1¹ iе&ÍB×u,‹í„rëv)ŠRyIjc4âA§èðJæ~»ŒÍN‘o6âALâ¦NˆÇ×r˜…ï¼ÍÑ1¯áÞÈÐÕ¡%æ§ë¨F“õj!„h Eµ¶MìêÑuµ¢«ºž.#½øëÎã—u;9|:Í-Èný9~<Ã:y[/‚ÒsXþÂ=|â:Ù Á 3©¿½ÅS³Žÿ3Ü{Q`­½{µ Ýä'=o#Ÿ¼6›3nêd½tòSqHõÀó<ßùV¥Þ®!é2BÔ©ÅÚ½Î.#=_<÷*‹ÒC4æoŒîèšwŒm¿.æÃ™ÙóÀ³L»Èßšl·LYçb!mÍ{<ÿÉaºÜý ÓPôZsoRIN–ãÉì- `Èô©\k»Á¢W_†TË̯æú¯Lô¿ÿ#¦4’ú뻼ñÃ.Ò Ê1x‡ÑmèµÜ:±'þ* ç²ý‡ÙÌßp€ãéù”}é{ó3ÜQ}ósiÒŠ !Ä9¡Wù©TJÒ7±øtGn|q&c#¶ˆ¾\tq"_ÁÇŸ|AŸ¸èUuÒþxŸç>L¦ÃíOóàÅA¨uõh5±ŸÝá„` &ÈÍ®µÛɈîC`¯O0ÒþŠéÜsq Ö‘|b†1eÚüdNû7¸·¿ŠžÇá­ÛH žÀ´[bñÔ QC|PH­w~%GBˆFk¡¶¡²-¯ÚeTº‹•k3ðr£"T,–*­ºÄÐÉ—²à‰ŸY¹%ŸþWìý—“²ú]ÞøÏ~¢oš‡† j5Ž lenêyW‡‚<‚;n=É{_¾ÃÃ[ÚÓ{ðÅ >˜îÁnÕnösñ ¡]DpµÏ<ÚÅÓ§í(Oޝ’ÕSÐúwÂvã5îíºÓ+.šÊ›»ÍõÏO!þ:¬)áÌÃ*@Ë:Ij‘Jd§vêèîQÚEe2óçÉÓXÀ²w/n)&dÊ+<04U×j5üJ•y4E#N*›r;/ ÏÍkY½r1o.™O§ñ÷3}l,žõNg&mË|¾^´‘)9”™<1k:—7©ÀBñ—b=<°þ£ÊQ‚õ1JZÝ'­5ýÌX¥èJ¯¶;ùcÁÇ|ßa:ëîSÿŽòÙî2ª ¸“x51‰£¹àUžý~6¿$¼À¤ðºÇ×NüÌ;ÿ^†:ìî¾1%•_?|-M+o“H—‘¢ÑZ¬ËÈöØŠ*Ï2RüB uרsèew§æ™Q˱Ã-7ÚÖú>@mÛÛšB¯_áƒW_ àÁ2µ·oI¡©÷<4ãzLW"â»@:§ÒuPL¸º@Qa1UÏq”;Ìq=††Ð=:‚vQÑ„x9èzæ'„)zÅ pªü˜ºqI¢?ÙÌgùñ²êÃ̧YýãJR=ûpqoOk"Ðu,´eдgxd¬zûe>ß™‡VsÞº~öÊ.fÖêR:w‹"¨+zA Û–®$Õ¥£Ú@ %*ÒÄ’u YÖñRÚ‘A¾woú…µ#D_Æoó×â70‚6†,2ŠX`=óØÙKÎ'!þ2*Žª?íÔ…n»“Ñû^ç«çžåÈèKéÓÁ5ï8ÛW-aÕ!Wﻞþž¶[*æ¤kX,^ÄßôîÎ{š¿ûo‚Ÿ~”‘a†Ël‚ŽÅègÞ&~þâgÒóÊPÝ}‰îà NæÒ¶ àÅ€kofïGßòýÛ›±¸ÓsRGŒ¸‚i·dóÙÂ/y}išÑ /ŸP:×Ö¥žù5"!(•ϯÿ‰Òe$„¨‹u¿\±¶#æÆ?(NQëÑ4Ýv_Z'žºÇqãs/Òù§Y²ö[>˜_ˆæêGD—‹¸íéq ë艮éU2‚-© £ãËÀ;ïãðÌ™óá"bž¼šö•a*è¶·±5ºÌy¹9zrÒ.ºÆõhôÄç;£ÑHæœW ¾ê6Ô€°Z}‚ãÆcþüùç¨tBˆó–®£e¦¶x6þ×>ܤÅY,ÖoØÈÅ©l k?JBA5loP³-ZÓÐ,´ÊqT£ fÊÍUyƒÉˆŠs¹Åš¾*_«ià÷5kпŸÃ¯çLNÚu?ÜP]ÜÑÍeÖ³ùJë¾T[ñ¥kÖGç»y4k6ªí©£ª¢Ôó‚‹Y£áãKyiãX0—ÕþTס¬¼£±ñÍû…Ÿ\ÝÑÍå¶Û¿åi§BÇèær—æ=—Íh4RVV†›«‹-!œÍKd*Ú2³YB*B]O,üé§ŸÎA‰„ç=]C7—7ûÁ`0`6›Ñ]]¨<5l;вåÌ<-f‹Ã]EU]ÐÕu0†GS–‘Úì]!œ‡^^FYF*j¿f½×ÆÏÏ—ŒŒÌ*÷B)gåIüŠí xËIÏHÇÕÕµÑó¹ t]õ}ù¿ÎÅ#:Îz@e4Á€¢¨€bdåã…ÎC¯v±®k`±€¹½(¢ÃI¸ÝänUU jÛ–?Ö®#""Üúæ4ÅzbYÑ«<È¢© G©ÒjÙª¨˜-’“÷’ЫÑÀ¾ ‚¦i˜¼}péÜ“¬µ‹q Å%0£·ŠbƒÁúîTƒT9á,„SÑ,h3hÖD ëÌùÙ”eœ¢,ý.‘]q ¢¼¼iÙQWWWÂÃÃX¶l9!!!µÅ×ÇÇz%AÅ PTÅúÛÁC]×±htMǬYÐ,Ö$““ÃéÓi¤¦¦Š¿Ÿ_£Ï‘^З‚õK1MhEy”؆¥0J‹ÑÊJÐËŠÑ›p­®â/NQPTE5 +ªõ^EÅàí!8Shª›fsã_CYUÅ[Ó Ø·ÿùùy”––RTTLiii“æ}æÒREQ0Ø.[õóõ%4,ŒÐ`<==1O2à$—ZßkZ†êêküE­$é-Â9Õh+®Ò4ò8ïhÝ!5Ò¦Múöé]™š“dê[NÅÑ|B¨ 5ñÎ=!„h®¦6Эí¯QJ!„g$!„€$!„6’„BvN*Ø—|æMnB!þòTE¡sl—:‡5˜²231úʳR(Ñòr²2ñõ8×Å8¯HL„¨nÅ’E@Ý AºŒ. M}ê…Lb"„ã$!\@Zø^— ‚ÄDÇÙ½1­¥ï¨g‡Rï 8œ—ÄDˆêì=ÊBŽ.$ÒðÕ&1Âa’. Ò_^›ÄDÇIB¸€H×Hm!wn‚žÅÎ…Ÿóã–ìú÷ß§Õ•pð—¯øyA+•©”ã¿ͼùŽ-ïl5~Ùï é2¢ÎMBÐN³iÁÖ)ª¿ñpdœVVvà{ÞùÖó²ÊS7óõ»Ÿ³­Ð~ÎZÛ÷ý¾ •ò^Ìé½›ÙqìüZw!Ë„ ÛýÑsVòÒucùÛÌŸIÓíæ!ä-1N+ý謚³˜ì~×sm¼ŠžÍÒ§'2é¥Õ”Ô·tÍ+Lš8“_²´f.×DôØ[¸T]Åœ_Ž£Ù‰•î`ìâûr$&z¼y “ÇeìØ±ŒŸ4…[¦=ÆKÍcÓÉbÇ—cÙϯ¼ÌW[sσu–ùiè§a\vjo c˲Õè‹{ÒBïÁ-]Lvfj+šn‹pdœV¤ÿ_vy3ôù´¡z™j–O¯òfvcÌÈö<´lÉco£[=ߘ¢€Ž.ßWvc¢[(ÈÍÇÒåž¹±.åEd¥ìgËŠyé¡_ñÐ3Ü=0Àþ^“~æ·ôP‰ó™½¨5ÿ9%;Y¼4•×?M¿?žf΢MLŠMÄ«ê‚ËRøã«YÌ]¹›ÔbW‚c:àR S­²7ŽžÍ–¯?âÛµ{9v:2“?ï|•G†ù£XÒØüíl¾]½‹£™>0þ¶ÛÝÉE/æÏåŸðñÿã@z Æ6aô»i&Ôð°j+©qjÓŽûöãöNvϺÔ[>wòÖ¿Íßß8Äg_ã–nn`9ÁO3e¾ß½¼ùÈ`ü•°‰œ»œ‡n¡[lï~v¤5rŠï«q1Q½ÃéÒµ+nñ}2òRâ_{œwßû˜n±ÿ`¨ŸNÊÒWyqÎvNç—ahAËnæž)}¨Ìfö~zã>p!ñÑ/y|°Éé„843!èän\ÂZóÈÅ1Äø]Ä7¯ÿÂïé1&ȶ‰êElûï³¼µÚ“á7ü;ÛÉL^Áwû«6ŽŒ“ÇÁ›8zÝÝ/K!j˜/ %ìùâ9^ý=ˆ ·ÿ“» Øþ݇Ìzé¿ýû>ÒðöÇ› ˜ò/õöGÏ9Ia€  «Xu%ÜwµãÕDÕŒ˜f¦¬¬¬Ú^d¹Y«6mCåë3àVîH|ˆ7>ü–¯^÷òù&µÓ„Ÿ­ jHg:{ÍåÀ,ôضõ6~ö¯¨q–ï«11©c5ˆK®¿‚EÌeùºL.¹"ß.£¸ùáñxêdîœÇ¾ü?fwø¿'zÚ–o$zü?™><Ï@¦âüѼ„ Ÿfõ/Ûð½äz¸)zæÿ'YöëFMé€Ðó7°xe1×?Ç´+‚­Aœþº…äŠÙ80ŠŠGûxúôèLÅ~²^°Ÿ–f’p÷Ë\“èDֻ߯æ²6ù.z¹ä¯{‘טn@ô™âçÕ?¬-‹´ Ÿn¸ÖT¶ñmnœüvíiL=*_Ÿ>mpÛí$>ô￟‡×–“ô¾çùVi.Ô@‚aÛé 4ÚRß1‚ý|à$ßWcbR5$š^ÛN¤¢ˆGûúÛ†uìp#Gÿxˆ_÷Ÿ@KŒ­\7ß0"#Cª5ôŽL'Äù¢Y Árt¿Šdø½­•ÛÔ™K‡GòóŠßØ7é6º™@K9 s u ¬²¡T¿]È‘qª|\vòOŽ–“öÎT&¿[ù)³ŠKVêÐÑL蹞ÿ>ý†Œâò1#íƒ0t©Xõe–RZ¦ãâZ3€±ûu<{s.U>+Ûþ9Ï|ëXùt|PÚ dêÍ}¸ÿÍœN¸—GùVß{T\pu…ÒÒÒfõÍ;Í÷ÕR*Ë^Ω ßòùëØ{2‹2“7Æb †Ør;3hêtBœ$„úš röýº’£¥§øìÞñ|Vu’ɯ;¯£[7ÛY ]«z–»êoݱqjý]ñ§Š?—<ð4“:UmTÜü¼PLm¸â©è³ã7Ï_À;ÏcÑõOóì¤N¸˜"ëVm}\puQ(+-­U>Õ+”N1­ýÏ6¥iÞ(Ry–±¡ò¡ƒ^Àá݇)uw‡kÙxz8£CªtB饔–‚‹«‹uüzè ^IàDß—Ã1©§Œ€vò‡ UB#Bàè|^{}êÈÛ™~g'|IaÉÛ¯³¡êº*µç£ÙNˆó‹ý„P_½-ÙÅodsÍsÜ}Q›*ãç²îƒøå×-LM„gXG:¸,dçöã˜c£¬ ¬qIŽêÀ8µÚ54Šv¦…ü™¢|qdíÒ\ ‰Ãm=‡3èÓ‡ybñ ’Çv¢§ÑÞ0ÅŸ @•ÜŒ Êtp¯V†:.©©RNûåÓÉß<›×ørÍ 3pùï?ùòƒ¥ô|êrB+r‚%ƒôL Dm¨ièògú¾I—†æS¬üêŽzöáÁÄÊwä˜Þ{¦ #ÞSÝ0/µZy]] ° M§òˆ¥ì¨½é„8¿Ø¿ì´žÏ‹¶¯fCA ׌èAT[¥Úîƒ;1ï땬ÏMäRßþŒ¿¢Oþð/^ãZFÆb*ÙKJÉ™}7ÅËþ8uµ7´éÏÕ—…òì¼×xCÌ¥]Ûb*ÍàX~ÇÆâvz3KwkD¶ÄÍœÁÎã…àÝ/,§êV}½ÝˆŽi‡¶ìZ†ÐµFE]å«üm§|îÅ;ørÖx{™«£Û£Þs ë™ÃÇ+ú0s¤õê-í òý‰ëäßàw¢ëõ?¹Ç¹¾/ÇbRAË=ÎîÝ»1™‹ÉMÙÏæß–òÇ _FõYþÙæ3æþ:‹}S D%ÞÄECc1æaý¼Ì>•O¹Á‹àNý¹íþñt0@yêS íÛŸˆ¹+Ùxð&ºÆ6&l •¯i >ç7.婱¬_Føn½âWf|3—M‰÷ÓßKçÔ† õëÇ­Ñ ÷–×{EÓ}_ÄÞÞ¨;¾ç…™ß£šÜiÓ6’˜ž™ñðhú…ºZíè }ï[Žv¾…G§tÃÛx–‡;㮟½˜KL$&Âé>¸Ÿˆvík}ž‘ž†’—›£''í¢k\Z#lX·†£¯l¹’hé¬ÿôM>øi3Ç‹=‰JœÌӧЫâßÙîŒ$&µIL„[±d‡Ôú<9iW+'!„çTC Av‰„Bòp;!„6’„B’„BØHBBHBBa# A! A!„$!„€$!„6’„B’„BØ´nBÐÒÙðÉ n{—ŽœÀmÏÌaGŽÞrÃmŠÍçŸ/㡟²ä•ˆ6“*¬GB8›VLfý3ç¦{ÓÓ¼üÄdÂöÎbÆó HÕZb8hù‡øí“'¸cÚÿ±6ÃÒz«v“˜Ôd¿ á¬Z/!”ïdþû÷(NLÿK¦0ãÁ‘¸nûŽû,ÍŽFÊÏïðþw®xöaFÈ›N˜ÔÁn=ÂyµZBÐR’Ø“íA>±˜lŸyÄ÷%ÎBÒžLÌÍ®¡1ù-¾ýøI¦ô ÄØZ+v^“˜Ôd¯ÊA‚pf­—²3ÉÁ—€ªo¥r ° dgfciæp@Uå,yM“jìÕC9“ œY«¶: wY4w¸Žz$DÝZ-!¨~ø‘MVv•ƒò²,2òÀ/ÀC3‡Ë&.a¯J=άõBXÝüŠØµu?å¶ÏŠwn&ÉF\·ŒÍ.Ý"Âöê¡Ô#áÌZï<£)žqbXòÙ¼q#N°ðýå”&ÜÇU±P›9\GØ«‡B8±V¼ðÄHô”çy®äM>˜õKŠ=‰JœÊKÓ¯&Lm‰áB8Bê‘õQòrsôä¤]tëQkà†uk1úÊsP,!„gÊ%‹8¤ÖçÉI»¤ËT!„•$!„€$!„6’„B’„BØHBBHBBa# A! A!„$!„€$!„6’„B­ú´S@Kgçoòþ‚Íœ(ö&*qLŸBO_¥†—“ú¿¹Ìúb1¤QêL—ÁcÚ½ãèê嬯=‘˜ÔÉ^=ÂIµâ‚™Ã_?Å̹)ÄÞô4/?1™°½³˜ñüRµ^´9ï-¥ Ç5<ü܋̸®9+þ'?ÜLIë­äùEbR{õLçÕzGå;™ÿã>ǽã»cº»åú'¾cÁ¾+¹«S3‡wíσŸÎÆh²­ÒE ÷¯ãé¤ÝœÔúÑÑ;Ç<$&µØ«‡]å%9ÂyµZ“ ¥$±'Ûƒ}b1Ù>óˆïKœ!…¤=™˜›9\ƒ3 €–Gf–·ð¸'@bR½z( ™µ^BÈÎ$_üª,Ò5€À6™¥™ÃõjK+çøâ7ùl,7Ý:'müª“˜€ýz¨×?©¼V=©¬Óp+ÔÜáV¥Yø<¾—™oqM´Éþ$<‰IUŽÕ#!œO«!¨~ø‘MVv•ƒò²,2òÀ/ÀC3‡[7ñrŽ/z†¿¿w‚ħÞä¡Ar]­Ä¤{õPR…pf­—ÂâèæWÄ®­û)·}V¼s3I–0âº`læp(Úñžx÷ž|ƒºá« 1©Î^=töøçÖz]F¦xÆMˆaÉgoðVÄŒ8ÁÂ÷—SšpWÅ@mæpí4K?GFüm\œÅ¡YÖå*.ø·kO€k«­éùCbR›½z(„kÅsF¢§<Ïs%oòÁ¬§XRìITâT^š~5aj /?LòþRòóßãÞõUkˆâÆfs§3nì‰Imöê™ÎKÉËÍÑ““vÑ5®G­Ö­aÄè+ÏA±„Bœ +–,b@âZŸ''í’.S!„V’„B’„BØHBBHBBa# A! A!„$!„€$!„6’„B’„BØHBB´òÓÐÒÙð雼¿`3'н‰JœÄÓ§ÐÓWiþp-‹?ü—/¯c÷±4ïz »žûîE·V]Ëó‡Ä¤nöê™NªÌþú)fÎM!ö¦§yù‰É„íŌ窵ÀpÅ…òR#q§óüë¯ðøµI[ô/žýê–Ö[Éó‹Ä¤öê™ΫõŽÊw2ÿÇ}Ž{‡G'vÇtw9ÊõO|Ç‚}WrW§fïêEߦӷby 1oYÍ[ÿ¤„Îx¶ÚŠžG‰I-öêaWg|G„V­v„ ¥$±'Ûƒ}b©xÅ»G|_â )$íÉÄÜÌáÕvî´BNnú¥{½éq<î­µ’ç3‰ `¿ÊA‚pf­v„ eg’ƒ/~Urkmàhf6–f×  Ù?™øâëFÂ.{‚'F†8ý™s‰ÉöêaE=µj» ÓðI»æðô ~ô.¯<2-/qÿ+«ÉÒUÌ ŽÄ¤:Gê‘ΨÕ‚ê€ÙdeW9(/Ë"#üü04sxÅ&®zÝ¥'ƒ®¾—çïHޯ߳2͹;$&gØ«‡’*„3k½„G7¿"vmÝO¹í³â›I²„×-c3‡×µ"Š¢ `Æl>ûë÷Wáì1±Wµ+MhÍ«ŒLñŒ›Ã’ÏÞà­ˆ;p‚…ï/§4á>®Š5€ÚÌáe{XøÅn\»v$ÈC#ïØfæÏ^ qÓH uÒÍ\bR›½z(„kÅÓŒDOyžçJÞäƒYO±¤Ø“¨Ä©¼4ýjÂÔæ׋ HÛ¿œ¥ó>&­@ÃÍ?’îƒäÛÆÒÎIÛ>‰I]ìÕ3!œ—’—›£''í¢k\Z7¬[ÈÑWžƒb !„8V,YÄ€Ä!µ>ONÚ%]¦B!¬$!!„$!!„°‘„ „„ „ÂF‚B@‚BIB!IB!l$!!„$!!„°‘„ „hí„ ¥³á“Ü<ö2.9Ûž™Ã޽å†W²pú·¸vøpî™{RÞ“ HLªp¸ ᇩ!ÈôIDAT\Z1!˜9üõSÌœ›BìMOóò“ Û;‹Ï/ Uk‰átr6¾Ëcoo¥Ì¥õÖîü&19ÃÑz$„ói½„P¾“ù?î#pÜ£<:q0ý/™ÂŒGâºí;ì³4¸åÄ^|e ÿxœQÒ#“j¬GB8£Vk´”$öd{УO,&Ûgñ}‰3¤´'s3‡k凙ûÒ)ÿ$ÓúùÈûqAbRƒ½z( ™µ^BÈÎ$_üª,Ò5€À6™¥™ÃuÌùþu¾á½¶3.ÎÞòHLj±WåL‚pf­Ú ÛÙ?mÎp=}9}]À˜{'mªw4§¢ILêd¯ž á¬Zíʪ_~d“•­¶—™—e‘‘~~š5Ü—Ü +Øs” ÷_η¶ej3úG7rÕÁç˜ÿä`œ«MÔ%&u°W%UgÖz !,Žn~ElÙºŸòq˜€â›I²„1º[Æf Ä/òqf÷(>sȯýÉ·3ž'ù’Wxzr÷Ö[Ñó†‚Ï0‰IMöê¡“ŸrN®õÚS<ã&İä³7x+âFœ`áûË)M¸«b  6o¸ªéYey–b|Œ ®~a´ twÊ=?ÕSbR‹½z(„kÅD#ÑSžç¹’7ù`ÖS,)ö$*q*/M¿š0µ%† á©GBÔGÉËÍÑ““vÑ5®G­Ö­aÄè+ÏA±„Bœ +–,b@âZŸ''í’.S!„V’„B’„BØHBBHBBa# A! A!„$!„ðÿíÝ}tT…™Çñof’I '/B‰yE -‡S=OC¼¸®Zl‘V”ÃÚR¤, ¥•j—h9웃Ûe1`Ë*ŠÄFvMœÄ FCBмMˆ“ÜÙ?00‘ëÙ‰7,÷÷ùó>É™{ŸóÌýͽwæ^"" @@ "" ,½Û)`4SV\HQI9 ]CIəł…Lˆ ë—º¿íE˜õo”û¾xIç¨;xjã=Œ·éÕ“>˜Í™ˆMYÝÔnZβÍ\û³Ì«gǺõ,YÍÓ¸™áŽPëàïì¤Ë9–‚ß=Èõq§ßÜa‘—1Ò®;>Ô“`æs$bWÖ‚¯‚íÛjˆË_â™™D™‘uܾt+%5yÌb=͉ÿØç#‘1Ùãm²>6¡žœÇlÓl›”"Ö]C0=Ty£Èš˜zö9¾QÙ“Èp6â©j¥;ĺ^:œli¦ã”?x%lH=9—Ùºv"˺@ð¶ÒN,nW¯—ä&.¼­^zB¬ûS'Ä|ÃCÑݳȻq:wýúiö7õXµ‰%õä\fs¨È;³ôŒ©ßä)¾¡Ö£sñ—­Ûyùo/ñìêŸ0¶~3ËþõYjí»ÿSOú`6G"veY 8\n\xióö:(?ÕFK¸Ü.œ!ÖÏy‹;¿Aò·oá—ó®aЇ¯ófƒN¨'§™Í¡¢Bì̺@HÊ ÝÕI僜ùdWE9žž$2ÒÝ„‡XïkC ¿NœÏî=1›C}ÉHì̺oEd“?c¥Wóxò\¦ºØQ´‹“WÝÇôT'8B¬‡yí?öðù¨qŒˆqp¼þ¶oÜÃÉq?áêd›¾ÍÕ“`fs(bcþ!œÑ+ù͉BÖmXNiW4)9sxdáIrôC½» ï'ûyþùg8|´›Èa#?eÝ3›+ìú>7Ô“`fs&b_aGÛýÕžJÒ2²‚Šeûö2uZÞ¬–ˆˆ|v—îdrNnÐòjO¥N™ŠˆÈi "" @@ "" "" @@ "" "" @ÀÒ»F3eÅ…•”ÓÐ5””œY,XXÀ„ذþ©ÐCûû»yþùRÞ|÷>‹¿§ž¼oÚ:úÔ“s|¥9± w ÝÔnZβͤ޹‚UKg“ôþ–¬,áˆÑu€“|øÂæ.~ކ„ïqç¢G(\##møÙÏ¡ž1›C¶Dì¥öÃ$´¼¥¹‰°Ž£íþjO%iYAP¶o/S§åõßšÍì/.dÝ‹åÔwE“’3› ¸ò̾ë-üãßÿÈS/¾ÍÇíaÄ¥_ÏœæsÓèÁý· ÿߨ'ÁÌæHä¶»t'“srƒ–W{*-P }$@7·‘‚ˆˆ  P ˆˆ @‘‚ˆˆ  P ˆˆ @‘‚ˆˆ  °ìšÍ”RTRNC×PRrf±`abÃB® ›¸÷Ž"<Ýç¿h$×<ô¿½Î~w÷TO¾„Ùœ‰Ø”…ÐMí¦å,ÛÜɵ?[Áü¸zv¬[Ï’•Ñ<ý‡›î±žp‹‹²é<û ¬_YÍ£{âùîøHë6ó"âPOú`6g½~"Ǻ@ðU°}[ qùkX43“ 3²ŽÛ—n¥¤&ycB¬§¹¹"Í}öåŒ#ÛùóîV&ÎŒ¼6}—Gª'AÌæ0Í9Ðk(2`,Û+ª¼QdML%"°,*{ÎF|y'U—]Ï-WûJÿqéSOzûjs$b?–‚Ã寅—6o¯ƒòSm´t€ËíÂbýì[¼ç ßÓÀå×\GFêI/fs¨¨;³.’2HwuRyà ¾À²®Šr<=Id¤» ±~fCŒº2Þ>ââ;SÆZüÚ‹—zò³9´ëµ°ò[FÙäÏGéÆÕ<ž<—©îvíâäU÷1=Õ Žëøé¨öpÈ9ž‚q6ÿ(|–zr³9±1 ?0†3º`%¿9QȺ Ë)íŠ&%g,ü!IŽþ¨ôp¸®#.—6ýÍU0õä\_eŽDì)¬ãh»¿ÚSIZFVP±lß^¦NË€Õ‘¯ÃîÒLÎÉ Z^í©Ô)S9M ""€ADD""(DD$@ ""€ADD""(DD$@ ""€ADD""Xz·SÀh¦¬¸¢’rº†’’3‹ ˜Ö/uÿñx驵<»§’OO !1ýZn»ÿçä¶íƒOÔ“>˜Í™ˆMYx„ÐMí¦å,ÛÜHê+Xµt6Iïo`ÉÊŽýP÷wðæ¿âñw\Ì\^Äú5‹¹1òM ?ÉþãÖmåEE=éƒÙœ‰Ø—uG¾ ¶o«!. ‹ffdFÖqûÒ­”Ôä1oL¨õ(ûGão»‡[¾;©¤Ì«aϼÿ¢²¾‡)ãmøð“nõ$ˆÙ¦Ù°'"–!ª¼QdMLåÌs»¢²'‘álÄSÕJwˆuÙȈáa|òö~}ÍUÕ4 K'c¤MßäêI³9ÔA‚Ø™eG†·•vbq»zeÐ 7q1P×ê¥'ĺߑJþ÷òd¸6ËàÀ¾Nf<¼œœh«¶ò"ãHVOÎc6‡~nåD˜¥ß2ò›\Æ ­np¼éŸõŒæûy9$Eøqœ¨åõ—Ëù¬çÿ°²—õ¤/fs&bW–‚Ã寅—6o¯ƒòSm´t€ËíÂbcoPôh)qw¯â?ÊçŽVóç„ïz‚õouZµ™¿zÄlbgÖBRé®N*ÄXÖUQާ'‰Œt7á!ÖÚjùøØPF~3öìF ›Í¸èã|v¤Ã–ç†ýêI³9ÔsÄΜK–<øPKsñ ‰AÅÃõ‡=f\?½R<‰Ýelyî š†%0¤e?Åk·P7öÇ,*Hghxhõ˜è0íþO^©ê".9–°Ž:öýe=[ªb˜úÓ¾í¶ß[=,J= b6‡:DK\í‡I9*hyKsaGÛýÕžJÒ2²‚þ lß^¦NËë¿51šÙ_\ȺË©ïŠ&%g6 på™ |!ÖOÔ½ÊÓkŸa×»õ´û"¹,å*¦Í¹Ÿ9¹Ig¿Qb7êIÌæLä¶»t'“srƒ–W{*-P }$@7·‘‚ˆˆ  P ˆˆ @‘‚ˆˆ  P ˆˆ @‘‚ˆˆ  °ìšÍ”RTRNC×PRrf±`abÃú¥nxÿ›M\Ë oÕrÔÏøÜ[™?é1ö½§±zÒ³9±) º©Ý´œe›I½s«–Î&éý ,YY£êF=ÛV,aã¡ñÌ}ôO=ü#.¯ˆ_=ò2Mv| ¨'}2›3û²îÁWÁöm5Äå¯aÑÌL"€ÌÈ:n_º•’š<æ ­>wЫüõ½!\ÿûû¹éÊAÀX~ñsÿ´¼„W§Ql¿³cÆ'êI³9LsôŠ ËöF£‡*oYSÏ>˜%*{ÎFâKׯÔ“>™Í™È%lwéN&çä-¯öTZ""2 .úH$""€nn'"" "" @@ "" "" @@ "" ""pÁÛ_'Hæ½wXµ.""ò5K‘ü¥µ ÂÈQWôûʈˆÈÅI§ŒDDP ˆˆH€ <<ŸÏgö·""r òù|„‡Gœ„a±.>m<¬P±ŸÏÇ‘ÆÃĺ\§¡é÷ûinúŒ£íítw+DDì"<<‚a±±Ä'$ò¿·%Ô²ú\VGIEND®B`‚gnusim8085-1.4.1/doc/help/registers_flag.png0000644000175000017500000002431313327105237020435 0ustar carstencarsten‰PNG  IHDRôõgsØ[sBIT|dˆtEXtSoftwaregnome-screenshotï¿> IDATxœíÝw`eþÇñ÷lIï!=„’Š4‚R4 §ˆ¶ã<9÷óN<»g9Ëyg=»§ +ž R•âõDÊf“’@H#•”Ífw~„@P’ !»Yf¿¯ÿd&»ó¬Ïgž}vfž¯RS]¥"„Ð]O€¢ûH …Ð ´"BC$ÐBhˆ¡§@—R«Éݹ‹}…µD]4ƒQQÚÓÜ£5ûYyÿ­,¸í¯¬=ds¸»ÚTKIAåM.86¡-͹¬{õ Þûd+æjí]±=ý­–±åÅgùpO)Uµ 4aÀ' ŒØ¾¹`ò4¦ŒˆÆ»Â~4›Ÿòjh°›Ø×@F|J;ûªu_óÔ^â;[_æ>þ3bÝãœ$Ü„½ÕË–‘™ÿËAñÃíÿÓå:íº‘òÂBJªl(ŠÎFcM ¹ÿ-!÷ÇÿcßM²drT· ïºØ‰ÜpC;«˜0ªý0·››ª½3«èn z/o¼ mz©··æç˜Ú§'éšÇypz4ÍUX÷Ò“¼·û{7}KÉÄéÄè[%{>_AæW?WeÇ?2…QW\ËÜñ ø´&Óv”ÝŸgòÑæÉ+«¯B"cI?—…S“06g³~ÅglmŒ„Á£˜Ÿ å?|È[™›Ù{¨›w áq£™wÇ|†·þÿ±`Å׳0¤]ÇS˦ÐKéÄñ؋ٱbëÊ¥ ¤Š»A½/áᅳ^?þ=GuxŠnIGâ̇ypzÌ©õ{vübßFö¬ZÎ[[ )¯nÀf ":uWüzããuÔ‡]Ò&Ç:9È*x†p<ÿv-_hÙ¿â ž\ù ÙUzBÂ|h<²‡u/?ÁË;ªQÔcü÷GyråV²Jí„Äõ&ÜXGéÁ}ìÚ_ÌéfÌjÕ×¼þÙ•_‹><ž¸0#Ç*šñòk,Å‹ ˆbbbˆéå¾³Çc+â‡ß²¯ð(:}íÔëüªéÄ{ 2¢«/§ÂêM`x¾öjý¸Ž—Ÿû„6ºÔ‡{ŠƒÚΡ/–s×V•†Ê£TÖ7£* ¸x4±:P+¾áÃõ‡i6¤pÍ#÷0#^ÏÑËYòên¾Ûð-•é—Zþ Ÿl-ŦôââÛæw#ü(\}/K?(hÿ]+J(µª(^™³t1—„ëQm6T}›tñ\¾äÔ9tgŽ'¬ug%’Œ%e~ªŽæf;JÁŽßSœCl䮸“ù+Zÿ[OßÙòð´Óí«gÀuËye~3u5µ4TË+½ËžbY*}9ó>ÜSZÅRUÌáªãÿ©‹äÂ[–ðÛqÑèk~yVUÍfÅ]7±¢Í_ꎖRn‡ÀÂ< šU” ó3$¥ç3}üP†Gÿ‡¢Ã?ñúŸñõ¨ \6} £âý:ü»æNOØ/þJÁ`ÐCï¹ïOYt?ƒÁHpH‘Q(Ê™~SúùZW;_Híü÷ý—ycÝ^Ê-*'~¡Ñ[h´¨4—:îÃÝÝGºÚv‡sè~sçþQûùÛ}¯³»®³©„æ £ñVÕŽP¼HŸ:œ¶—ô”€þ„ëõø¤(ÿØÕ–Wæ.[FÜšOùbËÉþú²ÿï{f.»Ÿ™Q­¯£ò‹ßÆ:s<ö3Ï«×Ù#ݨÙjåHÑaÊJKˆŒŠ>ÿno}ä{6|¿’?ÛÃ1ÿ.½æR}óYÿæ0YïЉ>< ›ûHWÛÞ©9´.j7^•†vÊ·ü›²[.âúÐ[¯ 6×ÒžÎôY³™3{6WM™Àä‰ç®€>¶7qzµæG¶ì,¡±éG«,tø;µí5º>\|íí<öÌCÌJÖ£Z ønw1ª—~ìG)<Ü€ -_;y<]yÏöι F#ѱqTWU9Þ¹³: ãhE*vª‹K¨WÁ8Ž+3.dìØóˆms]¶K}ø,uµíü_Gôä¹dl|ˆOaýÊ\²t Q‘ã™qá—<½¥ŒïÞ¸‡…+ñU©«÷fÜÏqËPºè ¹läZþ¹ó(ß<¿˜oÚ¼j{ÓS[Þ§<øðzÃ# óµR~ÈŠ/‘Á(¥ú°íǶÿóö¿cÄâ3Ž??v-É8žötøžþ8Ew347[ïØYºh⢠(9u|ûâ=¼êý$×÷M$D—CÅÞ÷¸ÿ¾Äø×s¨®íŸœyî]i{ç/%“¸üª‘**óX³¯”@F,XÆsÆ‘ˆÎrŒ:«¡ }éeh:þ5%”1·,cÑœI\08CF3*%ÁpÚ°Ùý‰‰ ÀZq˜ƒ…¨aÉŒ}7¦¢(¡ŒÿÍB®G ÎBM#V;žvtøžgô‘ ·¦‹æ’70¡þ:_ƒ x œÍç_Dj¤šüýü´ï0Q$ L#Þ_éRî)ŠóW,Q©?Z†=8’`-æ‹¿ÝËÛ{šˆñ_Óשg9qîÛ¿÷§nŸ£ž™žëÃgÚöÓ~íÖP­aû+wñz–7!Á¾¨u•TÕ7ƒO*K0 ÷wõaçß §6àÞØÀ"Ê«*°‰4ŒI3g3%Î> ¡NÍÏ¡>ìü@ë¢ó2Æ;ý„p’s¨»Ó|^q–$ÐBhˆZ ‘@ ¡!h!4D-„†H …Ð ´"BCÜjDµa?oß÷8ë&r÷372È­ŽÎ Ø+ùñÃ7xwÊýˆ6…ën˜FZë"†Ž¶ ÍsŸZ­gïû¯²©.ßc…TÊR½§²Q¸æï<»¦„¤_ÝÊâ[¦™÷ËŸßH™Ú™í¸I Uê÷®âµo‚™ùÇÙôWŠ(8ìNk)ºkë¿Ì#tò~“q>CFMã–ëÆâµÿ ¾Ê³9Þ.<‚{ºÑDæ›;¿ú·\–Ol¨…ââJ§.ñr®±—æSíKêà¾'Ö€öIL²®Œœœ*l¶ËgéÜ ÐÌ«ßä›Ð«XpI z]8‘½TJŠJÜj½ãž¦ÖTQK !mçÃ^!„ªTWÕ`s°]ÖEó =hkÞÞÜìÏô&­”@Âý©+-£^†•6TÔCr´]x‚žýÙVÄÚ·Öp°®‰ü?·YG[UQbJ)³C{=?Þc” P‚¨¡º¦ÍYÎZEå1…à ô¶÷ø™[¸DZ¥|ó;|R:Œ]EŠ×ɯßõ~ZN… úI ÐE&“ÜÀž}±MÆ4fí%ÇÁøäô¶ËØíz,Ðjí.V®6=õ.NŠ=e]&kiFÛQ*jU:^LÛƒûsÉ¥‰lýèuÞŒšÍ˜6¾»¦ó˜ÔWŠƒí¢6*ö®%óã-ìÎ+¡Æj$(*‘!SçsÓÄ„®¢ëûz(И>ZÉNÒ¹crÌ/YÓ¨æp´ÒáÒ[èé=í6n³¼Á{«þÎV‹qïbÑ “ˆT:³]´Ç’µ’Ǟ܀î‚ÌY˜H¨ÁÂу9ÔGõ:‹€´ÞÐÀè¹·2/¤˜+2Yþ¼Þ5‰'ý?9í2¾=¿lª'I<ó¾kcßwðØî1Ü÷䵤t×øaÝÇë‹ÿÊžÑKy|^JËè‡WXüL6ãI{£3müV"<ž€?JÝŠªºïB©£ûœuG-<œž„)×qE\¯-{€~üEg7G÷ 8ë¾ ´ðxJà@æÜû$ß0œ¦­/p÷=/±³âlCÝ3÷H …PüIHŸÉíËnà¼Úí|´éÐY¢ŽîpVð$ÐB´e0`DAÑÝèÚzß@Ö¾ƒ´Öl½/ Ù‰÷ÈÇÂc©U;yçm!CÑ'Ì kU!?|¹†]J×§ÇžÝhçè¾'‘@ Õ\gGiÊaý¿7QQ¯b Œ aÀ~ó ÆDŸí—מ¹/@-<–1n óa¾³Þ@ưY‹6ËYopš·tÝ[ !œM-„†H …Ð ´"BC$ÐBhˆZ ‘@ ¡!.¾±ÄÎá5òà*3uÍ*(|‚"è;t2s~AjÀÉ[hì5¹lYó9›¾3QX~ «ÞŸˆÄ!L™w#I>®=ìŽh±<Ûä!\hµÓî\šÓ®áÁëFàO#•w°ê­wyÖÇ3¿Œ•úœÏxöéLÌÞƒ˜0y.ÓbÑÕ—’³·ß@o—rÇ-3Ó3ËМ-¶És¸6ЖöçA¿Ùcè†ÄÄ‘¾q+kki •ÛyåéLòãçpïí—“ä{²‡œ¡KÖ±åg–ò›Œ–efRE,~æ ¾Ê»˜¹½lïä24.¥Å6y—ΡmùûÉnŠgðÀT¬µEì^û._äÇpIÆP|hbÿ'«ØeƼ…§†Ùi±<ÛäI\8BÛ)Î2SÑœOæÒ¬¶Ûh¶ÛÁ;‘i‹îáÚ~(ÖÝlû¶‚Ðô›Iuï0CÇËÌ9(OSTUƒð_¬xÚÓ´Ø&Oâº@«ÇÈ6Æ{ÄõÜ;w FÕFCE.›ßÿ7ëÞúœQÌ!©¼€üZ=‰©I]_ Ù¥´XžF‹mò® ´5‡ý¹*I³Ï'!6´¥KÄõ&®ö6¿”Ev•J_kÍè0ΫiZ,O£Å6y—}þ¶‚,Ì–hRS‚ÚœßÉË=ŒÝ/Šè`]xF+L¹X\u`gÁÑ23úZ†ælh±MžÄE#´2SG áøY ÈͶPWu„ì]_±v{Cn˜Á/P¼FqQO¬‘§ôÓ™4( [ %y&]Ê‚Œ÷šŸi±<ÛäA\T9£‰Ýo-ãK¨³ÚQôÞø÷"®ßy¤_z“†<³4—ñÃ'+ùpë Ž6 zÙ;‘Ó®aÎùî7Ø+øïê7xï«=[üˆ>…ën¸‚'nÂp°Ý¹Y›œ[9ýi{¤Žp{h)…#„G’@ ¡!h!4D-„†H …Ð ´"BC$ÐBhˆZ ‘@ ¡!h!4D-„†H …Ð ´ââ…ö…pCÍûycÑc¬;jÿÅ&]ø¥ÜóÔ ìJRz  Z%ž)¼q'V°R´õmÞØláük¦’Ú¥”ôLA×—ÂùüqþòAÕ;è½ð‰¡ßq\1óR…êOìW¸z÷|P€í”¿×Ó{æCø;F+ Ö`Î:‚qÈ5Ü}õ¼N¼€‚To÷ ³&ËÆh±MÕLÑÆðØ»% ÿŸ?sÓˆÐ.ÿÈÔ~Á‚m- ’²œV”Âése:úF¡}û `Ø `»ë>Ø0WÅ£³ä`ʃä9ãê~눵ÒbÙ-¶©Sl”m{™'Þ)bÈïï>«0ƒã‚Î*HàúR8–^¤¥õ:%¤ºðA Žƒ#‡±¶|æ¦xvß0£Í²1Zl“c*5»ßáo¯šéwÓ,Ö Á虂./…Séߟ½~nj¦¹tz vJ²ÌT4$óÏ7’y|%àBîxöFxýüu{ŽËÆh±MŽX®áÙî$xöŸY8.²[ŽßQÁg¤./…cHžJ?ÃÏ7ä@ ĤÇaPëÈÎ:„qè|–^;èÄüY1åFan¡Å²1ZlSûÔŠ¼úÌGÔ_´ˆ¥Sè®.ÖZ°`ϾƒX‡&cädA‚ñN,HàòR8 W¦âJk¬ä¹Ž=ö>\=2u7¦\•Ä«Î')¾—[w-–Ñb›ÚÕ”ÇÇÏý‹^cùíH/ŠssNnÓÓ7êg}õ 8*Xà$. ´-ß„ÙAzÿ°6!m¦dÇëüãÓÃDN¾“Kbuؘ07F0*Å ;ÎÑYXßCg鳡Å6žÊ±o?âãì¬ê^xhÃ)[õ 3ùË#3ñïröôôžv·YÞà½Ug«Å¸áW±è†ID:ñCr])œ¬,ŽêÃð®ËÁ´ÏBmY>{wnfËOÕD^| w\;?E¥Ôl¦LŽŸ%œ6'Lŧ ñ!îU•R‹ec´Ø¦ÓRw¯sâ[èÂ6kÃf9ñ=~Æe¥p~zç^ÚRLu½ÕàM@h4‰©CHŸt)ãú‡¶œYÔ:¾yæ<¿«ñg¿–*ø½üÏøtãQu 7+Ó-ܬMR9CJá ‘@K)!<’Z ‘@ ¡!h!4D-„†H …Ð ´"BC$ÐBhˆZ ‘@ ¡!h!4D-„†H …Ð ´"BCz ¶UK™›eS¹ëéÛS©Ý²œÛ^·qÝÓK˜¢R¸zK7¤²ä™ì®U¸´X6F‹mò®¡[ËÜôDÒ)!µ’³/[lRƒN–Ã1¤ôÿÙ~,L I¿º•Å·L%2ï–?¿‘2µ3ÛÝ‘Ûä9\hK¦<…~Sðnûï¶|ö™ë NíO´®u?HLKÁ×åÙI'ÊÆ,à7ç3dÔ4n¹n,^û¿à«<›ãíîH‹mò .tK™›8ö:eÉW{‰ ÓQ/RÒ1œØ/’´þ¯ËÆh±MžÄåådK²ÌTXóX¹äzVþl«bÀødŸûUù§ç¾KÃj±lŒÛäI\\N¶¥Ì×ðë¸{vZ›5¶­ì[õï–õ'5Di)›“u}¿)n<m–Ñb›<‡kãbÍ=^æf$ýú´©kËcG©•Àþý‰ÓM-û%ÌHîz)ÐbÙ-¶É“¸¶œlaK™›Ô”SK¦¨Õ9d—HNKj™?š07†Ó?Õ½k[µ–ÉÚwëñk- “ܦlL{ÛݱmZl“'qá­rÔl¦Ü'™ÔøSgY–\3I`fŠÊñýÊôø[Û–ÃQðêKL Z,£Å6y–“­'ÛT€’tI§¨²Q`Î¥©×(RÕ–y¶©[c#+ùéänº.¿÷oÌtÙw‚£‚d=S°ììh±MžCJá·'¥p¤ŽI-„†H …з¾mCgRöóö}³®a"w?s#ƒ~–{M.[Ö|ΦïL–ê÷'"qSæÝHFR'*•÷ÀSihá™Ôzö¾ÿ*›êð­/¤ RePDkÐTês>ãÙ§31{bÂä¹L‹ DW_JÎÞ|½;|é­O¥50zî­Ì )fãŠL–?ïÇ£wM"ÂI™–@ ¤R¿w¯}ÌÌÅW`z|%‡mѵr;¯…ôЮ/î詵êªìgÝŽÓ“@ bÍ[Û›ý™~Ãd¢õ€Hx¸7u¥eÔ«`// ¿VObjF‡¯Ö‘žy*MæÐÂsØŠXûÖÖ5‘ÿç›XÑú慠SJ™ü­M4£Ãh8»±ÎÑSkÎI%ÐÂC¨”o~‡OJ‡±à¡«Hñ:ùïõ»ÞàÑOË©°ARxF+L¹XF  3¿gŸNëSk{öÄ:4#'ŸJïħÒ$ÐÂ#¨µ»X¹ÚDôÔG¸8)ö”UU¬¥mG©¨UQÂGqQO¬‘§ôÓ™4( [ %y&]Ê‚Œ„έÈâè©5'‘@ Ј飕ì$;&Çü"ºÀ ÕŽVÚ!Ü—ÁóîbQàJ>ÜšÉ kP½‰ìÆÈi¾gðU¹gžJ“§­„Û“§­äi+!<’Z qÒÚÎáÏç/dQm±ƒÎˆXýG_ÎÜ«Çç`£bïZ2?ÞÂî¼j¬F‚¢2u>7ML@Ùû:ük.—üå!®Š?~ÞQ©,®B "Ìçä}·U›—³øõZ®|ì~¦Ç¸ø¥Å²1Zl“‡pNïWkÈÚMCÒL–=ò0Ü·ˆ›&ER´öEžÊ̦°d­ä±'W“<–9 ïàÎ;nfÖØ¾ÄGõ¨–F,оm‚[÷Ã[Ü»än^Þ^sòÖ9{1[7ìE9ïÆG»ú ‡ËÆh±MžÃ9#´%‡ý qæXÒ#P€¾ýúиÿ{^?GµšDÉö‡Mæ¾…3HiýÙqè'^ÂniŠ~­O©Ù Y·z;•v;ÁÕÇP F¬9Ù˜À¨ÅâêÂÑ ø½{æý³¢Å6y§ i¶ü,ÌMQ L ;yÝz„Ãev|ÂÂñWÀ?À¥îEU§«‡¤ÒÜÜ 1z)€JõÎX[9€aýtÔÖÔ¶ŒÐj?|ù5åq™2¸ϧv3-–Ñb›<‰m§Ôl¦* •þÑ*Ç*9lú†÷Ÿù'ë*û0uêyø 'aÊu\—ÃkËàŸGQã©]ÁÖlE^šrùü£=ÄNÿ5“â¼9VS‹PK¿æ‹]Íœ7u" =008º¿£²1μAÿlh±Mž¤û¿r«u˜M…4Wæòø‚ (†@b¥sãÒ«™˜ÔrÏ89÷>Iúε|ùwoÉ­ËnatXKGQQA¯G#ëßã+uK&Å`ü(Õ\IµÚDÙÚµä_È]é=UÐN‹ec´Ø&ÏÑý¶æbʵÓ÷Š?qÓ˜P¼¼ë†¿ñ4@ñ'!}&·§E°üÎñѦi\0³7:@¯kríÛx÷Ó†Ýt;)^:j"Â`G9åÛøtk ©³/g`Wo¸=KZ,£Å6y’nÿü[ÊØôbÐçÑ/±½cÂOæ¶ Œ((ºÖý =Øjø>3S•̈‚‚d$~U‡øúÃOÙã?Ž+/Šè±ñB‹ec´Ø&OÒÍ#´J…ÙL¹w2ýÛ™ÔªU;yçm!CÑ'Ì kU!?|¹†]J×§Çž8Ãè}}1Z¿gË®Df=8Èãô‘ÑDØ6ðÕV?†ývƒ\ÿ[ØIZ,£Å6yî ´Zùx¹›~í<Þ\gGiÊaý¿7QQ¯b Œ aÀ~ó Æ´¹Ž¬óóÇOÑ–q=—'œÍÇ(Þ·‘ÌÕ/ò”Ú‹'~‚•úœÏxöéLÌÞƒ˜0y.ÓbÑÕ—’³·ßÀZâó´ZËÂ40zî­Ì )fãŠL–?ïÇ£wM"Bq´½§ÿt´Ø&ÏáÚ@;,‘“BXÕv^y:“üø9Ü{ûå$ùžì!ç_èÒ£uL‹ec´Ø&âÒ@·–Èwº9Iáø+Mìÿd»lÃøÝÂSÃìŽÚ/³­¥lŒwÇÛÕ¤p·[öV‹mêXç§gþÒ®Ÿš¸0п,‘sôÐ>¾ùä}ÖUöáÊ©çác5±íÛ BÓo&=Ôý»EGecŠ”)ªªÁN8î6ži±MêÔ4°+zfjâº@w¢DŽýHùµzS“hg`7£Å²1ZlS:1 ïJsM]œ45q] ;Q"Çnm¢Fùq5M‹ec´Ø¦Ž8žvíuM]œ55qÙçß™9ºð("ŒV˜r±¸êÀ΂ËÆh±MíëL¥Ô®qTÅÓYU:]4B;.‘ ø 㢞Xÿ"Oé§3iP>¶JòL º” î5?ÓbÙ-¶©=¬”ÚÅï‘©‰k݉9-|<ï.®ä홼°¶Õ;ÈÞiŒœæë†_ç´X6F‹mjÇ™TJ=Cަ.ÎêË® ´âÏ…wü‹N]F6D0|æ>ÓÙÕMta ›µˆa³º¸Ýi±M§Ñ: yÁyôKìÞo­S—=ûbšŒ‘“S“ñNœš¸øÖO!ÜEç¦]æhêâ$há™:= 쪞™šH …g:“i`WõÀÔÄý~gBt™Z ‘@ ¡!h!4D-„†H …Ð ´"BC$ÐBhˆZ ‘@ ¡!h!4D-„†ôÀÓV6*ö®%óã-ìÎ+¡Æj$(*‘!SçsÓÄŒÎ\'Ù´X6F‹mò.¡-Y+yìÉÕäeÎÂ;¸óŽ›™5¶/ñQ½ZÎ.m×I~äa¹o7MФhí‹<•™M³«¸C­k/—ô«[Y|ËT"ó>`ùó)S;³Ýi±MžÃÅ#´Üí;(›Ì} gÒºpÃÐ Nîâ¬u’A‹ec´Ø&âòÚ?À¥îEU¶Óno]'yàéÖIëú:ÉÎÐþÚËe-eclwÇM‹mò$.´ž„)×qE\¯-{€~üEm»€óÖIvGk/wT6Æ™k3Ÿ -¶É“¸üG1%p sî}’ôkù óîÞ<’[—ÝÂè0ÅÉë$;ƒËÆh±Mž£gÖSüIHŸÉíi,¿ó_|´iÌìΉë$;ƒËÆh±Mž¤g?ƒ# Š®%°)—ãN´X6F‹mò$.¡Õª¼ó*h(¸QIDAT¶‰¡ƒèæ…µª¾\Ã.%ëÓcÑ¡RæÌu’A‹ec´Ø&â²@7×ÙQšrXÿïMTÔ«#H0ßß<ƒ1Ѻãógg®“ì Z,£Å6y¥¦ºêWöïý‰ƒÎë‰ãâΤ?j­ïži{ä7 !4D-„†H …Ð ´"BC$ÐBhˆZ ‘@ ¡!Rð]À^“Ë–5Ÿ³é;…åǰêý‰H”y7’‘ÔŇv{`©& ´ðp*õ9ŸñìÓ™˜½1aò\¦Å¢«/%go ¾Þ]|ÝÖ¥š=÷Væ…³qE&ËŸ÷ãÑ»&á¤LK …GS+·óÊÓ™äÇÏáÞÛ/'É÷dÒοð,^ØÑRNNZªIæÐƒ5±ÿ“Uì² cÞÂSÃ|¶-å䬥š$ÐÂsYMlû¶‚Ðô)¤‡vïw`GK99k©& ´ðXöòòkõ$¦&ÑýOìöÌRMhá±TkÍè0º?Ž–rrVð\h•úb?ì/Æâš7Â!]xF+L¹ÝÞ/-å䬱»‹¿rÛ)\½Œ¥RYòÌ vô*j)›^z‚ÿ$.áéѾî©ep¼ ŒìË~Å5Ó†îé+ÜH‰šn¥ø 㢞Xÿ"Oé§3iP>¶JòL º” t¹Ë9ZÊÉIºhµsÖ ÉÓIêÌ+4ä’U` yJbÇoØZ§ïU,? ßæcí^Çû<Ã3êC<ø«xž#8º®Ù3×=Ïm¾ žw‹WòáÖL^XÛ€êHdï4FNó=˾Ö3K5u-ЖLy83_@­øž÷ßZÃ÷y‡)­l@ Ndô¬›ùÍÅñæ¼,r, T>w3¿~NÁ{øïøûâñþ¼a–öPIøÕ$F/ƒCݾÅü;;5EåØMd®ZË·æêŒQ ›q3 /ëGëUµ>Ÿo>ý„õßš(8Z1 ¹òVn»ä>!H‰ç0D0|æ>Ó ¯­ cجE ›å„×nG—mË7a¶D065 •cû6ñÅO:.ÿŸÛÐDþWoñæ›ïÑ蟘¢r$+‡c‘¹íö)ÄéÀùË0s¼ Ž%œÑý{œc4¥´JÅ`(^ŠJýþüåo_ay%×-JÁ{ß*ž_µ‚­£ï!#\ÁV¶—…ÿú¥sÅÕ·07ø «—È1Õïœ^b¶ýëšÛZJÔxw¼]M ?§Û/:§ ¶S’e¦Ê/…þ½õ@3yY°'Ngâð4z)ä3†/wîàH…‚‘m>‚wÊÕ Oˆ§õF:µ¹‘†¦Ö«q:¼|½(3›©ôI!-A¡¹±–ŠCûØúÑ{|Y“Ê50ZsXõêZª‡-äÑ…é„(`óJ"p‰Æ&ì%¬{é5~ŸÍ½ºŒÞ^`+È¡ÆÁð~Áçt‡îèºf‘ƒ5EU5Ø ïú|Pœ3Î<ÐjÙY‡Ðõ»”d`+œSG¯¡É´^›Wkk©#˜Ð XsÉʃ¾×$q² óŠ»yø?eØÅ7Ûž»FS!¶c¹üí¦¯PôĹˆß.»Šqñz¬?måë²&þï7ãHÎ.þóî&ªûÌ`D¤[îÖåD2õá z{¨Ôȡħ©ñçzw–5±3´5S®Jï+RðS@­ÍÁ\ìMòìÞÇG;¥¹¨ I¥o¨‚-?›K4c“Ût7…˜ Yz¾P¼{ÑW—Ë›¹vâ§.báÅáXö®â©••¤ÏšÃø`§zh:RÄQ%†øè¶#¤Ž øþµ}Ýܯ07„2tÔPú&è!v—n~€/?ýŽ)M€¢Òd±¢‹½”;–\N¿üŒm:ªÚšZðöÅ»õÌa?BÎz¢ÎO>íœý\Òz]sϾƒX‡&cääuÍñmJÔ´·ýo¾è¤3LÎ@Ó÷ëùº\ôD§&Tº‹/·™)<\@öî¬ßšE­ÚÒ”°ˆ^èŠv°v[y9»Ù´ò6ö#9%öÜŸ?¿®Y¹þuÞÜð_ö~¿–½½¦SZ®k:Ú.<™Ðj=Ù¦”¤ñôóÔ r²âŸœJÌñ>c;l&§>‚)-£‚ï°Ë˜1ð%Öüë¯ló$mú­\<ü—¯k6@Ò8RN<~ª:z"ÃW¾À×Û1#ïÁsøßkyûóWx"Ó†Wp Écg3òøþaýšùÙ¯ðÁk³Í'‚Äð&ª ýHÓD‡–5Â1í–ÂQëøþå»ùGÍÕ<ý§‹ –N}Î’R8of8°ÜÌÇû ôëA€®†¼kX½Ý› KFK˜…ÇÐH UjËaÞ¼ƒ/Jª±è‰ê;„i‹gsùÀ.®%Ä9H#V9{FÎëé¢GÉåI!4D-„†œ6Ѓ«ÕzºMB¸”ÕjÅ`èüm~Zê»gÚvh'ÐÁ!¡ÖÌ#ÎMV«•#E‡ íôßh¥ïv¥íÐÎuhUU)+-¡ºªŠææsûƒç.ƒÁHpH‘Q(Jç®=j¥ïv¥íÐN …ç&ùQL ‘@ ¡!h!4D-„†H …Ðÿ;² WðV¦IEND®B`‚gnusim8085-1.4.1/doc/help/tab_stack.png0000644000175000017500000006250413327070671017377 0ustar carstencarsten‰PNG  IHDR„Z‰*ŒsBIT|dˆtEXtSoftwaregnome-screenshotï¿> IDATxœìwxUÛ‡ïÙ’Þ{HOH…!@¨Ò› ôæŠ Ä®XÐ Š],)‚ Ò{¯¡„é…ôžìÌ÷Ç&!e“Ý„Pç¾®%ìN9ÏùÍ3ç™SGÈÌH—‘‘‘‘ùÏ£¸ßÈÈÈÈÈ<ÈAFFFF‚ŒŒŒŒL *$ á>›Ò(§“€@n^ééäåæ J’(–ý•¤úïš©ïs wáš ‚€ P (÷×ÔÌkÌLÍ‘(ɃìsõK©oÈšVDÖÅp$IDQD¡TÞosxJuJNJ$'; [{\\›`lbª-…B„»RØ6´AKB%$Iû)ÈÏ###Äø8Ì-,qtr–}®žE@Ö´².†#ŠbI AÆ`rsrIK½EËÖmQÊNVm (/Z­ÆÂÒ W7N?‚¹¹%&&Æ÷ÍFݨ þ›"+’$‘•™N7m0u«J¥’&nde¦clìt¿ÍiTÈ÷°nd] G*m22T²}û™™ €¹¹9]:wúO5H@AA®n9ÚÖ­[IOOÀÒÒ’>}úü§ôª‚$aemCê­ƒ}NÆ0d=u#ëb8¥£Œ (ÜââãIOO§_¿~ôë×ÜÜ\bbbÿ[X’Ј…€V¾ê?ÑÑ7IMM-Ó+;;›ëׯ!I¢ÞcóGPhD\»ªo$IÖT².†SVCÐ#Ø™ÈHRSÓhÑ¢ñññ„††råÊn¥¦Òªe‹»oì€$Iˆ¥BY£;vŒäää*zEE]$))™víÚÝ#‹<” %¢æîŒÂú/#ë©YÑ$I[C¨I´Ø¸8’’’ñõõ%..ŽŒŒ 222ˆ‰‰Á××—ÔÔT¢££ï™Ñ÷I’E ‚V5Ÿ›7oO½|||HNNæÚµ«Õߨ?‚DQ#ߨõLéˆ.™ŠÈºŽÞ>„;w‘‘‘Ahh()))XXXpùòeüüüHIIÁÛÛ›cÇOpéòºwëÚ¨ÛÈ%@#Š‚î¦M›HKK« ×•+Wðõõ%%%///8ȹsçéß¿£ÖK‚ D#ŠÕúœLÝõÔ¬‹áH”Ÿ˜¦ƒäädzõêE^^’$IçN½ûöѬY3LLLèÒ¥ ;vì@ÅÆ=³‚NU5KLL¬ ×Ù³géÑ£;Û·ï $$¤‚^M1*Uù+ÝâàÂypÇ‹ý=j?彟‹‰fϾ=¤¥¥Õêt¶¶¶téÔw7ÚZÒ8Ÿ‚u#ëb8·ûtoKfÜj'\)J¾Hh4š†[˜Õ=ñ@·^¢vGzIºÏSïHy$F#Á<˜fÔKDÌææ™S\Q¬Ó=WÝ1{öíaèàá888Öê|É)I¬Y»š1#«½12Rg·üË5—¾ hi]íµ“Ë=ÝÜ™.ÙwñïU;ºômC#¯ÌKRÙ<Qç–––lÚ´‰°°0,--ñööfç®]4mÚ•JEVV;wîÄÒÒ…BûœxøÈQnݺ€½½=íÚ¶¹ù©Š”Oò¥ $šÒÌÝôŽ ÂÛ:I:Ëq++« zyyy±åßm[y½¬¬¬P(HHìÝ»äädéܹSm-#çÊV–.ÙÀ¡‹ñd©±tô è¡QLÙ Í%ÖÎþŒk~M¨‡ió_9M©ì¯n=j<ºŸKKKÃÁÁ‘´´[µ:Ÿ£ƒS­k 1™ÿüCTÏ.<\c@Эç;ÒEÊäèÚ%l¶|Žþj0¨Ç2N’ÄÒ>Ý·ó€‡ûsíúuN:MXXnnn89i'‘——GTTáá­ÑkHNNÁÁÁžääd À† E‘””[¤¤¤௿f!esðÇ·˜w0BjS¬ÜðkÖ–î}{æjà,WÍUþþön<ü)ÍÜï¼ ¼½îíC‡ áÊ•+=vŒV­ZéÔëâÅ‹´oßž¢¢"qrr"11±¢^‘¤¤$“’ F­V×lWææ~ø§»3|Âc¸[HdÆ^â²Â óòöÖgäÏiHùàãO‰ºx‰¥  [Ÿ‡Ù¹ecí2Ø>ë%?˼—;b@1 »¾gæÂhšMz›‰öu_í±²ÏªŒ±°sïe'<Ú“`Û»Û”jˆž…Gæ0é»Ët~ýcž ­|?hˆýûCÞY¥dôìéôs|PKÀÚ¡W~Qºé8£Œh9¥YÙïR~,‡7þÍ¿#¹š”dbGPz<:®¾–U ä»íõXÆI”4 5Ô«|¼½IOKçÀá設Ê'%%qöìYüüüHNNÆÔÔŒS§O#Iöööh4@[Cغm;‚ `ggÇÁC‡h¡'(hÈÍÌFÓt0ÓF5Ǩ8´„+œÜµž/ßÙM·ÉÓx²í=_ªµT§šœÌ×Ï—[©©Ç®oLà‘àkÝŽ®eÖJHµh èiÿÊB^ï¤&nË|ºâ4IY…(-ÝhÞkG…aW*®˜NäºE,Ý|œkiŘÚ7åá¦3Ÿ gs/ðûŒØnó8¾Ñ›&zb~M>WJä¹óØÛÚ’H“&®LšúM›òÚË/°vÝz–,[Ž¥¥%+–.Ñ{¾ŠhHÞÿ3Ÿ.¼ŽÿSoñ샒ói}vÓF·ÄD“GFB»ÿ^Î'§âxmæ´0»{…¬~=%2SÓ)Ö¤°kÅfz‡ Æ£\Y$¥dåú+J®¤g‰àØ8ú ñ3ÝH¤;D”qK^ц)û,¿òÿ¤¸Ð¡Ïžõ¶E‘é]›ùõƒ£DMžÎ„v¶•‚Âýõ‹Ú èëC(%,¬NNŽlÞò/Ý»k;IOžçÛ ÷OÚåpæ¯EüöÕï8|ö4¡¨œãBú <첸|1uà`|”¯#5…± Fh(,ÔF5û”Ëé%ŸóÃ~Sº ŸÌîJR£vó×I@Ы¹DvF6‚Ç0Æ6ÙÄ÷ë¶>¥¶vð׎lÂÆŽÃrÅÏÜÊ,@[4Ô¤Ç3´2Î!æBž£xáYoT9Wزd% —{ÓcÄh¦Œ0&ãä­œÇÿϨ ¹¼êsfoè8ê9ƸKDïYÍŠÙ³)|÷ ÷Uƒ”ÉÕã'HrÊäñ˜‹9(\pWÖ¬Ýt©æ¸[Ç8tÉŒVB0(<Ë®ý·°éø4}Ê‚A *gºéʆ÷·°ëD6m»èh:ªDE¿¨«&ÖÄ£«ŒcÖ2wÑIì†NâݶˆñäÚW®½TÕªV‹Û :„ÒýKGÓ899"Š"ÅÅÅDGG£V«ñññ!55oooÒÒÒ¸~ý:...ˆ¢ˆ“SíFTÒÙ/s‘Óq‰ˆØcæÑ‚ðÒ‘†ÞæDœÎ®Ëqˆíš–`F6.x¸;WÃã*SÛ .£G*;®T¯R j£—‹‹‹ž”Ô¸u}ŽYíGpñðn¶o[ËgV0ü^¤íGÐI‰GV³díA.Æ¥Q ¶@'¢ ,@{…kö´ q©F‰[Û~dNƒ>~š66†W}õiyèèQ>~ÿ0tÔ˜²eŒßû`&}zõB¡PðÜ„g˜0e*–7i.®àÓy¸Œø R0)û(·§:~:CÛiojïñ)œzu ‡¢ÆÓ²yAÊEœ8“I¯®ÖEW‰º&à?*€²^-QCQQBQ.éqصr+ÑFô 4„ýN‘}œ-{Sñ>‹gú:iý5Èœ›»Ou‡zBYÙù¨,l íÿ0»Ö²)²/϶T½}glºñ^„+ÇÖÃõŒ,DÌôèѪdךû¢$û„#œ\ïF›mi¡ྯˆŠJB l‚sœ ÿÆã9ø#žéÓèB~ÌtÖo8ÁÃSÛa€€©GsZ5ó-ó=ÉØýk­‹Î£H9zˆËæa<¬-üÅÔxâóxøz¡«ñVéá‹·º˜ë±ÉˆXV½_jð )çP5¡Xû§r§ÉÊ$K2'4(„¦ÞÆ€·þ\ÚdT™ÒµÿwîÚMJJ NNN£ÑhpppàÔ©S8::Ú¦’–-[’’’‚F£ÁÒÒ’?׬ÅÁÁn]ª]Âe–—þ§˜¤ckY¶þ0—âÒ)T›£ÊQúé9AÝŽ3´É¨2BÉû¶þ»•¤ädœ+èuúôiœJúN:E‹-*èµ|ù œéÕ«WÍé9Øy(ÐíG¼»ügÖ‡Æ(÷ò™¸ý_ñæß|ùÕ?(z>ÉóOúb-Äó9R6±¸äùJWDZ¤Í™eP|cv³ñ§?h9}4Áæ†}>÷ËsÊþ¿có?Ý¿§Â>£G gôˆá¨ -ØÒÒþ,û7.d­ïT†7»=rGL¸ÉÍ‚êBΙBNvŽö’ëÑ£j’ lìl ?‹ÌB´• … vÖp!G»¿…v´ v¾Ýg£t!8ЖÕ'¯¯i‡_5™jÔ¿Žºè<(‰#‡®b6˜ #ý»W:Xç¯5ù…x¹îšT‡Ò¿4;ÊÒOßäjÇôîÕ6Þ:UyË%=Óô‘””DŸ>}ípAsss’’’pp°§]Û¶=H¯’ŒR¥D ¸dþ‚ •ÄrÃ?ë<ÐM°Ð«Õ|×>51ñ(¯YÒzX¥ñ@aë‚‹©Èùk7(êÚŒÊqBs›EJ\\tN¨É/4Ü…éHjú¾þ9­"÷²åŸ˜÷î6˜Æ[úT±½ŒÚ.]Q˪òJ¥²ì{éoÚ4$í›xTª²ÉZ¥ÇÖšâDöüñ/Ñf-™ØÎŽâsW‰–xzh— Z‚c#ÈÍÉC„²­è¦žãªAªö‹aÔ¨WéˆÖšôª&Í¢K3oG>Í|q¶6BÊŠåØ?[‰3  ¿· W|½ÔlÜ·–Mþ}ð”’É´jCDO\¥غj7v=±R¦’œs;‚E[öXÃÌU_ð½4Œ‡ümQæ&SàÔž¶å&+»0ùåf|ðß­ñcưœ®4T³ÙÎÖŽÔÔTlmmË~Ë_Øñò6PêhРhÚ“¼AK±³µ«.ÕŠ¨]è¿S¸zãe´™³gb)ö÷¬ÕÛ«ôº£”Gn.# ×nôm±v'ã7úi´-#ƘA^ÉÓ¼RŸu¸…µyÜÂ…óIˆM]µ…¢&óQiyyk&ª=¯P½þÕe»ÖŠ$9Ì «ÖŒ ,×8dÜŒ.vØ÷[{ð°{¹mš$ö¬ÙI‚yCÃ,tÖVjò‹;Ò¤š2N»ÍçÐ^Œ íLÄÒ÷˜¹e'ö¡y5ŽU¶tEu“7bccÙ¹k7Í›7£eÉ“}däY®]¿N§Ž°··gÓ¦M899‚(ŠØÚÚræÌö8€$I$%%ŠB¡@­Vsüøq’’’ʆcÖ„”Ë…óçQç‘‘p…»wp0ÖŠn“Ÿ £€ÔÄi Û×îö½;VÊTRr+(·§šMûÿf‹_O‚ÒMêu’Oas¬'ÅþAçNõ_Ä2C¬i5îUžÉšÉÜ9?àüÞkôiNÿn똵þ;æ(Ñ5ÀUA*1ÙNtíì©Ó£«3ÿÛø+I¹nôyÖÕàáª*=~'˜‡3°ýý ß1”Áö¨ó/_ ÿÜz'`Iù䀱‰‘ö–´<’KÙ„ws)Ƀ cc%bN.ùXZêÑÃÀ|—G0g`oWfþõ=¿˜ £³;DïYÅ_1nôVÒV^µÔ¿ÖÓĺ‰uøh*t˜Ð|Ä“ô¾ô Ëf~À¾= ÷±E‘Í©›ÙyÕ˜ö“#ªöCHïH“jʸvV—Ø~^ÂÃÓãâTÎÅæ€¹%5=÷Þž˜VMÝà >>>\¾|™3g"Q(X[[ãîîΡÃGè߯/¢(²úÏ5äççcdd„R©$$$„[·n!BÙú=‚ ——GZZ£G,›Õ¬%¦–(ήãóÖ¡P™béà†_ó¼2¹ÜÄ4ïLŸÆ¢¿—0{sIf튟sI7ª`AÄè'¸0o%«¾9ŠÆÔ™–Ãýˆè¥ç¸j+ý:=öîÝ‹··7/^äÔ©S( lllpwwgÿþ<2p ¢(²båÊ z—Íì® Wjj*cÿïÿ´zé¼N¦ÞÝÿZ7Æë4ZûGåÒ™g?è̳•¶y÷˜Èû=&V{ {Zy‘–C*ï`ÏðYK^¶¯·ïóÛÀJÇWCu>çîæÁè‘cªü^peW¿‹{Ÿá˜8¹’›pƒØÿÂî©¥ ÷«E (Ò‘ŽÏ<Çõ³X6oÓ%ä±i¼b¹œÕ»–ðõŸy`j‡gÄhÚu¦¤TâÕ£/Íþù•³~Ó±‰á³”úü#š{ƒi+øcë¾Z›ƒ¨¶ÀÎ%¶n5/9¢¿¡€ü02¾]ËR{÷`ü3w361†”\òKL У¶Ñtøë¼j´”•ÿȬL°ölÅ ×þGü i°¯þµm1ãs(Ɔ6cý«t –-÷Þ üׯc˾?˜ûW¢±-îíÿÎ ºû[Õq.ËhRM×Ú3š#ë7ñ{REJs}Z3vâÃxÕÐ+I df¤Ké©©ØØU­n_¸Źóçiß¾=ÉÉÉãååÅ‘#Gðõõ!0 €˜˜XöíßOÛ¶m166F©T¢R©(,,ÔfÕÈQ)**¢  €#GŽÐ©cGÜÝÝê$Ýý$=5•„ÄxB[´Ò9záܹóœ=wŽˆˆˆ z=z??_‚ƒ‚ˆŽŽfÏÞ}´iÓÆ ½Ž=J—Îððh‹¶ ‚À™Ó'qqvÕés5‘µ‹Ä_ŸÀµ]gâïÅùéE˜v½K–Ö@ÑE–¼õ5ÉC>á¥NÕ/'q/I/¥V[M$µÐ¿vºˆÜüs:ïîá­Ùc úo-ÕFzj*e+ûë"((üü|ILL 33ƒ¸¸8rrr ´ÍJ¶¶¶¨ÕjrssÉÈÈ ??¿l$R~~>iiiäææ¢V«±µµ%66ö^å±^)« Hº?ÁÁÁäåå•è•HVf&qqqdgg„$AtL,666ëeccCtLlµi6ÄOy-kƒY`W\žœO‰c¸<9ÿƒB’o\åæõsìX°€Ý¦}ñ`¨¶ÒÚˆ¨›þµÒEÍ¡ÃñصiGÓÿX0ú@Ûù©ÑhP*Uˆ¢ˆ‘‘Q…æžÖ­ÃØ´y3‘‘‘eï¶°°(Mtúôi²³³°±±¡¸¸ˆÖ­ïÃS]=PQ'ÝnVª—J¥BSA/íþmÂ[³aã?DFF’‘‘$IXZZªÕëÌ™Ódee#ÖÖÖÓ&¼uµé5<´·p]3 î÷GçëÓ ÃÐı÷—ù3Z…SPW&¾ø>P¡Ñè·«£þµÑE}˜Ã v´yʯVú…r}º ›‹—.all„··7‰‰‰áææFLL 7nÞÄËÓµZM¿¾}9zôÍ›5ÃÍ­ .*[›'))‰'Ç?All111´i®w±¶•R$t·M^¼xccã*zÅÆÄpýú ¼¼¼P©Ô<Ü¿?GŽ!44w77~?Ÿ­^‰‰I<ýÔSÄÄÆMÛ¶mQ©Ôgyã²Q§ ,CJo†|ø UºRœžµ¥Žú×F¥÷>_8¢–)4Ê&¦UWÚDEEáááÉñãÇÉÊÊB¡PpãÆ <==¹ví:^žÚ5Ôj5:´/;ÎÑÑ‘mÛ¶àììŒB¡ÀÃÃwé4ôô*Ÿ¿pN?Nf‰^7oÞÀÃÓ“«×®âåUª—ŠŽ%óœœnëåââŒB!àéáŽg™^éf/_{ÍhlÈzêFÖÅpôÍCèÒ¥ ¤‰›}zkgÉFE]$&&†ÖaÕ¯Gôè#«ÝÖ‘ªù)=Ô…âæÖ„>}µÐ.\ˆ"&&†ððÖÕêüè£V›Nc£ü:J2õ‡¬§nd] §¬¡º(jcmM¿~}+ü@``ÀݶíÁD*÷t«C3kkú—êU²=(0€ R½ä§•ŠÊÔ²žº‘u1Iºç¯‘‘‘‘y@QA—‘ø¢}G²‚Ðø;ñî‚€Tiy™;GÖS7².†#Š¢vbÚý6DFFFFæþS6ì49)‘ŒôtŠ‹õ--####ÓXP©ÔXÛØàè䬭!$%&PŸk7T tŽ€ŒŒŒŒLí).*">.cm§rFz.r0‘‘‘ùÏ¡R«qiâFFzº6 7ØÙÃ22222w†Z­¦¸¸Hv*####£E¨¢$Ò IDAT222225/êw)ê<¢<(UFFF¦Ñ üƒtn«1 ¤ÞJ¡W¿Æ¹.ÑÝ"=õ6vö÷ÛŒÿI÷Æ”™­›Öº‚ÜdTÏè~ï±Ìݦ1éÞ˜ò"Ó°B=#¯hqhLº7¦¼È4,ô¾H^³Çp„’5ŽdÍî-I÷Æ”™A¨ù¥£r ¡¾‘oäûCcÒ½1åE¦A!„zFnÿ½?4&ÝS^dr@¨gäªþý¡1éÞ˜ò"Ó°hXAJáÀüùbÃMØUÎÄÍ,‘ua +Ö'¹!˜k÷Bw)™‹>燭±w×ÿM^ò¹üÏR6^Ìnæ¼?—“Ž=ùÜ8<,D2b/qIa†Yùãt¿¾nT:g§-·]ï¾õ„ h;«Í¯¤!;# MàHfŒǤ(—ô¸slûsïaú 3¿ÛOS·îåœI8¯‡š"Ié:l:Ãæ?~búé$>ülAÆwÙ¤;¤fÝ-ïÚóCØ}nÁ¡Få¶qaÏ’mÚÓµ…©~?­ÿÕ‘Æ’1z;ÿœ±¤Û‡XR©ïbƸVå’w‘c[ÿäã—·ÑëåLjogªàIÿ7gñ°$ݽ{¾²nÆ!<ÜÇ‹—·láü ªAúACϨSCjºÑ܈ä\¶Ýß|ŽA!%O¶áíé^a¯b.,˜ÈàFt|} Ó:«‰Ûüý~’ĬB”Vî„ö~‚çÆ„c_ê bgÖ.`ñ?G¹–¦Áľ)_žÁ¨€Š6H¹çX2ý¶Ù>ÉGoõÅ­¶¹S9µz>‹7ãz:Øz·¡ßãO1¤…ímǬΖ j– 7 ú)¬Ü ÔÖZš‡ÑÖ»˜©oþÃÖSã ëDZeóX¹ï73)TÛÑ~Âg¼ÖÝ¡>ì•nqhßLÛL£¹ e^Ù¦0ÇlžûpÛ/Œ!¨¥ 4I]¹•»Îpã–ˆuÓ†<ý ýššiŸ9¤tή[Ä’G¸œœ‹`f‡‹G}žy•~÷ æSƒîf­ºÒÎj/‡öœåÉÐ0ÊŠÑÂóì=x ûŽ]if ê÷ÍòŸfî³pmÐ÷|:Ø×ñöókñ~ï'&† [£Ì‹H‘CD۴噦ï…¥AÁÁZ?kN—>=iñù4¾›ó!oÒÍVПNµåC+^y]­?æ»ÇýQJ·ØÿË7üqô ©Y`†s³^<ÒAÅÙí{9}í…fn´~tS†„”4ŸÖR74‰hçò9|ePÈÅß?`æz‡…ñž7¶/eñÌ)øèSó7Cm)G]FˆÆ&¡¡°P)“ˇèú/O ÆB“ƒ¢‰ B=Ù+%d_”m7¯±Mea H@>çÀg»úÌÛLtÈæäsùåãù8}ÿ<áf…\Zöï¯Í§í¨I¼hÉ{XðÝ.¢’Å{jÔÝ$”îìÙ±o/gž #¼$ã…g÷r0½ =º¡u_AoÖ}º5Ö¼äs9*…ߣxë¹/%…]ÿoë_XοûoÑu€çõùZM>^>cR6ÑgÏ‘îóo¼à‡*ë"~ýŸùÒwì¼:Ö„ô£ËùiÉ7¬šÃÓ!ª:é¦pñÇßb9—.¥":ÖAÛ‡:Á¥ÏO¾É¿ÎbÊa_ÚtëIß~ÝiébRA#›&xzºTøÍÌ+Œv%ÿ÷óǽ/³íb bÇ@”9‡Y»á&ž#¿á…An«¥Ã!ÄdöÍù íxuæ‚Lk ¤ììÙƒ÷Èo˜ò°6æÁMÈ»ñkÖeðë1«É–êÎkH<‹),,D(Î%5&’m‹7rÃ8„~!%í¾‚3¯„‡úSZ”Ö½I‡öqѼÛëj’ sI=ËÖ%ÛH°jÇãA*¤ìýüµùa“>aTGKÀwRÇ'.gßù‰„e톸 ý‚W†y£¤Œxì»îÙÍQ³îF÷è†Û?›Ùu2—ðöf@>§ö&Ëûºû–ª,Ô웵µ)ûPͺ…ë®e6ø¼ˆ©$¥ˆX‡8`Hk£ÂÅ ‘1ñh²SkN'È€ò¡<‚€©[-šù£$‡øýýÓƒˆ>h¥áìÎ8w.1ÄE]tS8àä'Sq¬µ¶wÐâe„[÷çù²Óh¢îdë–?ùdÊ F½Á´!XT{\ ‡VòÛŸû¹›J¡ÚUže`š˜Ë\Íw ¢™K5°HÊ–ïø¶À‘¡ŸM ­MÝŠ1ö2× *¥£t¥Y3{–½L¬¦#¾zm©…‡¿a܈o´_–žmóæ$ú8 ·ºR¡P/öJ‰Üw˶#KšÊÙtð F ú¢Ä&%¶}˜ò¿'ˆ°£®q#?¤oŸdÄwe¡)V`”šKqÌ%®å;ж¥Ç{3(}ºÓÓ-+v!3¢+–9GÙy8àǺàV&V;Y[ÄØšu“°®SÀ|àó"PP(ad\‹Î'ɰtŠërO–ÝK lííò3È(@[ú)m°³³9¥£!ë ›`„±1<¸£ åF•`dOàCà ì:«ÞçÍ¥sY×öKóJªoG1ˆ7Öòùìõ(ú<ÃKšbC›¾™Í¡Òý¤ÒyšºF?H€€UH'ü¢wñ÷Ëiõþc„èìˆÕ?Š¢j:å{¢ôÙ¢©Æ}µ¿«š?Æûã[cª2ÁÂÞ'k„²‘%ÕÛ}§öŠñØwÅ’vcB0ª¨CÇñÑÓá\bõ친2ó&ØÓ¡´÷L°£ë ÿcxÓòE¾[ „›4(P(+Û_½-õMͺ ºömÉŠyÛØ«'·sœp¦tqÐæ|³rž…4š"$¤J…»ºUë— ~4±P”¥¥põÆSÂÙÈx4:Ó0òìËk~¸) ±EGz¥ÃjØGaáJÓ¦MñóvÇÙÒAÔqL%»ïÜ^‘øû¸fAÇ £*i æNxy{ãØ‹)¯<ŠmäB¾ýëÅ%×ÄCε8ç&n¸•}\±7U pö ‰"… R¨× ö¡;ø¢»$`Ñ—¦çØüïA¶n:ƒyç¾´µ öÍÒÏíQ¡VØZK$Å$P¨ãÚéÓ­ÑæE°ÃÉAAFJJÕsUö‡¢v,ý‡æáôîhRŸ¯rOVN=6”Û§ÖºI€&…ä[ààì€ânûz}Ü+5 Øi5¿E­å‡mù†úábmŒ˜ͱõ[ˆ5b ¯ IÑ?o5ïù“ ýð’’ɰnG7/\¥ l^±ÛΞX+SIÌ•n§eÁ£½W1cå,¾’FÒ=ÐeN"ùΈð¼m•àôÏ¿Çôéóùjµ3Gúa¤ÃN1ã&§O*·MÀÚ³Þ¶m<Àé«f3Çä1ºyJÜØñ;«nzðèÄ6˜ê³Å[wuX’ Y‰Fï3`™eûXÜ¡½žÉìßw›ˆñ”ÆÝ6 ˜?ÆÔ!§y{å<Ö·ýAîíx´·+ï¯ùœ/#è숺 …›Y.ô舙uý;/ãÓ•_ò‹É(:ºCÂѽ\Ó@¨ù¬ ÒÝ,Œ½\ycí÷ÄiÜ:µFåìSéñMIa‰µ¥Dò™}s%¼‰m"ÊK[7ü]J{Li6þ}Þ±ZÈï›çòéï(­ÜéðdKÚyV´Â¸éH^sšW—þÈÚ¶Ÿ2Ò§jvŠÏ¯â£ÿ­*÷‹š6/,à<ö.ïÏgÉŸ_ñ~Øx‡3ü§Ú´4|Ô`‹·±Îöß»·ñÙÛF±Ÿý7mi÷tÕ ˜-‡š¦CŸ¡ÿ¾wYµhßîAó'ßçm«E,ßö ³Vä™Þ§C·@ÌKÚLx—ÉÆ X·|6›³põwD%(ïQ¯²aº+ñé7п$ªÕ@úxTìñPúêñMÁ‰®£qøÇ-,ü7‚°'ñò/dÎcÙ_±'[Dma‡s@ |m€Yͺ5Ú¼(pmÓ÷å;8|ùq‚U€3KK§V1óÝU(Ô¦X9zÐro½Ú¶®Æ%©¾t /êBíuó'ñÐ!nضå)ßµÍp„ÌŒtéüÙ37 ­²ñÐþ=tïÝ¿úƒuÍr¨ôtSqŸÒ 7‚Ž •&ãBÅ·ä¼Úó•Û·t?]OU•Ï¡ËÆjÒ©ñ<Õ<Á)•J¢¯_¥‰‡—®TË«†ÉkèÈcmm©²†kË_åõ¡|0ç)‚+ÇÍjlªVëÛ'®öš‰1ðÚËÛhñá÷ÝÊÑhò"ÝbËSùÝây¾{¥#–‚îsW9¿¡éX>TÕG›çòiV·O%+uë––__ú€ó=góY˜©¬T*Ùºi=»TÙvþì™;edØ“Œî}j.KÔYèV9_MÕkCªÞõµOé®õp®u­‹½šì?ƒ}ÄDüu]ñ;ÖZÃ͉Ýpµ7G‘Í¡?ÿ&Ú©'|îÑrµÙ·FçÓç›:¶ë»&µðm µØ÷AÍ‹`O·Çú³aúRVD¶âéP3„ÚèPG;*ëQUŸªy6dÝÛ‹¸þ÷"þÕ<ÄýÝø``w>ÊH¦5®etŸÐ\ßÇ8ÚOnŠênØ&åu¿öÜ %#ÑįÐÞ¼:u$F÷F‹Q÷ºÒXòbä?‚ç—¸h¤¡1ä§*Å(Z0rò£„™CcÈ£þ€ÐðóxO‘îÕÂIµ@é;–ïWÑ€šY°¤Íøh;ž’ÅxJ:áî¡¢îu¥ñäÅÿ Ý-¿»ß˜àÙm,^(øRL Ò3$¤»ý‰Ò*üýÊÿ©{idyiD¹©J#Ë_‡ÊèF¢q9HC¡1éÞ˜ò"Ó°h ý òëïI÷Æ”™†…Þ‚J%·*ÕI’5»4&ÝS^dz½îÊÅ ÷ÂŽF…¬Ùý¡1éÞ˜ò"ÓpÐü‚î…22222÷€kW/W»MîC‘‘‘‘ä€ ####S‚ddddd9 ÈÈÈÈÈ”P§€°mÛ6êÛ™Ú ¦p|ÕO,;˜ªóU²õ›V"»çÎ`ö†è»ŸVcAÊàôÚ¹,Ø'k&Ó`¨S@ˆgêÔ©rP0)'е?Ljþ=èúPwžZt¢Ë‹™ôÈ(>?S·Y©b<ûV®`Ç•ìú6·*Röîæt|ža¶J¹ÄGàèµJy+Žä§'2öûÜK¤[_÷[£2äYÇ2 †:Ï~IHH`êÔ©|÷Ýw¸¸¸è?@JeÝkÃùüpå—U«‰˜ö'Ÿùû޶ ì˜9žO¶Ý¢@P™aãâMpxWLG“ºfõ)æüoðí /ž}ç+ZÚ)1vrGYà€»§'ΖÊ:½hý¦ø¿¿û—G-¦µùíü)ÌqôðÄÃÉâ·UjHÜþ /ÎÜŽí„ÅÌ톂"â,ç—Å8t)‰g‚:dò”Á[T¼"yWÖòásÈ{|_²«t½4¤_ØÊªU›Øwꉎ1÷ûǨ‡wµè¤N¶(@L;Á²oæ°úÀU2”ŽuÉ”)C ±2,¯RÎ%6ÌÃï;ÎoŠsH7›úýÍŸÿþ‡¹£éµ €ºå“̚ІÛ/ T`én‰@ÆoÏNÏ@Óü fOh‹qQ)Ñç8¸ñwÞyj#Þû‚Wº8ÞûN1S§pîö#:7/'x¦Ï©þåC…CfþÀ{š¨Dúáïxã›ã–Çjî ~Ÿ³™ìN£xuœ Òõ­,˜ÿ5Ó•î,}­-&€˜u…+ç3å>¢ó´®rî.¯~—·~K¡Ù€Gxüõ'quvÇYõÝNtg¶DóçÿÞbQv/^ž5 ߢHV~ý=o|lÊüÆI¡çüR&û¾~ƒ¯Î¶bò{?ÐÊ"‰=ó¿äËiO£ƒyýæUæþqÇóãk+š·h¡}py¤úÚîIhéöðôø0á3&ó鬯i2“>ö÷úy¦‚‘˜åÏÑ}9€ŠàI‹ø¡ÇA^ü¿¥xÏZÅëáéìúîc¼J\Rù˜âèß‘‘S_fx3 íXa4Ûþ–›O›kŒkHSŒ²$^‡ H¹\Zÿ_/ÙÅùÄ|Ô6îtšøÓû»h¤˜ÂÑ¥ßóÓ_¹œ öM;0hÒó<ÖÚ^w-:Î#_ãò¨Ò§mãW2uìrü>_Á+¡"猦ë#ºÎØÀÌîq,|æYþøžß&£4$m1Y¿65 ‰YÇGŸž ìÍi˜Îy‡“¥ÌÚñâ‚…¨Ô%·@‡0T÷󿳑ĊmñSˆÄmü–92ìýW¹<ókR+;ÿô/¼ÿ»’'~˜Ç@7]WB"iËLþïï$’òTØ×ÂîŠÜ™-âõmlŒ4¥÷§SéßÊðçÕçÎ2ê½ul‹ëÇwj>ñ%É$è± i犂@¼'F±câNÎDkèÔð_)£¥^L©UP$4 𒝂  P(êo{eT®ôyf(«ž\ÀúÉôæt†V ¸œÁÇ#|P `bïŠ"·üö,®:EšÏ³¼÷Z Fy±ìÿ}sÞƒç’iD˜æpø»×™ù¯9}Ÿ}—½U$ŸÙÈâsÄk+ùä«8<9ïÚ; ¥Þ$Û©´°/àÜ/¯óæj^¦3É®mú…Ÿ¦½AÁ·?òt°‘ž³W‡ÿ1³x§Ÿ ,œuìcHÚz´©îÅÄEWYþñ|²‡Ìfr[ +m. b&·R‹1qsÇAPà>â+VŽR (:À'•Ï-¥³kÙßÄ+ÝY?m$?Þ*ÆÊ·C&MaD¨uYoâÕ§F´ÆD,ýÁ0»«pg¶ˆ¹Ùä`Ž•åíüšøàÁ^®ÜЀ»ºæó+qsØ~ø qC†à®I>wž$ëšyÈÁ 1qÏWÐ*Üû!ý»}Xö]é5޹‹&¤¨ŸíºP¸ào!rèf "÷' ¨mšàãëKéí#æVÝÇÌ«áÁ(iM˜c¾n·õ®ÔŒbxÚÕkѪ:.æúªÙ¬`_öÇH¨im "¢7|É¢‹<>§Ö¥¥¹BQ½¯ŸçØ™œÚôaÌà–¸™frfå×|?í#Ì|Ê@G­ÝVéÙA[jiË¡I›õØ] w`˯PBÌV³ãÏíô¹'ž&…ÜŠK&_ÒPT,é?¿ÂÁ¯LæÔÛßóì“è*r|.CߎrsQ£¢^‚‹‹‹ÁMFê°gùjr»²>ÁØ/%eM>wº½ZØP…‹;®B™šè+Ü(v¢Ksç:3Uè þ/|7s^~œ¨^2xè@ò·A hnFq¹À™.­ÊÜJwZµpdÁÁ ÜÔt#¸þ²UƒÒÖѶR^›ê“ÿeÞ²lþd¾j(«RV¡€ëÈësâèòîWŒò5¨)û·røt~„®­´ ˜M_~Šcû>bËÞÖÑQ¢pqÇEÝuA¯-ú0ù¼ÿÙ'Œí?017¥P´¦¥!%’“t“D/=vÄ%n'ó¯²ûŸ£<Ú¹’Ðh¸ã€P›` X¸Tµ ž¶ëBŒ>OTŽwφó"lA¥B‰„(¡}-% ýRÔ¾ ûìw"ŽnbÍŠ•|òÌrV=3›/ÇQ§{YP*@S\\Ã>u3Õ äËk£‰ŒC[9”~ƒCSû³²äWQSŒ4o\þ€µÓ;£¦ˆèõ3xeN<]Þû’;VÓg¢Ëµ • ‘™ˆ©ö8Gœ­ :=I‡²‚R©Çß';LæûÕO‘ž”J¾‘5›_ãÉEö4÷ÕïRö^~˜µ ‡ Kxu  3¼ï<&OýšŸ»tàÝεjÿ’y€¹£ò±¶Áà¾P˦_ÖpÕ¼»94˜€P¥g ~F‰;zƒÊƒn F0Ží¦ÎžÏ#m8ÿç"‹nŸûÔÉr¨41œ<“ŒqÓ@<Ë•RiI¦°ÁÎnÆR¨3-#LŒ!;«æ9µI»–™Åºû4.þ h?¿¾ÇW5~#gñäpT@yç»›DLÿ‚;ÖÒ7L½ðu•¸r業bú5®¥©hâ~›% µEa‚KìówóóÊ(ú ¦ƒ¥þÈ-%]åZ¶%ž6eç2õoA€y‰ñ™òÄ»FDkj0Ò¯sòÄ Œ‹rI9ÇÖ±íº-ß{‰^ö 1€`ٙdžyóâ’éÌàIméŒ:ï Ñy†=jбûù너¯Ÿ3&ʼnœ¸žVÖX)@°ìĘ¡^¼¸xŸ›>M‰«›~aÉ5oF¾ÜQÛ†/Xcc 'vp8ÆöîžtìâÍÂ¥sù¼i}›ZBüU2JÍQzàgĪ­KX2?)‘t›Nô©œ/Ò®# s'<ËŸ@“‡µJÀض ¦b"›¬!¥ÅÓôwNåÊ¥’q5‚v^Øëê/2~„°zÞ\¾\cÁèbŽ-XÄI›^|ÜÉ [w`}-Ñk‹DNÂnÄ%põô.Ö­ÞJœç|21Cžína„9ÿÆæy?8¡7MM³8¿~>»r½Ùê> å–¹kÔ) ¸ºº>€Á@‰¹µ5Š£‹™öâbj3l\|nó|üÞýœ˜Vòôlf[Ïã—5ßòÎÂ,D#+Ý[ñ—þ!ŒÅiWصl%?ÄfR¨²¤I`Gžs M•&4{æ3>1™ÃÏK?äÕ4°kÚž±ŸNåÿ‚KJE… ½ÇbßìuÌY×™¶“›Óô±¼ñóûmY"F–ö¸†´&ÀN ‚5Ý&½Â©~bþ»»)6s'â™`º‡T¶Ì€´ïš«œ¿X@VÖ¦,÷»Ò›qó2!P_õD׈÷ù(ÿæ.~›Ié!½y}ÖÚ[õ>áŽl¡ˆ?¿ÀŒ&4ñ %âé/ùh@ކu—€qKžýôs~ã‡7V‘^d„wCgLeœ¿ÜИ23Ò¥ógÏÜ,´ÊÆCû÷ЫßÀû`–ŒŒŒŒÌÝ`ë¦õDtìRå÷ógÏȵ=-ò›¼RÚz^6‹*Ë<(¬ðÙÞŒ0´}@FF濊‚ÕC¼ús 9ºÚ­%ÖMäË,##£¹¤h (­hâgu¿­‘‘iàÈ}22222€dddddJ‚ŒŒŒŒ ™ä€ ####ÈAFFFF¦„:„mÛ¶‘Pß¶ÈÔ1…ã«~bÙÁÔ»¿lŽ˜Èî¹3˜½!Z^Ù²6Hœ^;—;ãdÝdu ñññL:U "åD±öãçÑ¿]êÎS‹®Qty1“Åçj^"ºZÄxö­\ÁŽ+ÙõmnU¤4.ìÝÍéø<Ãl•r‰<ÀÑk•òVÉOO dì÷'(¸;–>XH·8¾î¶Fe4´÷3ÉüG©óÄ´Z½G@JeÝkÃù¼Êú j"¦ýÉçDþ¾“ímÒN°ì›9¬>p• ¥#A]F2eÊPB¬îâÛZôRÌùß>àÛ^<ûÎW´´Sbì䎲ÀwOOœ-•wó]–!™† IDAT2÷‡â üþî;\µ˜Ö>æ·ó§0ÇÑÃ'‹{ÜV©!qû'¼8s;¶3g´ Šˆ?°œ_oàÐ¥$ Lœ ê<’ÉSl¡µX4ÀŸ¤¼ì^öl?Ê¥¸ ŠŒìðlMÇ&2®mýç$ïÊZ>|cy¯àËAv€³ŒÉã~àl•÷ÑuÆfö41™C ¾ä‡uG‰É³Ä»ãp^xi -m´y‘Rÿâ•á³9Zîö*{=­R¿V2ƒ;š©\ë ¨[>ɬ m¸½¸±KwK2îl»Íêÿ½Å¢ì^¼g3ÙFñê8¤ë[Y0ÿk¦+ÝYúZ[LÄhþÔãORöI~~ùM–F;ÑåÑq¼ÚÜÓÂT®G'3_U¯^̺ÂΕó™¿rÑù Z—Û¦pêôZ{û-CÄmþ‚Y;idsuÙ{¼»<—n“þLJhþþñgÞúМ_?„«¤Ü\ò”þŒùèMz;h-ŒìðP U=æSæþrÇKWÔ6(V4ÿÿöîÛZŽ[&  ÓµÞ@8Ï=OQKYp½B/U"d‘™iq`ÁSܸÀƒÈ~³™~Ó:>0:¯.bhË$ÖNÇìu»H8’ÌiÊQ9¼-÷ Ľíñ²öóÕ»S‰]±‰ƒéÞToT¯TEzd+ß—Oã¹kÙvø4žC¹áɉŒèT-÷›ºuŒç½É;Ÿ¬cÇ ªÅÝýþÁý-Î3¤dö^¿o;zœù¶ VâB<¸€z¯}Èà¦N¶Æô¤} ä}S½1Y=ÎÊÖoòþ“¹Ï»·uÔ}ßÂy`)¯LØHó†Q.f8›Î4”¿ž±³ðð´?QÍñØþ=/Æoå ÕŠº{ÜmOYüû*ì«KŸ©“y8â-2ºã]¹ÿc\ùr,,;‘ ‚ŠQû,>›Êôõ•éöÒsìû'ò7{Q72è¿N\ÂÌUÇiùôD:×0!{K>úà.SÚ­ ž@¯½<0ü?,ý­3OF:p¥¥’FUê7k@øÙ#¹é«zº5åªQ&Ï2*V(¸\8μ1Ï ÃÀ4ÍR·[éiœÂ¿?ɧ^jò-;÷:á’€AõΣ×½.&>AÕ1Óó·§²{ófNÖ}œQC"ðÊ8È÷Ì fd µæ£u¹Sü0m(cWúò÷ÇG2°ŽG·|Æœ_(R X»2~JÁŽ`Z›`\'ö‘VåÌÎ>“_ÞÊ ‹ :>1‚~ua÷ïñΰçÉœú}#½ÜLý|„÷z•á·UÁÀ¤BÕ‚¼)ʼÝôMaC~eïbÁ¸™¤uDÿVNfÕœ·ƒ°R8~"Ÿ¡¸ßž‚7ðéŠDoDˆÂGøö©Ý>Ý[ÌaâæM/ZíbÚ} {˜˜ÙqŒ/ìO]©ÄžϦª÷ðöß«æ†uB<¿œ,OÓ–yÛKùf×ÑØñ%ñ¿ÇЬ‚•r’“ÌcGIñ ÆßëÏqUX_ÉÕã¢?Ü.ëÛ1tê0&ïßyç)ÍÒµGÔnJ£ò‹YóÑWtt3µ|²8žp”Ó.'Ù9—ú’žgÅê†…å ½n¥Ÿû7åk_Kë–‘8hAóʉüï©/‰ÛžÃõuÿËG+ŽùØd†v ÉÝ‘_ãÇŽÏâØR„¹[I'IÂëš· q¸Ð ¯Í•ú-ó?ÞK½‡by¾[mL Å5¡¤ïîÃü¿§çè%ÊÒ»RMê†Õøã(ã¬[mŠ>ïó÷MëkÏ· ç°gÑ$>¤oô ÇËøµJ³Ùÿédfoࡘàr³=YÇö²ï”IXd} ÛÍÀ?¢7Gå]tõýV¸©½¦Y¤ë.VÂçÌ_“Cô¿ºQßž¼uò8IT$(0ß¼ƒö‡½ÇO⢠Y™&þâ™Þç^^³ü¨Õ•§ž}„6UÎíܾ’«G™BqÆWölþ8Sú_Ÿ÷!2¼ƒ¨í ï”PIÛ ¿húïÎKÇó`§±€o9²¬®©xåÓšÕB©n$“œâ¹'{sªݤj‰.Æz4½›Z~CÌ ‡ø­ã]t¹§3 ¯ˆpîû™U‰¾6ߎÛʵÍ*»îWö9;Yv‹õ'Ešw;œü}s>Öѕ̘ŸÆíã»æ y‡”çÈdϲ1 I zäz„å~‡v»=¹\¹›¤Q¼5bV ¥š›ÚKÎÉŽÏ—óK¥[˜Ò.àO§¤\nNPùFenôPp¦q`óJfM™ÎÈ^Ìx«7ay™Pp_ÉÕ£ÔPœ00*T§AÆç^#(u»Iå¨þ¼¹¸IGNpÚ+€ÌCxtvM®¼q_ ¸°\€a˜­îD<Ãè6ñZÿø¸ñ-`Ñc“˜Ü»!%êÃÀa‚3çœÛZòýMÉJ-Òìó÷M\$¯_Åú¤½¬Љ…ö«–3׌Þܹãe–Œh‡'Ùì_>šÁ1‰DšÌÀ¶ù¯™¾=™ž¡„øXlù}Ù´ ¨'Ö ‡ÃMí¥àÜÎWkP­ý 4η¯6ƒä$'NZpfgàX þyU9*Ú¢+CžŒgݨoøîÀ„Õ6¡Ð¾’«E©ÖiqÃà¢0}¨X-„ ÓßðîÂß¾µ Q~Wöq­£Võ¼óÓ{)hP´"1ÊÚª+&Íäõû*²í£OÙšýÇ´7oÊ÷ã)ç6m9ŠwýjåK ×™½˜Y‘Jáоƒd8//|¼!-µðßXgÞÅ\XnƬ9ï›ûßÿâŽêžÔ»ïU¦÷k‰¾ù]†OÛGë¯3°mpÁ†ómOÞ-éȱ•óX¶¯Äk¥LY{×óCb ­¢ÂÿôMÏ iL£Àt¶lØž·ýdüü#ñÎ7*xÇn¹þ¼æŠÔWrÅ+ñÂå.NÚÉÞ„Cìúy-K¯"¡ÖÃŒ²%E¾vw™2üÚq·: œ;‚Ñ<Ê]×TÅ3c û3Šö5Ó:ø=Ÿl´«WŸœÃlÜ“ þø›`øÝ@¯{j3pÎh^+×—[ëºØõÅ{ÌÝ]‡ûµÍ=‡oPÑm\ÃBiZ‹¶Ñu˜5ïm^«ŸÍßëûAâ.’Ï”ã¨Iƒz^,Z5—źPÏu˜¤Š7pS£³—«ó.!Ó· µòOÀ™A€‡w`5ƒËaX‡Yû1Çšõ¥SÕìüݾoÇð¢RÍÚy»Ùž _¢†›7aÚ?ðû½w^™rV* ¿o!!ä>úu,Å›‹”mñìs4¤Wƒ³Nåx6£Ë= øböëL }œŽAX6}%™ÍÿÁ°²vÞRk7 †¿É©ý?±dö2ô¥]¨ nûêb.§\H% „êÕ«_faÃÆwŸatœ!õšÒºïd^¹£9•¯ŠÓœÞ4ê;‰I3xïã© Ÿ•ŠååOåÐkù[m÷·/æœÜÉÚù ™~0…,?B"ÚòzQßàCãÇ&2Þ'†wçṓP©~œ0€"íOºY[éÁw“–³´­ú7¡þý£ùWòf¾?†Õ©^~AToÔ‚•`Сß`6¿ò3G~CNùPZ?Éή¬ó¾Pœ»Ø¶=“ÔÔž^—ïuGzϘÅ–Ûíɬ|#Ãߦéœy,_6ÕÇNáôô£rFDu˺ȫprpï¬àhjœóÃÂzáåÓ“yë½Q|‘áK¶2îÙ»1œ NîYÇ¢Eïs09¯€4Œz’‰Ot§®Èv×WWÞ)Y)˜‘’œäÚ¿…ÈÆMÏi\ÿýéx[çKP–ˆˆ\«¾XNë¶Ñç¼¾-~‹NŠˆH®‹þ;){®“ËÒíUÎyÌ€À?æ…ÖWŹ3¹€WÃÿo<÷n§ :im8Ñj÷´§¸8ü ©ç©«‘+œ®!ˆˆ @›ADD‚ˆˆØ""(DDÄV¢@X½z5‡*ëZþZ\Éü¼ämb¿N¸Èϼ‘‹JëY® % „ÄÄD  P( W:‰[ãøq÷Y‚vgÃÒÿ°ê·äB}Ñê‘ ãR­g‘(ñÓŠ5Ž2€ëK‡ÜËkç<_Á“ÖÃ>âµ;,–•¦½sE8ñ ƒïÄùþ$oÎKõ@Æœ_ù`äpvô˜C‹º¾rܘ+³ž‹ÂÉá¯Æ3pìW>1‡˜ž50É&1nïÍù”õ¿!Ó§* ÛÝGÿ§»YÁÀ:0Ÿþ½§Î@^´ý)coÊ䫱0~õq2-‡Wy*V«CdËöt¾· mkžóÈÑ2‘±s cž!ã¡™|w% p_ëÍ>`e}ìd¦/ý‘~Ôi{/Ï<Û‹k*à¦/ÜÍ_®¥ú¥r±Cð¼æQ^}âº|ãКø…úa\Êv°ÒÓÉp„Ó땸ÅýÛðªDM=÷/ÌEÒÓxþßÈÊ?¬YúF>ˆYAÚ =x®w5\{V;ó F8B™7¤>UneØôf¤ÿ1r +^çÕ5•¹¾¡NZR2Î&3é‰VxgŸâØþ_X÷Ù ïówŒzÁÑ•Ëì"•º“¯ÎdæÂïØÚ¤E¾6Óm­9ìš?Š‘ ÒéÐïEžÞϲ·ÞåŸc|ù¿×î¦úi7}áfþrõ(õ£+Š †Mš4kvR¶®´TÒ¨Jýf /Íè*eÎÉÖ˜ž´¼om7¸8òåXXv„#…·å¾ƒ¸·q ëëb'3{ÍVv'$“åDô³oóâmÁ˜9‡ˆ{:³Wn`çQ‹Àˆhîð w7ôÅÀbÿ'£øçÌÿ‘œ…G@-ZÜùÏõiCe³znö¦keí´qÌ^·‹„#Éœ¦•ó×ëJç÷åÓxcîZ¶>gÅPnxr"#:U»¤w.8,å• iþÂ0ÊÅ gÓ™†ò×30vžöG ª9Û¿çÅø­´ZQÏ+ˆº‘AyÓ±—0sÕqZ>=‘Î5Ì|Ûc-šžÙ[FqsçÛi9º?^}ƒfÆrk ºž‹´ ŸMeúúÊt{é9vŒ}ƒù›ÝÕš½‰%ýFp—© íÖO ‰×^þ–þÖ™'#Ýô…éfþrÕ(“g+\.œNgÞ˜ç†a`šf™´[)'Iñ0Éïz.Òp~&¡Ý§°°‡‰™ÇøÂþ´€Z­„x~9Yž¦-#8óÌÛòÍ®£±ãKâ9ŽYÅM_cþrE»è·Ëúv :ŒÉûwÞ9~³”íÈÊ4ñ¯Ïô>÷òšåGݨ®<õì#´©réÏyWªIݰìL,ÿˆv܉¸&è ëû­ n{­›å¶W»Ž¨‘g†FÇ•ò .=J«ÁoòH‡ |ðaÖ÷ŒeÍσiå‰oØõ´ ³ßÐÀ]_õåóø½8Û7Î[ág×ãvº­së)_ûZZ·ŒÄA šWNäO}IÜöZZ'IÂëš· q¸ÐàÂv¨[9ìY4‰éÁ=Ãñ2~-äo³ÙÿédfoࡘœVÂçÌ_“Cô¿ºQ¿Ÿ³FÂ+X¬ßw‹Šºž¯-âGÐ4‹®ÕjÜ2«…RÍH&9åü÷£8÷ï`WF‰ºró„3¯ºpæx?… _¿ÍÛó¾fëþcdzúã™îÄÑ$«Ðy»ŸnÁõV·ëõˆº›Z~CÌ ‡ø­ã]t¹§3 ¯È¥êvëèJfÌOãöñÝó„¼CÊsd²gÙ†Æ$=r =ÂÎ7ÂÉŽÏ—óK¥[˜Ò. èQ ¹¥¨(ë¹dÎ_««H•»ë ¹Ú•:ŠF…ê4hذÀkeÑ€£¡-º2äÉxÖú†ï<@XíKøý¦ˆ{ÃáÀ «°ý„Ëf·¼0‰ÿ4–­Iù`\»æñâèE˜2|`Æ~–Ž{‰ÿº«ÇÍtÎÔëF·‰ÐúÇ/øøÃ…Œl‹›ÄäÞ ¹øc°»H^¿ŠõI{Y?  íW-g®½¹sÇË,ÑO²Ù¿|4ƒc‰5™m 8ÅåÜÎWkP­ý 4.âþÑÚ¿ßN™„Ö Å$íœö"­ç’8O­f`œäÄI ÎDtÖ Ž¥@`P ½9¡/äªWª@(n\l–ë2¸óÛðÂÇÒRËæ¾GÍzÔñ\ÄŽ!·†qö>êô®_Ùe5cHŸÛhéo€åK¨_¾8O=î¦[¤_UåmÕ•­n£CÌã üèS¶ölHË‹þEÓ àÆaÌjšñÇ2Z»YøÏ1lk?»7ÁHßü.çí£õÈ©çÝZ{×óCb ­¢Â‹öaÉ>Èï}Ì.ß(þÕ!¸À@¸PÎW«Ò˜Féü´a;Ùmã düü#ñÎnk”»ÜEé ¹ú•8.»0°²vÞRk7 †¿É©ý?±dö2ô¥]è%ܼ5iPÏ‹E«æ²¸Q깓TñnjT²ÉÑtï<—!ó_äeÇCÜÞ´*^§°;%„No‚Oí0BYÌÒÙ+¾9ŒŠŽ£$žÊ·ë?_=M Ÿ®»›¶¬ƒßóÉF‹°zUñÉ9ÌÆ=©à€ÿ%êzÓ· µòíÌ ÀÃÀ;0„šÁå0¬Ã¬ˆý˜cÍúÒ©ê vþn^TªY› o)ÛâÙçhH¯§š+i›6nÄ;;~!îó¥¬ÞHçQÏÒ1È,Z–‰BjõlF—{ðÅì×™ú8ƒ°lúJ2›ÿƒ;#P¤¾¿‚BõêÕ/¯0°28¹g‹½ÏÁä¼jÐ0êI&>Ѻ—òú@‡~ƒÙüÊ;Ìù 9åCiýX$7–0À—ý'3>à-b?›ÊÈØSP¡ õ:ô£ý­à~?#ãßó¦ñ¢4,ÏrøWªEdHîo5Î[O“:…O×MU9'w²vþB¦L!Ëȶüã…^Ô¿\¯Ý8w±m{&©©1<½.ßëŽ:ôž1‹'"€“ƒ{`GSãœß™9ð ÀüqÃÎÁô,OÅju‰¼îƺp?L;¿Âjõ ¬×^>=™·ÞžÔiû(ãž½‹È.J_È_‘’œäÚ¿…ÈÆMÏi\ÿýéx[çKP–ˆˆ\«¾XNë¶Ñç¼¾-~‹NŠˆH.‚ˆˆ ±)DDP ˆˆˆM ""€ADDl ""bS ˆˆPÂ@X½z5‡*ëZ¤8\ÉlYú.³×&^¼ç§Iѹ’ùyÉÛÄ~ õ#WŒBbb" P(\ ®t·Æñãí:ÎOKðå¯IeòXm)c®ãlXúVý–¬õ#WŒ?þºXã(¸N°tȽ¼öCöY ž´ö¯Ýa±¬4í+æû’±s cž!ã¡™|w¥¢ru9Êù•FgG9´¨ë{e/Ë%ãäðWã8ö+Ÿ˜CLϘd“·€÷æ|ÊúßéS•†íî£ÿÓ]ˆ¬`üé½I¿®bÑ¢/ønóï®|?o¿y?µÌ¢¾¿l¾mŸ¯V°Nndþ¿cX·‹dGeFßÇÓOßC#ÿÜ)¸k/¼/åjQªrŠ €ç5òê×åEËÄ/ÔƒäR¶ƒ•º“¯ÎdæÂïØÚ¤EiN®.’~˜ÆóÿÞ@–W¾—Ó7òAÌ ÒnèÁs½«áÚ³ŠØ™o0Âʼ!­È}‚t&;äŸï£ñwòÐÐG©^5”ªfQß_vÜoÛ…Ôjíç£ÿÉì´Ž zuaÙ[YøÆ›À‹ö£?eì;Tä ~ý;ÛgQ¡f :õ}†¾«qîˆgQÎKyeÂFš¿0Œr1ÃÙt¦¡üõ Œ…‡§ýˆjŽÇöïy1~+­VÔ3áôÏïñÒž>ƒÎ5ÎêQwïÀÅ‘/ÇòÀ²#Éð (¼-÷ Ľ+óHÏý¶]X­ÖžÕ|¶µ·L@§k½pž{*ž£–²:á6zdÞÞË`ê¼})WR3\.œNgÞ˜ç†a`šf´›„vŸÂÂ&fvãËbÁÊD&Ûb‡2dÁiÚ><˜ñqúŠéWòËa dóó;Cµª÷?3ŽA•Søßœ)Lý×›T›3Œ6^Â{½ÊðÛª``R¡ê™ã#™Y\÷ÀóõP“oٹ׉Px;¡¦Û¾”«C™Bqd};†NÆäýÛQ»7oÏ~‚†f)Û€i^~ç3OÅñáâÝÔìõ#¬'à:™ÀBc%®”oøpéQZ ~“G:äîhÂf}ÏXÖü<˜6×åNÆ»RMê†å;_k˜T‰îIïΑ8€ë¯«KÖžG™ûq}›ßäv”³«[{MâCzðFÏp¼Œ_ ùÛlö:™ÙÛ#x(¦½Ÿ¶dRåº[éÕåj”KaËÂ7xsØ+”@çªfáïwøG´ãæ¨ÜõsMÐAÖ÷[AÜöZ_[Ì^aÛvNáµÞQ»)Ê/fÍG_ÑiÐÍÔòÉâxÂQN»œdç¸p¸i/^_Ê•¬L¡8ã+{6œ)ý¯Ï»`xQÛAÞ7ª·_¦œ{·±ýteÚ¶ªSàiçþìÊÈ qBWnžpæUÎïã§Šw‡ŠYƒ¦ƒÈúqœ7ñWùÐ:º’óÓ¸}|7ÂÞ–Z„£…ìüoã ʇGú>:ƒ€‡1«iÆ}fífá?ǰ­ý^ìÞ }ó» Ÿ¶Ö#§ž»3/W›°ê.–mù…ô{ÚS°’v³û¤!¡¹G…¾ÿb*B­˜>T¬BvÂç¼´ð7‚oH”_¾¯¶›ø¡/åêPâu©0(#0š.7ÍdÄì1L+ÿ0j$Ä­f§ZF@4Ý;ÏeÈüyÙñ·7­Š×é#ìN ¡Óß›àë¨Iƒz^,Z5—źPÏu˜¤Š7pS#§öl⇠Yød&°á“X$†óÐð6ëšåUÈô­B­üQœxx†P3¸†u˜±s¬Y_:U=ÁÎßíûv /*Õ¬Mw·ÝÙˆÅ3ÞfòÇèÙ(‡Ÿbg³©bGÆÝàïþýó+³ÃM­¸8uh'{±ëçµ,]¼Š„Z3þÉ–övâ¦Ý]_^ÄE• «DP½zu…AQÜðìD†zǰpæh>Iõ¦fdU< Óð¥EÿÉŒx‹ØÏ¦22öT¨B½ýh+øštè7˜Í¯¼ÃÌ‘ßS>”ÖErc#?ê^ÛŒJßÎcÔTrþ„4jGÿÉýèÚ@ðn9w±m{&©©1<½.ßëŽ:ôž1‹'"Ôîþ¯œþ7oÏùý’ ‚ÝÂж1ɲIDATWŸ¦M²Ý¼?üb.ŒYx­d³ñÝgçCH½¦´î;™WîhNå¼Í$ÇM»üU)ÉI®mñ[ˆlÜôœÆõßÿ—Ž·u¾e]ݬ½sx¢Ïg´˜:‡þuÀ-"Ϫ/–Óºmô9¯o‹ß¢Óž“Ýk?"ÞªIÊ~˜©»ùöƒÿ°»z'ž W÷‹ÈåC{¤ ͕ơøµ,Xµ›ÃIé¸ÊÖ¼3/{„&úù¿ˆ\Fš@Tÿ7‰ê© )Üe÷Ã^¹4""(DDĦ@@ ""6‚ˆˆ ±)DDP ˆˆˆM ""€ADDl ""bS ˆˆ @›ADD‚ˆˆØ""(DDĦ@@ ""6‚ˆˆ ±)DDP ˆˆˆM ""€ADDl ""bS ˆˆ @›ADD‚ˆˆØ""(DDĦ@@ ""6‚ˆˆ ±)DDP ˆˆˆM ""€ADDl ""bS ˆˆ @›ADD‚ˆˆØ""(DDĦ@@ ""6‚ˆˆ ±)DDP ˆˆˆM ""€ADDl ""bS ˆˆ @›ADD‚ˆˆØ""(DDĦ@@ ""6‚ˆˆ ±)DDP ˆˆˆM ""€ADDl ""bS ˆˆ @›ADD‚ˆˆØ""(DDĦ@@ ""6‚ˆˆ ±)DDP ˆˆˆM ""€ADDl ""bS ˆˆ @›ADD‚ˆˆØ""(DDĦ@@ ""6‚ˆˆ ±)DDP ˆˆˆM ""€ADDl ""bS ˆˆ @›ADD‚ˆˆØ""(DDĦ@@ ""6‚ˆˆ ±)DDP ˆˆˆM ""€ADDl ""bS ˆˆ @›ADD‚ˆˆØ""(DDĦ@@ ""6‚ˆˆ ±)DDP ˆˆˆM ""€ADDl ""bS ˆˆ @›ADD‚ˆˆØ""(DDĦ@@ ""6‚ˆˆ ±)DDP ˆˆˆM ""€ADDl ""bS ˆˆ @›ADD‚ˆˆØ""(DDĦ@@ ""6‚ˆˆ ±)DDP ˆˆˆM ""€ADDl ""bS ˆˆ @›ADD‚ˆˆØ""(DDĦ@< k ©ÊÖÍ.V-""r…Ô=o[¡P³vÝ2/FDD.O:e$""€ADDl&€‡‡ÙÙÙ—º¹²³³ñððäÿ;çÕîpÍ”.IEND®B`‚gnusim8085-1.4.1/pixmaps/0000755000175000017500000000000013327663073014717 5ustar carstencarstengnusim8085-1.4.1/pixmaps/gnusim8085.svg0000644000175000017500000002232412767046204017270 0ustar carstencarsten GNUSim8085 Logo image/svg+xml GNUSim8085 Logo Feb 04, 2010 Kamaleshwar Morjal CC-BY GNUSim8085 AN OPEN SOURCE INTEL 8085MICROPROCESSOR SIMULATOR gnusim8085-1.4.1/pixmaps/Makefile.am0000644000175000017500000000031612767046204016751 0ustar carstencarsten## Process this file with automake to produce Makefile.in gnusim8085_pixmapsdir = @PACKAGE_PIXMAPS_DIR@ gnusim8085_pixmaps_DATA = \ gnusim8085.svg EXTRA_DIST = $(gnusim8085_pixmaps_DATA) gnusim8085.ico gnusim8085-1.4.1/pixmaps/gnusim8085.ico0000644000175000017500000002267612767046204017255 0ustar carstencarsten00 ¨%(0` W¡WýWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWýWŸWýWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWýWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿGÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ) ÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿGÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ) ÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿGÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ) ÿWÿWÿWÿWÿWÿWÿWÿWÿIÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ * ÿWÿWÿWÿWÿWÿWÿWÿ"5"ÿÿÿÿÿÿÿÿÿÿÿÿ)/ÿÈúÿÌÿÿÌÿÿÌÿÿÌÿÿ tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWÿWÿWÿWÿWÿWÿWÿ"5"ÿÿÿÿÿÿÿÿÿÿÿÿ4=ÿÌÿÿÌÿÿÌÿÿÌÿÿÌÿÿ€žÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWÿWÿWÿWÿWÿWÿWÿ"5"ÿÿÿÿÿÿÿÿÿÿÿÿ4=ÿÌÿÿÌÿÿ Xkÿ¦ÎÿÌÿÿ€žÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWÿWÿWÿWÿWÿWÿWÿ"5"ÿÿÿÿÿÿÿÿÿÿÿÿ4=ÿÌÿÿÌÿÿ†¦ÿ¸æÿÌÿÿ€žÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWÿWÿWÿWÿWÿWÿWÿ"5"ÿÿÿÿÿÿÿÿÿÿÿÿ4=ÿÌÿÿÌÿÿÌÿÿÌÿÿÌÿÿ€žÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWÿWÿWÿWÿWÿWÿWÿ"5"ÿÿÿÿÿÿÿ9DÿDRÿDRÿDRÿDRÿJÿÌÿÿÌÿÿ!ÿÿÿÿÿÿÿÿÿÿÿÿÿWÿWÿWÿWÿWÿWÿWÿ"5"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚ ÿ´àÿ´àÿ´àÿ´àÿ¦Îÿÿ‹¬ÿÌÿÿÌÿÿÊýÿÌÿÿÌÿÿ!ÿÿÿÿÿÿÿÿÿÿÿÿÿWÿWÿWÿWÿWÿWÿWÿ"5"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹¬ÿÌÿÿÌÿÿÌÿÿÌÿÿÌÿÿ!ÿÿÿÿÿÿÿÿÿÿÿÿÿWÿWÿWÿWÿWÿWÿWÿ"5"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹¬ÿÌÿÿºèÿ‘´ÿ´àÿ´àÿ2;ÿ+2ÿ+2ÿ+2ÿ+2ÿ+2ÿ ÿÿÿÿÿÿÿWÿWÿWÿWÿWÿWÿWÿ"5"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹¬ÿÌÿÿ—»ÿ?Kÿ Qbÿ Qbÿ y•ÿ‚¡ÿ‚¡ÿ‚¡ÿ‚¡ÿ—¼ÿ _tÿÿÿÿÿÿÿWÿWÿWÿWÿWÿWÿWÿ"5"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹¬ÿÌÿÿÌÿÿÌÿÿÌÿÿÌÿÿ!ÿÿÿÿÿ IXÿ _tÿÿÿÿÿÿÿWÿWÿWÿWÿWÿWÿWÿ"5"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…¥ÿÌÿÿÌÿÿÌÿÿÌÿÿÊýÿÿÿÿÿÿ IXÿ _tÿÿÿÿÿÿÿWÿWÿWÿWÿWÿWÿWÿ"5"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ #ÿ #ÿ #ÿ #ÿÿÿÿÿÿÿ IXÿ _tÿÿÿÿÿÿÿWÿWÿWÿWÿWÿWÿWÿ"5"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ IXÿ _tÿÿÿÿÿÿÿWÿWÿWÿWÿWÿWÿWÿ"5"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ IXÿ _tÿÿÿÿÿÿÿWÿWÿWÿWÿWÿWÿWÿ"5"ÿÿÿÿdddÿ¬¬¬ÿ|||ÿeeeÿ{{{ÿyyyÿeeeÿsssÿxxxÿcccÿcccÿdddÿÿÿcccÿ‰‰‰ÿ‹‹‹ÿUUUÿSSSÿXXXÿdddÿÿÿÿÿÿÿÿÿ IXÿ _tÿÿÿÿÿÿÿWÿWÿWÿWÿWÿWÿWÿ"5"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ K[ÿ bxÿÿÿÿÿÿÿWÿWÿWÿWÿWÿWÿWÿ"5"ÿÿÿÿSSSÿrrrÿ"""ÿdddÿ{{{ÿuuuÿpppÿ"""ÿcccÿdddÿxxxÿ€€€ÿ^^^ÿxxxÿÿ•••ÿeeeÿuuuÿMMMÿÿvvvÿjjjÿvvvÿiiiÿÿÿÿÿÿz–ÿ—»ÿÿÿÿÿÿÿWÿWÿWÿWÿWÿWÿWÿ"5"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿWÿWÿWÿWÿWÿWÿWÿIÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ * ÿWÿWÿWÿWÿWÿWÿWÿWÿGÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ) ÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿGÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ) ÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿGÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ) ÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWýWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWýW¤WýWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWÿWýW¡gnusim8085-1.4.1/pixmaps/Makefile.in0000644000175000017500000003540613327416216016767 0ustar carstencarsten# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = pixmaps ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(gnusim8085_pixmapsdir)" DATA = $(gnusim8085_pixmaps_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/mkinstalldirs DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTKSOURCEVIEW_API = @GTKSOURCEVIEW_API@ GTKSOURCEVIEW_CFLAGS = @GTKSOURCEVIEW_CFLAGS@ GTKSOURCEVIEW_LIBS = @GTKSOURCEVIEW_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ GTK_VERSION_REQ = @GTK_VERSION_REQ@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATA_DIR = @PACKAGE_DATA_DIR@ PACKAGE_HELP_DIR = @PACKAGE_HELP_DIR@ PACKAGE_MENU_DIR = @PACKAGE_MENU_DIR@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_PIXMAPS_DIR = @PACKAGE_PIXMAPS_DIR@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ markdown = @markdown@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ gnusim8085_pixmapsdir = @PACKAGE_PIXMAPS_DIR@ gnusim8085_pixmaps_DATA = \ gnusim8085.svg EXTRA_DIST = $(gnusim8085_pixmaps_DATA) gnusim8085.ico all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu pixmaps/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu pixmaps/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-gnusim8085_pixmapsDATA: $(gnusim8085_pixmaps_DATA) @$(NORMAL_INSTALL) @list='$(gnusim8085_pixmaps_DATA)'; test -n "$(gnusim8085_pixmapsdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(gnusim8085_pixmapsdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(gnusim8085_pixmapsdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(gnusim8085_pixmapsdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(gnusim8085_pixmapsdir)" || exit $$?; \ done uninstall-gnusim8085_pixmapsDATA: @$(NORMAL_UNINSTALL) @list='$(gnusim8085_pixmaps_DATA)'; test -n "$(gnusim8085_pixmapsdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(gnusim8085_pixmapsdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(gnusim8085_pixmapsdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-gnusim8085_pixmapsDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-gnusim8085_pixmapsDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-gnusim8085_pixmapsDATA install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-gnusim8085_pixmapsDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnusim8085-1.4.1/TODO0000644000175000017500000000137212767046204013727 0ustar carstencarstenU - urgent C - critical TODO ============================= (U)* Divide screen properly (depending upto screen res) to each widget ?? * More accurately aligned listing file * Descriptive assembler messages - no repetitions * "Load address" entry widget- not properly rendering and processing hex address! Bug in GtkEntry? * Data, Stack List view should restore state after reload/re-expand. Features Pending ================= * Too many to list here. Website (http://www.gnusim8085.org) ======= * Use Mediawiki (Theme like: http://mono-project.com/ , http://ubuntu-in.org/) * Add 'Documentation' online: 8085 Reference, Example code, etc. (add a link in 'Help' menu of the application) * .. * Submit link to various sites like freshmeat, gnomefiles.org, etc. gnusim8085-1.4.1/INSTALL0000644000175000017500000002215613252544364014273 0ustar carstencarstenCopyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. (Caching is disabled by default to prevent problems with accidental use of stale cache files.) If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README.md' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You only need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. If configure script does not exist then run './autogen.sh' to generate it. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not support the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README.md' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the `--target=TYPE' option to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc will cause the specified gcc to be used as the C compiler (unless it is overridden in the site shell script). `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. gnusim8085-1.4.1/AUTHORS0000644000175000017500000000466612767046204014320 0ustar carstencarstenMain programmer and founder: ---------------------------- Sridhar Ratnakumar Maintainers and Developers: ---------------------------- Aanjhan Ranganathan Onkar Shinde Patch Contributors: ---------------------------- Aditya M Alexander Shigin Krishna Bharadwaj Madhusudan C.S Marcelo Souza Missouga Dongi Puneeth Bhat Kamaleshwar Morjal Debajit Kirantej J L Ramanathan - https://launchpad.net/~ramanathan-nit Translators: ---------------------------- Kartik Mistry - https://edge.launchpad.net/~kartik.mistry Aitor Pazos - https://launchpad.net/~mail-aitorpazos DiegoJ - https://launchpad.net/~diegojromerolopez Fernando Muñoz - https://launchpad.net/~munozferna Gonzalo L. Campos Medina - https://launchpad.net/~gcamposm LuisGuerra - https://launchpad.net/~lguerra80 Takmadeus - https://launchpad.net/~takmadeus Adnane Belmadiaf - https://launchpad.net/~adnane002 Hassan El Jacifi - https://launchpad.net/~waver Miss-Thang - https://launchpad.net/~shahiwestcoast Nizar Kerkeni - https://launchpad.net/~nizarus Jaime Rave - https://launchpad.net/~jaimerave Javi Sol - https://launchpad.net/~javisolcorreo Johannes Möller - https://launchpad.net/~jojo-moeller Michael Konrad - https://launchpad.net/~nephelyn The Escapist - https://launchpad.net/~wisd00m Tommy Hartmann - https://launchpad.net/~ahrak Xuacu Saturio - https://launchpad.net/~xuacusk8 Colin Dean - https://launchpad.net/~colindean giorgio130 - https://launchpad.net/~gm89 simone.sandri - https://launchpad.net/~lexluxsox Adnane Belmadiaf - https://launchpad.net/~adnane002 Bharat S - https://edge.launchpad.net/~aniceberg José Humberto Melo - https://launchpad.net/~josehumberto-melo José Roberto - https://launchpad.net/~tickbrown Ricardo (Swordf) De Moura - https://launchpad.net/~ricardo347 Richard Drakoulis - https://launchpad.net/~richardos89 Thanos Kakarountas - https://launchpad.net/~a-kakarountas Ahmed Mohammed - https://launchpad.net/~ahmedqatar Aditya M - https://launchpad.net/~aditya.mmy Kenneth Gonsalves - https://launchpad.net/~lawgon Stathis Iosifidis - https://launchpad.net/~diamond-gr Vinay - https://launchpad.net/~vinaykumar-mr gnusim8085-1.4.1/ltmain.sh0000644000175000017500000054732312767046204015072 0ustar carstencarsten# ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004 # Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. basename="s,^.*/,,g" # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" # The name of this program: progname=`echo "$progpath" | $SED $basename` modename="$progname" # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 PROGRAM=ltmain.sh PACKAGE=libtool VERSION=1.5.6 TIMESTAMP=" (1.1220.2.95 2004/04/11 05:50:42) Debian$Rev: 215 $" # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" ##################################### # Shell function definitions: # This seems to be the best place for them # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. func_win32_libid () { win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | \ sed -n -e '1,100{/ I /{x;/import/!{s/^/import/;h;p;};x;};}'` if test "X$win32_nmres" = "Ximport" ; then win32_libid_type="x86 archive import" else win32_libid_type="x86 archive static" fi fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $echo $win32_libid_type } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case "$@ " in " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then $echo "$modename: unable to infer tagged configuration" $echo "$modename: specify a tag with \`--tag'" 1>&2 exit $EXIT_FAILURE # else # $echo "$modename: using $tagname tagged configuration" fi ;; esac fi } # End of Shell function definitions ##################################### # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Parse our command line options once, thoroughly. while test "$#" -gt 0 do arg="$1" shift case $arg in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in execute_dlfiles) execute_dlfiles="$execute_dlfiles $arg" ;; tag) tagname="$arg" preserve_args="${preserve_args}=$arg" # Check whether tagname contains only valid characters case $tagname in *[!-_A-Za-z0-9,/]*) $echo "$progname: invalid tag name: $tagname" 1>&2 exit $EXIT_FAILURE ;; esac case $tagname in CC) # Don't test for the "default" C tag, as we know, it's there, but # not specially marked. ;; *) if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then taglist="$taglist $tagname" # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" else $echo "$progname: ignoring unknown tag $tagname" 1>&2 fi ;; esac ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case $arg in --help) show_help=yes ;; --version) $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" $echo $echo "Copyright (C) 2003 Free Software Foundation, Inc." $echo "This is free software; see the source for copying conditions. There is NO" $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." exit $EXIT_SUCCESS ;; --config) ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath # Now print the configurations for the tags. for tagname in $taglist; do ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" done exit $EXIT_SUCCESS ;; --debug) $echo "$progname: enabling shell trace mode" set -x preserve_args="$preserve_args $arg" ;; --dry-run | -n) run=: ;; --features) $echo "host: $host" if test "$build_libtool_libs" = yes; then $echo "enable shared libraries" else $echo "disable shared libraries" fi if test "$build_old_libs" = yes; then $echo "enable static libraries" else $echo "disable static libraries" fi exit $EXIT_SUCCESS ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --preserve-dup-deps) duplicate_deps="yes" ;; --quiet | --silent) show=: preserve_args="$preserve_args $arg" ;; --tag) prevopt="--tag" prev=tag ;; --tag=*) set tag "$optarg" ${1+"$@"} shift prev=tag preserve_args="$preserve_args --tag" ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 $echo "*** Future versions of Libtool will require -mode=MODE be specified." 1>&2 case $nonopt in *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) mode=link for arg do case $arg in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case $mode in # libtool compile mode compile) modename="$modename: compile" # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= for arg do case "$arg_mode" in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) if test -n "$libobj" ; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit $EXIT_FAILURE fi arg_mode=target continue ;; -static | -prefer-pic | -prefer-non-pic) later="$later $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac lastarg="$lastarg $arg" done IFS="$save_ifs" lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` # Add the arguments to base_compile. base_compile="$base_compile $lastarg" continue ;; * ) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` case $lastarg in # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac base_compile="$base_compile $lastarg" done # for arg case $arg_mode in arg) $echo "$modename: you must specify an argument for -Xcompile" exit $EXIT_FAILURE ;; target) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit $EXIT_FAILURE ;; *) # Get the name of the library object. [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSifmso]' case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.ii) xform=ii ;; *.class) xform=class ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform=for ;; *.java) xform=java ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit $EXIT_FAILURE ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -static) build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir= else xdir=$xdir/ fi lobj=${xdir}$objdir/$objname if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi $run $rm $removelist trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $run ln "$progpath" "$lockfile" 2>/dev/null; do $show "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $echo "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi $echo $srcfile > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi $run $rm "$libobj" "${libobj}T" # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then $show "$mv $output_obj $lobj" if $run $mv $output_obj $lobj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the PIC object to the libtool object file. test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the non-PIC object the libtool object file. # Only append if the libtool object file exists. test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi fi build_libtool_libs=no build_old_libs=yes prefer_static_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test ;; *) qarg=$arg ;; esac libtool_args="$libtool_args $qarg" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$finalize_command @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit $EXIT_FAILURE fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat $save_arg` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi done else $echo "$modename: link input file \`$save_arg' does not exist" exit $EXIT_FAILURE fi arg=$save_arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= compile_command="$compile_command $wl$qarg" finalize_command="$finalize_command $wl$qarg" continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; shrext) shrext_cmds="$arg" prev= continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: more than one -exported-symbols argument is not allowed" exit $EXIT_FAILURE fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" ;; esac continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 exit $EXIT_FAILURE fi dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-pw32* | *-*-beos*) # These systems don't actually have a C or math library (as such) continue ;; *-*-mingw* | *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework deplibs="$deplibs -framework System" continue esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs="$deplibs $arg" continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) deplibs="$deplibs $arg" continue ;; -module) module=yes continue ;; # gcc -m* arguments should be passed to the linker via $compiler_flags # in order to pass architecture information to the linker # (e.g. 32 vs 64-bit). This may also be accomplished via -Wl,-mfoo # but this is not reliable with gcc because gcc may use -mfoo to # select a different linker, different libraries, etc, while # -Wl,-mfoo simply passes -mfoo to the linker. -m*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" if test "$with_gcc" = "yes" ; then compiler_flags="$compiler_flags $arg" fi continue ;; -shrext) prev=shrext continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) # The PATH hackery in wrapper scripts is required on Windows # in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Wl,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $wl$flag" linker_flags="$linker_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done # argument parsing loop if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi oldlibs= # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the object directory. if test ! -d "$output_objdir"; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir status=$? if test "$status" -ne 0 && test ! -d "$output_objdir"; then exit $status fi fi # Determine the type of output case $output in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac case $host in *cygwin* | *mingw* | *pw32*) # don't eliminate duplications in $postdeps and $predeps duplicate_compiler_generated_deps=yes ;; *) duplicate_compiler_generated_deps=$duplicate_deps ;; esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if test "X$duplicate_deps" = "Xyes" ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$libs $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$pre_post_deps $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 exit $EXIT_FAILURE ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 continue fi if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then library_names= old_library= case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; *) $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) if test "$deplibs_check_method" != pass_all; then $echo $echo "*** Warning: Trying to link with static lib archive $deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because the file extensions .$libext of this argument makes me believe" $echo "*** that it is just a static archive that I should not used here." else $echo $echo "*** Warning: Linking the shared library $output against the" $echo "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else $echo "$modename: cannot find the library \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Check to see that this really is a libtool archive. if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." dlname= dlopen= dlpreopen= libdir= library_names= old_library= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no # Read the .la file case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then $echo "$modename: \`$lib' is not a convenience library" 1>&2 exit $EXIT_FAILURE fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$newdlfiles $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 abs_ladir="$ladir" fi ;; esac laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then $echo "$modename: warning: library \`$lib' was moved." 1>&2 dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$libdir" fi else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi # $installed = yes name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then newlib_search_path="$newlib_search_path $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { test "$prefer_static_libs" = no || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var"; then # Make sure the rpath contains only unique directories. case "$temp_rpath " in *" $dir "*) ;; *" $absdir "*) ;; *) temp_rpath="$temp_rpath $dir" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically if test -n "$library_names" && { test "$prefer_static_libs" = no || test -z "$old_library"; }; then if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi # This is a shared library # Warn about portability, can't link against -module's on # some systems (darwin) if test "$shouldnotlink" = yes && test "$pass" = link ; then $echo if test "$linkmode" = prog; then $echo "*** Warning: Linking the executable $output against the loadable module" else $echo "*** Warning: Linking the shared library $output against the loadable module" fi $echo "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names realname="$2" shift; shift libname=`eval \\$echo \"$libname_spec\"` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw*) major=`expr $current - $age` versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" soname=`$echo $soroot | ${SED} -e 's/^.*\///'` newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else $show "extracting exported symbol list from \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$extract_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else $show "generating import library for \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$old_archive_from_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5* ) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a module then we can not link against # it, someone is ignoring the new warnings I added if /usr/bin/file -L $add 2> /dev/null | $EGREP "bundle" >/dev/null ; then $echo "** Warning, lib $linklib is a module, not a shared library" if test -z "$old_library" ; then $echo $echo "** And there doesn't seem to be a static archive available" $echo "** The link will probably fail, sorry" else add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case "$libdir" in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then $echo "$modename: configuration error: unsupported hardcode properties" exit $EXIT_FAILURE fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && \ test "$hardcode_minus_L" != yes && \ test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case "$libdir" in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. $echo $echo "*** Warning: This system can not link to static lib archive $lib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then $echo "*** But as you try to build a module library, libtool will still create " $echo "*** a static module, that should work as long as the dlopening application" $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else convenience="$convenience $dir/$old_library" old_convenience="$old_convenience $dir/$old_library" deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$newlib_search_path $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$deplib" && dir="." # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" fi ;; esac if grep "^installed=no" $deplib > /dev/null; then path="$absdir/$objdir" else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi if test "$absdir" != "$libdir"; then $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 fi path="$absdir" fi depdepl= case $host in *-*-darwin*) # we do not want to link against static libs, # but need to link against shared eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$path/$depdepl" ; then depdepl="$path/$depdepl" fi # do not add paths which are already there case " $newlib_search_path " in *" $path "*) ;; *) newlib_search_path="$newlib_search_path $path";; esac fi path="" ;; *) path="-L$path" ;; esac ;; -l*) case $host in *-*-darwin*) # Again, we only want to link against shared libraries eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` for tmp in $newlib_search_path ; do if test -f "$tmp/lib$tmp_libs.dylib" ; then eval depdepl="$tmp/lib$tmp_libs.dylib" break fi done path="" ;; *) continue ;; esac ;; *) continue ;; esac case " $deplibs " in *" $depdepl "*) ;; *) deplibs="$depdepl $deplibs" ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$deplibs $path" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path="$lib_search_path $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$tmp_libs $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 exit $EXIT_FAILURE else $echo $echo "*** Warning: Linking the shared library $output against the non-libtool" $echo "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi if test "$dlself" != no; then $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test "$#" -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$2" number_minor="$3" number_revision="$4" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in darwin|linux|osf|windows) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) current=`expr $number_major + $number_minor - 1` age="$number_minor" revision="$number_minor" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE ;; esac ;; no) current="$2" revision="$3" age="$4" ;; esac # Check that each of the things are valid numbers. case $current in 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; *) $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $revision in 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; *) $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $age in 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; *) $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac if test "$age" -gt "$current"; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header major=.`expr $current - $age` versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current"; ;; irix | nonstopux) major=`expr $current - $age + 1` case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=.`expr $current - $age` versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. major=`expr $current - $age` versuffix="-$major" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi if test "$mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$echo "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi removelist="$removelist $p" ;; *) ;; esac done if test -n "$removelist"; then $show "${rm}r $removelist" $run ${rm}r $removelist fi fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. for path in $notinst_path; do lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'` deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'` dependency_libs=`$echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'` done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles="$dlfiles $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs -framework System" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then deplibs="$deplibs -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $rm conftest.c cat > conftest.c </dev/null` for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null \ | grep " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for file magic test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a file magic. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` for a_deplib in $deplibs; do name="`expr $a_deplib : '-l\(.*\)'`" # If $name is empty we are operating on a -L argument. if test -n "$name" && test "$name" != "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$newdeplibs $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval \\$echo \"$libname_spec\"` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval $echo \"$potent_lib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for regex pattern test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a regex pattern. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e 's/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` done fi if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ | grep . >/dev/null; then $echo if test "X$deplibs_check_method" = "Xnone"; then $echo "*** Warning: inter-library dependencies are not supported in this platform." else $echo "*** Warning: inter-library dependencies are not known to be supported." fi $echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes fi ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then $echo $echo "*** Warning: libtool could not satisfy all declared inter-library" $echo "*** dependencies of module $libname. Therefore, libtool will create" $echo "*** a static module, that should work as long as the dlopening" $echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else $echo "*** The inter-library dependencies that have been dropped here will be" $echo "*** automatically added whenever a program is linked with this library" $echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then $echo $echo "*** Since this library must not contain undefined symbols," $echo "*** because either the platform does not support them or" $echo "*** it was explicitly requested with -no-undefined," $echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names realname="$2" shift; shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" for link do linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" if len=`expr "X$cmd" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then $show "$cmd" $run eval "$cmd" || exit $? skipped_export=false else # The command line is too long to execute in one step. $show "using reloadable object file for export list..." skipped_export=: fi done IFS="$save_ifs" if test -n "$export_symbols_regex"; then $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" status=$? if test "$status" -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" for xlib in $convenience; do # Extract the objects. case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "$mkdir $xdir" $run $mkdir "$xdir" status=$? if test "$status" -ne 0 && test ! -d "$xdir"; then exit $status fi # We will extract separately just the conflicting names and we will no # longer touch any unique names. It is faster to leave these extract # automatically by $AR in one run. $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 $AR t "$xabs" | sort | uniq -cd | while read -r count name do i=1 while test "$i" -le "$count" do # Put our $i before any first dot (extension) # Never overwrite any file name_to="$name" while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" do name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` done $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? i=`expr $i + 1` done done fi libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise. $echo "creating reloadable object files..." # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= delfiles= last_robj= k=1 output=$output_objdir/$save_output-${k}.$objext # Loop over the list of objects to be linked. for obj in $save_libobjs do eval test_cmds=\"$reload_cmds $objlist $last_robj\" if test "X$objlist" = X || { len=`expr "X$test_cmds" : ".*"` && test "$len" -le "$max_cmd_len"; }; then objlist="$objlist $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" fi last_robj=$output_objdir/$save_output-${k}.$objext k=`expr $k + 1` output=$output_objdir/$save_output-${k}.$objext objlist=$obj len=1 fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if ${skipped_export-false}; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols libobjs=$output # Append the command to create the export file. eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" fi # Set up a command to remove the reloadale object files # after they are used. i=0 while test "$i" -lt "$k" do i=`expr $i + 1` delfiles="$delfiles $output_objdir/$save_output-${i}.$objext" done $echo "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi # Append the command to remove the reloadable object files # to the just-reset $cmds. eval cmds=\"\$cmds~\$rm $delfiles\" fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case $output in *.lo) if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit $EXIT_FAILURE fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $run $rm $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" status=$? if test "$status" -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" for xlib in $convenience; do # Extract the objects. case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "$mkdir $xdir" $run $mkdir "$xdir" status=$? if test "$status" -ne 0 && test ! -d "$xdir"; then exit $status fi # We will extract separately just the conflicting names and we will no # longer touch any unique names. It is faster to leave these extract # automatically by $AR in one run. $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 $AR t "$xabs" | sort | uniq -cd | while read -r count name do i=1 while test "$i" -le "$count" do # Put our $i before any first dot (extension) # Never overwrite any file name_to="$name" while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" do name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` done $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? i=`expr $i + 1` done done fi reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $run eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; esac if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac case $host in *darwin*) # Don't allow lazy linking, it breaks C++ global constructors if test "$tagname" = CXX ; then compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" fi ;; esac compile_command="$compile_command $compile_deplibs" finalize_command="$finalize_command $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$output.exp" $run $rm $export_symbols $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' else $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` $run eval '$echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $mv "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if grep -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else grep -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' else $echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr address; } lt_preloaded_symbols[] = {\ " eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit $EXIT_FAILURE ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath="$rpath$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $run $rm $output # Link the executable and exit $show "$link_command" $run eval "$link_command" || exit $? exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) cwrappersource=`$echo ${objdir}/lt-${output}.c` cwrapper=`$echo ${output}.exe` $rm $cwrappersource $cwrapper trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 cat > $cwrappersource <> $cwrappersource<<"EOF" #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef DIR_SEPARATOR #define DIR_SEPARATOR '/' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) #define HAVE_DOS_BASED_FILE_SYSTEM #ifndef DIR_SEPARATOR_2 #define DIR_SEPARATOR_2 '\\' #endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) const char *program_name = NULL; void * xmalloc (size_t num); char * xstrdup (const char *string); char * basename (const char *name); char * fnqualify(const char *path); char * strendzap(char *str, const char *pat); void lt_fatal (const char *message, ...); int main (int argc, char *argv[]) { char **newargz; int i; program_name = (char *) xstrdup ((char *) basename (argv[0])); newargz = XMALLOC(char *, argc+2); EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" newargz[1] = fnqualify(argv[0]); /* we know the script has the same name, without the .exe */ /* so make sure newargz[1] doesn't end in .exe */ strendzap(newargz[1],".exe"); for (i = 1; i < argc; i++) newargz[i+1] = xstrdup(argv[i]); newargz[argc+1] = NULL; EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" } void * xmalloc (size_t num) { void * p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL ; } char * basename (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha (name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return (char *) base; } char * fnqualify(const char *path) { size_t size; char *p; char tmp[LT_PATHMAX + 1]; assert(path != NULL); /* Is it qualified already? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha (path[0]) && path[1] == ':') return xstrdup (path); #endif if (IS_DIR_SEPARATOR (path[0])) return xstrdup (path); /* prepend the current directory */ /* doesn't handle '~' */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */ p = XMALLOC(char, size); sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path); return p; } char * strendzap(char *str, const char *pat) { size_t len, patlen; assert(str != NULL); assert(pat != NULL); len = strlen(str); patlen = strlen(pat); if (patlen <= len) { str += len - patlen; if (strcmp(str, pat) == 0) *str = '\0'; } return str; } static void lt_error_core (int exit_status, const char * mode, const char * message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } EOF # we should really use a build-platform specific compiler # here, but OTOH, the wrappers (shell script and this C one) # are only useful if you want to execute the "real" binary. # Since the "real" binary is built for $host, then this # wrapper might as well be built for $host, too. $run $LTCC -s -o $cwrapper $cwrappersource ;; esac $rm $output trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variable: notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$echo are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $echo >> $output "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || \\ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $mkdir \"\$progdir\" else $rm \"\$progdir/\$file\" fi" $echo >> $output "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $echo \"\$relink_command_output\" >&2 $rm \"\$progdir/\$file\" exit $EXIT_FAILURE fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else $echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2*) $echo >> $output "\ exec \$progdir\\\\\$program \${1+\"\$@\"} " ;; *) $echo >> $output "\ exec \$progdir/\$program \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit $EXIT_FAILURE fi else # The program doesn't exist. \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 \$echo \"This script is just a wrapper for \$program.\" 1>&2 $echo \"See the $PACKAGE documentation for more information.\" 1>&2 exit $EXIT_FAILURE fi fi\ " chmod +x $output fi exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" status=$? if test "$status" -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" # Add in members from convenience archives. for xlib in $addlibs; do # Extract the objects. case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "$mkdir $xdir" $run $mkdir "$xdir" status=$? if test "$status" -ne 0 && test ! -d "$xdir"; then exit $status fi # We will extract separately just the conflicting names and we will no # longer touch any unique names. It is faster to leave these extract # automatically by $AR in one run. $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 $AR t "$xabs" | sort | uniq -cd | while read -r count name do i=1 while test "$i" -le "$count" do # Put our $i before any first dot (extension) # Never overwrite any file name_to="$name" while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" do name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` done $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? i=`expr $i + 1` done done fi oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP` done fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else eval cmds=\"$old_archive_cmds\" if len=`expr "X$cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts $echo "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs # GNU ar 2.10+ was changed to match POSIX; thus no paths are # encoded into archives. This makes 'ar r' malfunction in # this piecewise linking case whenever conflicting object # names appear in distinct ar calls; check, warn and compensate. if (for obj in $save_oldobjs do $echo "X$obj" | $Xsed -e 's%^.*/%%' done | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2 $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2 AR_FLAGS=cq fi # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done for obj in $save_oldobjs do oldobjs="$objlist $obj" objlist="$objlist $obj" eval test_cmds=\"$old_archive_cmds\" if len=`expr "X$test_cmds" : ".*"` && test "$len" -le "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do eval cmd=\"$cmd\" IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. if test -z "$run"; then for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlfiles="$newdlfiles $libdir/$name" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlprefiles="$newdlprefiles $libdir/$name" done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $rm $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $echo >> $output "\ relink_command=\"$relink_command\"" fi done fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit $EXIT_SUCCESS ;; # libtool install mode install) modename="$modename: install" # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg="$nonopt" fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest="$arg" continue fi case $arg in -d) isdir=yes ;; -f) prev="-f" ;; -g) prev="-g" ;; -m) prev="-m" ;; -o) prev="-o" ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest="$arg" continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test "$#" -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi library_names= old_library= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$dir$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. if test "$inst_prefix_dir" = "$destdir"; then $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 exit $EXIT_FAILURE fi if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi $echo "$modename: warning: relinking \`$file'" 1>&2 $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 exit $EXIT_FAILURE fi fi # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. $show "$install_prog $dir/$srcname $destdir/$realname" $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$striplib $destdir/$realname" $run eval "$striplib $destdir/$realname" || exit $? fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. for linkname do if test "$linkname" != "$realname"; then $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" cmds=$postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.$objext) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run eval "$install_prog \$staticobj \$staticdest" || exit $? fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then file=`$echo $file|${SED} 's,.exe$,,'` stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin*|*mingw*) wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` ;; *) wrapper=$file ;; esac if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then notinst_deplibs= relink_command= # To insure that "foo" is sourced, and not "foo.exe", # finese the cygwin/MSYS system by explicitly sourcing "foo." # which disallows the automatic-append-.exe behavior. case $build in *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; *) wrapperdot=${wrapper} ;; esac # If there is no directory component, then add one. case $file in */* | *\\*) . ${wrapperdot} ;; *) . ./${wrapperdot} ;; esac # Check the variables that should have been set. if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 exit $EXIT_FAILURE fi finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done relink_command= # To insure that "foo" is sourced, and not "foo.exe", # finese the cygwin/MSYS system by explicitly sourcing "foo." # which disallows the automatic-append-.exe behavior. case $build in *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; *) wrapperdot=${wrapper} ;; esac # If there is no directory component, then add one. case $file in */* | *\\*) . ${wrapperdot} ;; *) . ./${wrapperdot} ;; esac outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir="/tmp" test -n "$TMPDIR" && tmpdir="$TMPDIR" tmpdir="$tmpdir/libtool-$$" save_umask=`umask` umask 0077 if $mkdir "$tmpdir"; then umask $save_umask else umask $save_umask $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 continue fi file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyways case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` ;; esac ;; esac $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? if test -n "$stripme" && test -n "$old_striplib"; then $show "$old_striplib $oldlib" $run eval "$old_striplib $oldlib" || exit $? fi # Do each command in the postinstall commands. cmds=$old_postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. cmds=$finish_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = : && exit $EXIT_SUCCESS $echo "----------------------------------------------------------------------" $echo "Libraries have been installed in:" for libdir in $libdirs; do $echo " $libdir" done $echo $echo "If you ever happen to want to link against installed libraries" $echo "in a given directory, LIBDIR, you must either use libtool, and" $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" $echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then $echo " - add LIBDIR to the \`$shlibpath_var' environment variable" $echo " during execution" fi if test -n "$runpath_var"; then $echo " - add LIBDIR to the \`$runpath_var' environment variable" $echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $echo " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $echo " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi $echo $echo "See any operating system documentation about shared libraries for" $echo "more information, such as the ld(1) and ld.so(8) manual pages." $echo "----------------------------------------------------------------------" exit $EXIT_SUCCESS ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit $EXIT_FAILURE fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi dir= case $file in *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit $EXIT_FAILURE fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -*) ;; *) # Do a test to see if this is really a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables if test "${save_LC_ALL+set}" = set; then LC_ALL="$save_LC_ALL"; export LC_ALL fi if test "${save_LANG+set}" = set; then LANG="$save_LANG"; export LANG fi # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" $echo "export $shlibpath_var" fi $echo "$cmd$args" exit $EXIT_SUCCESS fi ;; # libtool clean and uninstall mode clean | uninstall) modename="$modename: $mode" rm="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi rmdirs= origobjdir="$objdir" for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$file"; then dir=. objdir="$origobjdir" else objdir="$dir/$origobjdir" fi name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if (test -L "$file") >/dev/null 2>&1 \ || (test -h "$file") >/dev/null 2>&1 \ || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" if test "$mode" = uninstall; then if test -n "$library_names"; then # Do each command in the postuninstall commands. cmds=$postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. cmds=$old_postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. fi fi ;; *.lo) # Possibly a libtool object, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # Read the .lo file . $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" \ && test "$pic_object" != none; then rmfiles="$rmfiles $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" \ && test "$non_pic_object" != none; then rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) file=`$echo $file|${SED} 's,.exe$,,'` noexename=`$echo $name|${SED} 's,.exe$,,'` # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then relink_command= . $dir/$noexename # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac $show "$rm $rmfiles" $run $rm $rmfiles || exit_status=1 done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then $show "rmdir $dir" $run rmdir $dir >/dev/null 2>&1 fi done exit $exit_status ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE ;; esac if test -z "$exec_cmd"; then $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE fi fi # test -z "$show_help" if test -n "$exec_cmd"; then eval exec $exec_cmd exit $EXIT_FAILURE fi # We need to display help for each of the modes. case $mode in "") $echo \ "Usage: $modename [OPTION]... [MODE-ARG]... Provide generalized library-building support services. --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --tag=TAG use configuration variables from tag TAG --version print version information MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for a more detailed description of MODE. Report bugs to ." exit $EXIT_SUCCESS ;; clean) $echo \ "Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $echo \ "Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -static always build a \`.o' file suitable for static linking COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $echo \ "Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $echo \ "Usage: $modename [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $echo \ "Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $echo \ "Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac $echo $echo "Try \`$modename --help' for more information about other modes." exit $EXIT_SUCCESS # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) $echo no;; *) $echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: gnusim8085-1.4.1/ChangeLog0000644000175000017500000011576413003156555015017 0ustar carstencarsten2016-10-23 Onkar Shinde * configure.ac, installer.nsl.in, WINDOWS-PORT.txt: Force to build against GTK2 on Windows. * configure.ac, src/callsbacks.c, src/gui-editor.c, src/main.c: Used GLIB macro instead of autoconf variable for detecting Windows. Made the launch of help compatible with Windows. 2016-10-14 Onkar Shinde * configure.ac, src/callbacks.c: Launch HTML help from menu. * doc/help/gnusim8085.xml: Added correct links for license text. 2016-10-08 Onkar Shinde * src/interface.[c,h], src/callbacks.c: Used correct widgets depending on GTK version. Code clean up. 2016-10-02 Onkar Shinde * src/callbacks.c, src/gui-app.c, src/gui-list-message.c, src/interface.c: Cleaned up the code to reduce the widgets and made it more readable. 2016-09-26 Onkar Shinde * configure.ac, src/gui-editor.*, src/interface.c: Made it possible to build with GTK3 APIs. Use --with-gtk3 option of configure script. 2016-09-22 Onkar Shinde * m4/*, po/*, ABOUT-NLS, config.rpath, configure.ac: Updates to gettext macros and other related files to version 0.18.1. 2016-02-16 Onkar Shinde * po/*.po, PO/LINGUAS: New/Updated translations. * configure.ac, src/*: Bumped required GTK+ version, replaced use of deprecatd APIs, file handling using gio made default. * doc/help/Makefile.am: Install help files only if they are built. * WINDOWS-PORT.TXT, installer.nsi.in: Updated instructions, installer. 2016-01-30 Onkar Shinde * configure.ac, config.sub, config.guess, src/Makefile.am: Updates to make autotools happy. 2011-09-19 Onkar Shinde * configure.in, doc/Makefile.am, doc/help/*, autoclean.sh: Build system changes for providing HTML help pages converted from docbook files. 2011-09-11 Onkar Shinde * src/gui-editor.h: Use only top level headers for gtksourceview. * src/gui-editor.c, src/gui-list-message.c: In GtkTextBuffer line numbers start from 0. Take this into account when highlighting line. * src/file-op*.c: Fix cursor position as per sample program length. 2011-09-05 Onkar Shinde * installer.nsi.in, WINDOWS-PORT.txt: Updated Windows specific files as per recent changes. * src/gui-editor.c: Set appropriate unit for print operation. This is Windows specific change. Fixes printing on Windows. 2011-08-30 Onkar Shinde * src/main.c, src/interface.[c,h]: Remove url activation hook. Not needed anymore. * configure.in, src/gui-editor.c: Bump GtkSourceView requirement, remove corresponding ifdef. * configure.in, src/Makefile.am: Some generalization from point of view migration to GTK+ 3. 2011-08-21 Onkar Shinde * src/interface.c, src/support.c: Use accessor function instead of direct access to various struct members. Compiler flag 'GSEAL_ENABLE' is used to detect such direct access. * src/callbacks.c, src/interface.c, src/gui-input-symbol.c, src/gui-app.c: Replace deprecated API calls with those available in recent GTK versions. * configure.in: Bumped required GTK version as per above changes. * installer.nsi.in, WINDOWS-PORT.txt: Updated Windows specific files as per recent changes. 2011-05-14 Onkar Shinde * po/kn.po, po/el.po, AUTHORS: Updated translations from launchpad. * src/callbacks.[c,h], src/interface.c: Remove '8085 Manual' menu as it provides same functionality as Help -> Contents menu. * src/interface.c: Fix title of window that shows tutorial. * po/gnusim8085.pot, po/*.po: Updated translatable strings due to the recent code changes. 2011-05-12 Onkar Shinde * configure.in: Back to development, version bumped. * Makefile.am, configure.in, doc/Makefile.am, pixmaps/Makefile.am, po/POTFILES.in, src/Makefile.am: Remove references to Anjuta. 2011-02-20 Onkar Shinde * po/ta.po, po/LINGUAS, AUTHORS, NEWS: New Tamil translation from launchpad. Ready for release. 2010-12-12 Onkar Shinde * src/interface.c: Fix incorrect use of 'GTK_CHECK_VERSION' macro. * src/file-op.c, src/file-op-gio.c: Added code to save last directory from/to where file was opened/saved. Fixes bug LP:#680100. 2010-10-11 Aanjhan Ranganathan * src/8085-instructions.c: Added patch for bug LP: #579320. Thanks to Debjit Biswas. 2010-09-26 Onkar Shinde * src/callbacks.c: Add an error message to be shown when assembly tutorial file is not found. Mark 'Select font' string for translation. * po/gnusim8085.pot: Update to include latest strings. * po/*.po: Auto update. * po/ar.po: Updated Arabic translation from launchpad. 2010-09-25 Onkar Shinde * configure.in, src/main.c: Use autoconf variable to specify windows build. Use this variable to decide when to set 'localedir' to apprpriate windows directory. Fixes compiler warning on non-windows build. * installer.nsi.in: Show 'Run Program' checkbox in installer finish screen only when GTK+ installer is not embedded. This avoids an error being shown about dll loading. * src/bridge.c: Do not ignore breakpoints when stepping through code. Patch by Ramanathan. Fixes bug LP: #579318. 2010-09-24 Aanjhan Ranganathan * src/8085-instructions.c: CMP instruction should not check and set S, P and AC flags as there is no result that is computed. It affects only C and Z flags. Hence removed most code in that function. Fixes bug LP: #579320. * src/8085-instructions.c: Fixed the long standing DAA bug. Followed http://www.ray.masmcode.com/BCDdaa.html plus had to ensure the addition operation on the accumulator must be done using the _eef_inst_func_add_i function so as to ensure setting of the carry and other flags. Fixes bug LP: #584093. 2010-09-18 Onkar Shinde * src/gui-editor.[c,h]: Add variable to save current font. Add function to get current editor font. * src/interface.c, src/callbacks.[c,h]: Add ability to change editor font. Thanks to Ramanathan for patch. Fixes bug LP: #579322. * po/ar.po, po/es.po: Updated translations from launchpad. * src/file-op.c, src/file-op-gio.c: Fix file not getting added to recent list when saving under different name. * src/callbacks.c: Update the memory and I/O views when doing resets. 2010-08-29 Onkar Shinde * src/gui-list-message.c: Highlight the line containing error when selecting the error message from message pane. Fixes bug LP: #519834. * src/bridge.c: Clear all highlighting when assembling program. * doc/example/*.asm: Add copyright and license information to existing sample programs. * doc/examples/sorting.asm, doc/examples/sumofnumbers.asm: Add sample programs submitted by Kirantej. * installer.nsi.in: Use better (easily understandable) names for installers. Add new sample programs to the list of 'read only' files. 2010-08-25 Onkar Shinde * README, TODO, doc/asm-guide.txt, doc/gnusim8085.1: Update website URL. * src/gui-editor.[c,h]: Add function to toggle display of line numbers. Add function to toggle mark at certain line. Add function to allow marks to be toggled by clicking left margin. * src/callbacks.c: Use new function to not display line numbers in tutorial window. Add callback function to detect button click on margin and toggle mark accordingly. Fixes LP: #519836. * src/gui-app.h: Use new function to allow mark to be toggled by clicking on left margin only in case of editor component. 2010-08-22 Onkar Shinde * installer.nsi.in: Allow specifying mingw home directory via command line arguments when creating installer. Split translations in separate component so that users can choose not to install them. Add asm-guide.txt file to the list of files to be installed. Add iconv.dll file as well to make the application work with default install of latest GTK+ runtime. * src/support.[c,h]: Add function to load tutorial from asm-guide.txt. * src/interface.[c,h]: Add function to create interface to display tutorial. * src/callbacks.[c,h]: Add function to display tutorial text. Modify callback functions to show the tutorial instead of just pointing to it. Fixes LP: #579317. * po/gnusim8085.pot, po/*.po: Updated as per latest UI changes. 2010-08-17 Onkar Shinde * src/*.c, src/*.h, src/Makefile.am: Add editable I/O listing as a tab. This is based on Debajit's work for memory editing. Hence copyright of new files stays with him. Fixes LP: #579324. 2010-06-22 Onkar Shinde * src/*.[c,h]: Fix postal adress of FSF in file headers. Makes licensecheck program in Debian happy. * COPYING: Include exact text of license as available on FSF's website. Includes address change ans other minor formatting changes. * data/8085asm.lang: Add copyright/license information. * config.guess, config.sub: Update to a bit recent copy of the files. * Makefile.am: Do not install ChangeLog. Let distributions decide if it should be included in binary packages. 2010-06-20 Onkar Shinde * po/pt_BR.po: Updated Brazilian Portuguese translation from launchpad. * src/gui-list-message.c: Wrap assembler messages in the table cells. Fixes UI problems when messages or translations are too long. * src/asm-listing.c: Use tab instead of space for alignment in assembler listing window. 2010-06-08 Onkar Shinde * src/file-op.c, src/file-op-gio.c: Add files opened/saved to recently used file list. This way they show up in 'Recently Used' section of file chooser dialog. * src/interface.[c,h], src/support.[c,h]: Add copyright header since the files are not 'generated' for long time. * src/gui-list-memory.[c,h]: Allocate copyright to Debajit Biswas as these files were created from scratch for a new functionality. * src/installer.nsi.in: Clear copyright statement. 2010-06-04 Onkar Shinde * src/interface.c: Fix icon loading on Windows by using fallback icon. * tools/: Remove files from initial stages of development. Not needed anymore. * GNUSim8085.prj: Remove because none of the maintainers use Anjuta. * GNUSim8085.glade: Remove as discussed on mailing list. 2010-06-03 Onkar Shinde * src/Makefile.am: Unbreak linux build. Stupid mistake about CFLAGS. * src/main.c: Fix crash on linux. * installer.nsi.in: Add more languages to installer. * po/de.po, AUTHORS: Updated German translation from launchpad. * src/src/gui-list-data.c, src/gui-list-stack.c: Split translatable string into two. Makes reuse of translations. 2010-06-01 Onkar Shinde * po/*.po, AUTHORS: Updated translations from Launchpad. * src/main.c, src/Makefile.am, installer.nsi.in, WINDOWS-PORT.txt: Some modifications to make i18n support work on Windows. 2010-05-31 Onkar Shinde * src/*.c, src/*.h, src/Makefile.am, AUTHORS: Add editable memory listing as a tab, thanks to Debajit for the huge patch. :-) Fixes: LP: #579341. 2010-05-26 Onkar Shinde * src/interface.c: Change startup dialog from GtkWindow to GtkDialog. The 'modal' behaviour works as expected. Fixes LP: #519828. * po/de.po, AUTHORS: Updated German translation from launchpad. * src/interface.c, po/gnusim8085.pot: Move format tags outside translatable strings. Update pot file accordingly. * po/*.po: Semi-auto update of translations as per latest pot file. 2010-05-25 Onkar Shinde * src/support.c: Fix stupid mistake - trying to access message from null error object. Remove the corresponding variable as it is never initialized. Fixes LP: #579319. 2010-05-23 Onkar Shinde * po/it.po: Updated Italian translation from launchpad. * po/el.po, po/LINGUAS, AUTHORS: Greek translation. 2010-05-01 Onkar Shinde * po/pt_BR.po, po/LINGUAS, AUTHORS: Brazilian Portuguese translation. 2010-03-19 Onkar Shinde * installer.nsi.in: Don't use hard coded GTK version in message boxes. Add a generic function for checking existing GTK installations. Call it from init function. Add a function to uncheck the GTK checkbox on components page depending on existing GTK installation. Modify the AskForGtk function to use variables set by CheckGtk. Make the installer request for admin privileges for proper functioning. 2010-03-12 Onkar Shinde * installer.nsi.in: Use the MUI method for setting icon for installer. Add functionality to embed GTK+ runtime installer. Changes derived from public domain script of GSmartControl. * pixmaps/gnusim8085_icon*: Delete old icon files. 2010-03-09 Onkar Shinde * configure.in, NEWS: Start working on new release. * po/*.po, AUTHORS: Updated translations from launchpad. 2010-02-27 Onkar Shinde * po/Makevars*: Change the bug reporting address in Makevars. Delete redundant Makevars.template. * po/gnusim8085.pot: Update to reflect the new bug reporting address. * po/*.po: Add BSD (3-Clause) license header where it was missing. Auto update of all files as per latest source. * po/Makefile.in.in: Don't update pot file when doing make dist to avoid the pot file header being overwritten. Don't include gmo files in distribution. Instead generate them at install time. Include COPYING file in distribution. * po/COPYING: Add file specifying the 3-Clause BSD license of translations. * installer.nsi.in: Add more languages to installer. * NEWS: Add prefix to bug numbers to indicate they are from sourceforge.net. 2010-02-14 Onkar Shinde * configure.in pixmaps/*, GNUSim8085.desktop.in, installer.nsi.in, src/interface.c, AUTHORS: New icon. 2010-01-31 Onkar Shinde * src/interface.c, src/callbacks.*: Add basic printing support for program editor as well. * po/gnusim8085.pot: Update to include the tooltip for newly added button. 2010-01-30 Onkar Shinde * src/interface.c, src/callbacks.*: Introduce a toolbar button to show/hide the data pane. This allows the user to have more screen space for program editing. * po/gnusim8085.pot: Update to include the tooltip for newly added button. * po/*.po, po/LINGUAS, AUTHORS: Arabic, Asturian, Esperanto, Italian translation. 2010-01-28 Onkar Shinde * po/de.po, po/LINGUAS, AUTHORS: German translation. * src/file-op-gio.c: Use GIO APIs for saving assembly listing. 2010-01-26 Onkar Shinde * configure.in, src/file-op-gio.*, src/Makefile.am: Experimental file handling with GIO APIs, disabled by default. * configure.in: Change website URL to www.gnusim8085.org. 2010-01-25 Onkar Shinde * po/*.po, AUTHORS: Updated Gujarati and Spanish translation from launchpad. 2010-01-24 Onkar Shinde * po/fr.po, po/LINGUAS, AUTHORS: French translation. 2010-01-17 Onkar Shinde * doc/Makefile.am: Fix a small problem in man page installation. * configure.in: Remove some redundant path definitions. Fix PACKAGE_URL declaration. * pixmaps/Makefile.am: Use PACKAGE_PIXMAPS_DIR directly. * Makefile.am: Use docdir directly. * src/Makefile.am: Move PACKAGE_DOC_DIR definition here. It is only used in source code and no other place. * .gitignore: Ignore all .gmo files. * src/8085.h, src/interface.c, src/support.h: Mark menu labels and tooltips for translation. Call the GTK+ helper function for translation. * po/*.po, po/gnusim8085.pot: Update as per code changes. 2010-01-15 Onkar Shinde * doc/Makefile.am: Better handling of installation of examples and manpage. * po/*: Spanish translation. 2009-12-29 Onkar Shinde * configure.in: Define a variable if gtksourceview version is >= 2.8. * src/gui-editor.c: Improve the change by Sridhar to use different methods based on gtksourceview version. * src/interface.c: Use gtk_show_uri, in the hook for about dialog, when available (GTK+ >= 2.14.0). * configure.in, src/interface.c, src/asm-listing.c: Define website url in configure.in and use it everywhere instead of hard coded value. * src/gui-editor.c: Print website url in footer. Now that we have a footer reduce bottom margin. * po/*: Updated as per latest changes in code. 2009-12-28 Sridhar Ratnakumar * src/gui-editor.c: Fix deprecation warning from GtkSourceView 2009-12-28 Onkar Shinde * configure.in: Gettext version updated to 0.17. Removed a bunch of redundant declarations. * src/main.c: Change variables in gettext calls to match changes in configure.in. * src/Makefile.am: Fix setting of variable LOCALEDIR. * ABOUT-NLS, config.rpath, m4/*, po/Makefile.in.in, po/Makevars.template: Added/updated by gettextize. * src/interface.c: Fixed some translatable strings. * po/gnusim8085.pot: Auto update. Also fixed copyright in header. * po/LINGUAS, po/gu.po: Add initial Gujarati translation by Kartik Mistry. * po/Makefile.in.in: Clean up .gmo files in distclean target. * AUTHORS: Add Kartik to translators list. 2009-12-26 Onkar Shinde * Makefile.am, autoclean.sh: Move the deletion of certain generated files to autoclean.sh. They should not be deleted in distclean target. 2009-12-25 Onkar Shinde * src/bridge.c: Remove a code block that was not being used. * src/gui-app.c: Fix a compiler warning in dialog creation. * data/8085asm.lang: Add underscore ('_') to the regular expression for label. Fixes SF #2580092. * installer.nsi.in: First shot at installer with modern UI. Adds multi-language interface and 'Run program' finish page. * configure, autogen.sh, *Makefile.in, config.h.in: Delete the generated files that should not be in repository. Add minimal autogen.sh. Going forward when compiling from VCS ./autogen.sh needs to be run first. Source tar balls will still contain configure script. * configure.in: Add some checks suggested by autoscan. Use 'silent-rules' macro for automake when available (automake >= 1.11). Makes compiler output pretty. * Makefile.am: Delete the autogenerated files, *.gz and *.exe in distclean target. * .gitignore: Add appropriate files to the ignore list. 2009-12-24 Sridhar Ratnakumar * src/file-op.[c,h], src/callback.c: Fix SF bug #2356534 - basic file handling errors (confirm before exit, etc..). Patch by Puneeth Bhat. * src/asm-listing.c: Add project webpage to listing (for network effects) 2009-12-24 Onkar Shinde * installer.nsi.in: Add commands to make example files read only. Remove exclusion of svn directories. We are not using svn anymore. :-) * WINDOWS-PORT.txt: We need GTK+ 2.12 only. So modify download instructions accordingly. * src/interface.c: Fix button mnemonics not getting set on starting dialog in latest GTK version. 2009-12-23 Onkar Shinde * src/callbacks.[c,h], src/gui-editor.[c,h], src/interface.c: Add basic printing support to assembly listing window. Print settings are not saved. * src/callbacks.c, src/asm-listing.c: Make the text view in assembly listing read only. Update the message at the top accordingly. * src/interface.c: Remove the images used in 'Registers' and 'Flag' boxes. They really have no significance. * po/gnusim8085.pot: Auto updated with 'make dist'. * doc/examples/*.asm: Replace unnecessary tabs with spaces. Makes programs easy on eyes in the small editor area. 2009-12-20 Onkar Shinde * src/gui-keypad.c: Process keypad button events only when the mode is not debug. Fixes SF #2462607. * src/interface.c: Add certain size to assembler listing window. Fixes SF #1942893. * data/8085asm.lang: Add sp to the list of registers. Fixes SF #2582426. * Makefile.[am,in], GNUSim8085.desktop.in: Merge patches from Debian. 2009-12-19 Onkar Shinde * src/gui-app.c, src/gui-keypad.c, src/gui-list-message.c, src/interface.c: Swap horizontal and vertical panes for better arrangement of widgets. Provides more vertical and slightly more horizontal area to the editor. 2009-07-16 Aanjhan Ranganathan * src/asm-genobj.c: iAdded more description invalid operand error message. * src/gui-list-message.c: Fixed wrong line highlight issue. 2008-12-21 Onkar Shinde * AUTHORS: Add Krishna Bharadwaj to list of patch contributors. Modify Sridhar's email id. * src/support.[c,h]: Add function to read authors list from AUTHORS file. Remove unused functions. * src/interface.c: Call function to read authors from AUTHORS file. * po/gnusim8085.pot: Auto updated. * debian/: There is no point of maintaining our own version of packaging files. Hence remove the directory. 2008-12-20 Aanjhan Ranganathan * src/8085-instructions.c: fix DAD instruction carry set/reset bug. Thanks to Aditya M for the patch. * AUTHORS: Changed Onkar's email id. 2008-12-11 Onkar Shinde * src/interface.c: Fix warnings about deprecated non-zero page size in spin button. * src/file-op.c: Set setting for overwrite confirmation. It will get used for 'Save As' action. Fix compiler warnings because of the ignored return values of some file related functions. * src/callbacks.c: Call gui_editor_show for listing window so syntax highlighting gets activated. * data/8085asm.lang: Make syntax highlighting case insensitive. Fix labels not getting highlighted in listing window. Fix hex opcodes or addresses not getting highlighted in listing window. * AUTHORS: Add Madhusudan and Aditya in list of patch contributors. * NEWS: Fix news file. We have not yet released 1.3.5. * TODO: Minor update. * GNUSim8085.prj, src/asm-id.h: Remove irrelevant scintilla references. 2008-09-22 Onkar Shinde * configure.in: Add AC_CANONICAL_HOST so --host option actually gets used. * configure: Auto updated. * installer.nsi.in: We now don't need the workaround for gtksourceview win32 distribution problem. * NEWS: Add the release date and update features list. * TODO: Minor update. * WINDOWS-PORT.txt: Update the instructions to use gtksourceview 2.4. Also we now don't need to add target=win32 to the .pc file. 2008-09-18 Onkar Shinde * src/file-op.c: Add file filter for extension .asm * src/gui-editor.c: Additional search path of current directory for style file. * src/gui-view.[c,h], src/callbacks.c: Show updated register and flag with bold font, except when doing 'Reset All'. Known issue - last updated register and flag stays bold even after program has finished executing. * src/interface.c: Set scrollbar policy to automatic. Scrollbar is only shown when needed. Update icon for hex -> decimal conversion button. * data/8085asm.lang: Update the language definition as per specification version 2.0. * installer.nsi.in: Change installer title, start menu group and shortcut, default installation directory. Update file list to workaround problem with gtksourceview win32 distribution. * WINDOWS-PORT.txt: Minor updates. * NEWS: Update for yet unreleased 1.3.5 version. 2008-09-09 Onkar Shinde * src/gui-editor.[c,h]: Use style scheme manager to set style search path and default style. * installer.nsi.in: Include file for style scheme "classic". 2008-09-07 Aanjhan Ranganathan * src/asm-id.c: Added mneumonic descriptions. * Fixes SF bug #1875401. 2008-09-07 Onkar Shinde * pixmaps/gnusim8085_icon.ico: Add icon for Windows * src/support.c: Additional logic for icon file lookup. Works when running directly from svn and also in Windows. * installer.nsi.in: Use .ico file as icon for installer. Use .ico instead of .png for menu shortcut. 2008-09-04 Onkar Shinde * configure.in: Add installer.nsi.in * installer.nsi.in: Template for generating installer script to be used with NSIS. * WINDOWS-PORT.txt: Updated with status about installer. * configure, Makefile.in: Auto updated. 2008-09-03 Onkar Shinde * configure.in: Update to check gtksourceview2 >= 2.2 and gtk >= 2.12. Also removed libgnomeui variables. * GNUSim8085.desktop.in: Fix some of the problems reported by desktop-file-validate. * Makefile.am: Install desktop file in universal location used by freedesktop specification. * WINDOWS-PORT.txt: Updated as per current status. * src/8085-instructions.h: Fix array overflow by incrasing array size. * src/asm-id.[c,h]: Add element in IdOpcode structure for description. * src/gui-editor.[c,h]: Move the gtksourceview2. * src/interface.c, src/gui-keypad.c: Move to new GtkToolTip api from gtk 2.12 for easy tooltip management. * src/Makefile.am: Replace gtksourceview cflags and libs with gtksourceview2. * data/8085asm.lang: Add an id for new search gtksourceview2 search api. * data/Makefile.am: Install .lang file in our own directory. * aclocal.m4, config.h.in, configure, Makefile.in, data/Makefile.in, doc/Makefile.in, pixmaps/Makefile.in, src/Makefile.in: Auto updated. 2008-08-28 Aanjhan Ranganathan * configure, Makefile.in, aclocal.m4, src/Makefile.in: Auto updated by autotools removing libgnomeui dep for Windows. * WINDOWS-PORT.txt: Removed configure changes from the to do list. * Bump application version to 1.3.5 2008-08-05 Aanjhan Ranganathan * Bump Application version to 1.3.4 * Fixes SF bug #1936852. Thanks to Missouga Dongi 2008-05-29 Aanjhan Ranganathan * Fixes SF bug #1966993. Thanks to Marcelo Souza 2008-02-18 Aanjhan Ranganathan * Bump application version to 1.3.3 * Merge changes for Windows port done by Srid 2008-02-07 Sridhar Ratnakumar * file-op.[c,h] - Fix the file selectors to show ALL files. * 8085.c,interface.[c,h],main.c,support.[c,h] - Removed GNOME dependency. 2008-01-29 Onkar Shinde * src/*.h, src/main.c - Remove unneeded headers. Adjust sources for using i10n functions from libc. * src/Makefile.* - Small correction 2007-12-06 Onkar Shinde * Makefile.am (ACLOCAL_AMFLAGS): New variable. (EXTRA_DIST): Add config.rpath, m4/ChangeLog. Removed macros directory. * configure.in (AM_GNU_GETTEXT_VERSION): Bump to 0.16.1. Removed macros directory. * configure, Makefile.in, aclocal.m4, src/Makefile.in: Auto updated by autotools. * ABOUT-NLS, config.rpath: Added/changed by gettextize. * src/Makefile.am,src/main.c: Changes as per gettext manual. * m4/: Added by gettextize. Refer to corresponding ChangeLog * po/*: Refer to corresponding ChangeLog 2007-12-05 Onkar Shinde * configure.in, Makefile.am: Use external gettext functions provided by libc. Don't build files in intl/ directory. * configure, Makefile.in, src/Makefile.in, pixmaps/Makefile.in, doc/Makefile.in, data/Makefile.in, macros/Makefile.in, config.h.in, aclocal.m4: Automatically updated by autotools * src/8085-instructions.c: Remove redefinition of _(X) * intl/: Delete directory as it won't be used anymore. 2007-12-05 Onkar Shinde * GNUSim8085.prj, po/POTFILES.in: Removed redundant file support-common.h. * src/*: Removed redundant file support-common.h. Moved non-local imports to header files. 2007-12-04 Onkar Shinde * configure*: Lowered libgnomeui_required to 2.14.0. Fixes #1815280. * Makefile.*: Changed install location of .desktop file to ${datadir}/applications which is used by freedesktop compatible desktop environments. * AUTHORS: Added 'Fernando Munoz' in 'Patch Contributors' list. Changed Onkar's and Sridhar's email address. * GNUSim8085.desktop.in: Remove deprecated and invalid fields. Added categories for application. * src/interface.c: Added 'Patch Contributors' list to about dialog. Changed Onkar's and Sridhar's email address. * src/file-op.c: Incorporated Fernando's patch for file dialogs. Fixes #1683318. 2007-10-16 Onkar Shinde * configure*: Lower the versions of dependencies to the actual required. Bump application version to 1.3.2. * aclocal.m4: Automatically updated * debian/patches/*: Remove patches used for fixing debian build and dependencies' versions. * src/*: Remove ambiguous message about keypad stability. Fix bug #1683342. * data/8085asm.lang: Fix bug #1683228. * po/*: Fix debian build. .pot file automatically updated. 2007-09-22 Onkar Shinde * debian/*: Multiple changes and patches to fix debian build and lower build dependency to the actual required. No changes to source. 2007-08-31 Onkar Shinde * src/interface.c: Some cleanup in dialogs. Also don't use hard coded stock ids. 2007-08-24 Onkar Shinde * src/*.(c,h): Changes some GNOME widgets to GTK widgets. * configure*, **/Makefile*, aclocal.m4: Check proper versions while checking development packages, more verbose errors. 2007-07-07 Onkar Shinde * data/8085asm.lang: Corrected expression for dz and cmc * src/: Replace most GNOME UI widgets with GTK+ widgets. Move non-local header includes to local header files instead of source files. Replace occurrences of tabs ('\t') with space (' '). 2007-03-19 Aanjhan Ranganathan * data/8085asm.lang: Added the patch submitted by Fernando Munoz. 2007-02-11 Onkar Shinde * src/interface.c, src/bridge.c: Disable 'Stop Debug' menu and button when not in debug mode. Fixes bug #1656194 * src/gui-editor.h, src/gui-editor.c: Scrolling in debug mode, proper line highlighting. Fixes bug #1656191 * src/interface.c, po/gnusim8085.pot: Register and flag names are not tranlatable now. 2007-02-08 Onkar Shinde * src/gui-editor.h, src/gui-editor.c: Make breakpoints work 2007-01-27 Onkar Shinde * src/gui-editor.h, src/gui-editor.c: Line highlight in debug mode 2007-01-21 Onkar Shinde * src/interface.c, src/interface.h, src/callback.c: Change the way about dialog is shown. Fixes bug #1556427. 2007-01-17 Onkar Shinde * src/gui-editor.h, src/gui-editor.c: Add scroll window and make it parent of text widget, add method to set font, default to "Monospace 12" * src/gui-app.c, src/callbacks.c: Pack scroll window instead of text widget 2007-01-14 Onkar Shinde * debian/: Files needed for creating debian packages * configure.in, configure, Makefile.am, Makefile.in, data/: Install .lang file in ${prefix}/share/gtksourceview-1.0/language-specs directory, add it to package distribution * po/: gettext domain name is changed, so .pot file is updated * License.txt: Deleted as GNUSim8085 doesn't use scintilla anymore 2007-01-07 Aanjhan Ranganathan * auto-tools: Moved to Auto make 1.9 * Makefile.am: Will automaticaly copy the .lang file to the /usr/share /gtksourceview-1.0/language-specs directory 2007-01-04 Onkar Shinde * src/gui-editor.h, src/gui-editor.c: Syntax highlighting code * data/8085asm.lang: Language specification file to use with gtksourceview * GNUSim8085.desktop.in: Revert last change which caused icon not to show in menu entry 2006-12-31 Onkar Shinde * src/gui-editor.h, src/gui-editor.c: Replaced scintilla widget with gtksourceview widget, basic editing is working * src/: Removed scintilla source files * src/Makefile.am, po/POTFILES.in: Remove scintilla source file names * configure.in: Updated version, added check for gtksourceview, changed doc directory path * configure: Updated by autoconf * config.h.in: Automatically updated * Makefile.am: Changed doc directory path, updated doc file list * Makefile.in, src/Makefile.in, pixmaps/Makefile.in, doc/Makefile.in, macros/Makefile.in: Updated by automake * GNUSim8085.desktop.in: Changed icon path * doc/gnusim8085.1: Minor correction * TODO: Updated according to current state of application 2006-9-18 Aanjhan Ranganathan * Fixed Bug related to DAA(reopened). Thanks to Dinesh * Fixed the PCHL Bug. 2006-9-13 Onkar Shinde * Fixed some assertion failures while closing window * Some clenup 2006-9-11 Aanjhan Ranganathan * Solved bug on DAA Instruction 2006-9-11 Onkar Shinde * Use gtk stock items for some of the menus * Change configure script to check GTK+ >= 2.6.0 2006-8-07 Onkar Shinde * Fixed a bug with menus being disabled while debugging * Addded url handler for about dialog * Disable file actions and reset actions while debugging 2006-8-05 Onkar Shinde * Migrated menus and toolbar from GnomeUIInfo to GtkAction, GtkActionGroup, GtkUIManager system. * As result of the above, keyboard shortcuts actually work. * Changed keyboard shortcuts for some menus. 2006-7-31 Onkar Shinde * Replaced GtkFileSelecton with GtkFileChooserDialog. * Replaced GnomeAbout with GtkAboutDialog. * Compilation will need GTK+ 2.6 at least. 2006-7-20 Onkar Shinde * Apply patch 964792 submitted by Alexander Shigin. Corrects 'PUSH PSW' instruction behaviour. 2006-7-20 Onkar Shinde * Update to scintilla 1.66 * Updated build scripts 2004-01-25 Sridhar Ratnakumar * 8085-instructions.h: removed 'extern' just before G_END_DECLS (fixes string.h bug) * *.*: _() macro, now working * glade: icon for all dialogs 2004-01-01 Sridhar Ratnakumar * gui-app.c: removed gdk* functions * *.c: encapsulated all strings in _() macro for translation 2003-12-30 Sridhar Ratnakumar * 8085-instructions.c: In _eef_inst_func_47, fixed ~(instead of !) * 8085-instructions.c: In _eef_is_carry, return value of op '-' changed * 8085-instructions.c: ADD, ADC, SUB, SBB M bug fixed * file-op.c: In fs_cb_save_listing, invalid cast of button to fileselection fixed * glade: changed main windows title acc. to gnome hig * 8085-instructions.c: Oops! XCHG was not at all implemented. Now done. * glade: Hacked glade sources and saved the changes in tools/glade_reinsert.c 2003-12-28 Sridhar Ratnakumar * asm-id.c: Fixed *ACI* bug * 8085-instructions.c: ACI int-len 1 -> 2 * 8085-instructions.c: Fixed add(sub)-with-carry function 2003-12-07 Sridhar Ratnakumar * 8085-instructions.c: Added warning messages for unimplemented instructions 2003-12-07 Sridhar Ratnakumar * gui-keypad.c: fixed crash bug in cb_clicked (which is why that large gap!) * gui-editor.*: added gui_editor_grab_focus * asm-id-info.*: added to project * *: modified all files to reflect the new mail-id * asm-ds-limits.h: opcode length = 5 (smaller size!) 2003-11-21 Sridhar Ratnakumar * gui-input-symbol.c: added gui_input_reg() * asm-id.*: added util funcs * gui-keypad.c: 90% completed * scintilla sources: funcs to insert text * project: added dependency "libiconv" - otherwise i get linker error FIXME 2003-11-11 Sridhar Ratnakumar * asm-id.c: removed double semi-colon (thanks Shaun) 2003-11-04 Sridhar Ratnakumar * *: Fixed anjuta project to include doc files 2003-11-03 Sridhar Ratnakumar * file-op.c: on creating new file template code is set * *.*: autoconf is working properly in slackware 2003-11-02 Sridhar Ratnakumar * file-op.c: dialogs will now be modal * callbacks.c: removed funcs file_ok_sel, i_save * warnings: suppressed all warnings (platform: slackware 9) * *.c: changed g_sprintf to g_snprinf, so more stable software! * main.c: filename can be passed in command line! 2003-10-24 Sridhar Ratnakumar * gui-input-symbol.c: made it working ;-)g * file-op.c: changed error messages format 2003-10-09 Sridhar Ratnakumar * gui-keypad.[ch]: added files 2003-10-04 Sridhar Ratnakumar * :moved all *.h files in include/ to src/ 2003-09-31 Sridhar Ratnakumar * 8085-instructions.c: shld, ral, rar, stc - modified 2003-08-26 Sridhar Ratnakumar * bridge.c: clear the stack * gui-list-stack.c: stack view is working (in beta) * gui-list-stack.c: <-- started working after beta release --> * gui-list-stack.c: code rewrite for attaining efficient execution by updating stack view only during breakpoints or trace. * asm-ds-symtable.[ch]: added listing_no member to AsmSymEntry and modified appropriate functions * asm-ds-symtable.[ch]: added functionality to search for symbol given data(addr) * asm-gensym.c: Due to above modifications, this is also modified * gui-list-stack.c: print function(call) name in view * [*].c: replaced "gnome_error_dialog" with "gtk_message_dialog" * gui-list-stack.c: fixed add() 8bit - 16bit data 2003-08-13 Sridhar Ratnakumar * 8085-asm.c: Show success msg after assembling * gui-list-data.c: changed globals to static * 8085-[ins*].c: added support for stack change callback 2003-08-04 Sridhar Ratnakumar * file-op.c: Each file-selection dialog has its own title * bridge.c: addes statusbar information display * gui-view.c: fixed io-mem-update bug. 2003-08-03 Sridhar Ratnakumar * asm-gen[sym,obj].c: fixed assembler syntax - "equ" symbol - used with pseudo ops also * sci*face.cc: fixed "last char not begin saved" bug - (len ==> len + 1) * file-op.c: fixed "critical save bugs" (sometimes extra lines, or stripped lines!) * glade: changed text in about dialog * :-- Added copyright messages to all source files written my me! * bridge.c: fixed: breakpoints are considered only when not stepping! 2003-07-31 Sridhar Ratnakumar * bridge.c: Implemented "step in", "step out" * callbacks.c: glade update * main.c: Added widgets for dec-hex converstion * gui-list-stack.[ch]: Added source for stack trace * scintilla-interface.cc: Fixed - automatic view update on cursor change * main.c: added start-with dialog * bridge.c: Fixed - file-op widgets disable on debug * glade: removed "run to cursor" functionality - considered redundant * file-op.c: added automatic breakpoint syntax for assembly code * scintilla: archives (binaries) are replaced with sources (lesser package size!) 2003-07-25 Sridhar Ratnakumar * :Released 1.1 (first stable release) with lot of bugs, of course! (coded in just 2 days!) gnusim8085-1.4.1/data/0000755000175000017500000000000013327663074014150 5ustar carstencarstengnusim8085-1.4.1/data/Makefile.am0000644000175000017500000000033313327010024016160 0ustar carstencarstengsvlangspecdir = $(PACKAGE_DATA_DIR) gsvlangspec_DATA = \ 8085asm.lang if !WIN32 metainfodir = ${datarootdir}/metainfo metainfo_DATA = gnusim8085.appdata.xml endif EXTRA_DIST = $(gsvlangspec_DATA) $(metainfo_DATA) gnusim8085-1.4.1/data/8085asm.lang0000644000175000017500000001060412767046204016116 0ustar carstencarsten