MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), m_ui(new Ui::MainWindow), m_errorline(-1), m_isdebug(false), m_runline(-1), m_frame(0), m_rid(0) { g_MainWindow = this; m_ui->setupUi(this); m_ui->dockWidget->setVisible(false); m_ui->dockWidget_2->setVisible(false); m_ui->dockWidget_3->setVisible(false); m_ui->dockWidget_4->setVisible(false); m_file_name.clear(); m_ui->txtedit->setPlainText(""); m_ui->txtedit->setVisible(true); m_saved.clear(); m_ui->txtedit->setFont(QFont(tr("宋体"), 20, QFont::Normal)); m_ui->txtedit->setLineWrapMode(QPlainTextEdit::NoWrap); highlightCurrentLine(); m_ui->callstackview->setFont(QFont(tr("宋体"), 20, QFont::Normal)); m_ui->callstackview->setSpacing(5); m_ui->routineview->setFont(QFont(tr("宋体"), 20, QFont::Normal)); m_ui->routineview->setSpacing(5); m_ui->byteview->setFont(QFont(tr("宋体"), 10, QFont::Normal)); m_ui->byteview->setLineWrapMode(QTextEdit::NoWrap); m_ui->memview->setFont(QFont(tr("宋体"), 10, QFont::Normal)); m_ui->memview->setSpacing(5); new QSyntaxHighlighterFake(m_ui->txtedit->document()); memset(m_argv, 0, sizeof(m_argv)); m_fk = newfake(); fkopenalllib(m_fk); fkseterrorfunc(m_fk, fk_error_func); fksetprintfunc(m_fk, fk_print_func); QFileInfo fi("sample.fk"); if (fi.exists()) { Openfile("sample.fk"); UpdateStatusBar(); } m_ui->callstackview->hide(); m_ui->byteview->hide(); m_ui->memview->hide(); m_ui->routineview->hide(); m_ui->horizontalLayout_2->removeItem(m_ui->verticalLayout); }
void MainWindow::on_actionOpen_triggered() { QString filename = QFileDialog::getOpenFileName(this, tr("Open File"), QDir::currentPath(), tr("Projects (*.wpj)")); Openfile(filename); }
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); scene = 0; pixmap = 0; project = 0; Openfile(QString("shag.wpj")); }
void MainWindow::on_actionOpen_triggered() { CheckSave(); m_saved.clear(); QString file = QFileDialog::getOpenFileName(this, "Open a file", "", "Fake (*.fk)"); if(!file.isEmpty()) { Openfile(file); } UpdateStatusBar(); }
void ExportContact(MCONTACT hContact) { char szFileName[MAX_PATH]; char DBVar[1024]; int tmp; if (Openfile(szFileName, 0)) { // if (tmp = MessageBox(0, "Do you want to overwrite the contents of the file?\r\n\r\nPressing No will append this contact to the end of the file.",modFullname, MB_YESNO) == IDYES) // file = fopen(szFileName, "w"); // else FILE *file = fopen(szFileName, "a"); if (file) { if (!db_get_static(hContact, MODNAME, "Name", DBVar, _countof(DBVar))) { fprintf(file, "\r\n[Non-IM Contact]\r\nName=%s\r\n", DBVar); if (!db_get_static(hContact, MODNAME, "ProgramString", DBVar, _countof(DBVar))) fprintf(file, "ProgramString=%s\r\n", DBVar); if (!db_get_static(hContact, MODNAME, "ProgramParamString", DBVar, _countof(DBVar))) fprintf(file, "ProgramParamString=%s\r\n", DBVar); if (!db_get_static(hContact, MODNAME, "ToolTip", DBVar, _countof(DBVar))) fprintf(file, "ToolTip=%s</tooltip>\r\n", DBVar); if (!db_get_static(hContact, "CList", "Group", DBVar, _countof(DBVar))) fprintf(file, "Group=%s\r\n", DBVar); if (tmp = db_get_w(hContact, MODNAME, "Icon", 40072)) fprintf(file, "Icon=%d\r\n", tmp); if (tmp = db_get_b(hContact, MODNAME, "UseTimer", 0)) fprintf(file, "UseTimer=%d\r\n", tmp); if (tmp = db_get_b(hContact, MODNAME, "Minutes", 1)) fprintf(file, "Minutes=%d\r\n", tmp); if (tmp = db_get_w(hContact, MODNAME, "Timer", 0)) fprintf(file, "Timer=%d\r\n", tmp); fprintf(file, "[/Non-IM Contact]\r\n"); } else ("Contact is invalid", modFullname); fclose(file); } } }
/** * Fill the Option fields, with the argc array */ int Read_Command_Line(option *io, int argc, char **argv) { int c; int idx; int i; int writemode; PhyML_Printf("\n. command-line: "); For(i,argc) PhyML_Printf("%s ",argv[i]); if(argc == 1) Exit("\n. No argument was passed to the program. Please check the documentation. \n"); struct option longopts[] = { {"n_rgrft", required_argument,NULL,0}, {"n_globl", required_argument,NULL,1}, {"max_dist", required_argument,NULL,2}, {"n_optim", required_argument,NULL,3}, {"n_best", required_argument,NULL,4}, {"model", required_argument,NULL,5}, {"search", required_argument,NULL,6}, {"datatype", required_argument,NULL,7}, {"multiple", required_argument,NULL,8}, {"input", required_argument,NULL,9}, {"bootstrap", required_argument,NULL,10}, {"ts/tv", required_argument,NULL,11}, {"nclasses", required_argument,NULL,12}, {"pinv", required_argument,NULL,13}, {"alpha", required_argument,NULL,14}, {"inputtree", required_argument,NULL,15}, {"min_diff_lk_local", required_argument,NULL,16}, {"min_diff_lk_global",required_argument,NULL,17}, {"steph_spr", no_argument,NULL,18}, {"brent_it_max", required_argument,NULL,19}, {"rand_start", no_argument,NULL,20}, {"n_rand_starts", required_argument,NULL,21}, {"sequential", no_argument,NULL,22}, {"inside_opt", no_argument,NULL,23}, {"p_moves", required_argument,NULL,24}, {"fast_nni", no_argument,NULL,25}, {"g_pars", no_argument,NULL,26}, {"r_seed", required_argument,NULL,27}, {"collapse_boot", required_argument,NULL,28}, {"random_boot", required_argument,NULL,29}, {"print_trace", no_argument,NULL,30}, {"print_site_lnl", no_argument,NULL,31}, {"print_site_lk", no_argument,NULL,31}, {"cov", no_argument,NULL,32}, {"cov_delta", required_argument,NULL,33}, {"cov_alpha", required_argument,NULL,34}, {"cov_ncats", required_argument,NULL,35}, {"ps", no_argument,NULL,36}, {"cov_free", no_argument,NULL,37}, {"no_gap", no_argument,NULL,38}, {"n_rr_branch", required_argument,NULL,39}, {"append", no_argument,NULL,40}, {"no_five_branch", no_argument,NULL,41}, {"pars_thresh", required_argument,NULL,42}, {"min_diff_lk_move", required_argument,NULL,43}, {"hybrid", no_argument,NULL,44}, {"use_median", no_argument,NULL,45}, {"run_id", required_argument,NULL,46}, {"pars", no_argument,NULL,47}, {"quiet", no_argument,NULL,48}, {"version", no_argument,NULL,49}, {"calibration_file", required_argument,NULL,50}, {"calibration", required_argument,NULL,50}, {"clade_file", required_argument,NULL,50}, {"boot_progress_every", required_argument,NULL,51}, {"aa_rate_file", required_argument,NULL,52}, {"chain_len", required_argument,NULL,53}, {"sample_freq", required_argument,NULL,54}, {"burnin", required_argument,NULL,55}, {"no_memory_check", no_argument,NULL,56}, {"no_colalias", no_argument,NULL,57}, {"alias_subpatt", no_argument,NULL,58}, {"no_sequences", no_argument,NULL,59}, {"prior", no_argument,NULL,59}, {"fastlk", no_argument,NULL,60}, {"free_rates", no_argument,NULL,61}, {"freerates", no_argument,NULL,61}, {"freerate", no_argument,NULL,61}, {"free_rate", no_argument,NULL,61}, {"is", no_argument,NULL,62}, // no 63 since it corresponds to character '?' {"rate_model", required_argument,NULL,64}, {"ratemodel", required_argument,NULL,64}, {"log_l", no_argument,NULL,65}, {"gamma_lens", no_argument,NULL,66}, {"il", no_argument,NULL,66}, {"codpos", required_argument,NULL,67}, {"constraint_file", required_argument,NULL,68}, {"constraint_tree", required_argument,NULL,68}, {"help", no_argument,NULL,69}, {"mutmap", no_argument,NULL,70}, {"parvals", required_argument,NULL,71}, {"constrained_lens", no_argument,NULL,72}, {"xml", required_argument,NULL,73}, {"l_var", required_argument,NULL,74}, #ifdef BEAGLE {"beagle_resource", required_argument,NULL,75}, #endif {"ancestral", no_argument,NULL,76}, {"anc", no_argument,NULL,76}, {"coord_file", required_argument,NULL,77}, {0,0,0,0} }; io->datatype = UNDEFINED; #ifndef PHYML int open_ps_file = 0; #endif idx=-1; do { c = getopt_long(argc,argv,"qi:d:m:b:n:t:f:zk:v:c:a:u:ho:s:x:g:l:ep",longopts,&idx); switch(c) { case 77: { char *tmp; tmp = (char *)mCalloc(T_MAX_FILE, sizeof(char)); if(strlen(optarg) > T_MAX_FILE -11) { char choix; strcpy (tmp, "\n. The file name'"); strcat (tmp, optarg); strcat (tmp, "' is too long.\n"); PhyML_Printf("%s",tmp); PhyML_Printf("\n. Type any key to exit.\n"); if(!scanf("%c",&choix)) Exit("\n"); Exit("\n"); } else if (!Filexists (optarg)) { char choix; strcpy (tmp, "\n. The file '"); strcat (tmp, optarg); strcat (tmp, "' doesn't exist.\n"); PhyML_Printf("%s",tmp); PhyML_Printf("\n. Type any key to exit.\n"); if(!scanf("%c",&choix)) Exit("\n"); Exit("\n"); } else { strcpy(io->in_coord_file, optarg); io->fp_in_coord = Openfile(io->in_coord_file,READ); } Free(tmp); break; } case 76: { io->ancestral = YES; break; } #ifdef BEAGLE case 75: { io->beagle_resource = (int)atoi(optarg); break; } #endif case 74: { io->mod->l_var_sigma = String_To_Dbl(optarg); break; } case 73: { #ifdef INVITEE Free_Optimiz(io->mod->s_opt); M4_Free_M4_Model(io->mod->m4mod); Free_Model_Basic(io->mod); Free_Input(io); PhyTime_XML(optarg); return 0; #elif defined(PHYML) Free_Optimiz(io->mod->s_opt); M4_Free_M4_Model(io->mod->m4mod); Free_Model_Basic(io->mod); Free_Input(io); PhyML_XML(optarg); return 0; #elif defined(DATE) Free_Optimiz(io->mod->s_opt); M4_Free_M4_Model(io->mod->m4mod); Free_Model_Basic(io->mod); Free_Input(io); DATE_XML(optarg); return 0; #endif break; } case 72: { io->mod->s_opt->constrained_br_len = YES; break; } case 71: { io->mcmc->in_fp_par = fopen(optarg,"r"); io->mcmc->randomize = NO; break; } case 70: { io->mutmap = YES; break; } case 68: { char *tmp; tmp = (char *)mCalloc(T_MAX_FILE, sizeof(char)); if(strlen(optarg) > T_MAX_FILE -11) { char choix; strcpy (tmp, "\n. The file name'"); strcat (tmp, optarg); strcat (tmp, "' is too long.\n"); PhyML_Printf("%s",tmp); PhyML_Printf("\n. Type any key to exit.\n"); if(!scanf("%c",&choix)) Exit("\n"); Exit("\n"); } else if (!Filexists (optarg)) { char choix; strcpy (tmp, "\n. The file '"); strcat (tmp, optarg); strcat (tmp, "' doesn't exist.\n"); PhyML_Printf("%s",tmp); PhyML_Printf("\n. Type any key to exit.\n"); if(!scanf("%c",&choix)) Exit("\n"); Exit("\n"); } else { strcpy(io->in_constraint_tree_file, optarg); io->fp_in_constraint_tree = Openfile(io->in_constraint_tree_file,0); } Free(tmp); break; } case 67: { phydbl pos; pos = atof(optarg); io->codpos = (int)pos; if(io->codpos < 1 || io->codpos > 3) { char choix; PhyML_Printf("\n. Coding position must be set to 1, 2 or 3.\n"); PhyML_Printf("\n. Type any key to exit.\n"); if(!scanf("%c",&choix)) Exit("\n"); Exit("\n"); } break; break; } case 66: { io->mod->gamma_mgf_bl = YES; io->mod->s_opt->opt_gamma_br_len = YES; break; } case 65: { io->mod->log_l = YES; break; } case 64: { char *s; int i; s = (char *)mCalloc(T_MAX_NAME,sizeof(char)); i = 0; while(optarg[i++]) s[i]=tolower(optarg[i]); if(!strcmp(optarg,"gbd")) io->rates->model = THORNE; else if(!strcmp(optarg,"gbs")) io->rates->model = GUINDON; else if(!strcmp(optarg,"gamma")) io->rates->model = GAMMA; else if(!strcmp(optarg,"clock")) io->rates->model = STRICTCLOCK; else if(!strcmp(optarg,"strictclock")) io->rates->model = STRICTCLOCK; else if(!strcmp(optarg,"strict_clock")) io->rates->model = STRICTCLOCK; else { PhyML_Printf("\n. rate_model should be 'gbs', 'gbd', 'gamma' or 'clock'."); Exit("\n"); } Free(s); break; } case 62: { io->mcmc->is = YES; break; } case 61: { io->mod->ras->free_mixt_rates = YES; io->mod->s_opt->opt_free_mixt_rates = YES; break; } case 60: { io->lk_approx = NORMAL; break; } case 59: { io->mcmc->use_data = NO; break; } case 58: { io->do_alias_subpatt = YES; break; } case 57: { io->colalias = NO; break; } case 56: { io->mem_question = NO; break; } case 55: { phydbl len; len = atof(optarg); io->mcmc->chain_len_burnin = (int)len; if(io->mcmc->chain_len_burnin < 1) { char choix; PhyML_Printf("\n. chain_len_burnin must be an integer greater than 0.\n"); PhyML_Printf("\n. Type any key to exit.\n"); if(!scanf("%c",&choix)) Exit("\n"); Exit("\n"); } break; } case 54: { phydbl len; len = atof(optarg); io->mcmc->sample_interval = (int)len; if(io->mcmc->sample_interval < 1) { char choix; PhyML_Printf("\n. sample_interval must be an integer greater than 0.\n"); PhyML_Printf("\n. Type any key to exit.\n"); if(!scanf("%c",&choix)) Exit("\n"); Exit("\n"); } break; } case 53: { phydbl len; len = atof(optarg); io->mcmc->chain_len = (int)len; if(io->mcmc->chain_len < 1) { char choix; PhyML_Printf("\n. chain_len must be an integer greater than 0.\n"); PhyML_Printf("\n. Type any key to exit.\n"); if(!scanf("%c",&choix)) Exit("\n"); Exit("\n"); } break; } case 52: { char *s; s = (char *)mCalloc(T_MAX_FILE, sizeof(char)); strcpy(s,optarg); io->mod->fp_aa_rate_mat = Openfile(s,0); strcpy(io->mod->aa_rate_mat_file->s,s); Free(s); break; } case 51: { io->boot_prog_every = atoi(optarg); if(io->boot_prog_every < 1) { char choix; PhyML_Printf("\n. boot_progress_every must be an integer greater than 0.\n"); PhyML_Printf("\n. Type any key to exit.\n"); if(!scanf("%c",&choix)) Exit("\n"); Exit("\n"); } break; } case 50: { strcpy(io->clade_list_file,optarg); break; } case 49: { PhyML_Printf("\n. This is PhyML version %s.\n\n",VERSION); Exit(""); break; } case 48 : { io->quiet = 1; break; } case 'p' : case 47 : { io->in_tree = 1; break; } case 46 : { io->append_run_ID = YES; strcpy(io->run_id_string,optarg); break; } case 45 : { io->mod->ras->gamma_median = 1; break; } case 44 : { io->mod->s_opt->hybrid_thresh = 0; break; } case 43 : { io->mod->s_opt->min_diff_lk_move = atof(optarg); if(io->mod->s_opt->min_diff_lk_move < 0) { char choix; PhyML_Printf("\n. Min_diff_lk_move must be a double greater than 0.\n"); PhyML_Printf("\n. Type any key to exit.\n"); if(!scanf("%c",&choix)) Exit("\n"); Exit("\n"); } break; } case 42 : { io->mod->s_opt->pars_thresh = (int)atoi(optarg); if(io->mod->s_opt->pars_thresh < 0) { PhyML_Printf("\n. The parsimony threshold must be an integer greater than 0.\n"); PhyML_Printf("\n. Type any key to exit.\n"); Exit("\n"); } break; } case 41 : { io->mod->s_opt->opt_five_branch = 0; break; } case 40 : { writemode = 2; break; } case 39 : { break; } case 38 : { io->rm_ambigu = 1; break; } case 37 : { io->mod->s_opt->opt_cov_free_rates = YES; io->mod->m4mod->use_cov_alpha = NO; io->mod->m4mod->use_cov_free = YES; break; } case 36 : { #ifndef PHYML open_ps_file = 1; #endif break; } case 35 : { io->mod->m4mod->n_h = (int)atoi(optarg); if(io->mod->m4mod->n_h < 1) { char choix; PhyML_Printf("\n. The number of classes must be greater than 0.\n"); PhyML_Printf("\n. Type any key to exit.\n"); if(!scanf("%c",&choix)) Exit("\n"); Exit("\n"); } break; } case 34 : { io->mod->m4mod->use_cov_alpha = YES; io->mod->m4mod->use_cov_free = NO; if(!strcmp(optarg,"e") || !strcmp(optarg,"E") || !strcmp(optarg,"estimated") || !strcmp(optarg,"ESTIMATED")) { io->mod->s_opt->opt_cov_alpha = YES; io->mod->m4mod->alpha = 1.0; } else { io->mod->m4mod->alpha = (phydbl)atof(optarg); if(io->mod->m4mod->alpha < 1.E-5) { char choix; PhyML_Printf("\n. The value of alpha must be greater than 1.E-5.\n"); PhyML_Printf("\n. Type any key to exit.\n"); if(!scanf("%c",&choix)) Exit("\n"); Exit("\n"); } } break; } case 33 : { if(!strcmp(optarg,"e") || !strcmp(optarg,"E") || !strcmp(optarg,"estimated") || !strcmp(optarg,"ESTIMATED")) { io->mod->s_opt->opt_cov_delta = YES; io->mod->m4mod->delta = 1.0; } else { io->mod->m4mod->delta = (phydbl)atof(optarg); if(atof(optarg) < 1.E-10) { char choix; PhyML_Printf("\n. The value of delta must be larger than 1.E-10.\n"); PhyML_Printf("\n. Type any key to exit.\n"); if(!scanf("%c",&choix)) Exit("\n"); Exit("\n"); } } break; } case 32 : { io->mod->use_m4mod = YES; break; } case 31 : { io->print_site_lnl = YES; break; } case 30 : { io->print_trace = YES; break; } case 29 : { io->random_boot_seq_order = (int)atoi(optarg); break; } case 28 : { io->collapse_boot = (int)atoi(optarg); break; } case 27 : { io->r_seed = (int)atoi(optarg); break; } case 26 : { io->mod->s_opt->general_pars = YES; break; } case 25 : { io->mod->s_opt->fast_nni = YES; break; } case 24 : { io->mod->s_opt->p_moves_to_examine = (phydbl)atof(optarg); break; } case 23 : { io->mod->s_opt->wim_inside_opt = 1; break; } case 0 : { io->mod->s_opt->wim_n_rgrft = atoi(optarg); break; } case 1 : { io->mod->s_opt->wim_n_globl = atoi(optarg); break; } case 2 : { io->mod->s_opt->wim_max_dist = atoi(optarg); break; } case 3 : { io->mod->s_opt->wim_n_optim = atoi(optarg); break; } case 4 : { io->mod->s_opt->wim_n_best = atoi(optarg); break; } case 16 : { io->mod->s_opt->min_diff_lk_local = atof(optarg); break; } case 17 : { io->mod->s_opt->min_diff_lk_global = atof(optarg); break; } case 18 : { io->mod->s_opt->steph_spr = 0; io->mod->s_opt->greedy = 1; break; } case 19 : { io->mod->s_opt->brent_it_max = atoi(optarg); break; } case 20 : { io->mod->s_opt->random_input_tree = 1; break; } case 21 : { io->mod->s_opt->random_input_tree = 1; io->mod->s_opt->n_rand_starts = atoi(optarg); if(io->mod->s_opt->n_rand_starts < 1) Exit("\n== Number of random starting trees must be > 0.\n\n"); } case 's':case 6: { if((!strcmp(optarg,"spr")) || (!strcmp(optarg,"SPR"))) { io->mod->s_opt->topo_search = SPR_MOVE; io->mod->s_opt->greedy = (io->mod->s_opt->steph_spr)?(0):(1); } else if((!strcmp(optarg,"nni")) || (!strcmp(optarg,"NNI"))) { io->mod->s_opt->topo_search = NNI_MOVE; io->mod->s_opt->random_input_tree = 0; } else if((!strcmp(optarg,"best")) || (!strcmp(optarg,"BEST"))) { io->mod->s_opt->topo_search = BEST_OF_NNI_AND_SPR; io->mod->s_opt->greedy = (io->mod->s_opt->steph_spr)?(0):(1); } break; } case 'd':case 7: { if(!strcmp(optarg,"nt")) { io->datatype = NT; io->mod->ns = 4; io->mod->m4mod->n_o = 4; if((io->mod->whichmodel == LG) || (io->mod->whichmodel == WAG) || (io->mod->whichmodel == DAYHOFF) || (io->mod->whichmodel == JTT) || (io->mod->whichmodel == BLOSUM62) || (io->mod->whichmodel == MTREV) || (io->mod->whichmodel == RTREV) || (io->mod->whichmodel == CPREV) || (io->mod->whichmodel == DCMUT) || (io->mod->whichmodel == VT) || (io->mod->whichmodel == MTMAM) || (io->mod->whichmodel == MTART) || (io->mod->whichmodel == HIVW) || (io->mod->whichmodel == HIVB) || (io->mod->whichmodel == AB) || (io->mod->whichmodel == CUSTOMAA) ) { io->mod->whichmodel = HKY85; strcpy(io->mod->modelname->s, "HKY85\0"); } } else if (!strcmp(optarg,"aa")) { io->datatype = AA; io->mod->s_opt->opt_kappa = NO; io->mod->ns = 20; io->mod->m4mod->n_o = 20; if( (io->mod->whichmodel == JC69) || (io->mod->whichmodel == K80) || (io->mod->whichmodel == F81) || (io->mod->whichmodel == HKY85) || (io->mod->whichmodel == F84) || (io->mod->whichmodel == TN93) || (io->mod->whichmodel == GTR) || (io->mod->whichmodel == CUSTOM) ) { io->mod->whichmodel = LG; strcpy(io->mod->modelname->s, "LG\0"); } } else if ((!strcmp(optarg,"generic")) || (!strcmp(optarg,"gen"))) { io->datatype = GENERIC; } else { char choix; PhyML_Printf("\n. Unknown argument to -d option: please use `nt' for DNA or `aa' for Amino-Acids\n"); PhyML_Printf("\n. Type any key to exit.\n"); if(!scanf("%c",&choix)) Exit("\n"); Exit("\n"); } break; } case 'm': case 5 : { int i; For(i,strlen(optarg)) Uppercase(optarg+i); if(!isalpha(optarg[0])) { strcpy(io->mod->custom_mod_string->s,optarg); if(strlen(io->mod->custom_mod_string->s) != 6) { Warn_And_Exit("\n. The string should be of length 6.\n"); } else { /* Make_Custom_Model(io->mod); */ /* Translate_Custom_Mod_String(io->mod); */ } io->datatype = NT; io->mod->whichmodel = CUSTOM; strcpy(io->mod->modelname->s, "custom"); io->mod->s_opt->opt_kappa = NO; io->mod->s_opt->opt_rr = YES; } else if (strcmp(optarg, "JC69") == 0) { io->datatype = NT; io->mod->whichmodel = JC69; } else if(strcmp(optarg, "K80") == 0) { io->datatype = NT; io->mod->whichmodel = K80; } else if(strcmp(optarg, "F81") == 0) { io->datatype = NT; io->mod->whichmodel = F81; } else if (strcmp(optarg, "HKY85") == 0) { io->datatype = NT; io->mod->whichmodel = HKY85; } else if(strcmp(optarg, "F84") == 0) { io->datatype = NT; io->mod->whichmodel = F84; } else if (strcmp (optarg,"TN93") == 0) { io->datatype = NT; io->mod->whichmodel = TN93; } else if(strcmp (optarg, "GTR") == 0) { io->datatype = NT; io->mod->whichmodel = GTR; } else if(strcmp(optarg, "DAYHOFF") == 0) { io->datatype = AA; io->mod->whichmodel = DAYHOFF; } else if(strcmp (optarg, "JTT") == 0) { io->datatype = AA; io->mod->whichmodel = JTT; } else if(strcmp(optarg, "MTREV") == 0) { io->datatype = AA; io->mod->whichmodel = MTREV; } else if(strcmp (optarg, "LG") == 0) { io->datatype = AA; io->mod->whichmodel = LG; } else if(strcmp (optarg, "WAG") == 0) { io->datatype = AA; io->mod->whichmodel = WAG; } else if(strcmp(optarg, "DCMUT") == 0) { io->datatype = AA; io->mod->whichmodel = DCMUT; } else if(strcmp (optarg, "RTREV") == 0) { io->datatype = AA; io->mod->whichmodel = RTREV; } else if(strcmp(optarg, "CPREV") == 0) { io->datatype = AA; io->mod->whichmodel = CPREV; } else if(strcmp(optarg, "VT") == 0) { io->datatype = AA; io->mod->whichmodel = VT; } else if(strcmp(optarg, "BLOSUM62") == 0) { io->datatype = AA; io->mod->whichmodel = BLOSUM62; } else if(strcmp(optarg, "MTMAM") == 0) { io->datatype = AA; io->mod->whichmodel = MTMAM; } else if (strcmp(optarg,"MTART") == 0) { io->datatype = AA; io->mod->whichmodel = MTART; } else if (strcmp(optarg,"HIVW") == 0) { io->datatype = AA; io->mod->whichmodel = HIVW; } else if(strcmp(optarg, "HIVB") == 0) { io->datatype = AA; io->mod->whichmodel = HIVB; } else if(strcmp(optarg, "AB") == 0) { io->datatype = AA; io->mod->whichmodel = AB; } else if (strcmp(optarg, "CUSTOM") == 0) { io->datatype = AA; io->mod->whichmodel = CUSTOMAA; } else { PhyML_Printf("\n. The model name is incorrect. Please see the documentation.\n"); Exit("\n"); } Set_Model_Name(io->mod); break; } case 'a':case 14 : { if ((strcmp (optarg, "e") == 0) || (strcmp (optarg, "E") == 0) || (strcmp (optarg, "estimated") == 0) || (strcmp (optarg, "ESTIMATED") == 0)) { io->mod->s_opt->opt_alpha = YES; } else if (atof(optarg) < 1.E-10) { char choix; PhyML_Printf("\n. Alpha must be > 1.E-10.\n"); PhyML_Printf("\n. Type any key to exit.\n"); if(!scanf("%c",&choix)) Exit("\n"); Exit("\n"); } else { io->mod->ras->alpha->v = (phydbl)atof(optarg); io->mod->s_opt->opt_alpha = 0; } break; } case 'b':case 10: { if ((int)String_To_Dbl(optarg) < -5) { char choix; PhyML_Printf("\n. Branch test value must be a positive integer for bootstrap, or between -1 and -4 for aLRT branch test\n"); PhyML_Printf("\n. Type any key to exit.\n"); if(!scanf("%c",&choix)) Exit("\n"); Exit("\n"); } else { if((int)String_To_Dbl(optarg) > 0) { io->ratio_test = 0; io->mod->bootstrap = (int)atoi(optarg); io->print_boot_trees = 1; if(io->n_data_sets > 1) { char choix; PhyML_Printf("\n. Bootstrap option is not allowed with multiple data sets\n"); PhyML_Printf("\n. Type any key to exit.\n"); if(!scanf("%c",&choix)) Exit("\n"); Exit("\n"); } } else if (atoi(optarg)==0) { io->mod->bootstrap = 0; io->ratio_test = 0; } else { io->mod->bootstrap = 0; io->ratio_test = -(int)atoi(optarg); } } break; } case 'c':case 12: { if ((!atoi(optarg)) || (atoi(optarg) < 0)) { char choix; PhyML_Printf("\n. Unknown argument to -c option: the number of rate categories must be a positive integer\n"); PhyML_Printf("\n. Type any key to exit.\n"); if(!scanf("%c",&choix)) Exit("\n"); Exit("\n"); } else { io->mod->ras->n_catg = atoi(optarg); if(io->mod->ras->n_catg < 1) { PhyML_Printf("\n. The number of rate categories must be a positive integer\n"); Exit("\n"); } } break; } case 'f': { if(!strcmp(optarg,"e")) { if(io->datatype == NT) io->mod->s_opt->opt_state_freq = NO; else if (io->datatype == AA) io->mod->s_opt->opt_state_freq = YES; else { PhyML_Printf("\n. Please define the data type (nt or aa) before setting the -f option\n"); Exit("\n"); } } else if(!strcmp(optarg,"m")) { if (io->datatype == NT) io->mod->s_opt->opt_state_freq = YES; else if (io->datatype == AA) io->mod->s_opt->opt_state_freq = NO; else { PhyML_Printf("\n. Please define the data type (nt or aa) before setting the -f option\n"); Exit("\n"); } } else if(!isalpha(optarg[0])) { phydbl sum; double val1,val2,val3,val4; io->mod->s_opt->opt_state_freq = 0; io->mod->s_opt->user_state_freq = 1; /* sscanf(optarg,"%lf,%lf,%lf,%lf", */ /* io->mod->user_b_freq, */ /* io->mod->user_b_freq+1, */ /* io->mod->user_b_freq+2, */ /* io->mod->user_b_freq+3); */ sscanf(optarg,"%lf,%lf,%lf,%lf",&val1,&val2,&val3,&val4); io->mod->user_b_freq->v[0] = (phydbl)val1; io->mod->user_b_freq->v[1] = (phydbl)val2; io->mod->user_b_freq->v[2] = (phydbl)val3; io->mod->user_b_freq->v[3] = (phydbl)val4; sum = (io->mod->user_b_freq->v[0] + io->mod->user_b_freq->v[1] + io->mod->user_b_freq->v[2] + io->mod->user_b_freq->v[3]); io->mod->user_b_freq->v[0] /= sum; io->mod->user_b_freq->v[1] /= sum; io->mod->user_b_freq->v[2] /= sum; io->mod->user_b_freq->v[3] /= sum; if(io->mod->user_b_freq->v[0] < .0 || io->mod->user_b_freq->v[1] < .0 || io->mod->user_b_freq->v[2] < .0 || io->mod->user_b_freq->v[3] < .0 || io->mod->user_b_freq->v[0] > 1. || io->mod->user_b_freq->v[1] > 1. || io->mod->user_b_freq->v[2] > 1. || io->mod->user_b_freq->v[3] > 1.) { Warn_And_Exit("\n. Invalid base frequencies.\n"); } } break; } case 'h':case 69: { Usage(); break; } case 'i':case 9: { char *tmp; tmp = (char *) mCalloc (T_MAX_FILE, sizeof(char)); if (strlen (optarg) > T_MAX_FILE -16) { char choix; strcpy (tmp, "\n. The file name'"); strcat (tmp, optarg); strcat (tmp, "' is too long.\n"); PhyML_Printf("%s",tmp); PhyML_Printf("\n. Type any key to exit.\n"); if(!scanf("%c",&choix)) Exit("\n"); Exit("\n"); } else if (!Filexists (optarg)) { char choix; strcpy (tmp, "\n. The file '"); strcat (tmp, optarg); strcat (tmp, "' does not exist.\n"); PhyML_Printf("%s",tmp); PhyML_Printf("\n. Type any key to exit.\n"); if(!scanf("%c",&choix)) Exit("\n"); Exit("\n"); } else { strcpy(io->in_align_file, optarg); io->fp_in_align = Openfile(io->in_align_file,0); strcpy(io->out_file, optarg); strcpy(io->out_tree_file,optarg); #ifdef PHYML strcat(io->out_tree_file,"_phyml_tree"); #elif M4 strcat(io->out_tree_file,"_m4_tree"); #elif PHYREX strcat(io->out_tree_file,"_phyrex_tree"); #endif strcpy(io->out_stats_file,optarg); #ifdef PHYML strcat(io->out_stats_file,"_phyml_stats"); #elif M4 strcat(io->out_stats_file,"_m4_stats"); #elif PHYREX strcat(io->out_stats_file,"_phyrex_stats"); #endif #ifdef PHYREX strcpy(io->out_summary_file,optarg); strcat(io->out_summary_file,"_phyrex_summary"); #endif } Free (tmp); break; } case 't':case 11: { if ((io->mod->whichmodel != JC69) && (io->mod->whichmodel != F81) && (io->mod->whichmodel != GTR)) { if ((strcmp(optarg, "e") == 0) || (strcmp(optarg, "E") == 0) || (strcmp(optarg, "estimated") == 0) || (strcmp(optarg, "ESTIMATED") == 0)) { io->mod->kappa->v = 4.0; io->mod->s_opt->opt_kappa = YES; if (io->mod->whichmodel == TN93) io->mod->s_opt->opt_lambda = YES; } else { if (atof(optarg) < .0) { char choix; PhyML_Printf("\n. The ts/tv ratio must be a positive number\n"); PhyML_Printf("\n. Type any key to exit.\n"); if(!scanf("%c",&choix)) Exit("\n"); Exit("\n"); } else { io->mod->kappa->v = (phydbl)atof(optarg); io->mod->s_opt->opt_kappa = 0; io->mod->s_opt->opt_lambda = 0; } } } break; } case 'n':case 8: { if ((!atoi(optarg)) || (atoi(optarg) < 0)) { char choix; PhyML_Printf("\n. The number of alignments must be a positive integer\n"); PhyML_Printf("\n. Type any key to exit.\n"); if(!scanf("%c",&choix)) Exit("\n"); Exit("\n"); } else io->n_data_sets = atoi (optarg); break; } case 'q':case 22: { io->interleaved = NO; break; } case 'u':case 15: { char *tmp; tmp = (char *)mCalloc(T_MAX_FILE, sizeof(char)); if(strlen(optarg) > T_MAX_FILE -11) { char choix; strcpy (tmp, "\n. The file name'"); strcat (tmp, optarg); strcat (tmp, "' is too long.\n"); PhyML_Printf("%s",tmp); PhyML_Printf("\n. Type any key to exit.\n"); if(!scanf("%c",&choix)) Exit("\n"); Exit("\n"); } else if (! Filexists (optarg)) { char choix; strcpy (tmp, "\n. The file '"); strcat (tmp, optarg); strcat (tmp, "' doesn't exist.\n"); PhyML_Printf("%s",tmp); PhyML_Printf("\n. Type any key to exit.\n"); if(!scanf("%c",&choix)) Exit("\n"); Exit("\n"); } else { strcpy(io->in_tree_file, optarg); io->in_tree = 2; io->fp_in_tree = Openfile(io->in_tree_file,READ); } Free(tmp); break; } case 'v':case 13: { if ((strcmp (optarg, "e") == 0) || (strcmp (optarg, "E") == 0) || (strcmp (optarg, "estimated") == 0) || (strcmp (optarg, "ESTIMATED") == 0)) { io->mod->s_opt->opt_pinvar = YES; io->mod->ras->invar = YES; } else if ((atof(optarg) < 0.0) || (atof(optarg) > 1.0)) { char choix; PhyML_Printf("\n. The proportion of invariable site must be a number between 0.0 and 1.0\n"); PhyML_Printf("\n. Type any key to exit."); if(!scanf("%c",&choix)) Exit("\n"); Exit("\n"); } else { io->mod->ras->pinvar->v = (phydbl)atof(optarg); if (io->mod->ras->pinvar->v > 0.0+SMALL) io->mod->ras->invar = 1; else io->mod->ras->invar = 0; io->mod->s_opt->opt_pinvar = 0; } break; } case 'o': { if(!strcmp(optarg,"tlr")) { io->mod->s_opt->opt_topo = YES; io->mod->s_opt->opt_bl = YES; io->mod->s_opt->opt_subst_param = YES; } else if(!strcmp(optarg,"tl")) { io->mod->s_opt->opt_topo = YES; io->mod->s_opt->opt_bl = YES; io->mod->s_opt->opt_subst_param = NO; } else if(!strcmp(optarg,"t")) { Warn_And_Exit("\n. You can't optimize the topology without adjusting branch length too...\n"); } else if(!strcmp(optarg,"lr")) { io->mod->s_opt->opt_topo = NO; io->mod->s_opt->opt_bl = YES; io->mod->s_opt->opt_subst_param = YES; } else if(!strcmp(optarg,"l")) { io->mod->s_opt->opt_topo = NO; io->mod->s_opt->opt_bl = YES; io->mod->s_opt->opt_subst_param = NO; } else if(!strcmp(optarg,"r")) { io->mod->s_opt->opt_topo = NO; io->mod->s_opt->opt_bl = NO; io->mod->s_opt->opt_subst_param = YES; } else if(!strcmp(optarg,"none") || !strcmp(optarg,"n")) { io->mod->s_opt->opt_topo = NO; io->mod->s_opt->opt_bl = NO; io->mod->s_opt->opt_subst_param = NO; } else { char choix; PhyML_Printf ("\n. The optimization parameter must be 'tlr' or 'tl' or 'lr' or 'l' or 'r' or ''."); PhyML_Printf("\n. Type any key to exit.\n"); if(!scanf("%c",&choix)) Exit("\n"); Exit("\n"); } break; } case '?': { Exit("\n"); break; } case -1: { break; } default: { Usage(); break; } } }while(c != -1); /* if((io->mod->whichmodel == K80) || (io->mod->whichmodel == JC69)) */ /* { */ /* if(io->mod->s_opt->opt_state_freq) */ /* { */ /* char c; */ /* PhyML_Printf("\n. WARNING: nucleotide frequencies must be set to 1/4 with this model.\n"); */ /* PhyML_Printf("\n. Type the enter key to resume the analysis.\n"); */ /* scanf("%c",&c); */ /* } */ /* io->mod->s_opt->opt_state_freq = 0; */ /* } */ if(io->mod->s_opt->constrained_br_len == YES) { io->mod->s_opt->opt_topo = NO; /* io->mod->s_opt->opt_bl = NO; */ } #ifndef PHYML if((open_ps_file) || (io->m4_model == YES)) { strcpy(io->out_ps_file,io->in_align_file); strcat(io->out_ps_file, "_mc_tree.ps"); io->fp_out_ps = Openfile(io->out_ps_file,WRITE); } #endif if(io->datatype == UNDEFINED) io->datatype = NT; if((io->mod->s_opt->n_rand_starts) && (io->mod->s_opt->topo_search == NNI_MOVE) && (io->mod->s_opt->random_input_tree)) { Warn_And_Exit("\n== The random starting tree option is only compatible with SPR based search options.\n"); } if ((io->datatype == NT) && (io->mod->whichmodel > 10)) { char choix; PhyML_Printf("\n== Err.: model incompatible with the data type. Please use JC69, K80, F81, HKY, F84, TN93 or GTR\n"); PhyML_Printf("\n== Type any key to exit.\n"); if(!scanf("%c",&choix)) Exit("\n"); Warn_And_Exit("\n"); } else if ((io->datatype == AA) && (io->mod->whichmodel < 11)) { char choix; PhyML_Printf("\n== Err.: model incompatible with the data type. Please use LG, Dayhoff, JTT, MtREV, WAG, DCMut, RtREV, CpREV, VT, Blosum62, MtMam, MtArt, HIVw, HIVb or AB.\n"); PhyML_Printf("\n== Type any key to exit.\n"); if(!scanf("%c",&choix)) Exit("\n"); Exit("\n"); } if(io->mod->use_m4mod == NO) { io->mod->s_opt->opt_cov_delta = 0; io->mod->s_opt->opt_cov_alpha = 0; io->mod->s_opt->opt_cov_free_rates = 0; } if((io->mod->s_opt->opt_cov_free_rates) && (io->mod->s_opt->opt_cov_alpha)) { io->mod->s_opt->opt_cov_free_rates = 1; io->mod->m4mod->use_cov_alpha = 0; io->mod->m4mod->use_cov_free = 1; } if(io->print_site_lnl) { strcpy(io->out_lk_file,io->in_align_file); strcat(io->out_lk_file, "_phyml_lk"); if(io->append_run_ID) { strcat(io->out_lk_file,"_"); strcat(io->out_lk_file,io->run_id_string); } io->fp_out_lk = Openfile(io->out_lk_file,1); } if(io->print_trace) { strcpy(io->out_trace_file,io->in_align_file); strcat(io->out_trace_file,"_phyml_trace"); if(io->append_run_ID) { strcat(io->out_trace_file,"_"); strcat(io->out_trace_file,io->run_id_string); } io->fp_out_trace = Openfile(io->out_trace_file,1); } if(io->mod->s_opt->random_input_tree) { strcpy(io->out_trees_file,io->in_align_file); strcat(io->out_trees_file,"_phyml_rand_trees"); if(io->append_run_ID) { strcat(io->out_trees_file,"_"); strcat(io->out_trees_file,io->run_id_string); } io->fp_out_trees = Openfile(io->out_trees_file,1); } if((io->print_boot_trees) && (io->mod->bootstrap > 0)) { strcpy(io->out_boot_tree_file,io->in_align_file); strcat(io->out_boot_tree_file,"_phyml_boot_trees"); if(io->append_run_ID) { strcat(io->out_boot_tree_file,"_"); strcat(io->out_boot_tree_file,io->run_id_string); } io->fp_out_boot_tree = Openfile(io->out_boot_tree_file,1); strcpy(io->out_boot_stats_file,io->in_align_file); strcat(io->out_boot_stats_file,"_phyml_boot_stats"); if(io->append_run_ID) { strcat(io->out_boot_stats_file,"_"); strcat(io->out_boot_stats_file,io->run_id_string); } io->fp_out_boot_stats = Openfile(io->out_boot_stats_file,1); } if(io->append_run_ID) { strcat(io->out_tree_file,"_"); strcat(io->out_stats_file,"_"); strcat(io->out_tree_file,io->run_id_string); strcat(io->out_stats_file,io->run_id_string); } if(io->mod->ras->n_catg == 1) io->mod->s_opt->opt_alpha = 0; if(!io->mod->s_opt->opt_subst_param) { io->mod->s_opt->opt_alpha = 0; io->mod->s_opt->opt_kappa = 0; io->mod->s_opt->opt_lambda = 0; io->mod->s_opt->opt_pinvar = 0; io->mod->s_opt->opt_rr = 0; } if(io->mod->whichmodel != K80 && io->mod->whichmodel != HKY85 && io->mod->whichmodel != F84 && io->mod->whichmodel != TN93) { io->mod->s_opt->opt_kappa = 0; } if(io->datatype == AA && io->mod->whichmodel == CUSTOMAA && !io->mod->fp_aa_rate_mat) { PhyML_Printf("\n== Custom model option with amino-acid requires you to specify a rate matrix file through the '--aa_rate_file' option.\n"); Exit("\n"); } #if !defined(PHYTIME) // Make sure you don't erase the input file... if(!strcmp(io->out_tree_file,io->in_align_file) || !strcmp(io->out_stats_file,io->in_align_file)) Generic_Exit(__FILE__,__LINE__,__FUNCTION__); writemode = WRITE; io->fp_out_tree = Openfile(io->out_tree_file,writemode); io->fp_out_stats = Openfile(io->out_stats_file,writemode); #endif #if defined(PHYREX) io->fp_out_summary = Openfile(io->out_summary_file,writemode); #endif writemode++; // just to silence a warning message at compilation if(io->mod->whichmodel == GTR) { /* Make_Custom_Model(io->mod); */ io->mod->s_opt->opt_rr = 1; } return 1; }
static INT_PTR CALLBACK LogDlgProc(HWND hwndDlg,UINT message,WPARAM wParam,LPARAM lParam) { LOGWIN *dat = (LOGWIN*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); switch(message) { case WM_INITDIALOG: { dat = (LOGWIN*)lParam; dat->hwnd = hwndDlg; dat->Scroll = 1; dat->Paused = 0; dat->hList = GetDlgItem(hwndDlg, IDC_LIST); SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)dat); mir_subclassWindow(dat->hList, SubclassProc); // init buttons for(int i = 0; i < SIZEOF(ctrls); i++) { HWND hwnd = GetDlgItem(hwndDlg,ctrls[i].control); SendMessage(hwnd, ctrls[i].type, 0, 0); SendMessage(hwnd, BM_SETIMAGE,IMAGE_ICON,(LPARAM)hIcons[i+ICON_FIRST]); SendMessage(hwnd, BUTTONADDTOOLTIP,(WPARAM)TranslateTS(ctrls[i].tooltip), BATF_TCHAR); } CheckDlgButton(hwndDlg, IDC_SCROLL, dat->Scroll ? BST_CHECKED : BST_UNCHECKED); SendDlgItemMessage(hwndDlg,IDC_SCROLL,BM_SETIMAGE,IMAGE_ICON,(LPARAM)hIcons[(dat->Scroll?ICON_SCROLL:ICON_NOSCROLL)]); if (gSingleMode) { ShowWindow(GetDlgItem(hwndDlg, IDC_PAUSEALL), SW_HIDE); ShowWindow(GetDlgItem(hwndDlg, IDC_STARTALL), SW_HIDE); ShowWindow(GetDlgItem(hwndDlg, IDC_CLOSE), SW_HIDE); } // init listview LVITEM lvi = {0}; LVCOLUMN sLC; //ListView_SetUnicodeFormat(dat->hList, TRUE); ListView_SetImageList(dat->hList, gImg, LVSIL_SMALL); sLC.mask = LVCF_FMT | LVCF_WIDTH; sLC.fmt = LVCFMT_LEFT; sLC.cx = 630; ListView_InsertColumn(dat->hList, 0, &sLC); ListView_SetExtendedListViewStyle(dat->hList, LVS_EX_FULLROWSELECT); lvi.mask = LVIF_TEXT; if (gIcons) { lvi.mask |= LVIF_IMAGE; lvi.iImage = IMG_INFO; } lvi.pszText = TranslateT("*** Console started ***"); ListView_InsertItem(dat->hList, &lvi); SendMessage(hwndDlg, WM_SIZE, 0, 0); } break; case HM_DUMP: if (!lParam) break; if (dat && !dat->Paused) { LVITEM lvi = {0}; int last = 0x7fffffff; TCHAR szBreak; DWORD len, tmplen; DWORD wraplen = gWrapLen; TCHAR *str = ((DUMPMSG*)lParam)->szMsg; lvi.iItem = 0x7fffffff; str = _tcstok(str, _T("\n")); if (gIcons && str != NULL) { lvi.mask = LVIF_TEXT | LVIF_IMAGE; if (_tcsstr(str, _T("Data received"))) { if (gSeparator) ListView_InsertItem(dat->hList, &lvi); lvi.iImage = IMG_IN; } else if (_tcsstr(str, _T("Data sent"))) { if (gSeparator) ListView_InsertItem(dat->hList, &lvi); lvi.iImage = IMG_OUT; } else { if (gSeparator && dat->newline) { ListView_InsertItem(dat->hList, &lvi); dat->newline = 0; } lvi.iImage = IMG_INFO; } } else lvi.mask = LVIF_TEXT; while (str != NULL) { lvi.pszText = &str[0]; tmplen = len = (DWORD)_tcslen(lvi.pszText); while(len > wraplen) { szBreak = lvi.pszText[wraplen]; lvi.pszText[wraplen] = 0; last = ListView_InsertItem(dat->hList, &lvi); lvi.pszText[wraplen] = szBreak; len -= wraplen; lvi.pszText = &str[0] + tmplen - len; dat->newline = 1; lvi.iImage = IMG_EMPTY; } if (len && lvi.pszText[len-1] == '\r') lvi.pszText[len-1] = 0; last = ListView_InsertItem(dat->hList, &lvi); str = _tcstok(NULL, _T("\n")); if (str) dat->newline = 1; lvi.iImage = IMG_EMPTY; } if ( gVisible && dat == pActive && dat->Scroll == 1 ) ListView_EnsureVisible(dat->hList, last, FALSE); if (last > gLimit) { int idx = last - gLimit + gLimit/4; // leave only 75% of LIMIT while (idx >= 0) { ListView_DeleteItem(dat->hList, idx); idx--; } } } mir_free((DUMPMSG*)lParam); return TRUE; case WM_SIZE: { UTILRESIZEDIALOG urd = { sizeof(urd) }; urd.hInstance = hInst; urd.hwndDlg = hwndDlg; urd.lpTemplate = MAKEINTRESOURCEA(IDD_LOG); urd.pfnResizer = LogResize; SetWindowPos(hwndDlg, HWND_TOP, rcTabs.left, rcTabs.top, rcTabs.right - rcTabs.left, rcTabs.bottom - rcTabs.top, SWP_SHOWWINDOW); CallService(MS_UTILS_RESIZEDIALOG, 0, (LPARAM)&urd); } break; case WM_COMMAND: if (!dat) break; switch(LOWORD(wParam)) { case IDC_PAUSE: { LVITEM lvi = {0}; dat->Paused = !(dat->Paused); lvi.mask = LVIF_TEXT | LVIF_IMAGE; lvi.iImage = IMG_INFO; lvi.iItem = 0x7FFFFFFF; lvi.pszText = (dat->Paused) ? TranslateT("*** Console paused ***") : TranslateT("*** Console resumed ***"); ListView_InsertItem(dat->hList, &lvi); CheckDlgButton(hwndDlg, IDC_PAUSE, (dat->Paused) ? BST_CHECKED : BST_UNCHECKED); SendDlgItemMessage(hwndDlg,IDC_PAUSE,BM_SETIMAGE,IMAGE_ICON,(LPARAM)hIcons[((dat->Paused)?ICON_PAUSED:ICON_STARTED)]); break; } case IDC_SCROLL: dat->Scroll = !(dat->Scroll); CheckDlgButton(hwndDlg, IDC_SCROLL, (dat->Scroll) ? BST_CHECKED : BST_UNCHECKED); SendDlgItemMessage(hwndDlg,IDC_SCROLL,BM_SETIMAGE,IMAGE_ICON,(LPARAM)hIcons[((dat->Scroll)?ICON_SCROLL:ICON_NOSCROLL)]); break; case IDC_COPY: { int idx = 0; TCHAR szText[128]; TCHAR *src, *dst, *buf; int flags = LVNI_BELOW; int count = ListView_GetSelectedCount(dat->hList); if (count) flags |= LVNI_SELECTED; else count = ListView_GetItemCount(dat->hList); dst = buf = (TCHAR*)malloc((count*(sizeof(szText)+1)+1)*sizeof(TCHAR)); if (!buf) break; while ((idx = ListView_GetNextItem(dat->hList, idx, flags)) > 0) { ListView_GetItemText(dat->hList, idx, 0, szText, SIZEOF(szText)-1); src = szText; while (*dst++ = *src++); dst--; *dst++ = '\r'; *dst++ = '\n'; *dst = 0; } if (dst - buf > 0 && OpenClipboard(hwndDlg)) { EmptyClipboard(); HGLOBAL hClipboardData = GlobalAlloc(GMEM_DDESHARE, (dst-buf+1)*sizeof(TCHAR)); if (hClipboardData) { TCHAR *pchData = (TCHAR*)GlobalLock(hClipboardData); _tcscpy(pchData, buf); GlobalUnlock(hClipboardData); SetClipboardData(CF_UNICODETEXT,hClipboardData); } CloseClipboard(); } free(buf); break; } case IDC_DELETE: { int idx = 0; int count = ListView_GetSelectedCount(dat->hList); if ( !count ) break; if ( count == ListView_GetItemCount(dat->hList)) { LVITEM lvi = {0}; ListView_DeleteAllItems(dat->hList); lvi.mask = LVIF_TEXT | LVIF_IMAGE; lvi.iImage = IMG_INFO; lvi.pszText = TranslateT("*** Console cleared ***"); ListView_InsertItem(dat->hList, &lvi); dat->newline = 0; break; } while ((idx = ListView_GetNextItem(dat->hList, idx, LVNI_BELOW|LVNI_SELECTED)) > 0) { ListView_DeleteItem(dat->hList, idx); idx--; } } break; case IDC_SAVE: { TCHAR szFile[MAX_PATH]; if (!Openfile(szFile, ListView_GetSelectedCount(dat->hList))) break; FILE *fp = _tfopen(szFile, _T("wt")); if (fp) { int idx = 0; TCHAR szText[128]; int flags = LVNI_BELOW; if (ListView_GetSelectedCount(dat->hList)) flags |= LVNI_SELECTED; while ((idx = ListView_GetNextItem(dat->hList, idx, flags)) > 0) { ListView_GetItemText(dat->hList, idx, 0, szText, SIZEOF(szText)); _ftprintf(fp, _T("%s\n"), szText); } fclose(fp); } break; } case IDC_OPTIONS: CallServiceSync(MS_NETLIB_LOGWIN,0,0); break; case IDC_STARTALL: SendMessage(hwndConsole, HM_PAUSEALL, 0, 0); break; case IDC_PAUSEALL: SendMessage(hwndConsole, HM_PAUSEALL, 0, 1); break; case IDC_CLOSE: if (tabCount > 1) SendMessage(hwndDlg, WM_CLOSE, 0, 0); break; } break; case WM_CLOSE: DestroyWindow(hwndDlg); break; case WM_DESTROY: SendMessage(hwndConsole, HM_REMOVE, 0, (LPARAM)dat); break; } return FALSE; }
void exportDB(HANDLE hContact, char* module) // hContact == -1 export entire db. module == NULL export entire contact. { // hContact == -1, module == "" - all contacts FILE* file = NULL; char fileName[MAX_PATH]; int nullcontactDone = 0; ModuleSettingLL modlist; struct ModSetLinkLinkItem *mod; // enum all the modules if (!EnumModules(&modlist)) { msg(Translate("Error Loading Module List"),modFullname); return;} if (Openfile(fileName, ((int)hContact==-1)?NULL:module)) { if (!(file = fopen(fileName, "wt"))) { msg(Translate("Couldn't open file for writing"), modFullname); return; } SetCursor(LoadCursor(NULL,IDC_WAIT)); // exporting entire db if (hContact == INVALID_HANDLE_VALUE) { hContact = NULL; if (module == NULL) { fprintf(file, "SETTINGS:\n"); mod = modlist.first; while(mod) { if (IsModuleEmpty(hContact, mod->name)) { mod = (struct ModSetLinkLinkItem *)mod->next; continue; } exportModule(hContact, mod->name, file); mod = (struct ModSetLinkLinkItem *)mod->next; if (mod) fprintf(file, "\n"); } } else { if (module == "") module = NULL; // reset module for all contacts export } hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDFIRST, 0, 0); while (hContact) { if (!hContact) continue; // filter if (Mode != MODE_ALL) { char szProto[256]; int loaded = 0; if (GetValue(hContact,"Protocol","p",szProto,SIZEOF(szProto))) loaded = IsProtocolLoaded(szProto); if ((loaded && Mode == MODE_UNLOADED) || (!loaded && Mode == MODE_LOADED)) { hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM)hContact, 0); continue; } } fprintf(file, "CONTACT: %s\n", NickFromHContact(hContact)); if (module == NULL) // export all modules { mod = modlist.first; while(mod) { if (IsModuleEmpty(hContact, mod->name)) { mod = (struct ModSetLinkLinkItem *)mod->next; continue; } exportModule(hContact, mod->name, file); mod = (struct ModSetLinkLinkItem *)mod->next; if (mod) fprintf(file, "\n"); } } else // export module { exportModule(hContact, module, file); } hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM)(HANDLE)hContact, 0); } } // exporting a contact else { if (!module) // exporting every module { if (hContact) fprintf(file, "CONTACT: %s\n", NickFromHContact(hContact)); else fprintf(file, "SETTINGS:\n"); mod = modlist.first; while(mod) { if (IsModuleEmpty(hContact, mod->name)) { mod = (struct ModSetLinkLinkItem *)mod->next; continue; } exportModule(hContact, mod->name, file); mod = (struct ModSetLinkLinkItem *)mod->next; if (mod) fprintf(file, "\n"); } } else { if (hContact) fprintf(file, "FROM CONTACT: %s\n", NickFromHContact(hContact)); else fprintf(file, "SETTINGS:\n"); exportModule(hContact, module, file); } } fclose(file); SetCursor(LoadCursor(NULL,IDC_ARROW)); } FreeModuleSettingLL(&modlist); }
int main(int argc, char *argv[]) { FILE *f_cleartext; FILE *f_ciphertext; char *ciphertext = "ciphertext.txt"; char *buf_rows; int r_char; int tot_rows = 0, i = 0; /* Si verifica che si fornisca un argomento al programma */ if (argc < 2) { fprintf(stderr, "Uso: %s <file_da_cifrare>\n", argv[0]); exit(EXIT_FAILURE); } /* Il file di input da cifrare e' fornito come argomento */ f_cleartext = Openfile(argv[1], "r"); /* Conteggio righe del file da cifrare (cleartext) */ while ( (r_char = fgetc(f_cleartext)) != EOF) { tot_rows++; } fclose(f_cleartext); /* Si alloca lo spazio necessario per contenere tutti i caratteri del file * di input */ buf_rows = calloc(tot_rows, sizeof(char)); f_cleartext = Openfile(argv[1], "r"); /* Si copia ciascun carattere del file di input (cleartext) nel buffer * creato ad hoc buf_rows */ while ( (r_char = fgetc(f_cleartext)) != EOF) { buf_rows[i++] = r_char; } fclose(f_cleartext); /* Si apre un file in scrittura per contenere il testo cifrato (ciphertext) */ f_ciphertext = Openfile(ciphertext, "w+"); /* Si modificano solo i caratteri ASCII; ciascun carattere pertanto sara' * spostato di 3 elementi in avanti; cosi' come il cifrario di Cesare * contempla, quando si giungera' alle ultime letere, si ripartira' * dall'inizio. */ for (i=0; i<tot_rows; i++) { if ( (buf_rows[i] >= 88 && buf_rows[i] <= 90) || (buf_rows[i] >= 120 && buf_rows[i] <= 122) ) buf_rows[i] = buf_rows[i] - LEN_ALPHABET; else if ( (buf_rows[i] >= 65 && buf_rows[i] <= 87) || (buf_rows[i] >= 97 && buf_rows[i] <= 120) ) buf_rows[i] += CAESAR_SEEK; else if ( (buf_rows[i] >= 48 && buf_rows[i] <= 54) ) buf_rows[i] += CAESAR_SEEK; else if ( (buf_rows[i] >= 55 && buf_rows[i] <= 57) ) buf_rows[i] = buf_rows[i] - LEN_ALPHABET; fprintf(f_ciphertext, "%c", buf_rows[i]); } printf("Il file %s e' stato cifrato con successo: \"%s\"\n", argv[1], ciphertext); fclose(f_ciphertext); free(buf_rows); return(EXIT_SUCCESS); }
INT_PTR ImportContacts(WPARAM, LPARAM) { MCONTACT hContact; char name[256] = "", program[256] = "", programparam[256] = "", group[256] = "", line[2001] = ""; int icon = 40072, usetimer = 0, minutes = 1, timer = 0; char fn[MAX_PATH]; int i, j, contactDone = 0; if (!Openfile(fn, 1)) return 1; FILE *file = fopen(fn, "r"); if (!file) return 1; CMStringA tooltip; while (fgets(line, 2000, file)) { if (!mir_strcmp(line, "\r\n\0")) continue; if (!mir_strcmp(line, "[Non-IM Contact]\r\n")) contactDone = 0; else if (!strncmp(line, "Name=", mir_strlen("Name="))) { i = (int)mir_strlen("Name="); j = 0; while (line[i] != '\r' && line[i] != '\n' && line[i] != '\0') { name[j] = line[i++]; name[++j] = '\0'; } contactDone = 1; } else if (!strncmp(line, "ProgramString=", mir_strlen("ProgramString="))) { i = (int)mir_strlen("ProgramString="); j = 0; while (line[i] != '\r' && line[i] != '\n' && line[i] != '\0') { program[j] = line[i++]; program[++j] = '\0'; } } else if (!strncmp(line, "ProgramParamString=", mir_strlen("ProgramParamString="))) { i = (int)mir_strlen("ProgramParamString="); j = 0; while (line[i] != '\r' && line[i] != '\n' && line[i] != '\0') { programparam[j] = line[i++]; programparam[++j] = '\0'; } } else if (!strncmp(line, "Group=", mir_strlen("Group="))) { i = (int)mir_strlen("Group="); j = 0; while (line[i] != '\r' && line[i] != '\n' && line[i] != '\0') { group[j] = line[i++]; group[++j] = '\0'; } } else if (!strncmp(line, "ToolTip=", mir_strlen("ToolTip="))) { i = (int)mir_strlen("ToolTip="); tooltip = &line[i]; fgets(line, 2000, file); while (!strstr(line, "</tooltip>\r\n")) { tooltip.Append(line); fgets(line, 2000, file); } // the line that has the </tooltip> tooltip.Append(line); } else if (!strncmp(line, "Icon=", mir_strlen("Icon="))) { i = (int)mir_strlen("Icon="); sscanf(&line[i], "%d", &icon); } else if (!strncmp(line, "UseTimer=", mir_strlen("UseTimer="))) { i = (int)mir_strlen("UseTimer="); sscanf(&line[i], "%d", &usetimer); } else if (!strncmp(line, "Timer=", mir_strlen("Timer="))) { i = (int)mir_strlen("Timer="); sscanf(&line[i], "%d", &timer); } else if (!strncmp(line, "Minutes=", mir_strlen("Minutes="))) { i = (int)mir_strlen("Minutes="); sscanf(&line[i], "%d", &minutes); } else if (contactDone && !mir_strcmp(line, "[/Non-IM Contact]\r\n")) { if (!name) continue; size_t size = mir_strlen(name) + mir_strlen("Do you want to import this Non-IM Contact?\r\n\r\nName: \r\n") + 1; char *msg = (char*)malloc(size); mir_snprintf(msg, size, "Do you want to import this Non-IM Contact?\r\n\r\nName: %s\r\n", name); if (program[0] != '\0') { msg = (char*)realloc(msg, mir_strlen(msg) + mir_strlen(program) + mir_strlen("Program: \r\n") + 1); mir_strcat(msg, "Program: "); mir_strcat(msg, program); mir_strcat(msg, "\r\n"); } if (programparam[0] != '\0') { msg = (char*)realloc(msg, mir_strlen(msg) + mir_strlen(programparam) + mir_strlen("Program Parameters: \r\n") + 1); mir_strcat(msg, "Program Parameters: "); mir_strcat(msg, programparam); mir_strcat(msg, "\r\n"); } if (tooltip) { msg = (char*)realloc(msg, mir_strlen(msg) + mir_strlen(tooltip) + mir_strlen("ToolTip: \r\n") + 1); mir_strcat(msg, "ToolTip: "); mir_strcat(msg, tooltip); mir_strcat(msg, "\r\n"); } if (group[0] != '\0') { msg = (char*)realloc(msg, mir_strlen(msg) + mir_strlen(group) + mir_strlen("Group: \r\n") + 1); mir_strcat(msg, "Group: "); mir_strcat(msg, group); mir_strcat(msg, "\r\n"); } if (icon) { char tmp[64]; if (icon == ID_STATUS_ONLINE) mir_snprintf(tmp, "Icon: Online\r\n"); else if (icon == ID_STATUS_AWAY) mir_snprintf(tmp, "Icon: Away\r\n"); else if (icon == ID_STATUS_NA) mir_snprintf(tmp, "Icon: NA\r\n"); else if (icon == ID_STATUS_DND) mir_snprintf(tmp, "Icon: DND\r\n"); else if (icon == ID_STATUS_OCCUPIED) mir_snprintf(tmp, "Icon: Occupied\r\n"); else if (icon == ID_STATUS_FREECHAT) mir_snprintf(tmp, "Icon: Free For Chat\r\n"); else if (icon == ID_STATUS_INVISIBLE) mir_snprintf(tmp, "Icon: Invisible\r\n"); else if (icon == ID_STATUS_ONTHEPHONE) mir_snprintf(tmp, "Icon: On The Phone\r\n"); else if (icon == ID_STATUS_OUTTOLUNCH) mir_snprintf(tmp, "Icon: Out To Lunch\r\n"); else { free(msg); continue; } char *msgtemp = (char*)realloc(msg, mir_strlen(msg) + mir_strlen(tmp) + 1); if (msgtemp) { msg = msgtemp; mir_strcat(msg, tmp); } } if (usetimer && timer) { char tmp[64], tmp2[8]; if (minutes) mir_strcpy(tmp2, "Minutes"); else mir_strcpy(tmp2, "Seconds"); mir_snprintf(tmp, "UseTimer: Yes\r\nTimer: %d %s", timer, tmp2); char *msgtemp = (char*)realloc(msg, mir_strlen(msg) + mir_strlen(tmp) + 1); if (msgtemp) { msg = msgtemp; mir_strcat(msg, tmp); } } if (MessageBoxA(0, msg, modFullname, MB_YESNO) == IDYES) { if (!(hContact = (MCONTACT)CallService(MS_DB_CONTACT_ADD, 0, 0))) { msg("contact did get created", ""); continue; } Proto_AddToContact(hContact, MODNAME); CallService(MS_IGNORE_IGNORE, hContact, IGNOREEVENT_USERONLINE); db_set_s(hContact, MODNAME, "Nick", Translate("New Non-IM Contact")); db_set_s(hContact, MODNAME, "Name", name); db_set_s(hContact, MODNAME, "ProgramString", program); // copy the ProgramParamString db_set_s(hContact, MODNAME, "ProgramParamString", programparam); // copy the group db_set_s(hContact, "CList", "Group", group); // copy the ToolTip db_set_s(hContact, MODNAME, "ToolTip", tooltip); // timer db_set_b(hContact, MODNAME, "UseTimer", (BYTE)usetimer); db_set_b(hContact, MODNAME, "Minutes", (BYTE)minutes); db_set_w(hContact, MODNAME, "Timer", (WORD)timer); //icon db_set_w(hContact, MODNAME, "Icon", (WORD)icon); replaceAllStrings(hContact); } free(msg); contactDone = 0; name[0] = '\0'; program[0] = '\0'; programparam[0] = '\0'; group[0] = '\0'; line[0] = '\0'; tooltip.Empty(); icon = 40072; usetimer = 0; minutes = 1; timer = 0; } } fclose(file); return 1; }
INT_PTR CALLBACK DlgProcOtherStuff(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: TranslateDialogDefault(hwnd); { MCONTACT hContact = (MCONTACT)((PROPSHEETPAGE*)lParam)->lParam; SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)hContact); if (!hContact) break; /* link*/ DBVARIANT dbv; if (!db_get_ts(hContact, MODNAME, "ProgramString", &dbv)) { SetDlgItemText(hwnd, IDC_LINK, dbv.ptszVal); db_free(&dbv); } if (!db_get_ts(hContact, MODNAME, "ProgramParamsString", &dbv)) { SetDlgItemText(hwnd, IDC_PARAMS, dbv.ptszVal); db_free(&dbv); } /* group*/ TCHAR *szGroup; for (int i = 1; (szGroup = pcli->pfnGetGroupName(i, NULL)) != NULL; i++) SendDlgItemMessage(hwnd, IDC_GROUP, CB_INSERTSTRING, 0, LPARAM(szGroup)); if (!db_get_ts(hContact, "CList", "Group", &dbv)) { SetDlgItemText(hwnd, IDC_GROUP, dbv.ptszVal); db_free(&dbv); } /* icons */ CheckRadioButton(hwnd, 40072, 40080, db_get_w(hContact, MODNAME, "Icon", ID_STATUS_ONLINE)); SetWindowLongPtr(GetDlgItem(hwnd, CHK_ONLINE), GWLP_USERDATA, (LONG_PTR)Skin_LoadProtoIcon(MODNAME, ID_STATUS_ONLINE)); g_PrevBtnWndProc = (WNDPROC)SetWindowLongPtr(GetDlgItem(hwnd, CHK_ONLINE), GWLP_WNDPROC, (LONG_PTR)ButtWndProc); for (int i = ID_STATUS_ONLINE; i <= ID_STATUS_OUTTOLUNCH; i++) { SetWindowLongPtr(GetDlgItem(hwnd, i), GWLP_USERDATA, (LONG_PTR)Skin_LoadProtoIcon(MODNAME, i)); SetWindowLongPtr(GetDlgItem(hwnd, i), GWLP_WNDPROC, (LONG_PTR)ButtWndProc); } db_free(&dbv); /* timer */ CheckDlgButton(hwnd, CHK_USE_TIMER, db_get_b(hContact, MODNAME, "UseTimer", 0) ? BST_CHECKED : BST_UNCHECKED); if (db_get_w(hContact, MODNAME, "Timer", 15)) { CheckDlgButton(hwnd, CHK_USE_TIMER, BST_CHECKED); EnableWindow(GetDlgItem(hwnd, IDC_TIMER), 1); TCHAR string[512]; SetDlgItemText(hwnd, IDC_TIMER, _itot(db_get_w(hContact, MODNAME, "Timer", 15), string, 10)); if (!db_get_w(NULL, MODNAME, "Timer", 1)) SetDlgItemText(hwnd, IDC_TIMER_INTERVAL_MSG, TranslateT("Non-IM Contact protocol timer is Disabled")); else { mir_sntprintf(string, TranslateT("Timer intervals... Non-IM Contact Protocol timer is %d seconds"), db_get_w(NULL, MODNAME, "Timer", 1)); SetDlgItemText(hwnd, IDC_TIMER_INTERVAL_MSG, string); } } /* always visible */ if (db_get_b(hContact, MODNAME, "AlwaysVisible", 0)) { CheckDlgButton(hwnd, IDC_ALWAYS_VISIBLE, BST_CHECKED); EnableWindow(GetDlgItem(hwnd, IDC_VISIBLE_UNLESS_OFFLINE), 1); CheckDlgButton(hwnd, IDC_VISIBLE_UNLESS_OFFLINE, db_get_b(hContact, MODNAME, "VisibleUnlessOffline", 1) ? BST_CHECKED : BST_UNCHECKED); } } return TRUE; case WM_COMMAND: SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); switch (LOWORD(wParam)) { case IDC_ALWAYS_VISIBLE: if (IsDlgButtonChecked(hwnd, IDC_ALWAYS_VISIBLE)) { MCONTACT hContact = (MCONTACT)GetWindowLongPtr(hwnd, GWLP_USERDATA); EnableWindow(GetDlgItem(hwnd, IDC_VISIBLE_UNLESS_OFFLINE), 1); CheckDlgButton(hwnd, IDC_VISIBLE_UNLESS_OFFLINE, db_get_b(hContact, MODNAME, "VisibleUnlessOffline", 1) ? BST_CHECKED : BST_UNCHECKED); } else EnableWindow(GetDlgItem(hwnd, IDC_VISIBLE_UNLESS_OFFLINE), 0); break; case CHK_USE_TIMER: if (IsDlgButtonChecked(hwnd, CHK_USE_TIMER)) { MCONTACT hContact = (MCONTACT)GetWindowLongPtr(hwnd, GWLP_USERDATA); char string[4]; EnableWindow(GetDlgItem(hwnd, IDC_TIMER), 1); SetDlgItemTextA(hwnd, IDC_TIMER, _itoa(db_get_w(hContact, MODNAME, "Timer", 15), string, 10)); } else EnableWindow(GetDlgItem(hwnd, IDC_TIMER), 0); break; case IDC_OPEN_FILE: char szFileName[512]; if (Openfile(szFileName, 1)) SetDlgItemTextA(hwnd, IDC_LINK, szFileName); break; case IDC_OPEN_FOLDER: if (BrowseForFolder(hwnd, szFileName)) { mir_snprintf(szFileName, "%s ,/e", szFileName); SetDlgItemTextA(hwnd, IDC_LINK, "explorer.exe"); SetDlgItemTextA(hwnd, IDC_PARAMS, szFileName); } } break; case WM_NOTIFY: switch (((LPNMHDR)lParam)->idFrom) { case 0: switch (((LPNMHDR)lParam)->code) { case PSN_APPLY: int status = GetLCStatus(0, 0); MCONTACT hContact = (MCONTACT)GetWindowLongPtr(hwnd, GWLP_USERDATA); if (GetWindowTextLength(GetDlgItem(hwnd, IDC_LINK))) { char text[512]; GetDlgItemTextA(hwnd, IDC_LINK, text, _countof(text)); db_set_s(hContact, MODNAME, "ProgramString", text); WriteSetting(hContact, MODNAME, "ProgramString", MODNAME, "Program"); } else db_unset(hContact, MODNAME, "ProgramString"); if (GetWindowTextLength(GetDlgItem(hwnd, IDC_PARAMS))) { char text[512]; GetDlgItemTextA(hwnd, IDC_PARAMS, text, _countof(text)); db_set_s(hContact, MODNAME, "ProgramParamsString", text); WriteSetting(hContact, MODNAME, "ProgramParamsString", MODNAME, "ProgramParams"); } else db_unset(hContact, MODNAME, "ProgramParamsString"); if (GetWindowTextLength(GetDlgItem(hwnd, IDC_GROUP))) { TCHAR text[512]; GetDlgItemText(hwnd, IDC_GROUP, text, _countof(text)); Clist_CreateGroup(NULL, text); db_set_ts(hContact, "CList", "Group", text); } else db_unset(hContact, "CList", "Group"); for (int i = ID_STATUS_ONLINE; i <= ID_STATUS_OUTTOLUNCH; i++) if (IsDlgButtonChecked(hwnd, i)) db_set_w(hContact, MODNAME, "Icon", (WORD)i); /* set correct status */ if (status == ID_STATUS_ONLINE || status == ID_STATUS_AWAY || (status == db_get_w(hContact, MODNAME, "Icon", ID_STATUS_ONLINE))) db_set_w(hContact, MODNAME, "Status", (WORD)db_get_w(hContact, MODNAME, "Icon", ID_STATUS_ONLINE)); else db_set_w(hContact, MODNAME, "Status", ID_STATUS_OFFLINE); if (IsDlgButtonChecked(hwnd, CHK_USE_TIMER)) { if (GetWindowTextLength(GetDlgItem(hwnd, IDC_TIMER))) { TCHAR text[512]; GetDlgItemText(hwnd, IDC_TIMER, text, _countof(text)); db_set_w(hContact, MODNAME, "Timer", (WORD)_ttoi(text)); } else db_set_w(hContact, MODNAME, "Timer", 15); } else db_set_w(hContact, MODNAME, "Timer", 0); // always visible db_set_b(hContact, MODNAME, "AlwaysVisible", (BYTE)IsDlgButtonChecked(hwnd, IDC_ALWAYS_VISIBLE)); db_set_b(hContact, MODNAME, "VisibleUnlessOffline", (BYTE)IsDlgButtonChecked(hwnd, IDC_VISIBLE_UNLESS_OFFLINE)); } return TRUE; } break; } return FALSE; }