⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmenu.c

📁 是有关基因比对的经典算法的实现。这对于初学计算生物学的人是非常重要的算法。
💻 C
📖 第 1 页 / 共 5 页
字号:
	SelectFont(systemFont);
	stdCharWidth=CharWidth('A');
	stdLineHeight=LineHeight();
	message = StaticPrompt(mainw, "",500, 0,systemFont,'l');

/* save some pixel sizes for future resizing events */
	if(aln_mode==PROFILEM)
	{
		Hide(seq_display);
		profile_no=1;
		Show(prf1_display);
		Show(prf2_display);
		Show(pscrolltext);
		active_panel=prf_panel[0];
		Select(prf1_display);
		load_aln(prf_panel[0],0,profile1_nseqs-1,TRUE);
		load_aln(prf_panel[1],profile1_nseqs,nseqs-1,TRUE);

		Show(mainw);
		ObjectRect(mainw,&wr);
		ObjectRect(prf_panel[0].names,&r);
		ObjectRect(prf_panel[1].names,&r1);
		boffset=wr.bottom-wr.top-r1.bottom;
		loffset=r.left;
		toffset=r.top;
		ObjectRect(prf_panel[0].seqs,&r);
		roffset=wr.right-wr.left-r.right;
	}
	else
	{
		Hide(prf1_display);
		Hide(prf2_display);
		Hide(pscrolltext);
		profile_no=0;
		Show(seq_display);
		active_panel=seq_panel;

		Select(seq_display);
		load_aln(seq_panel,0,nseqs-1,TRUE);

		Show(mainw);
		ObjectRect(mainw,&wr);
		ObjectRect(seq_panel.names,&r);
		boffset=wr.bottom-wr.top-r.bottom;
		loffset=r.left;
		toffset=r.top;
		ObjectRect(seq_panel.seqs,&r);
		roffset=wr.right-wr.left-r.right;
	}
	ObjectRect(prf_panel[0].names,&r);
	ObjectRect(prf_panel[1].names,&r1);
	poffset=r1.top-r.bottom;

/* initialise some variables before we display the window */
        if(orientation==LANDSCAPE)
        {
                if(pagesize==A4) blocklen=150;
                else if (pagesize==A3) blocklen=250;
		else blocklen=150;
        }
        else
        {
                if(pagesize==A4) blocklen=80;
                else if (pagesize==A3) blocklen=150;
		else blocklen=150;
        }

/* ok - Go! */
	window_displayed=TRUE;
	ProcessEvents();

}


static void RemoveWin(WindoW w)
{
	Remove(w);
}


static void QuitWinW(WindoW w)
{
	if(aln_mode == MULTIPLEM)
	{
		if(seq_panel.modified)
			if (Message(MSG_YN,"Alignment has not been saved.\n"
			"Quit program anyway?")==ANS_NO) return;
	}
	else if(aln_mode == PROFILEM)
	{
		if(prf_panel[0].modified)
			if (Message(MSG_YN,"Profile 1 has not been saved.\n"
			"Quit program anyway?")==ANS_NO) return;
		if(prf_panel[1].modified)
			if (Message(MSG_YN,"Profile 2 has not been saved.\n"
			"Quit program anyway?")==ANS_NO) return;
	}
	QuitProgram ();
}

static void SearchStrWin (IteM item)
{
	int i;
	Boolean sel=FALSE;
	GrouP findgr;
	ButtoN find_can,find_ok;
	PopuP ps,or;
	char path[FILENAMELEN];
	char str[FILENAMELEN];
	panel_data data;

	GetPanelExtra(active_panel.names,&data);
	if (data.nseqs==0)
	{
		Message(MSG_OK,"No file loaded.");
		return;
	}
	for (i=0;i<data.nseqs;i++)
		if(data.selected[i]==TRUE)
		{
			sel=TRUE;
			break;
		}
	if(sel==FALSE)
	{
		Message(MSG_OK,"Select sequences by clicking on the names.");
		return;
	}

	SelectFont(systemFont);
	stdCharWidth=CharWidth('A');
	stdLineHeight=LineHeight();
	findw=FixedWindow(-50, -33, -10, -10, "SEARCH IN SELECTED SEQUENCES",RemoveWin);
        stdLineHeight=18;
        SelectFont(programFont);
	findtext=DialogText(findw, "", 35, NULL);
	Break(findw);
	find_ok=PushButton(findw, "SEARCH FROM START", SearchStr);
	Break(findw);
	find_ok=PushButton(findw, "SEARCH AGAIN", SearchStringAgain);
	Break(findw);
	find_can=PushButton(findw, "CLOSE", CancelWin);

	Show(findw);
}

