void run_all(apr_pool_t *pool, int argc, const char * const *argv) { const char *from_file_path; const char *to_file_path; if (argc != 3) { THROW(MESSAGE_ARGUMENT_INVALID); } from_file_path = argv[1]; to_file_path = argv[2]; if (!File::is_exist(pool, from_file_path)) { THROW(MESSAGE_FILE_NOT_FOUND); } show_item("from_file_path", from_file_path); show_item("to_file_path", to_file_path); show_line(); run_copy(pool, from_file_path, to_file_path); }
static int play_add(void) { PcbItem **cur; if (find_action_item(&cur, 0)) { switch (pcb.action->act & PCB_ITEM) { case PCB_POINT: g_warning("invalid add point: %f %f\n", pcb.action->c.x, pcb.action->c.y); break; case PCB_LINE: g_warning("invalid add line: %f %f %f %f\n", pcb.action->c.x, pcb.action->c.y, pcb.action->l.x, pcb.action->l.y); break; } return 0; } *cur = new_pcb_item(pcb); (*cur)->type = pcb.action->act & PCB_ITEM; (*cur)->layers = pcb.action->layers; (*cur)->flags = pcb.action->flags; switch ((*cur)->type) { case PCB_POINT: (*cur)->p = pcb.action->c; g_print("add point [%llx] (%f %f)\n", (*cur)->layers, (*cur)->p.x, (*cur)->p.y); break; case PCB_LINE: if (((*cur)->l.point[0] = find_point(pcb.action->c, pcb.action->layers)) && ((*cur)->l.point[1] = find_point(pcb.action->l, pcb.action->layers))) { g_print("add line [%llx] (%f %f) (%f %f)\n", (*cur)->layers, (*cur)->l.point[0]->p.x, (*cur)->l.point[0]->p.y, (*cur)->l.point[1]->p.x, (*cur)->l.point[1]->p.y); break; } g_warning("invalid line: %f %f %f %f\n", pcb.action->c.x, pcb.action->c.y, pcb.action->l.x, pcb.action->l.y); /* FAlLTHRU */ default: g_free(*cur); *cur = NULL; return 0; } show_item(*cur); return 1; }
static int play_change_layers(int unchange) { PcbItem **cur; if ((pcb.action->act & PCB_ITEM) != PCB_POINT) { g_warning("invalid change layers: wrong item type\n"); return 0; } if (!find_action_item(&cur, unchange)) { g_warning("invalid toggle layers: %f %f\n", pcb.action->c.x, pcb.action->c.y); return 0; } (*cur)->layers = unchange ? pcb.action->layers : pcb.action->newlayers; g_print("change layers to [%llx] (%f %f)\n", (*cur)->layers, (*cur)->p.x, (*cur)->p.y); show_item(*cur); return 1; }
static int play_toggle_flags() { PcbItem **cur; if ((pcb.action->act & PCB_ITEM) != PCB_POINT) { g_warning("invalid toggle: wrong item type\n"); return 0; } if (!find_action_item(&cur, 0)) { g_warning("invalid toggle: %f %f\n", pcb.action->c.x, pcb.action->c.y); return 0; } (*cur)->flags ^= pcb.action->flags; g_print("toggle flags %x [%llx] (%f %f)\n", pcb.action->flags, (*cur)->layers, (*cur)->p.x, (*cur)->p.y); show_item(*cur); return 1; }
void run_copy(apr_pool_t *pool, const char *from_file_path, const char *to_file_path) { volatile double start_time; volatile double end_time; apr_mmap_t *from_file_map; const char *from_file_data; apr_size_t write_size; apr_size_t remain_size; show_test_name("copy"); File from_file(pool, from_file_path); from_file.open(APR_READ|APR_BINARY); from_file_map = from_file.mmap(); File to_file(pool, to_file_path); to_file.open(APR_CREATE|APR_TRUNCATE|APR_READ|APR_WRITE|APR_BINARY); MmapFileWriter to_file_writer(pool, to_file.get_handle()); remain_size = static_cast<apr_size_t>(from_file.get_size()); // 4G の壁 from_file_data = AS_CONST_CHAR(from_file_map->mm); start_time = get_usage_sec(); while (remain_size > 0) { write_size = (remain_size > BUFFER_SIZE) ? BUFFER_SIZE : remain_size; to_file_writer.write(from_file_data, write_size); from_file_data += write_size; remain_size -= write_size; } to_file_writer.close(); end_time = get_usage_sec(); if (diff(pool, from_file_path, to_file_path) != 0) { THROW(MESSAGE_FILE_DIFFER); } show_item("copy", (end_time - start_time)*1000, " msec"); }
static int refresh_select(struct _select_def *conf) { int i; move(conf->title_pos.y, conf->title_pos.x); /*clrtobot();*/ if (conf->show_title) { (*conf->show_title) (conf); } if (conf->show_endline) { move(conf->endline_pos.y, conf->endline_pos.x); (*conf->show_endline) (conf); } if (conf->page_pos!=0) { for (i = conf->page_pos; (i < conf->page_pos + conf->item_per_page) && (i <= conf->item_count); i++) if (show_item(conf, i, false) == SHOW_QUIT) return SHOW_QUIT; } move(conf->item_pos[conf->pos-conf->page_pos].y, conf->item_pos[conf->pos-conf->page_pos].x); return SHOW_CONTINUE; }
/** * \brief Inform the layer that a mouse button has been pressed. * \param key The value of the maintained button. * \param pos The current position of the cursor. */ bool bear::item_information_layer::mouse_pressed ( bear::input::mouse::mouse_code key, const claw::math::coordinate_2d<unsigned int>& pos ) { bool result = false; switch(key) { case bear::input::mouse::mc_left_button: result = grab_info_box(pos); break; case bear::input::mouse::mc_right_button: result = put_in_background(pos); break; case bear::input::mouse::mc_middle_button: result = close_info_box(pos); break; } if (!result) switch(key) { case bear::input::mouse::mc_left_button: result = show_item( pos, get_level().get_camera_focus() ); break; case bear::input::mouse::mc_right_button: result = follow_item( pos, get_level().get_camera_focus() ); break; case bear::input::mouse::mc_middle_button: if ( !m_info_box.empty() ) { result = true; clear(); } break; } return result; } // item_information_layer::mouse_pressed()
int main(int argc, char **argv) { ConfigData *configdata; size_t configdata_len; char my_exec_path[MAXPGPATH]; int i; int j; set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pg_config")); progname = get_progname(argv[0]); /* check for --help */ for (i = 1; i < argc; i++) { if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-?") == 0) { help(); exit(0); } } if (find_my_exec(argv[0], my_exec_path) < 0) { fprintf(stderr, _("%s: could not find own program executable\n"), progname); exit(1); } configdata = get_configdata(my_exec_path, &configdata_len); /* no arguments -> print everything */ if (argc < 2) { for (i = 0; i < configdata_len; i++) printf("%s = %s\n", configdata[i].name, configdata[i].setting); exit(0); } /* otherwise print requested items */ for (i = 1; i < argc; i++) { for (j = 0; info_items[j].switchname != NULL; j++) { if (strcmp(argv[i], info_items[j].switchname) == 0) { show_item(info_items[j].configname, configdata, configdata_len); break; } } if (info_items[j].switchname == NULL) { fprintf(stderr, _("%s: invalid argument: %s\n"), progname, argv[i]); advice(); exit(1); } } return 0; }
int main (int argc, char *argv[]) { char ch, lastChar; // Initialize the path to the database files std::string databaseHome("./"); std::string itemName; // Database names std::string vDbName("vendordb.db"); std::string iDbName("inventorydb.db"); std::string itemSDbName("itemname.sdb"); // Parse the command line arguments while ((ch = getopt(argc, argv, "h:i:")) != EOF) switch (ch) { case 'h': databaseHome = optarg; lastChar = databaseHome[databaseHome.size() -1]; if (lastChar != '/' && lastChar != '\\') return (usage()); break; case 'i': itemName = optarg; break; case '?': default: return (usage()); break; } try { // Open all databases. MyDb inventoryDB(databaseHome, iDbName); MyDb vendorDB(databaseHome, vDbName); MyDb itemnameSDB(databaseHome, itemSDbName, true); // Associate the secondary to the primary inventoryDB.getDb().associate(NULL, &(itemnameSDB.getDb()), get_item_name, 0); if (itemName.empty()) { show_all_records(inventoryDB, vendorDB); } else { show_item(itemnameSDB, vendorDB, itemName); } } catch (DbException &e) { std::cerr << "Error reading databases. " << std::endl; return (e.get_errno()); } catch (std::exception &e) { std::cerr << "Error reading databases. " << std::endl; std::cerr << e.what() << std::endl; return (-1); } return (0); } // End main
int show(void) { char *p; void (*cfunc)(int); void (*sfunc)(int); void (*bfunc)(int); struct natstr *natp; int tlev; char buf[1024]; int rlev; again: p = getstarg(player->argp[1], "Show what ('?' to list options)? ", buf); if (!p || !*p) return RET_SYN; if (*p == '?') { pr("bridge, item, land, news, nuke, plane, sect, ship, product, tower, updates\n"); goto again; } natp = getnatp(player->cnum); rlev = (int)(1.25 * natp->nat_level[NAT_RLEV]); if (!player->argp[3]) { tlev = (int)(1.25 * natp->nat_level[NAT_TLEV]); if (player->god) tlev = 1000; } else { tlev = (int)atoi(player->argp[3]); if (tlev > (int)(1.25 * natp->nat_level[NAT_TLEV]) && !player->god) tlev = (int)(1.25 * natp->nat_level[NAT_TLEV]); } if (player->god) rlev = 1000; switch (*p) { case 'b': show_bridge(99999); return RET_OK; case 't': show_tower(99999); return RET_OK; case 'i': show_item(99999); return RET_OK; case 'n': if (*(p + 1) == 'e') { show_news(99999); return RET_OK; } if (drnuke_const > MIN_DRNUKE_CONST) tlev = ((rlev / drnuke_const) > tlev ? tlev : (rlev / drnuke_const)); bfunc = show_nuke_build; cfunc = show_nuke_capab; sfunc = show_nuke_stats; break; case 'l': bfunc = show_land_build; sfunc = show_land_stats; cfunc = show_land_capab; break; case 'p': if (p[1] == 'r') { show_product(99999); return RET_OK; } bfunc = show_plane_build; sfunc = show_plane_stats; cfunc = show_plane_capab; break; case 's': if (*(p + 1) == 'e') { bfunc = show_sect_build; sfunc = show_sect_stats; cfunc = show_sect_capab; } else { bfunc = show_ship_build; sfunc = show_ship_stats; cfunc = show_ship_capab; } break; case 'u': show_updates(player->argp[2] ? atoi(player->argp[2]) : 8); return RET_OK; default: return RET_SYN; } p = getstarg(player->argp[2], "Build, stats, or capability data (b,s,c)? ", buf); if (!p || !*p) return RET_SYN; pr("Printing for tech level '%d'\n", tlev); if (*p == 'B' || *p == 'b') bfunc(tlev); else if (*p == 'C' || *p == 'c') cfunc(tlev); else if (*p == 'S' || *p == 's') sfunc(tlev); else return RET_SYN; return RET_OK; }
int list_select(struct _select_def *conf, int key) { int ret; /* int old_page_num=conf->page_num;*/ bool getkey=true; /* int old_item_count = conf->item_count;*/ ret=SHOW_QUIT; while (ret!=SHOW_CONTINUE) { if (getkey) ret = do_select_internal(conf, key); switch (ret) { case SHOW_DIRCHANGE: adjust_conf(conf); if (conf->get_data) { ret=(*conf->get_data) (conf, conf->page_pos, conf->item_per_page); if (ret==SHOW_DIRCHANGE) {//possible loop..... getkey=false; continue; } if (ret==SHOW_SELCHANGE) { getkey=false; continue; } if (ret==SHOW_QUIT) return ret; if ((ret=check_valid(conf)) == SHOW_QUIT) return SHOW_QUIT; } case SHOW_REFRESH: ret=refresh_select(conf); break; case SHOW_SELCHANGE: ret = select_change(conf, conf->new_pos); if ((ret!=SHOW_SELECT)&&(ret!=SHOW_QUIT)) { getkey=false; continue; } case SHOW_REFRESHSELECT: show_item(conf, conf->pos, true); move(conf->item_pos[conf->pos-conf->page_pos].y, conf->item_pos[conf->pos-conf->page_pos].x); ret=SHOW_CONTINUE; break; case SHOW_CONTINUE: return SHOW_CONTINUE; case SHOW_SELECT: ret = do_select_internal(conf, KEY_SELECT); if (ret!=SHOW_SELECT) { getkey=false; continue; } case SHOW_QUIT: if (conf->quit) (*conf->quit)(conf); return ret; } key=ret; getkey=true; } return SHOW_CONTINUE; }
static int select_change(struct _select_def *conf, int new_pos) { int ret = SHOW_CONTINUE; int old_pos; if (conf->item_count==0) return SHOW_CONTINUE; if (conf->on_selchange) { ret = (*conf->on_selchange) (conf, new_pos); if (ret != SHOW_CONTINUE) return ret; } if (new_pos <= 0 || new_pos > conf->item_count) { if ((new_pos == 0) && (conf->flag & LF_LOOP)) { new_pos = conf->item_count; } else if ((new_pos == conf->item_count + 1) && (conf->flag & LF_LOOP)) { new_pos = 1; } else { select_wrong(conf); return SHOW_CONTINUE; } } if (conf->flag & LF_MULTIPAGE) { if (new_pos<conf->page_pos || new_pos>=conf->page_pos+conf->item_per_page) { /*需要换页了*/ conf->page_pos=((new_pos-1)/conf->item_per_page)*conf->item_per_page+1; conf->pos = new_pos; return SHOW_DIRCHANGE; } } if (conf->prompt) { int pre_len = strlen(conf->prompt); int idx = conf->pos - conf->page_pos; int newidx = new_pos - conf->page_pos; if (pre_len) { move(conf->item_pos[idx].y, conf->item_pos[idx].x - pre_len); outns(" ", pre_len); if (conf->item_pos[newidx].x > pre_len) move(conf->item_pos[newidx].y, conf->item_pos[newidx].x - pre_len); else move(conf->item_pos[newidx].y, 0); outns(conf->prompt, pre_len); } } /* 如果是高亮的选择方式,需要清除原来的行*/ /* 和重绘新行*/ old_pos=conf->pos; conf->pos = new_pos; if (conf->flag & LF_HILIGHTSEL) { conf->new_pos = new_pos; show_item(conf, old_pos, true); show_item(conf, conf->pos, true); } else if (conf->flag & LF_FORCEREFRESHSEL) { conf->new_pos = new_pos; show_item(conf, old_pos, false); show_item(conf, conf->pos, false); } move(conf->item_pos[new_pos-conf->page_pos].y, conf->item_pos[new_pos-conf->page_pos].x); /*conf->pos = new_pos;*/ return ret; }
/* * Create dialog window for configuration. */ static void configure (void) { GtkWidget *vbox, *bbox, *ok, *cancel, *apply, *hbox, *label, *button, *unit_label, *hbox2, *vbox2, *sep; GSList *group = NULL; DEBUG("configure"); if (configure_win) return; read_config (); configure_win = gtk_window_new (GTK_WINDOW_DIALOG); gtk_signal_connect (GTK_OBJECT (configure_win), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroyed), &configure_win); gtk_window_set_title (GTK_WINDOW (configure_win), "On Screen Display Configuration - " XOSD_VERSION); vbox = gtk_vbox_new (FALSE, 10); gtk_container_add (GTK_CONTAINER (configure_win), vbox); gtk_container_set_border_width (GTK_CONTAINER (configure_win), 5); hbox = gtk_hbox_new (FALSE, 5); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new ("Font:"); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); font_entry = gtk_entry_new (); if (font) gtk_entry_set_text (GTK_ENTRY (font_entry), font); gtk_box_pack_start (GTK_BOX (hbox), font_entry, TRUE, TRUE, 0); button = gtk_button_new_with_label ("Set"); gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (font_dialog_window), NULL); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0); hbox = gtk_hbox_new (FALSE, 5); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new ("Colour:"); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); colour_entry = gtk_entry_new (); if (colour) gtk_entry_set_text (GTK_ENTRY (colour_entry), colour); gtk_box_pack_start (GTK_BOX (hbox), colour_entry, TRUE, TRUE, 0); button = gtk_button_new_with_label ("Set"); gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (colour_dialog_window), NULL); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0); hbox = gtk_hbox_new (FALSE, 5); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new ("Timeout:"); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); timeout_obj = gtk_adjustment_new (timeout, -1, 60, 1, 1, 1); timeout_spin = gtk_spin_button_new (GTK_ADJUSTMENT (timeout_obj), 1.0, 0); if (timeout) gtk_spin_button_set_value (GTK_SPIN_BUTTON (timeout_spin), (gfloat) timeout); gtk_box_pack_start (GTK_BOX (hbox), timeout_spin, FALSE, FALSE, 0); unit_label = gtk_label_new ("seconds"); gtk_box_pack_start (GTK_BOX (hbox), unit_label, FALSE, FALSE, 0); hbox = gtk_hbox_new (FALSE, 5); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new ("Vertical Offset:"); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); offset_obj = gtk_adjustment_new (timeout, 0, 60, 1, 1, 1); offset_spin = gtk_spin_button_new (GTK_ADJUSTMENT (offset_obj), 1.0, 0); if (offset) gtk_spin_button_set_value (GTK_SPIN_BUTTON (offset_spin), (gfloat) offset); gtk_box_pack_start (GTK_BOX (hbox), offset_spin, FALSE, FALSE, 0); unit_label = gtk_label_new ("pixels"); gtk_box_pack_start (GTK_BOX (hbox), unit_label, FALSE, FALSE, 0); hbox = gtk_hbox_new (FALSE, 5); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new ("Shadow Offset:"); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); shadow_obj = gtk_adjustment_new (timeout, 0, 60, 1, 1, 1); shadow_spin = gtk_spin_button_new (GTK_ADJUSTMENT (shadow_obj), 1.0, 0); gtk_spin_button_set_value (GTK_SPIN_BUTTON (shadow_spin), (gfloat) shadow_offset); gtk_box_pack_start (GTK_BOX (hbox), shadow_spin, FALSE, FALSE, 0); unit_label = gtk_label_new ("pixels"); gtk_box_pack_start (GTK_BOX (hbox), unit_label, FALSE, FALSE, 0); hbox = gtk_hbox_new (FALSE, 5); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new ("Position:"); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); pos_top = gtk_radio_button_new_with_label (NULL, "Top"); group = gtk_radio_button_group (GTK_RADIO_BUTTON (pos_top)); pos_bottom = gtk_radio_button_new_with_label (group, "Bottom"); gtk_box_pack_start (GTK_BOX (hbox), pos_top, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), pos_bottom, FALSE, FALSE, 0); if (pos == XOSD_top) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pos_top), TRUE); else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pos_bottom), TRUE); /* hbox = gtk_hbox_new (FALSE, 5); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new ("Volume :"); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); vol_on = gtk_radio_button_new_with_label (NULL, "Yes"); group = gtk_radio_button_group (GTK_RADIO_BUTTON (vol_on)); vol_off = gtk_radio_button_new_with_label (group, "No"); gtk_box_pack_start (GTK_BOX (hbox), vol_on, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), vol_off, FALSE, FALSE, 0); if (show_volume == 1) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (vol_on), TRUE); else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (vol_off), TRUE); */ sep=gtk_hseparator_new(); gtk_box_pack_start (GTK_BOX (vbox), sep, FALSE, FALSE, 0); hbox2 = gtk_hbox_new (FALSE, 2); gtk_box_pack_start (GTK_BOX (vbox), hbox2, FALSE, FALSE, 0); label=gtk_label_new("Show:"); gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, FALSE, 0); hbox2 = gtk_hbox_new (FALSE, 2); gtk_box_pack_start (GTK_BOX (vbox), hbox2, FALSE, FALSE, 0); vbox2 = gtk_vbox_new (FALSE, 4); gtk_box_pack_start (GTK_BOX (hbox2), vbox2, FALSE, FALSE, 0); show_item(vbox2, "Volume", show_volume, &vol_on); show_item(vbox2, "Balance", show_balance, &bal_on); show_item(vbox2, "Pause", show_pause, &pause_on); show_item(vbox2, "Track Name", show_trackname, &trackname_on); vbox2 = gtk_vbox_new (FALSE, 5); gtk_box_pack_start (GTK_BOX (hbox2), vbox2, FALSE, FALSE, 0); show_item(vbox2, "Stop", show_stop, &stop_on); show_item(vbox2, "Repeat", show_repeat, &repeat_on); show_item(vbox2, "Shuffle", show_shuffle, &shuffle_on); sep=gtk_hseparator_new(); gtk_box_pack_start (GTK_BOX (vbox), sep, FALSE, FALSE, 0); bbox = gtk_hbutton_box_new (); gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END); gtk_button_box_set_spacing (GTK_BUTTON_BOX (bbox), 5); gtk_box_pack_start (GTK_BOX (vbox), bbox, FALSE, FALSE, 0); ok = gtk_button_new_with_label ("Ok"); gtk_signal_connect (GTK_OBJECT (ok), "clicked", GTK_SIGNAL_FUNC (configure_ok_cb), NULL); GTK_WIDGET_SET_FLAGS (ok, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX (bbox), ok, TRUE, TRUE, 0); gtk_widget_grab_default (ok); apply = gtk_button_new_with_label ("Apply"); gtk_signal_connect (GTK_OBJECT (apply), "clicked", GTK_SIGNAL_FUNC (configure_apply_cb), NULL); GTK_WIDGET_SET_FLAGS (apply, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX (bbox), apply, TRUE, TRUE, 0); cancel = gtk_button_new_with_label ("Cancel"); gtk_signal_connect_object (GTK_OBJECT (cancel), "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), GTK_OBJECT (configure_win)); GTK_WIDGET_SET_FLAGS (cancel, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX (bbox), cancel, TRUE, TRUE, 0); gtk_widget_show_all (configure_win); }