static void pr_html_files(FILE *out, int nfile, t_filenm fnm[], const char *program, t_linkdata *links, gmx_bool bWiki) { int i; char link[10], tmp[255]; if (bWiki) { fprintf(out, " %-10s %-12s %-12s %-s\n" " -----------------------------------------------------\n", "Option", "Filename", "Type", "Description"); } else { fprintf(out, "<TABLE BORDER=1 CELLSPACING=0 CELLPADDING=2>\n" "<TR>" "<TH>option</TH>" "<TH>filename</TH>" "<TH>type</TH>" "<TH>description</TH>" "</TR>\n"); } for (i = 0; (i < nfile); i++) { strcpy(link, ftp2ext(fnm[i].ftp)); if (strcmp(link, "???") == 0) { strcpy(link, "files"); } if (bWiki) { fprintf(out, " %-10s %-16s %-12s %-s\n", fnm[i].opt, NWR(fnm[i].fns[0]), fileopt(fnm[i].flag, tmp, 255), NWR(ftp2desc(fnm[i].ftp))); } else { fprintf(out, "<TR>" "<TD ALIGN=RIGHT> <b><tt>%s</tt></b> </TD>" "<TD ALIGN=RIGHT> <tt><a href=\"%s.html\">%12s</a></tt> </TD>" "<TD> %s </TD>" "<TD> %s </TD>" "</TR>\n", fnm[i].opt, link, fnm[i].fns[0], fileopt(fnm[i].flag, tmp, 255), NSR(ftp2desc(fnm[i].ftp))); } } if (!bWiki) { fprintf(out, "</TABLE>\n"); } }
static void write_texman(FILE *out,const char *program, int nldesc,const char **desc, int nfile,t_filenm *fnm, int npargs,t_pargs *pa, int nbug,const char **bugs, t_linkdata *links) { int i; char tmp[256]; fprintf(out,"\\section{\\normindex{%s}}\\label{%s}\n\n",check_tex(program),check_tex(program)); if (nldesc > 0) for(i=0; (i<nldesc); i++) fprintf(out,"%s\n",check_tex(desc[i])); if (nfile > 0) { fprintf(out,"\\vspace{-2ex}\\begin{tabbing}\n"); fprintf(out,"\n{\\normalsize \\bf Files}\\nopagebreak\\\\\n"); fprintf(out,"{\\tt ~~~~~~~} \\= {\\tt ~~~~~~~~~~~~~~} \\= " "~~~~~~~~~~~~~~~~~~~~~~ \\= \\nopagebreak\\kill\n"); for(i=0; (i<nfile); i++) fprintf(out,"\\>{\\tt %s} \\'\\> {\\tt %s} \\' %s \\> " "\\parbox[t]{0.55\\linewidth}{%s} \\\\\n", check_tex(fnm[i].opt),check_tex(fnm[i].fns[0]), check_tex(fileopt(fnm[i].flag,tmp,255)), check_tex(ftp2desc(fnm[i].ftp))); fprintf(out,"\\end{tabbing}\\vspace{-4ex}\n"); } if (npargs > 0) { fprintf(out,"\\vspace{-2ex}\\begin{tabbing}\n"); fprintf(out,"\n{\\normalsize \\bf Other options}\\nopagebreak\\\\\n"); fprintf(out,"{\\tt ~~~~~~~~~~} \\= vector \\= " "{\\tt ~~~~~~~} \\= \\nopagebreak\\kill\n"); for(i=0; (i<npargs); i++) { if (strlen(check_tex(pa_val(&(pa[i]),tmp,255))) <= 8) fprintf(out,"\\> {\\tt %s} \\'\\> %s \\'\\> {\\tt %s} \\' " "\\parbox[t]{0.68\\linewidth}{%s}\\\\\n", check_tex(pa[i].option),argtp[pa[i].type], check_tex(pa_val(&(pa[i]),tmp,255)), check_tex(pa[i].desc)); else fprintf(out,"\\> {\\tt %s} \\'\\> %s \\'\\>\\\\\n" "\\> \\'\\> \\'\\> {\\tt %s} \\' " "\\parbox[t]{0.7\\linewidth}{%s}\\\\\n", check_tex(pa[i].option),argtp[pa[i].type], check_tex(pa_val(&(pa[i]),tmp,255)), check_tex(pa[i].desc)); } fprintf(out,"\\end{tabbing}\\vspace{-4ex}\n"); } if (nbug > 0) { fprintf(out,"\n"); fprintf(out,"\\begin{itemize}\n"); for(i=0; (i<nbug); i++) fprintf(out,"\\item %s\n",check_tex(bugs[i])); fprintf(out,"\\end{itemize}\n"); } /* fprintf(out,"\n\\newpage\n"); */ }
void pr_htmldefs(FILE *fp) { int i; fprintf(fp,"<title>GROMACS</title>\n"); fprintf(fp,"<h1>GROMACS Files</h1>\n"); fprintf(fp,"<b>GRO</b>ningen <b>MA</b>chine for <b>S</b>imulating <b>C</b>hemistry\n"); fprintf(fp,"<p>\n"); fprintf(fp,"The following %d filetypes are used by Gromacs:\n",efNR); fprintf(fp,"<dl>\n"); for(i=0; (i<efNR); i++) { fprintf(fp,"<dt><a href=\"%s.html\">%s.%s</a> (%s)<dd>%s\n", ftp2ext(i),ftp2defnm(i),ftp2ext(i),ftp2ftype(i), check_html(ftp2desc(i),NULL)); } fprintf(fp,"</dl>\n"); }
int main(int argc,char *argv[]) { const char *desc[] = { "[TT]do_multiprot[tt] ", "reads a trajectory file and aligns it to a reference structure ", "each time frame", "calling the multiprot program. This allows you to use a reference", "structure whose sequence is different than that of the protein in the ", "trajectory, since the alignment is based on the geometry, not sequence.", "The output of [TT]do_multiprot[tt] includes the rmsd and the number of residues", "on which it was calculated.", "[PAR]", "An aligned trajectory file is generated with the [TT]-ox[tt] option.[PAR]", "With the [TT]-cr[tt] option, the number of hits in the alignment is given", "per residue. This number can be between 0 and the number of frames, and", "indicates the structural conservation of this residue.[PAR]", "If you do not have the [TT]multiprot[tt] program, get it. [TT]do_multiprot[tt] assumes", "that the [TT]multiprot[tt] executable is [TT]/usr/local/bin/multiprot[tt]. If this is ", "not the case, then you should set an environment variable [BB]MULTIPROT[bb]", "pointing to the [TT]multiprot[tt] executable, e.g.: [PAR]", "[TT]setenv MULTIPROT /usr/MultiProtInstall/multiprot.Linux[tt][PAR]", "Note that at the current implementation only binary alignment (your", "molecule to a reference) is supported. In addition, note that the ", "by default [TT]multiprot[tt] aligns the two proteins on their C-alpha carbons.", "and that this depends on the [TT]multiprot[tt] parameters which are not dealt ", "with here. Thus, the C-alpha carbons is expected to give the same " "results as choosing the whole protein and will be slightly faster.[PAR]", "For information about [TT]multiprot[tt], see:", "http://bioinfo3d.cs.tau.ac.il/MultiProt/.[PAR]" }; static bool bVerbose; t_pargs pa[] = { { "-v", FALSE, etBOOL, {&bVerbose}, "HIDDENGenerate miles of useless information" } }; const char *bugs[] = { "The program is very slow, since multiprot is run externally" }; t_trxstatus *status; t_trxstatus *trxout=NULL; FILE *tapein,*fo,*frc,*tmpf,*out=NULL,*fres=NULL; const char *fnRef; const char *fn="2_sol.res"; t_topology top; int ePBC; t_atoms *atoms,ratoms,useatoms; t_trxframe fr; t_pdbinfo p; int nres,nres2,nr0; real t; int i,j,natoms,nratoms,nframe=0,model_nr=-1; int cur_res,prev_res; int nout; t_countres *countres=NULL; matrix box,rbox; int gnx; char *grpnm,*ss_str; atom_id *index; rvec *xp,*x,*xr; char pdbfile[32],refpdb[256],title[256],rtitle[256],filemode[5]; char out_title[256]; char multiprot[256],*mptr; int ftp; int outftp=-1; real rmsd; bool bTrjout,bCountres; const char *TrjoutFile=NULL; output_env_t oenv; static rvec translation={0,0,0},rotangles={0,0,0}; gmx_rmpbc_t gpbc=NULL; t_filenm fnm[] = { { efTRX, "-f", NULL, ffREAD }, { efTPS, NULL, NULL, ffREAD }, { efNDX, NULL, NULL, ffOPTRD }, { efSTX, "-r", NULL , ffREAD }, { efXVG, "-o", "rmss", ffWRITE }, { efXVG, "-rc", "rescount", ffWRITE}, { efXVG, "-cr", "countres", ffOPTWR}, { efTRX, "-ox", "aligned", ffOPTWR } }; #define NFILE asize(fnm) CopyRight(stderr,argv[0]); parse_common_args(&argc,argv,PCA_CAN_TIME | PCA_CAN_VIEW | PCA_TIME_UNIT, NFILE,fnm, asize(pa),pa, asize(desc),desc, asize(bugs),bugs,&oenv ); fnRef=opt2fn("-r",NFILE,fnm); bTrjout = opt2bSet("-ox",NFILE,fnm); bCountres= opt2bSet("-cr",NFILE,fnm); if (bTrjout) { TrjoutFile = opt2fn_null("-ox",NFILE,fnm); } read_tps_conf(ftp2fn(efTPS,NFILE,fnm),title,&top,&ePBC,&xp,NULL,box,FALSE); gpbc = gmx_rmpbc_init(&top.idef,ePBC,top.atoms.nr,box); atoms=&(top.atoms); ftp=fn2ftp(fnRef); get_stx_coordnum(fnRef,&nratoms); init_t_atoms(&ratoms,nratoms,TRUE); snew(xr,nratoms); read_stx_conf(fnRef,rtitle,&ratoms,xr,NULL,&ePBC,rbox); if (bVerbose) { fprintf(stderr,"Read %d atoms\n",atoms->nr); fprintf(stderr,"Read %d reference atoms\n",ratoms.nr); } if (bCountres) { snew(countres,ratoms.nres); j=0; cur_res=0; for (i=0;i<ratoms.nr;i++) { prev_res=cur_res; cur_res=ratoms.atom[i].resind; if (cur_res != prev_res) { countres[j].resnr=cur_res; countres[j].count=0; j++; } } } get_index(atoms,ftp2fn_null(efNDX,NFILE,fnm),1,&gnx,&index,&grpnm); nres=0; nr0=-1; for(i=0; (i<gnx); i++) { if (atoms->atom[index[i]].resind != nr0) { nr0=atoms->atom[index[i]].resind; nres++; } } fprintf(stderr,"There are %d residues in your selected group\n",nres); strcpy(pdbfile,"ddXXXXXX"); gmx_tmpnam(pdbfile); if ((tmpf = fopen(pdbfile,"w")) == NULL) { sprintf(pdbfile,"%ctmp%cfilterXXXXXX",DIR_SEPARATOR,DIR_SEPARATOR); gmx_tmpnam(pdbfile); if ((tmpf = fopen(pdbfile,"w")) == NULL) { gmx_fatal(FARGS,"Can not open tmp file %s",pdbfile); } } else { gmx_ffclose(tmpf); } if (ftp != efPDB) { strcpy(refpdb,"ddXXXXXX"); gmx_tmpnam(refpdb); strcat(refpdb,".pdb"); write_sto_conf(refpdb,rtitle,&ratoms,xr,NULL,ePBC,rbox); } else { strcpy(refpdb,fnRef); } if ((mptr=getenv("MULTIPROT")) == NULL) { mptr="/usr/local/bin/multiprot"; } if (!gmx_fexist(mptr)) { gmx_fatal(FARGS,"MULTIPROT executable (%s) does not exist (use setenv MULTIPROT)", mptr); } sprintf (multiprot,"%s %s %s > /dev/null %s", mptr, refpdb, pdbfile, "2> /dev/null"); if (bVerbose) fprintf(stderr,"multiprot cmd='%s'\n",multiprot); if (!read_first_frame(oenv,&status,ftp2fn(efTRX,NFILE,fnm),&fr,TRX_READ_X)) gmx_fatal(FARGS,"Could not read a frame from %s",ftp2fn(efTRX,NFILE,fnm)); natoms = fr.natoms; if (bTrjout) { nout=natoms; /* open file now */ outftp=fn2ftp(TrjoutFile); if (bVerbose) fprintf(stderr,"Will write %s: %s\n",ftp2ext(ftp),ftp2desc(outftp)); strcpy(filemode,"w"); switch (outftp) { case efXTC: case efG87: case efTRR: case efTRJ: out=NULL; trxout = open_trx(TrjoutFile,filemode); break; case efGRO: case efG96: case efPDB: /* Make atoms struct for output in GRO or PDB files */ /* get memory for stuff to go in pdb file */ init_t_atoms(&useatoms,nout,FALSE); sfree(useatoms.resinfo); useatoms.resinfo=atoms->resinfo; for(i=0;(i<nout);i++) { useatoms.atomname[i]=atoms->atomname[i]; useatoms.atom[i]=atoms->atom[i]; useatoms.nres=max(useatoms.nres,useatoms.atom[i].resind+1); } useatoms.nr=nout; out=gmx_ffopen(TrjoutFile,filemode); break; } } if (natoms > atoms->nr) { gmx_fatal(FARGS,"\nTrajectory does not match topology!"); } if (gnx > natoms) { gmx_fatal(FARGS,"\nTrajectory does not match selected group!"); } fo = xvgropen(opt2fn("-o",NFILE,fnm),"RMSD","Time (ps)","RMSD (nm)",oenv); frc = xvgropen(opt2fn("-rc",NFILE,fnm),"Number of Residues in the alignment","Time (ps)","Residues",oenv); do { t = output_env_conv_time(oenv,fr.time); gmx_rmpbc(gpbc,natoms,fr.box,fr.x); tapein=gmx_ffopen(pdbfile,"w"); write_pdbfile_indexed(tapein,NULL,atoms,fr.x,ePBC,fr.box,' ',-1,gnx,index,NULL,TRUE); gmx_ffclose(tapein); system(multiprot); remove(pdbfile); process_multiprot_output(fn, &rmsd, &nres2,rotangles,translation,bCountres,countres); fprintf(fo,"%12.7f",t); fprintf(fo," %12.7f\n",rmsd); fprintf(frc,"%12.7f",t); fprintf(frc,"%12d\n",nres2); if (bTrjout) { rotate_conf(natoms,fr.x,NULL,rotangles[XX],rotangles[YY],rotangles[ZZ]); for(i=0; i<natoms; i++) { rvec_inc(fr.x[i],translation); } switch(outftp) { case efTRJ: case efTRR: case efG87: case efXTC: write_trxframe(trxout,&fr,NULL); break; case efGRO: case efG96: case efPDB: sprintf(out_title,"Generated by do_multiprot : %s t= %g %s", title,output_env_conv_time(oenv,fr.time),output_env_get_time_unit(oenv)); switch(outftp) { case efGRO: write_hconf_p(out,out_title,&useatoms,prec2ndec(fr.prec), fr.x,NULL,fr.box); break; case efPDB: fprintf(out,"REMARK GENERATED BY DO_MULTIPROT\n"); sprintf(out_title,"%s t= %g %s",title,output_env_conv_time(oenv,fr.time),output_env_get_time_unit(oenv)); /* if reading from pdb, we want to keep the original model numbering else we write the output frame number plus one, because model 0 is not allowed in pdb */ if (ftp==efPDB && fr.step > model_nr) { model_nr = fr.step; } else { model_nr++; } write_pdbfile(out,out_title,&useatoms,fr.x,ePBC,fr.box,' ',model_nr,NULL,TRUE); break; case efG96: fr.title = out_title; fr.bTitle = (nframe == 0); fr.bAtoms = FALSE; fr.bStep = TRUE; fr.bTime = TRUE; write_g96_conf(out,&fr,-1,NULL); } break; } } nframe++; } while(read_next_frame(oenv,status,&fr)); if (bCountres) { fres= xvgropen(opt2fn("-cr",NFILE,fnm),"Number of frames in which the residues are aligned to","Residue","Number",oenv); for (i=0;i<ratoms.nres;i++) { fprintf(fres,"%10d %12d\n",countres[i].resnr,countres[i].count); } gmx_ffclose(fres); } gmx_ffclose(fo); gmx_ffclose(frc); fprintf(stderr,"\n"); close_trj(status); if (trxout != NULL) { close_trx(trxout); } else if (out != NULL) { gmx_ffclose(out); } view_all(oenv,NFILE, fnm); sfree(xr); if (bCountres) { sfree(countres); } free_t_atoms(&ratoms,TRUE); if (bTrjout) { if (outftp==efPDB || outftp==efGRO || outftp==efG96) { free_t_atoms(&useatoms,TRUE); } } gmx_thanx(stderr); return 0; }
static void write_xmlman(FILE *out, const char *program, int nldesc,const char **desc, int nfile,t_filenm *fnm, int npargs,t_pargs *pa, int nbug,const char **bugs, t_linkdata *links) { int i; char link[10],buf[256],opt[10]; #define NSR2(s) check_xml(s,program,links) #define FLAG(w,f) (((w) & (f))==(f)) fprintf(out,"<gromacs-manual version=\"%s\" date=\"%s\" www=\"http://www.gromacs.org\">\n",GromacsVersion(),mydate(buf,255,FALSE)); /* fprintf(out,"<LINK rel=stylesheet href=\"style.css\" type=\"text/css\">\n"); */ fprintf(out,"<program name=\"%s\">",program); if (nldesc > 0) { fprintf(out,"\n<description>\n<par>\n"); for(i=0; (i<nldesc); i++) fprintf(out,"%s\n",NSR2(desc[i])); } fprintf(out,"</par>\n</description>\n"); if (nfile > 0) { fprintf(out,"\n<files>\n"); for(i=0; (i<nfile); i++) { strcpy(link,ftp2ext(fnm[i].ftp)); if (strcmp(link,"???")==0) strcpy(link,"files"); if (fnm[i].opt[0]=='-') strcpy(opt,fnm[i].opt+1); else strcpy(opt,fnm[i].opt); fprintf(out, "<file type=\"%s\" typeid=\"%d\">\n" "\t<flags read=\"%d\" write=\"%d\" optional=\"%d\"/>\n" "\t<option>%s</option>\n" "\t<default-name link=\"%s.html\">%s</default-name>\n" "\t<description>%s</description>\n" "</file>\n", ftp2defnm(fnm[i].ftp), /* from gmxlib/filenm.c */ fnm[i].ftp, FLAG(fnm[i].flag,ffREAD), FLAG(fnm[i].flag,ffWRITE), FLAG(fnm[i].flag,ffOPT), opt,link,fnm[i].fn,/*fileopt(fnm[i].flag),*/ NSR(ftp2desc(fnm[i].ftp))); } fprintf(out,"</files>\n"); } if (npargs > 0) { fprintf(out,"\n<options>\n"); for(i=0; (i<npargs); i++) fprintf(out, "<option type=\"%s\" hidden=\"%d\">\n" "\t<name >%s</name>\n" "\t<default-value>%s</default-value>\n" "\t<description>%s</description>\n" "</option>\n", argtp[pa[i].type], is_hidden(&pa[i]), pa[i].option+1, /* +1 - with no trailing '-' */ pa_val(&(pa[i]),buf,255),pa[i].desc); /*argtp[pa[i].type],*/ fprintf(out,"</options>\n"); } if (nbug > 0) { fprintf(out,"\n<bugs>\n"); for(i=0; (i<nbug); i++) fprintf(out,"\t<bug>%s</bug>\n",NSR(bugs[i])); fprintf(out,"</bugs>\n"); } fprintf(out,"\n</program>\n</gromacs-manual>\n"); #undef FLAG }
static void write_nroffman(FILE *out, const char *program, int nldesc,const char **desc, int nfile,t_filenm *fnm, int npargs,t_pargs *pa, int nbug,const char **bugs, t_linkdata *links) { int i; char tmp[256]; fprintf(out,".TH %s 1 \"%s\" \"\" \"GROMACS suite, %s\"\n",program,mydate(tmp,255,FALSE),GromacsVersion()); fprintf(out,".SH NAME\n"); fprintf(out,"%s\n",program); fprintf(out,".B %s\n",GromacsVersion()); fprintf(out,".SH SYNOPSIS\n"); fprintf(out,"\\f3%s\\fP\n",program); /* command line arguments */ if (nfile > 0) { for(i=0; (i<nfile); i++) fprintf(out,".BI \"%s\" \" %s \"\n",check_nroff(fnm[i].opt), check_nroff(fnm[i].fns[0])); } if (npargs > 0) { for(i=0; (i<npargs); i++) if (pa[i].type == etBOOL) fprintf(out,".BI \"\\-[no]%s\" \"\"\n",check_nroff(pa[i].option+1)); else fprintf(out,".BI \"%s\" \" %s \"\n",check_nroff(pa[i].option), check_nroff(argtp[pa[i].type])); } /* description */ if (nldesc > 0) { fprintf(out,".SH DESCRIPTION\n"); for(i=0; (i<nldesc); i++) fprintf(out,"\\&%s\n",check_nroff(desc[i])); } /* FILES */ if (nfile > 0) { fprintf(out,".SH FILES\n"); for(i=0; (i<nfile); i++) fprintf(out,".BI \"%s\" \" %s\" \n.B %s\n %s \n\n", check_nroff(fnm[i].opt), check_nroff(fnm[i].fns[0]), check_nroff(fileopt(fnm[i].flag,tmp,255)), check_nroff(ftp2desc(fnm[i].ftp))); } /* other options */ fprintf(out,".SH OTHER OPTIONS\n"); if ( npargs > 0 ) { for(i=0; (i<npargs); i++) { if (pa[i].type == etBOOL) fprintf(out,".BI \"\\-[no]%s\" \"%s\"\n %s\n\n", check_nroff(pa[i].option+1), check_nroff(pa_val(&(pa[i]),tmp,255)), check_nroff(pa[i].desc)); else fprintf(out,".BI \"%s\" \" %s\" \" %s\" \n %s\n\n", check_nroff(pa[i].option), check_nroff(argtp[pa[i].type]), check_nroff(pa_val(&(pa[i]),tmp,255)), check_nroff(pa[i].desc)); } } if (nbug > 0) { fprintf(out,".SH KNOWN PROBLEMS\n"); for(i=0; (i<nbug); i++) fprintf(out,"\\- %s\n\n",check_nroff(bugs[i])); } fprintf(out,".SH SEE ALSO\n.BR gromacs(7)\n\n"); fprintf(out,"More information about \\fBGROMACS\\fR is available at <\\fIhttp://www.gromacs.org/\\fR>.\n"); }
static void write_htmlman(FILE *out, char *program, int nldesc,char **desc, int nfile,t_filenm *fnm, int npargs,t_pargs *pa, int nbug,char **bugs) { int i; char link[10]; #define NSR(s) check_html(s,program) fprintf(out,"<HTML>\n<HEAD>\n<TITLE>%s</TITLE>\n",program); fprintf(out,"<LINK rel=stylesheet href=\"style.css\" type=\"text/css\">\n"); fprintf(out,"<BODY text=\"#000000\" bgcolor=\"#FFFFFF\" link=\"#0000FF\" vlink=\"#990000\" alink=\"#FF0000\">\n"); fprintf(out,"<TABLE WIDTH=\"98%%\" NOBORDER >\n<TR><TD WIDTH=400>\n"); fprintf(out,"<TABLE WIDTH=400 NOBORDER>\n<TD WIDTH=116>\n"); fprintf(out,"<a href=\"http://www.gromacs.org/\">" "<img SRC=\"../images/gmxlogo_small.jpg\"" "BORDER=0 height=133 width=116></a></td>\n"); fprintf(out,"<td ALIGN=LEFT VALIGN=TOP WIDTH=280>" "<br><h2>%s</h2>",program); fprintf(out,"<font size=-1><A HREF=\"../online.html\">Main Table of Contents</A></font><br>"); fprintf(out,"<br></td>\n</TABLE></TD><TD WIDTH=\"*\" ALIGN=RIGHT VALIGN=BOTTOM><p><B>%s<br>\n",GromacsVersion()); fprintf(out,"%s</B></td></tr></TABLE>\n<HR>\n",mydate()); if (nldesc > 0) { fprintf(out,"<H3>Description</H3>\n<p>\n"); for(i=0; (i<nldesc); i++) fprintf(out,"%s\n",NSR(desc[i])); } if (nfile > 0) { fprintf(out,"<P>\n"); fprintf(out,"<H3>Files</H3>\n"); fprintf(out, "<TABLE BORDER=1 CELLSPACING=0 CELLPADDING=2>\n" "<TR>" "<TH>option</TH>" "<TH>filename</TH>" "<TH>type</TH>" "<TH>description</TH>" "</TR>\n"); for(i=0; (i<nfile); i++) { strcpy(link,ftp2ext(fnm[i].ftp)); if (strcmp(link,"???")==0) strcpy(link,"files"); fprintf(out, "<TR>" "<TD ALIGN=RIGHT> <b><tt>%s</tt></b> </TD>" "<TD ALIGN=RIGHT> <tt><a href=\"%s.html\">%12s</a></tt> </TD>" "<TD> %s </TD>" "<TD> %s </TD>" "</TR>\n", fnm[i].opt,link,fnm[i].fn,fileopt(fnm[i].flag), NSR(ftp2desc(fnm[i].ftp))); } fprintf(out,"</TABLE>\n"); } if (npargs > 0) { fprintf(out,"<P>\n"); fprintf(out,"<H3>Other options</H3>\n"); fprintf(out, "<TABLE BORDER=1 CELLSPACING=0 CELLPADDING=2>\n" "<TR>" "<TH>option</TH>" "<TH>type</TH>" "<TH>default</TH>" "<TH>description</TH>" "</TR>\n"); for(i=0; (i<npargs); i++) fprintf(out, "<TR>" "<TD ALIGN=RIGHT> <b><tt>%s%s</tt></b> </TD>" "<TD ALIGN=RIGHT> %s </TD>" "<TD ALIGN=RIGHT> <tt>%s</tt> </TD>" "<TD> %s </TD>" "</TD>\n", (pa[i].type == etBOOL)?"-[no]":"-",pa[i].option+1, argtp[pa[i].type],pa_val(&(pa[i])),NSR(pa[i].desc)); fprintf(out,"</TABLE>\n"); } if (nbug > 0) { fprintf(out,"<P>\n"); fprintf(out,"<UL>\n"); for(i=0; (i<nbug); i++) fprintf(out,"<LI>%s\n",NSR(bugs[i])); fprintf(out,"</UL>\n"); } fprintf(out,"<P>\n"); fprintf(out,"<hr>\n<div ALIGN=RIGHT>\n"); fprintf(out,"<font size=\"-1\"><a href=\"http://www.gromacs.org\">" "http://www.gromacs.org</a></font><br>\n"); fprintf(out,"</div>\n"); fprintf(out,"</BODY>\n"); }
static void write_nroffman(FILE *out, char *program, int nldesc,char **desc, int nfile,t_filenm *fnm, int npargs,t_pargs *pa, int nbug,char **bugs) { int i; fprintf(out,".TH %s 1 \"%s\"\n",program,mydate()); fprintf(out,".SH NAME\n"); fprintf(out,"%s\n",program); fprintf(out,".B %s\n",GromacsVersion()); fprintf(out,".SH SYNOPSIS\n"); fprintf(out,"\\f3%s\\fP\n",program); /* command line arguments */ if (nfile > 0) { for(i=0; (i<nfile); i++) fprintf(out,".BI \"%s\" \" %s \"\n",fnm[i].opt, fnm[i].fn); } if (npargs > 0) { for(i=0; (i<npargs); i++) if (pa[i].type == etBOOL) fprintf(out,".BI \"-[no]%s\" \"\"\n",pa[i].option+1); else fprintf(out,".BI \"%s\" \" %s \"\n",pa[i].option, argtp[pa[i].type]); } /* description */ if (nldesc > 0) { fprintf(out,".SH DESCRIPTION\n"); for(i=0; (i<nldesc); i++) fprintf(out,"%s\n",check_nroff(desc[i])); } /* FILES */ if (nfile > 0) { fprintf(out,".SH FILES\n"); for(i=0; (i<nfile); i++) fprintf(out,".BI \"%s\" \" %s\" \n.B %s\n %s \n\n", fnm[i].opt,fnm[i].fn,fileopt(fnm[i].flag), check_nroff(ftp2desc(fnm[i].ftp))); } /* other options */ fprintf(out,".SH OTHER OPTIONS\n"); if ( npargs > 0 ) { for(i=0; (i<npargs); i++) { if (pa[i].type == etBOOL) fprintf(out,".BI \"-[no]%s\" \"%s\"\n %s\n\n", check_nroff(pa[i].option+1), pa_val(&(pa[i])),check_nroff(pa[i].desc)); else fprintf(out,".BI \"%s\" \" %s\" \" %s\" \n %s\n\n", check_nroff(pa[i].option),argtp[pa[i].type], pa_val(&(pa[i])),check_nroff(pa[i].desc)); } } if (nbug > 0) { for(i=0; (i<nbug); i++) fprintf(out,"\\- %s\n\n",check_nroff(bugs[i])); } }