static void SavePSSeqWin (IteM item)
{
	if (empty)
	{
		error("No file loaded");
		return;
	}
	save_ps_window(0,"WRITE SEQUENCES TO:",SavePSSeqFile);
}

static void SavePSPrf1Win (IteM item)
{
	if (profile1_empty)
	{
		error("No file loaded");
		return;
	}
	save_ps_window(1,"WRITE PROFILE 1 TO:",SavePSPrf1File);
}

static void SavePSPrf2Win (IteM item)
{
	if (profile2_empty)
	{
		error("No file loaded");
		return;
	}
	save_ps_window(2,"WRITE PROFILE 2 TO:",SavePSPrf2File);
}

static void save_ps_window(int prf_no,char *prompt,void save_proc(ButtoN but))
{
	GrouP savegr;
	ButtoN save_can,save_ok;
	PopuP ps,or;
	char path[FILENAMELEN];
	char str[FILENAMELEN];
	panel_data data;

	SelectFont(systemFont);
	stdCharWidth=CharWidth('A');
	stdLineHeight=LineHeight();
	savepsw=FixedWindow(-50, -33, -10, -10, "WRITE POSTSCRIPT FILE",RemoveWin);
	make_prompt(savepsw, prompt);
        stdLineHeight=18;
        SelectFont(programFont);
	savepstext=DialogText(savepsw, "", 35, NULL);
	Break(savepsw);
	make_prompt(savepsw, "PS Colors File :");
	pspartext=DialogText(savepsw, ps_par_file, 35, NULL);
	Break(savepsw);
       	make_prompt(savepsw, "Page Size");
	Advance(savepsw);
	ps=PopupList(savepsw,TRUE,set_pagesize);
	PopupItem(ps,"A4");
	PopupItem(ps,"A3");
	PopupItem(ps,"US Letter");
	if (pagesize == A4)
		SetValue(ps,1);
	else if (pagesize == A3)
		SetValue(ps,2);
	else if (pagesize == USLETTER)
		SetValue(ps,3);
	Break(savepsw);
       	make_prompt(savepsw, "Orientation");
	Advance(savepsw);
	or=PopupList(savepsw,TRUE,set_orientation);
	PopupItem(or,"LANDSCAPE");
	PopupItem(or,"PORTRAIT");
	if (orientation == LANDSCAPE)
		SetValue(or,1);
	else if (orientation == PORTRAIT)
		SetValue(or,2);
	Break(savepsw);
	make_toggle(savepsw,"Print Header :","YES","NO",&ps_header,set_header);
	Advance(savepsw);
	make_toggle(savepsw,"Print Quality Curve :","YES","NO",&ps_curve,set_curve);
	Break(savepsw);
	make_toggle(savepsw,"Print Ruler :","YES","NO",&ps_ruler,set_ruler);
	Advance(savepsw);
	make_toggle(savepsw,"Print Residue Numbers :","YES","NO",&ps_resno,set_resno);
	Break(savepsw);
	make_toggle(savepsw,"Resize to fit page:","YES","NO",&resize,set_resize);
	Break(savepsw);
	first_printres=1;
	if (prf_no==0)
		GetPanelExtra(seq_panel.seqs,&data);
	else if (prf_no==1)
		GetPanelExtra(prf_panel[0].seqs,&data);
	else
		GetPanelExtra(prf_panel[1].seqs,&data);
	last_printres=data.ncols;
        make_prompt(savepsw, "Print from position :");
	Advance(savepsw);
	sprintf(str,"%5d",first_printres);
        DialogText(savepsw, str, 5,set_fpres);
	Advance(savepsw);
        make_prompt(savepsw, "to :");
	Advance(savepsw);
	sprintf(str,"%5d",last_printres);
        DialogText(savepsw, str, 5,set_lpres);
	Break(savepsw);
        make_prompt(savepsw, "Use block length :");
	Advance(savepsw);
	sprintf(str,"%5d",blocklen);
        blocklentext=DialogText(savepsw, str, 5,set_blocklen);
	Break(savepsw);
	savegr=HiddenGroup(savepsw, 2, 0, NULL);
	shift(savegr, 60, 20);
	save_ok=PushButton(savegr, "  OK  ", save_proc);
	shift(savegr, 20,0);
	save_can=PushButton(savegr, "CLOSE", CancelWin);

	if(prf_no==0)
		get_path(seqname,path);
	else if(prf_no==1)
		get_path(profile1_name,path);
	else if(prf_no==2)
		get_path(profile2_name,path);
	strcat(path,"ps");
	SetTitle(savepstext, path);
	Show(savepsw);
}

static void SaveScoresWin (IteM item)
{
	int i;
	Boolean sel=FALSE;
	GrouP scoregr;
	ButtoN score_can,score_ok;
	PopuP ps,or;
	char path[FILENAMELEN];
	char str[FILENAMELEN];
	panel_data data;


	if (empty)
	{
		error("No file loaded");
		return;
	}

	GetPanelExtra(active_panel.names,&data);
	for (i=0;i<data.nseqs;i++)
		if(data.selected[i]==TRUE)
		{
			sel=TRUE;
			break;
		}
	if(sel==FALSE)
	{
		Message(MSG_OK,"Select sequences to be written by clicking on the names.");
		return;
	}

        get_path(seqname,path);
	strcat(path,"qscores");

	SelectFont(systemFont);
	stdCharWidth=CharWidth('A');
	stdLineHeight=LineHeight();
	savescoresw=FixedWindow(-50, -33, -10, -10, "SAVE QUALITY SCORES",RemoveWin);
        stdLineHeight=18;
        SelectFont(programFont);
	make_prompt(savescoresw, "SAVE QUALITY SCORES TO:");
        stdLineHeight=18;
        SelectFont(programFont);
	Break(savescoresw);
	savescorestext=DialogText(savescoresw, "", 35, NULL);
	Break(savescoresw);
	scoregr=HiddenGroup(savescoresw, 2, 0, NULL);
	shift(scoregr, 60, 20);
	score_ok=PushButton(scoregr, "  OK  ", SaveScores);
	shift(scoregr, 20,0);
	score_can=PushButton(scoregr, "CANCEL", CancelWin);

	SetTitle(savescorestext, path);
	Show(savescoresw);

	Advance(savescoresw);
	Show(savescoresw);
}

static void SaveScores(ButtoN but)
{
	char c;
	int i,j,val;
	int length=0;
	FILE *outfile;
	panel_data name_data,seq_data;
	Boolean gap;

	GetPanelExtra(active_panel.names,&name_data);
	GetPanelExtra(active_panel.seqs,&seq_data);

	GetTitle(savescorestext, filename, FILENAMELEN);
	stripspace(filename);

	outfile=open_explicit_file(filename); 

/* get the maximum length of the selected sequences */
        for (i=1;i<=nseqs;i++)
           if (name_data.selected[i-1]==TRUE && length < seqlen_array[i]) length = seqlen_array[i];

	for(j=1;j<=length;j++)
	{
/* first check for a column of gaps */
		gap=TRUE;
        	for (i=1;i<=nseqs;i++)
           		if (name_data.selected[i-1]==TRUE)
			{
                                val = seq_array[i][j];
                                if(j<=seqlen_array[i] && (val != gap_pos1) && (val != gap_pos2))
				{
					gap=FALSE;
					break;
				}
			}
		if(gap==FALSE)
		{
        		for (i=1;i<=nseqs;i++)
			{
           			if (name_data.selected[i-1]==TRUE)
				{
                                	val = seq_array[i][j];
                                	if(j>seqlen_array[i] || (val == gap_pos1) || (val == gap_pos2))
                                        	c = '-';
                                	else {
                                        	c = amino_acid_codes[val];
                                	}
	 
					fprintf(outfile,"%c ",c);
				}
			}
			fprintf(outfile,"\t%3d\n",seq_data.colscore[j-1]);
		}

	}
	fclose(outfile);

        if (Visible(savescoresw))
        {
                Remove(savescoresw);
                savescoresw=NULL;
        }



	info("File %s saved",filename);
}

static void SaveSeqFileWin (IteM item)
{
	if (empty)
	{
		error("No file loaded");
		return;
	}
	save_aln_window(0,"SAVE SEQUENCES","SAVE SEQUENCES AS:",SaveSeqFile);
}
static void SavePrf1FileWin (IteM item)
{
	if (profile1_empty)
	{
		error("No file loaded");
		return;
	}
	save_aln_window(1,"SAVE PROFILE","SAVE PROFILE 1 AS:",SavePrf1File);
}
static void SavePrf2FileWin (IteM item)
{
	if (profile2_empty)
	{
		error("No file loaded");
		return;
	}
	save_aln_window(2,"SAVE PROFILE","SAVE PROFILE 2 AS:",SavePrf2File);
}

static void save_aln_window(int prf_no,char *title,char *prompt,void save_proc(ButtoN but))
{
	GrouP savegr;
	ButtoN save_ok, save_can;
	GrouP maing;
        GrouP format_list;
	ButtoN formatb[6];
	PopuP case_toggle,snos_toggle;
	char path[FILENAMELEN];
	char str[FILENAMELEN];

	SelectFont(systemFont);
	stdCharWidth=CharWidth('A');
	stdLineHeight=LineHeight();

	savealnw=FixedWindow(-50, -33, -10, -10, title,RemoveWin);

        format_list=NormalGroup(savealnw,3,0,"Format",systemFont,set_format);
        formatb[0]=RadioButton(format_list,"CLUSTAL");
        formatb[1]=RadioButton(format_list,"NBRF/PIR");
        formatb[2]=RadioButton(format_list,"GCG/MSF");
        formatb[3]=RadioButton(format_list,"PHYLIP");
        formatb[4]=RadioButton(format_list,"GDE");
        formatb[5]=RadioButton(format_list,"NEXUS");
	if(prf_no==0)
        	get_path(seqname,path);
	else if(prf_no==1)
        	get_path(profile1_name,path);
	else if(prf_no==2)
        	get_path(profile2_name,path);
	if (save_format==CLUSTAL)
	{
        	SetValue(format_list,1);
		strcat(path,"aln");
	}
	else if (save_format==PIR)
	{
        	SetValue(format_list,2);
		strcat(path,"pir");
	}
	else if (save_format==MSF)
	{
        	SetValue(format_list,3);
		strcat(path,"msf");
	}
	else if (save_format==PHYLIP)
	{
        	SetValue(format_list,4);
		strcat(path,"phy");
	}
	else if (save_format==GDE)
	{
        	SetValue(format_list,5);
		strcat(path,"gde");
	}
 	else if (save_format==NEXUS)
	{
        	SetValue(format_list,6);
		strcat(path,"nxs");
	}

 
	maing=HiddenGroup(savealnw,0,0,NULL);
	SetGroupSpacing(maing,0,10);

	case_toggle=make_toggle(maing,"GDE output case :","Lower","Upper",&lowercase,set_case);
	Break(maing);
	snos_toggle=make_toggle(maing,"CLUSTALW sequence numbers :","ON","OFF",&cl_seq_numbers,set_snos);

	Break(maing);
        make_prompt(maing, "Save from residue :");
	Advance(maing);
	sprintf(str,"%5d",firstres);
        DialogText(maing, str, 5,set_fres);
	Advance(maing);
        make_prompt(maing, "to :");
	Advance(maing);
	sprintf(str,"%5d",lastres);
        DialogText(maing, str, 5,set_lres);

	Break(maing);
	shift(savealnw, 0, 20);
	make_prompt(savealnw, prompt);
        stdLineHeight=18;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -