[med-svn] r143 - in trunk/packages: . boxshade boxshade/branches
boxshade/branches/upstream boxshade/branches/upstream/current
Charles Plessy
charles-guest at costa.debian.org
Sat Oct 7 01:02:18 UTC 2006
Author: charles-guest
Date: 2006-10-07 01:02:17 +0000 (Sat, 07 Oct 2006)
New Revision: 143
Added:
trunk/packages/boxshade/
trunk/packages/boxshade/branches/
trunk/packages/boxshade/branches/upstream/
trunk/packages/boxshade/branches/upstream/current/
trunk/packages/boxshade/branches/upstream/current/box.c
trunk/packages/boxshade/branches/upstream/current/box_dna.grp
trunk/packages/boxshade/branches/upstream/current/box_dna.par
trunk/packages/boxshade/branches/upstream/current/box_dna.sim
trunk/packages/boxshade/branches/upstream/current/box_pep.grp
trunk/packages/boxshade/branches/upstream/current/box_pep.par
trunk/packages/boxshade/branches/upstream/current/box_pep.sim
trunk/packages/boxshade/branches/upstream/current/bx_misc.c
trunk/packages/boxshade/branches/upstream/current/bx_read.c
trunk/packages/boxshade/branches/upstream/current/bx_read.h
trunk/packages/boxshade/branches/upstream/current/bx_types.h
trunk/packages/boxshade/branches/upstream/current/clust160.grp
trunk/packages/boxshade/branches/upstream/current/clust160.sim
trunk/packages/boxshade/branches/upstream/current/dv_all.h
trunk/packages/boxshade/branches/upstream/current/dv_ansi.c
trunk/packages/boxshade/branches/upstream/current/dv_ascii.c
trunk/packages/boxshade/branches/upstream/current/dv_crt.c
trunk/packages/boxshade/branches/upstream/current/dv_fig.c
trunk/packages/boxshade/branches/upstream/current/dv_hpgl.c
trunk/packages/boxshade/branches/upstream/current/dv_html.c
trunk/packages/boxshade/branches/upstream/current/dv_lj250.c
trunk/packages/boxshade/branches/upstream/current/dv_pict.c
trunk/packages/boxshade/branches/upstream/current/dv_ps.c
trunk/packages/boxshade/branches/upstream/current/dv_regis.c
trunk/packages/boxshade/branches/upstream/current/dv_rtf.c
trunk/packages/boxshade/branches/upstream/current/makefile.bcc
trunk/packages/boxshade/branches/upstream/current/makefile.djp
trunk/packages/boxshade/branches/upstream/current/makefile.unx
trunk/packages/boxshade/branches/upstream/current/makefile.w16
trunk/packages/boxshade/branches/upstream/current/positive.grp
trunk/packages/boxshade/branches/upstream/current/positive.sim
trunk/packages/boxshade/branches/upstream/current/strong.grp
trunk/packages/boxshade/branches/upstream/current/strong.sim
trunk/packages/boxshade/branches/upstream/current/version.h
trunk/packages/boxshade/tags/
Log:
[svn-inject] Installing original source of boxshade
Added: trunk/packages/boxshade/branches/upstream/current/box.c
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/box.c (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/box.c 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,1720 @@
+/*-----------------------------------------------------------------------
+ BOXSHADE 3.3 (May 1997)
+
+this program makes multiple-aligned output from either
+ - PRETTY files from old LINEUP
+ - MSF files from new PILEUP
+ - CLUSTAL- .ALN files
+ - MALIGNED data files
+ - ESEE files
+ - PHYLIP files
+various kinds of shading can be applied to identical/similar residues
+Output formats supported are
+ - ANSI for display on terminal with ANSI.SYS loaded (PC version)
+ - VT100 for display on VT100 compatible terminals
+ - CRT for display on the main screen ( * PC-version only! * )
+ - POSTSCRIPT (TM)
+ - Encapsulated POSTSCRIPT (for export to graphics programs)
+ - HPGL for output on plotters or export to graphics programs
+ - RTF (Rich text format) for export to word processing programs
+ - ReGIS graphics for disply on terminals with ReGIS capabilities (DEC)
+ - ReGIS file for printing after conversion with RETOS
+ - LJ250 coloir printer format (DEC)
+ - ASCII output showing either conserved or variable residues
+ - FIG file output for use with xfig 2.1 program
+ - PICT file, mostly used by Mac graphics progs, also many PC progs
+ - HTML output for Web publishing
+
+This program might still contain bugs and is not particularly
+user-friendly. It is completely public-domain and may be
+passed around and modified without any notice to the author.
+
+the authors addresses are:
+
+ Kay Hofmann Michael D. Baron
+ Bioinformatics Group BBSRC Institute for Animal Health
+ ISREC Pirbright, Surrey GU24 0NF
+ CH-1066 Epalinges s/Lausanne U.K.
+ Switzerland
+
+C port by
+
+ Hartmut Schirmer
+ Technische Fakultaet
+ Kaiserstr. 2
+ D-24143 Kiel
+ Germany
+
+for any comments write an E-mail to
+ Kay: khofmann at isrec-sun1.unil.ch
+ Michael: baron at bbsrc.ac.uk (though kay wrote 99% of the program and is more
+ likely to be of help, especially with input and output problems)
+ Hartmut: hsc at techfak.uni-kiel.de (don't send Kay or Michael any questions
+ concerning the 'C' version of boxshade)
+
+MODIFICATION HISTORY
+3.3 -converted from Pascal to C, includes several bug fixes over Pascal v3.21,
+ mostly in page switching code. Rewritten Postscript driver: Compact
+ output following the document structure conventions (DSC), additional
+ color mode added. Enhanced memory allocation allows bigger alignments
+ to be processed. Added ruler feature and /grp & /sim command line
+ parameter. Added HTML output.
+3.2 -added PICT output, somewhat experimental, all feedback gratefully
+ received (by MDB). There are two options, either to output the Text
+ with the shading (T) or just the shading (S); the latter option is for those
+ who find the full file too big for their computer/program, and want to
+ combine the shading with a simple formatted text version of their multiple
+ sequence file e.g. the output from PRETTY (remember to set the block
+ size equal to the linelength).
+3.0 -major changes to shading strategy introduced by Michael Baron,
+ see Documentation for details
+ -addition of a new set of files (*.grp) and a few new command
+ line qualifiers necessary for this new strategy
+ -added support for ASCII output, showing one complete sequence
+ and either conserved or deviating residues in the other sequences
+ -added FIG output for use with the x-windows based public domain
+ graphics program xfig 2.1
+ -bug fixes in the reading routine, boxshade can now import files
+ created by clustalW and the MSF format created by readseq
+
+2.7 -unified source code for VAX/VMS, AXP/OSF1 and MSDOS (Turbo Pascal)
+ -all features of previous 2.6DOS version available for OSF1 and VMS
+ -reads parameter and alignment files in both DOS and UNIX format
+ -writes output files in native format of the machine. UNIX or DOS
+ style text files can be forced by the qualifiers /unix or /dos
+ -added /check qualifier for listing of command line parameters
+ -added the option to hide the master sequence (see documentation)
+ -finally dropped UIS support
+ -minor bug fixes
+
+2.6DOS -added RTF output
+
+2.5DOS -added HPGL output
+ -added consensus formation and output
+ -added the /NUMDEF qualifier for default numbering
+ -added the /SPLIT qualifier for splitting output to one page per file.
+ -added the /CONS and
+ /SYMBCONS qualifiers for output of consensus sequence
+
+2.4DOS -initial MSDOS version
+ -ported from VMS version 2.4
+ -added CRT support
+
+2.4a -fixed a bug (terminal size problems)
+
+2.4 -modified POSTSCRIPT/EPS output, allows scaling of fonts.
+ (.PAR file structure modified, BOX.PSP now obsolete)
+ -support of vertical POSTSCRIPT output
+ -support of output on VT-series terminals
+ -support of input from CLUSTAL V
+ -slight reordering of interactive input
+ -minor bug in command line handling fixed
+ -minor bug in EPS-bounding box fixed
+
+2.3 -default parameter management
+ -option for shading according to similarity to a instead of a consensus sequence
+ -support of GCG V7 MSF-format
+
+2.2 -support of sequence numbering in output
+ -support of MALIGNED data files
+
+2.1 -output code completely rewritten for allowing easier modification
+ -support of ENCAPSULATED POSTSCRIPT output
+ -more compact POSTSCRIPT output files
+ -multipage output for all devices
+ -modifications in PRETTY and CLUSTAL reading routines
+ for coping with slightly altered formats
+
+2.0 -added POSTSCRIPT and ReGIS output routines
+ -added a version that compiles without VWS (BOX_NO_UIS)
+ -some minor bugfixes
+ -creation of a .COM file for setting logicals
+
+1.0 -initial version
+ -CLUSTAL and PRETTY input
+ -UIS/VWS and LJ250 sixel output
+
+----------------------------------------------------------------------- */
+
+
+#define BX_TYPES_G
+#include "bx_types.h"
+
+#include "bx_read.h"
+#include "dv_all.h"
+
+#include "version.h"
+
+#define DNAPEP() (dnaflag ? "dna" : "pep")
+
+char *aaset = "ACDEFGHIKLMNPQRSTVWY";
+char *aasetlow = "acdefghiklmnpqrstvwy";
+
+char *argv0=NULL;
+
+static GraphicsDevice *OutDev = NULL;
+
+static int cons_idx = -1;
+static int ruler_idx = -1;
+
+/*--------------------------------------------------------------------------*/
+/* user query section section */
+/*--------------------------------------------------------------------------*/
+
+static char *explain_cl(char *cl)
+{
+ static char ncl[256];
+
+ printf("Allowed command line parameters are:\n");
+ printf(C_SEP "help show this text\n");
+ printf(C_SEP "check show this text and extend command line\n");
+ printf(C_SEP "def use defaults, no unnecessary questions\n");
+ printf(C_SEP "numdef use default numbering\n");
+ printf(C_SEP "dna assume DNA sequences, use box_dna.par\n");
+ printf(C_SEP "split create separate files for multiple pages\n");
+ printf(C_SEP "toseq=xxx shading according to sequence No. xxx\n");
+ printf(C_SEP "in=xxxxx xxxxx is input file name\n");
+ printf(C_SEP "out=xxxxx xxxxx is output file name\n");
+ printf(C_SEP "par=xxxxx xxxxx is parameter file name\n");
+ printf(C_SEP "sim=xxxxx xxxxx is file name for similar residues def.\n");
+ printf(C_SEP "grp=xxxxx xxxxx is file name for grouping residues def.\n");
+ printf(C_SEP "thr=x x is the fraction of sequences that must agree"
+ " for a consensus\n");
+ printf(C_SEP "dev=x x is output device class (see documentation)\n");
+ printf(C_SEP "type=x x is input file format (see documentation)\n");
+ printf(C_SEP "ruler print ruler line\n");
+ printf(C_SEP "cons create consensus line\n");
+ printf(C_SEP "symbcons=xyz xyz are consensus symbols\n");
+ printf(C_SEP "symbcons=\"xyz\" if the one above does not work, try this one\n");
+ printf(C_SEP "unix output files lines are terminated with LF only\n");
+ printf(C_SEP "mac output files lines are terminated with CR only\n");
+ printf(C_SEP "dos output files lines are terminated with CRLF\n");
+/* printf("On unix systems, use the dash (-) as parameter delimiter\n\n"); */
+ if (cl != NULL) {
+ printf("actual command line: %s\n", cl);
+ printf("add to command line: ");
+ Gets(ncl);
+ } else
+ *ncl = '\0';
+ return ncl;
+}
+
+static char *get_cl_filename(char *Result, char *cl, char *tag)
+{
+ char *p, *r;
+ int p1;
+
+ p1 = indx(cl, tag);
+ p = cl + p1 + strlen(tag) - 1;
+ r = Result;
+ while (*p != '\0' && *p != ' ' && *p != c_sep)
+ *(r++) = *(p++);
+ *r = '\0';
+ return Result;
+}
+
+
+static double get_cl_real(char *cl, char *tag)
+{
+ char *p, *r;
+ int p1;
+ char dummy[256];
+
+ p1 = indx(cl, tag);
+ p = cl + p1 + strlen(tag) - 1;
+ r = dummy;
+ while (*p != '\0' && *p != ' ' && *p != c_sep)
+ *(r++) = *(p++);
+ *r = '\0';
+ return( str2real(dummy) );
+}
+
+
+static int get_cl_int(char *cl, char *tag)
+{
+ char *p, *r;
+ int p1;
+ char dummy[256];
+
+ p1 = indx(cl, tag);
+ p = cl + p1 + strlen(tag) - 1;
+ r = dummy;
+ while (*p != '\0' && *p != ' ' && *p != c_sep)
+ *(r++) = *(p++);
+ *r = '\0';
+ return( str2int(dummy) );
+}
+
+
+static void process_command_line(int argc, char **argv)
+{
+ char cl[500];
+ int incr, idx;
+
+ save_binpath(argv[0]);
+
+ *cl = '\0';
+ for (idx=1; idx < argc; idx++) {
+ strcat(cl, argv[idx]);
+ strcat(cl, " ");
+ }
+
+ if ( indx(cl, C_SEP "help") > 0) {
+ explain_cl(NULL);
+ exit(0);
+ }
+
+ if ( indx(cl, C_SEP "check") > 0) {
+ strcat(cl, " ");
+ strcat(cl, explain_cl(cl) );
+ }
+ if (indx(cl, C_SEP "dna") > 0)
+ dnaflag = TRUE;
+ else
+ dnaflag = FALSE;
+ if (indx(cl, C_SEP "def") > 0)
+ interactflag = FALSE;
+ else
+ interactflag = TRUE;
+
+ if (indx(cl, C_SEP "in") > 0) {
+ clinflag = TRUE;
+ get_cl_filename(inname, cl, C_SEP "in=");
+ } else
+ clinflag = FALSE;
+
+ if (indx(cl, C_SEP "out=") > 0) {
+ cloutflag = TRUE;
+ get_cl_filename(outname, cl, C_SEP "out=");
+ } else
+ cloutflag = FALSE;
+
+ if (indx(cl, C_SEP "par=") > 0) {
+ clparflag = TRUE;
+ get_cl_filename(parname, cl, C_SEP "par=");
+ } else
+ clparflag = FALSE;
+
+ if (indx(cl, C_SEP "sim=") > 0) {
+ clsimflag = TRUE;
+ get_cl_filename(clsimname, cl, C_SEP "sim=");
+ } else
+ clsimflag = FALSE;
+
+ if (indx(cl, C_SEP "grp=") > 0) {
+ clgrpflag = TRUE;
+ get_cl_filename(clgrpname, cl, C_SEP "grp=");
+ } else
+ clgrpflag = FALSE;
+
+ if ( (idx=indx(cl, C_SEP "type=")) > 0) {
+ cltypeflag = TRUE;
+ inputmode = cl[idx + 5];
+ } else
+ cltypeflag = FALSE;
+
+ if (indx(cl, C_SEP "thr=") > 0) {
+ clthrflag = TRUE;
+ thrfrac = get_cl_real(cl, C_SEP "thr=");
+ if ((unsigned)thrfrac > 1)
+ clthrflag = FALSE;
+ } else
+ clthrflag = FALSE;
+
+ if (indx(cl, C_SEP "toseq=") > 0) {
+ clseqconsflag = TRUE;
+ seqconsflag = TRUE;
+ consensnum = get_cl_int(cl, C_SEP "toseq=");
+ } else
+ clseqconsflag = FALSE;
+
+ if ( (idx=indx(cl, C_SEP "dev=")) > 0) {
+ cldevflag = TRUE;
+ outputmode = cl[idx + 4];
+ } else
+ cldevflag = FALSE;
+
+ if (indx(cl, C_SEP "cons") > 0) {
+ consflag = TRUE;
+ clconsflag = TRUE;
+ } else
+ clconsflag = FALSE;
+
+ if (indx(cl, C_SEP "ruler") > 0) {
+ rulerflag = TRUE;
+ } else
+ rulerflag = FALSE;
+
+ if ( (idx=indx(cl, C_SEP "symbcons=")) > 0) {
+ clsymbconsflag = TRUE;
+ consflag = TRUE;
+ clconsflag = TRUE;
+ incr = 0;
+ if (cl[idx + 9] == '"' ||
+ cl[idx + 9] == '\'')
+ incr = 1;
+ symbcons[0] = cl[idx + incr + 9];
+ symbcons[1] = cl[idx + incr + 10];
+ symbcons[2] = cl[idx + incr + 11];
+ } else
+ clsymbconsflag = FALSE;
+
+ if (indx(cl, C_SEP "split") > 0)
+ splitflag = TRUE;
+ else
+ splitflag = FALSE;
+
+ EOLmode = EOL_default;
+ if (indx(cl, C_SEP "unix" ) > 0) EOLmode = EOL_unix; else
+ if (indx(cl, C_SEP "dos") > 0) EOLmode = EOL_dos; else
+ if (indx(cl, C_SEP "mac") > 0) EOLmode = EOL_mac;
+
+ if (indx(cl, C_SEP "numdef") > 0 || !interactflag)
+ numdefflag = TRUE;
+ else
+ numdefflag = FALSE;
+}
+
+static BOOL SimGrp(char *template, char *fn, char *explain) {
+ filenametype neu;
+
+ sprintf(fn, template, DNAPEP());
+ if (fexist(fn)) return TRUE;
+
+ strcpy(neu, fn);
+ sprintf(fn, "%s%c", get_logical("BOXDIR"), d_sep);
+ strcat(fn, neu);
+ if (fexist(fn)) return TRUE;
+
+ if (explain == NULL) return FALSE;
+ for (;;) {
+ printf("%s %s does not exist, enter filename: ", explain, neu);
+ Gets(fn);
+ if (fexist(fn)) return TRUE;
+ strcpy(neu, fn);
+ printf("\007file does not exist \n");
+ }
+}
+
+static void ask(void)
+{
+ unsigned i;
+ BOOL ok;
+ char instring[51];
+ double inno;
+
+ if (!clparflag)
+ sprintf(parname, "box_%s.par", DNAPEP());
+ if (!fexist(parname))
+ sprintf(parname, "%s%cbox_%s.par",
+ get_logical("BOXDIR"), d_sep, DNAPEP());
+ if (!fexist(parname)) {
+ ok = FALSE;
+ do {
+ printf("Default-parameter file %s does not exist, enter filename: ",
+ parname);
+ Gets(parname);
+ ok = fexist(parname);
+ if (!ok)
+ printf("\007file does not exist \n");
+ } while (!ok);
+ }
+ parfile = fopen(parname, TXT_RD);
+ assert(parfile != NULL);
+ do {
+ Fgets(line_, 256, parfile);
+ } while (indx(line_, ":GENERAL") != 1);
+ Fgets(line_, 256, parfile);
+ if (!clinflag)
+ inputmode = line_[0];
+ Fgets(line_, 256, parfile);
+ if (!cldevflag)
+ outputmode = line_[0];
+ Fgets(line_, 256, parfile);
+ if (line_[0] == 'Y' || line_[0] == 'y')
+ seqconsflag = TRUE;
+ else
+ seqconsflag = FALSE;
+ hideflag = FALSE;
+ masternormal = FALSE;
+ fscanf(parfile, "%d%*[^\n]", &outlen);
+ getc(parfile);
+ Fgets(line_, 256, parfile);
+ if (line_[0] == 'Y' || line_[0] == 'y')
+ seqnameflag = TRUE;
+ else
+ seqnameflag = FALSE;
+ Fgets(line_, 256, parfile);
+ if (line_[0] == 'Y' || line_[0] == 'y')
+ seqnumflag = TRUE;
+ else
+ seqnumflag = FALSE;
+ fscanf(parfile, "%d%*[^\n]", &interlines);
+ getc(parfile);
+ Fgets(line_, 256, parfile);
+ if (line_[0] == 'Y' || line_[0] == 'y')
+ simflag = TRUE;
+ else
+ simflag = FALSE;
+ Fgets(line_, 256, parfile);
+ if (line_[0] == 'Y' || line_[0] == 'y')
+ globalflag = TRUE;
+ else
+ globalflag = FALSE;
+
+ Fgets(line_, 256, parfile);
+ if (!consflag) {
+ if (line_[0] == 'Y' || line_[0] == 'y')
+ consflag = TRUE;
+ else
+ consflag = FALSE;
+ }
+
+ Fgets(line_, 256, parfile);
+ if (!clsymbconsflag) {
+ symbcons[0] = line_[0];
+ symbcons[1] = line_[1];
+ symbcons[2] = line_[2];
+ }
+
+ Fgets(line_, 256, parfile);
+ if (!splitflag) {
+ if (line_[0] == 'Y' || line_[0] == 'y')
+ splitflag = TRUE;
+ else
+ splitflag = FALSE;
+ }
+
+ Fgets(line_, 256, parfile);
+ if (!numdefflag) {
+ if (line_[0] == 'Y' || line_[0] == 'y')
+ numdefflag = TRUE;
+ else
+ numdefflag = FALSE;
+ }
+ if (!clthrflag) {
+ fscanf(parfile, "%lg%*[^\n]", &thrfrac);
+ getc(parfile);
+ } else {
+ Fgets(line_, 256, parfile);
+ }
+
+ for (i = 0; i < max_no_seq; i++)
+ memset(seq[i], ' ', max_no_res);
+
+ printf("\n");
+ printf("BOXSHADE %s\n", BOXSHADE_ver);
+ printf(
+ "This program makes multiple-aligned output from either\n"
+ "PILEUP-MSF, CLUSTAL-ALN, MALIGNED-data and ESEE-save files\n"
+ "(limited to a maximum of %d sequences with up to %d elements each)\n",
+ max_no_seq, max_no_res);
+ printf(
+ "Various kinds of shading can be applied to identical/similar residues\n"
+ "Output is written to screen or to a file in the following formats:\n"
+ "ANSI/VT100, PS/EPS, RTF, HPGL, ReGIS, LJ250-printer, ASCII, xFIG,\n"
+ "PICT, HTML\n"
+ "\n"
+ );
+
+ /**** ask for infile ****/
+ *instring = '\0';
+ ok = FALSE;
+ do {
+ if (!clinflag) {
+ printf("name of aligned input-file : ");
+ Gets(inname);
+ printf("\n");
+ }
+ ok = fexist(inname);
+ if (!ok) {
+ printf("\007aligned input file does not exist \n");
+ clinflag = FALSE;
+ }
+ } while (!ok);
+ /**** ask for infile type ****/
+ if (!cltypeflag) {
+ if (indx(inname, ".pre") > 0 || indx(inname, ".PRE") > 0 ||
+ indx(inname, ".msf") > 0 || indx(inname, ".MSF") > 0)
+ inputmode = '1';
+ else {
+ if (indx(inname, ".aln") > 0 || indx(inname, ".ALN") > 0)
+ inputmode = '2';
+ else {
+ if (indx(inname, ".mal") > 0 || indx(inname, ".MAL") > 0)
+ inputmode = '3';
+ else {
+ if (indx(inname, ".ese") > 0 || indx(inname, ".ESE") > 0)
+ inputmode = '4';
+ }
+ }
+ }
+ if (indx(inname, ".phy") > 0 || indx(inname, ".PHY") > 0)
+ inputmode = '5';
+ }
+ if (interactflag && !cltypeflag) {
+ do {
+ printf("Do you want to process (1) Lineup-PRETTY/Pileup-MSF file\n"
+ " (2) CLUSTAL .ALN file\n"
+ " (3) MALIGNED data file\n"
+ " (4) ESEE save file\n"
+ " (5) PHYLIP file (* %c *) : ",
+ inputmode);
+ Fgets(instring, 51, stdin);
+ if (*instring == '\0')
+ sprintf(instring, "%c", inputmode);
+ if (indx("12345", instring) == 0) {
+ printf(" \n");
+ printf("\007---> Please choose a supported type\n");
+ printf(" \n");
+ }
+ } while (indx("12345", instring) <= 0);
+ }
+ printf(" \n");
+ if (*instring != '\0')
+ inputmode = instring[0];
+
+ *instring = '\0';
+ if (!cldevflag) {
+ do {
+ printf("Output suitable for (%2c) POSTSCRIPT\n", oPS);
+ printf(" (%2c) encapsulated POSTSCRIPT\n", oEPS);
+ printf(" (%2c) HPGL\n", oHPGL);
+ printf(" (%2c) RTF (Rich Text Format)\n", oRTF);
+#ifdef oCRT
+ printf(" (%2c) PC-screen (PCs only!)\n", oCRT);
+#endif
+ printf(" (%2c) ANSI-screen (PC-version)\n", oANSI);
+ printf(" (%2c) VT100-screen (DEC-version)\n", oVT);
+ printf(" (%2c) ReGIS-screen (25 lines each\n", oREGISt);
+ printf(" (%2c) ReGIS-file (without breaks)\n", oREGISp);
+ printf(" (%2c) LJ250-printer file\n", oLJ250);
+ printf(" (%2c) ASCII file\n", oASCII);
+ printf(" (%2c) FIG file (for XFIG)\n", oFIG);
+ printf(" (%2c) PICT file\n", oPICT);
+ printf(" (%2c) HTML file\n", oHTML);
+ printf(" current: (* %c *) : ", outputmode);
+
+ Fgets(instring, 51, stdin);
+ if (*instring == '\0')
+ sprintf(instring, "%c", outputmode);
+ if (indx(allowed_devices, instring) == 0) {
+ printf("\n");
+ printf("\007---> Please choose a supported type\n");
+ printf("\n");
+ }
+ } while (indx(allowed_devices, instring) <= 0);
+ }
+ if (*instring != '\0')
+ outputmode = instring[0];
+ printf("\n");
+
+ if (outputmode == oASCII)
+ seqconsflag = TRUE;
+ if (clseqconsflag)
+ seqconsflag = TRUE;
+ if (!seqconsflag) {
+ *instring = '\0';
+ if (interactflag) {
+ do {
+ printf(
+ "-------------------------------------------------------------------\n");
+ if (seqconsflag)
+ printf("similarity to a single sequence? (* y *) : ");
+ else
+ printf("similarity to a single sequence? (* n *) : ");
+ Fgets(instring, 51, stdin);
+ } while (indx("nNyY", instring) <= 0 && *instring != '\0');
+ }
+ seqconsflag = (toupper(*instring) == 'Y');
+ }
+
+ *instring = '\0';
+ if (interactflag && !clconsflag) {
+ do {
+ printf("-------------------------------------------------------------------\n");
+ printf("display consensus line ? (* %c *) : ", YESNO(consflag) );
+ Fgets(instring, 51, stdin);
+ } while (indx("nNyY", instring) <= 0 && *instring != '\0');
+ if (*instring != '\0')
+ consflag = (toupper(instring[0]) == 'Y');
+ } else
+ if (clconsflag && !clsymbconsflag)
+ printf("-------------------------------------------------------------------\n\n");
+
+ *instring = '\0';
+ if (interactflag && consflag && !clsymbconsflag) {
+ printf("\n"
+ "Enter now a string of 3 symbols to be used for consensus display\n"
+ " representing different/all-similar/all-identical residues\n"
+ " see documentation for symbol definition, examples are:\n"
+ " \" .*\" or \"-LU\" (ommit quotes but use blanks)\n"
+ "SYMBOL : ");
+ Fgets(instring, 51, stdin);
+ if (*instring != '\0') {
+ while (strlen(instring) != 3) {
+ printf("\007please enter string of THREE (3) symbols !\n");
+ printf("SYMBOL : ");
+ Fgets(instring, 51, stdin);
+ }
+ symbcons[0] = instring[0];
+ symbcons[1] = instring[1];
+ symbcons[2] = instring[2];
+ }
+ }
+
+ *instring = '\0';
+ if (interactflag && !rulerflag) {
+ do {
+ printf("-------------------------------------------------------------------\n"
+ "display ruler line ? (* %c *) : ", YESNO(rulerflag) );
+ Fgets(instring, 51, stdin);
+ } while (indx("nNyY", instring) <= 0 && *instring != '\0');
+ if (*instring != '\0')
+ rulerflag = (toupper(instring[0]) == 'Y');
+ }
+
+ *instring = '\0';
+ if (interactflag && !clthrflag && outputmode != oASCII) {
+ *instring = '\0';
+ ok = FALSE;
+ do {
+ printf("--------------------------------------------------------------\n"
+ "The threshold is the fraction of residues that must be identical\n"
+ "or similar for shading to occur\n"
+ "Value for threshold (* %6.2f *):", thrfrac);
+ Fgets(instring, 51, stdin);
+ if (*instring == '\0')
+ ok = TRUE;
+ else {
+ *depend_err = '\0';
+ inno = str2real((void *)instring);
+ if (*depend_err == '\0' && inno <= 1.0 && inno > 0.0) {
+ ok = TRUE;
+ thrfrac = inno;
+ }
+ if (!ok)
+ printf("The fraction must be between 0 and 1\n\n");
+ }
+ } while (!ok);
+ }
+ if (outputmode == oASCII)
+ thrfrac = 0.0;
+
+ *instring = '\0';
+ if (interactflag) {
+ do {
+ printf("-------------------------------------------------------------------\n"
+ "\n"
+ "How many sequence characters per line (* %3d *) : ",
+ outlen);
+ Fgets(instring, 51, stdin);
+ if (*instring != '\0')
+ outlen = str2int((void *)instring);
+ printf("\n");
+ } while (outlen <= min_outlen || outlen >= max_outlen);
+ }
+
+ *instring = '\0';
+ if (interactflag) {
+ do {
+ printf("should sequence name be printed (* %c *) : ", YESNO(seqnameflag));
+ Fgets(instring, 51, stdin);
+ } while (indx("nNyY", instring) <= 0 && *instring != '\0');
+ }
+ if (*instring != '\0')
+ seqnameflag = (toupper(instring[0]) == 'Y');
+
+ *instring = '\0';
+ if (interactflag && !rulerflag) {
+ do {
+ printf("should position numbers be printed (* %c *) : ", YESNO(seqnumflag));
+ Fgets(instring, 51, stdin);
+ printf("\n");
+ } while (indx("nNyY", instring) <= 0 && *instring != '\0');
+ }
+ if (*instring != '\0')
+ seqnumflag = (toupper(instring[0]) == 'Y');
+
+ *instring = '\0';
+ if (interactflag) {
+ do {
+ printf("How many lines between two sequence blocks (* %2d *) : ",
+ interlines);
+ Fgets(instring, 51, stdin);
+ if (*instring != '\0')
+ interlines = str2int((void *)instring);
+ printf(" \n");
+ } while (interlines <= 0 || interlines >= 100);
+ }
+
+ *instring = '\0';
+ if (interactflag) {
+ do {
+ printf("special label for similar residues (* %c *) : ", YESNO(simflag));
+ Fgets(instring, 51, stdin);
+ } while (indx("nNyY", instring) <= 0 && *instring != '\0');
+ }
+ if (*instring != '\0')
+ simflag = (toupper(instring[0]) == 'Y');
+
+ if (simflag) {
+ if (clsimflag)
+ clsimflag = SimGrp(clsimname, simname, NULL);
+ if (!clsimflag)
+ SimGrp("box_%s.sim", simname, "Similarity-file");
+ if (clgrpflag)
+ clgrpflag = SimGrp(clgrpname, grpname, NULL);
+ if (!clgrpflag)
+ SimGrp("box_%s.grp", grpname, "Group-file");
+
+#if 0
+ sprintf(simname, "box_%s.sim", DNAPEP());
+ sprintf(grpname, "box_%s.grp", DNAPEP());
+ if (!fexist(simname))
+ sprintf(simname, "%s%cbox_%s.sim",
+ get_logical("BOXDIR"), d_sep, DNAPEP());
+ if (!fexist(simname)) {
+ ok = FALSE;
+ do {
+ printf("Similarity-file %s does not exist, enter filename: ", simname);
+ Gets(simname);
+ ok = fexist(simname);
+ if (!ok)
+ printf("\007file does not exist \n");
+ } while (!ok);
+ }
+
+ if (!fexist(grpname))
+ sprintf(grpname, "%s%cbox_%s.grp",
+ get_logical("BOXDIR"), d_sep, DNAPEP());
+ if (!fexist(grpname)) {
+ ok = FALSE;
+ do {
+ printf("Group-file %s does not exist, enter filename: ", grpname);
+ Gets(grpname);
+ ok = fexist(grpname);
+ if (!ok)
+ printf("\007file does not exist \n");
+ } while (!ok);
+ }
+#endif
+ }
+
+ *instring = '\0';
+ if (interactflag) {
+ do {
+ if (globalflag)
+ printf("special label for identical residues in all sequences (* y *) : ");
+ else
+ printf("special label for identical residues in all sequences (* n *) : ");
+ Fgets(instring, 51, stdin);
+ } while (indx("nNyY", instring) <= 0 && *instring != '\0');
+ }
+ if (*instring != '\0')
+ globalflag = (toupper(instring[0]) == 'Y');
+
+ for (i = 0; i <= 4; i++)
+ lc[i] = FALSE;
+
+ switch (outputmode) {
+#ifdef oCRT
+ case oCRT: OutDev = &Crt; break;
+#endif
+ case oANSI: OutDev = &Ansi; break;
+ case oPS: OutDev = &Postscript; break;
+ case oEPS: OutDev = &Eps; break;
+ case oHPGL: OutDev = &Hpgl; break;
+ case oRTF: OutDev = &Rtf; break;
+ case oREGISt: OutDev = &RegisT; break;
+ case oREGISp: OutDev = &RegisP; break;
+ case oVT: OutDev = &Vt; break;
+ case oLJ250: OutDev = &Lj250; break;
+ case oASCII: OutDev = &Ascii; break;
+ case oFIG: OutDev = &Fig; break;
+ case oPICT: OutDev = &Pict; break;
+ case oHTML: OutDev = &Html; break;
+ }
+ OutDev->Ask();
+
+ ident_sim = FALSE;
+ if (interactflag) {
+ do {
+ printf("create identity / similarity matrix (* n *) : ");
+ Fgets(instring, 51, stdin);
+ } while (indx("nNyY", instring) <= 0 && *instring != '\0');
+ }
+ if (*instring != '\0')
+ ident_sim = (toupper(instring[0]) == 'Y');
+
+ if (ident_sim) {
+ /**** ask for matrix file ****/
+ *instring = '\0';
+ printf("name of matrix output-file : ");
+ Gets(identname);
+ printf("\n");
+ }
+
+ if (parfile != NULL)
+ fclose(parfile);
+ parfile = NULL;
+}
+
+
+static void ask_numbers(void)
+{
+ char instring[11];
+ int inno, i;
+
+ printf("-------------------------------------------------------\n"
+ "\n"
+ "You requested sequence numbering in the output.\n"
+ "Enter the number of the first sequence position\n"
+ "or confirm the suggestion of the program\n" );
+
+ for (i = 0; i < no_seq; i++) {
+ printf("%s (* %4d *) : ", seqname[i], startno[i]);
+ Fgets(instring, 11, stdin);
+ if (*instring != '\0') {
+ inno = str2int((void *)instring);
+ if (strcmp(depend_err, "str2int"))
+ startno[i] = inno;
+ } else
+ startno[i] = 1;
+ }
+ printf("\n");
+}
+
+
+static void ask_seqcons(void)
+{
+ char instring[11];
+ int i;
+
+ if (clseqconsflag) {
+ if (consensnum < 1 || consensnum > no_seq)
+ clseqconsflag = FALSE;
+ }
+
+ if (!clseqconsflag)
+ { /*only go into this asking routine if nothing on the command line*/
+ consensnum = 1; /*1 is the default*/
+ if (interactflag) {
+ printf("-------------------------------------------------------\n"
+ " \n"
+ "You requested consensus formation to a single sequence.\n"
+ "Choose now the sequence to compare to the other ones.\n" );
+ for (i = 1; i <= no_seq; i++)
+ printf("(%2d) %s\n", i, seqname[i - 1]);
+ do {
+ printf("No. of sequence: (* %3d *) : ", consensnum);
+ Fgets(instring, 11, stdin);
+ if (*instring != '\0')
+ consensnum = str2int((void *)instring);
+ } while (consensnum < 1 || consensnum > no_seq);
+ printf("\n");
+
+ *instring = '\0';
+ do {
+ printf(
+ "-------------------------------------------------------------------\n");
+ printf("hide this sequence? (* %c *) : ", YESNO(hideflag));
+ Fgets(instring, 11, stdin);
+ } while (indx("nNyY", instring) <= 0 && *instring != '\0');
+ if (*instring != '\0')
+ hideflag = (toupper(instring[0]) == 'Y');
+ }
+ }
+
+ if (outputmode == oASCII) {
+ masternormal = TRUE;
+ return;
+ }
+
+ if (!interactflag || clseqconsflag) {
+ masternormal = FALSE;
+ return;
+ }
+ *instring = '\0';
+ if (!hideflag) {
+ do {
+ printf("show this sequence in all-normal rendition? (* n *) : ");
+ Fgets(instring, 11, stdin);
+ } while (indx("nNyY", instring) <= 0 && *instring != '\0');
+ }
+ if (*instring == '\0')
+ return;
+ masternormal = (toupper(instring[0]) == 'Y');
+}
+
+
+/*--------------------------------------------------------------------------*/
+/* read input files and comparison-table */
+/*--------------------------------------------------------------------------*/
+
+static void read_cmp(void)
+{
+ /* Read the .sim and .grp files */
+ int i, j, p1, p2;
+ char *cp;
+ FILE *simfile, *grpfile;
+ int ll;
+
+ grpfile = NULL;
+ simfile = NULL;
+ if (simflag) {
+ for (i = 0; i <= 19; i++) {
+ for (j = 0; j <= 19; j++) {
+ simtable[i][j] = FALSE;
+ grptable[i][j] = FALSE;
+ }
+ }
+ for (i = 0; i <= 19; i++) {
+ simtable[i][i] = TRUE;
+ grptable[i][i] = TRUE;
+ }
+
+ simfile = fopen(simname, TXT_RD);
+ assert(simfile != NULL);
+ do {
+ Fgets(line_, 256, simfile);
+ } while (!feof(simfile) && indx(line_, "..") <= 0);
+ while (!feof(simfile)) {
+ Fgets(line_, 256, simfile);
+ if (*line_ == '\0') continue;
+ cp = strchr(aaset, line_[0]);
+ if (cp == NULL) p1 = 0;
+ else p1 = (int)(cp-aaset)+1;
+ if (p1 > 0) {
+ ll = strlen(line_);
+ for (i = 2; i < ll; i++) {
+ cp = strchr(aaset, line_[i]);
+ if (cp == NULL) p2 = 0;
+ else p2 = (int)(cp-aaset)+1;
+ if (p2 > 0) {
+ simtable[p1 - 1][p2 - 1] = TRUE;
+ simtable[p2 - 1][p1 - 1] = TRUE;
+ }
+ }
+ }
+ }
+
+ grpfile = fopen(grpname, TXT_RD);
+ assert(grpfile != NULL);
+ do {
+ Fgets(line_, 256, grpfile);
+ } while (!feof(grpfile) && indx(line_, "..") <= 0);
+ while (!feof(grpfile)) {
+ Fgets(line_, 256, grpfile);
+ if ((ll=strlen(line_)) < 2) continue;
+ for (j = 1; j < ll; j++) {
+ cp = strchr(aaset, line_[j-1]);
+ if (cp == NULL) p1 = 0;
+ else p1 = (int)(cp-aaset)+1;
+ if (p1 > 0) {
+ for (i = j; i < ll; i++) {
+ cp = strchr(aaset, line_[i]);
+ if (cp == NULL) p2 = 0;
+ else p2 = (int)(cp-aaset)+1;
+ if (p2 > 0) {
+ grptable[p1 - 1][p2 - 1] = TRUE;
+ grptable[p2 - 1][p1 - 1] = TRUE;
+ }
+ }
+ }
+ }
+ }
+ }
+ if (simfile != NULL)
+ fclose(simfile);
+ if (grpfile != NULL)
+ fclose(grpfile);
+}
+
+static int aaset_idx[256];
+#define IDX_aaset(ch) ( aaset_idx[(unsigned char)(ch)] )
+#define IN_aaset(ch) ( IDX_aaset(ch) >= 0 )
+
+static void build_aaset_table(void) {
+ int ch;
+ unsigned char *ap;
+
+ for (ch = 0; ch < 256; ++ch)
+ aaset_idx[ch] = -1;
+ ch = 0;
+ for (ap = &aaset[0]; *ap != '\0'; ++ap)
+ aaset_idx[*ap] = ch++;
+}
+
+static BOOL sim(char a, char b)
+{
+ int idx1, idx2;
+
+ idx1 = IDX_aaset(a);
+ if (idx1 < 0) return FALSE;
+ idx2 = IDX_aaset(b);
+ if (idx2 < 0) return FALSE;
+
+ return simtable[idx1][idx2];
+}
+
+
+static BOOL grp(char a, char b)
+{
+ int idx1, idx2;
+
+ idx1 = IDX_aaset(a);
+ if (idx1 < 0) return FALSE;
+ idx2 = IDX_aaset(b);
+ if (idx2 < 0) return FALSE;
+
+ return grptable[idx1][idx2];
+}
+
+static void make_consensus_length(void)
+{
+ int i;
+
+ consenslen = 0;
+ for (i = 0; i < no_seq; i++) {
+ while (seq[i][seqlen[i] - 1] == '-' || seq[i][seqlen[i] - 1] == '.' ||
+ seq[i][seqlen[i] - 1] == ' ')
+ seqlen[i]--;
+ if (seqlen[i] > consenslen)
+ consenslen = seqlen[i];
+ }
+ printf("consensus length is %d\n", consenslen);
+}
+
+
+static void make_consensus(void)
+{
+ int i, j, k;
+ int idcount[MAX_NO_SEQ];
+ int simcount[MAX_NO_SEQ];
+ int pc;
+ int maxidcount, maxsimcount, idindex, simindex;
+ BOOL unique;
+
+ /* set consensus length = length of longest sequence (not counting dots,
+ spaces, etc. at the "far" end. May be a problem here for some strange
+ cases */
+ /* calculate the threshold # of sequences */
+ thr = (int)(0.5 + thrfrac * no_seq);
+
+ if (seqconsflag) {
+ for (i = 0; i < consenslen; i++)
+ cons[i] = seq[consensnum - 1][i];
+ return;
+ }
+
+ printf("Building consensus "); fflush(stdout);
+
+ /* build a lookup table for 'strchr(aaset,ch)-aaset' */
+ build_aaset_table();
+
+ pc = 0;
+ for (i = 0; i < consenslen; i++) {
+ int p = (int)((50.0*i) / consenslen);
+ if (p > pc) {
+ printf("."); fflush(stdout);
+ pc = p;
+ }
+ for (j = 0; j < no_seq; j++) {
+ idcount[j] = 0;
+ simcount[j] = 0;
+ for (k = 0; k < no_seq; k++) {
+ /* increment idcount AND simcount if the two residues are the same */
+ char seq_ji = seq[j][i];
+ if ( IN_aaset(seq_ji)) {
+ if (seq[k][i] == seq_ji) {
+ idcount[j]++;
+ simcount[j]++;
+ } else
+ /* increment only simcount if residues are not the same but fall into
+ the same group */
+ if (grp(seq[k][i], seq_ji))
+ simcount[j]++;
+ }
+ }
+ }
+ /* Find the maximum values in idcount and simcount, along with the
+ indices of those maxima */
+ cons[i] = ' ';
+ unique = FALSE;
+ maxidcount = idcount[0];
+ maxsimcount = simcount[0];
+ idindex = 1;
+ simindex = 1;
+ for (j = 2; j <= no_seq; j++) {
+ if (idcount[j - 1] > maxidcount) {
+ idindex = j;
+ maxidcount = idcount[j - 1];
+ }
+ if (simcount[j - 1] > maxsimcount) {
+ maxsimcount = simcount[j - 1];
+ simindex = j;
+ }
+ }
+ /* check here for the case where several residues/types may have achieved
+ the same score */
+ if (maxidcount >= thr) { /*only look if max is high enough*/
+ unique = TRUE;
+ for (j = 0; j < no_seq; j++) {
+ if (maxidcount == idcount[j] && seq[idindex - 1][i] != seq[j][i])
+ unique = FALSE;
+ }
+ if (unique)
+ cons[i] = seq[idindex - 1][i];
+ }
+ /* if there is an equally high idcount for a different residue then
+ there can't be a single residue consensus */
+ if (maxsimcount >= thr && !unique) {
+ unique = TRUE;
+ for (j = 0; j < no_seq; j++) {
+ if (maxsimcount == simcount[j] &&
+ !grp(seq[simindex - 1][i], seq[j][i]))
+ unique = FALSE;
+ }
+ if (unique)
+ cons[i] = tolower(seq[simindex - 1][i]);
+ /*if maxsimcount is not unique and the other residue is NOT in the same
+ similarity group then there is so consensus based on similarity. If
+ the two residues with the same similarity score are in the same
+ similarity group, flag that consensus position by making the
+ residue lowercase*/
+ }
+ }
+ printf(" done\n");
+}
+
+
+static void make_colors(void)
+{
+ int i, j, idcount, simcount, pc;
+
+ printf("Colorizing "); fflush(stdout);
+
+ pc = 0;
+ for (i = 0; i < consenslen; i++) {
+ int p = (int)((50.0*i) / consenslen);
+ if (p > pc) {
+ printf("."); fflush(stdout);
+ pc = p;
+ }
+ idcount = 0;
+ simcount = 0;
+ if (strchr(aasetlow, cons[i]) != NULL)
+ for (j = 0; j < no_seq; j++) {
+ col[j][i] = 0;
+ if (grp(seq[j][i], toupper(cons[i]))) {
+ col[j][i] = 2;
+ simcount++;
+ }
+ } else {
+ for (j = 0; j < no_seq; j++) {
+ if (seq[j][i] == cons[i])
+ idcount++;
+ else {
+ if (sim(seq[j][i], cons[i]))
+ simcount++;
+ }
+ col[j][i] = 0;
+ } /*count the ids and sims as they are used later for consensus line*/
+
+ if (idcount == no_seq &&
+ strchr(aaset, cons[i]) != NULL ) {
+ for (j = 0; j < no_seq; j++)
+ col[j][i] = 3;
+ /*if all sequences the same at this point then colour them identical(3)*/
+ } else {
+ if (idcount + simcount >= thr &&
+ strchr(aaset, cons[i]) != NULL ) {
+ for (j = 0; j < no_seq; j++) {
+ if (seq[j][i] == cons[i])
+ col[j][i] = 1; /*=> conserved residue*/
+ else if (sim(seq[j][i], cons[i]))
+ col[j][i] = 2;
+ /*=> similar to consensus(2)*/
+ }
+ }
+ }
+ }
+ /*do shading and count similar residues for the case of a group
+ consensus; note that in this case there cannot be any residues marked as
+ 'identical', by definition*/
+
+ if (consflag) {
+ if (idcount == no_seq) {
+ conschar[i] = symbcons[2];
+ if (toupper(conschar[i]) == 'U')
+ conschar[i] = toupper(cons[i]);
+ else if (toupper(conschar[i]) == 'L')
+ conschar[i] = tolower(cons[i]);
+ else if (toupper(conschar[i]) == 'B')
+ conschar[i] = ' ';
+ } else if (idcount + simcount >= thr) {
+ conschar[i] = symbcons[1];
+ if (toupper(conschar[i]) == 'U')
+ conschar[i] = toupper(cons[i]);
+ else if (toupper(conschar[i]) == 'L')
+ conschar[i] = tolower(cons[i]);
+ else if (toupper(conschar[i]) == 'B')
+ conschar[i] = ' ';
+ } else {
+ conschar[i] = symbcons[0];
+ if (toupper(conschar[i]) == 'U')
+ conschar[i] = toupper(cons[i]);
+ else if (toupper(conschar[i]) == 'L')
+ conschar[i] = tolower(cons[i]);
+ else if (toupper(conschar[i]) == 'B')
+ conschar[i] = ' ';
+ }
+ }
+ }
+ printf(" done\n");
+}
+
+
+static void make_lowcase(void)
+{
+ int i, j, pc;
+
+ if ( ! (lc[0] || lc[1] || lc[2] || lc[3] || lc[4]) )
+ return; /* nothing to do ! */
+
+ printf("Lowercase "); fflush(stdout);
+
+ pc = 0;
+ for (i = 0; i < no_seq; i++) {
+ int p = (int)((20.0*i) / no_seq);
+ while (p > pc) {
+ printf("."); fflush(stdout);
+ pc++;
+ }
+ for (j = 0; j < seqlen[i]; j++) {
+ if (lc[col[i][j]])
+ seq[i][j] = tolower(seq[i][j]);
+ }
+ }
+ printf(" done\n");
+}
+
+
+static void prepare_names(void)
+{
+ int i;
+ char *cp;
+
+ seqname_outlen = 1;
+ for (i = 0; i < no_seq; i++) {
+ cp = seqname[i] + strlen(seqname[i]);
+ while (cp != seqname[i] && *(cp-1) == ' ')
+ *(--cp) = '\0';
+ if (strlen(seqname[i]) > seqname_outlen)
+ seqname_outlen = strlen(seqname[i]);
+ }
+ for (i = 0; i < no_seq; i++) {
+ int sl = strlen(seqname[i]);
+ int p = seqname_outlen - sl;
+ if (p > 0)
+ sprintf(seqname[i]+sl, "%*s", p, "");
+ }
+}
+
+
+static void prepare_numbers(void)
+{
+ int count, bn, i, j;
+
+ for (i = 0; i < no_seq; i++) {
+ for (j = 1; j < max_no_block; j++)
+ sprintf(prenum[i][j], "%*s", seqnumlen, "");
+ sprintf(prenum[i][0], "%*d", seqnumlen, startno[i]);
+ count = startno[i] - 1;
+ bn = 1;
+ for (j = 1; j <= seqlen[i]; j++) {
+ if ( isupper(seq[i][j - 1])
+ || (i == cons_idx)
+ || (i == ruler_idx) )
+ count++;
+ if (j % outlen == 0) {
+ bn++;
+ if (count + 1 < seqlen[i] + startno[i])
+ sprintf(prenum[i][bn-1], "%*d", seqnumlen, count + 1);
+ }
+ }
+ }
+}
+
+
+/*--------------------------------------------------------------------------*/
+/* graphics section */
+/*--------------------------------------------------------------------------*/
+
+static void graphics_init(double *xpos, double *ypos)
+{
+ act_page = 1;
+ OutDev->Init(xpos, ypos);
+ lines_per_page = (int)((dev_maxy - dev_miny) / dev_ysize);
+ act_page = 1;
+}
+
+static void graphics_setcolor(int colno) {
+
+ if (colno == act_color)
+ return;
+ OutDev->Setcolor(colno);
+ act_color = colno;
+}
+
+static void graphics_charout(char c, double *xpos, double *ypos) {
+ OutDev->Charout(c, xpos, ypos);
+}
+
+void GenericStringOut(char *s, double *xpos, double *ypos) {
+ while (*s != '\0') {
+ OutDev->Charout(*s, xpos, ypos);
+ ++s;
+ }
+ OutDev->Charout(' ', xpos, ypos);
+}
+
+static void graphics_stringout(char *s, double *xpos, double *ypos) {
+ OutDev->Stringout(s, xpos, ypos);
+}
+
+static void graphics_newline(double *xpos, double *ypos) {
+ OutDev->Newline(xpos, ypos);
+}
+
+static void graphics_newpage(double *xpos, double *ypos) {
+ OutDev->Newpage(xpos, ypos);
+ act_page++;
+}
+
+static void graphics_exit(void) {
+ OutDev->Exit();
+}
+
+static void graphics_out(void)
+{
+ double xpos, ypos; /*current position of text cursor*/
+ int i, j, k;
+ char pagesymbol;
+ int linecount;
+
+ pagesymbol = '1';
+ act_color = -1;
+ no_blocks = (consenslen - 1) / outlen + 1;
+ if (consflag && no_seq < max_no_seq) {
+ cons_idx = no_seq;
+ seqlen[cons_idx] = consenslen;
+ strcpy(seqname[cons_idx], "consensus");
+ startno[cons_idx] = 1;
+ for (i = 0; i < consenslen; i++) {
+ seq[cons_idx][i] = conschar[i];
+ col[cons_idx][i] = 4; /*set colour to predefined "title" type*/
+ }
+ no_seq++;
+ }
+ if (seqconsflag && masternormal) {
+ for (i = 0; i < consenslen; i++)
+ col[consensnum - 1][i] = 4;
+ }
+ if (seqconsflag && hideflag) {
+ if (consensnum < no_seq) {
+ for (i = consensnum; i < no_seq; i++) {
+ seqlen[i - 1] = seqlen[i];
+ strcpy(seqname[i - 1], seqname[i]);
+ startno[i - 1] = startno[i];
+ memcpy(seq[i - 1], seq[i], max_no_res * sizeof(char));
+ memcpy(col[i - 1], col[i], max_no_res * sizeof(byte));
+ }
+ }
+ no_seq--;
+ }
+
+ if (rulerflag && no_seq < max_no_seq) {
+ ruler_idx = no_seq;
+ seqlen[ruler_idx] = consenslen;
+ strcpy(seqname[ruler_idx], "");
+ startno[ruler_idx] = 1;
+ for (i = 0; i < consenslen; i++) {
+ seq[ruler_idx][i] = '.';
+ col[ruler_idx][i] = 4; /*set colour to predefined "title" type*/
+ }
+ seq[ruler_idx][0] = '1';
+ for (i=10; i <= consenslen; i+=10) {
+ char no[20];
+ j=i-1;
+ do {
+ ++j;
+ sprintf(no, "%d", j);
+ k = strlen(no);
+ } while ( ((j-1)%outlen)+k > outlen || j > consenslen);
+ if (j+k-1 <= consenslen && (j%10)+k < 9)
+ memcpy(&seq[ruler_idx][j-1], no, k);
+ }
+ no_seq++;
+ }
+
+ if (seqnameflag)
+ prepare_names();
+ if (seqnumflag)
+ prepare_numbers();
+
+ lines_left = no_blocks * (no_seq + interlines) - interlines;
+ graphics_init(&xpos, &ypos);
+ linecount = 0;
+ for (i = 0; i < no_blocks; i++) {
+ for (j = 0; j < no_seq; j++) {
+ if (seqnameflag) {
+ graphics_setcolor(4); /*set colours to "title" type*/
+/* for (k = 0; k < seqname_outlen; k++)
+ graphics_charout(seqname[j][k], &xpos, &ypos);
+ graphics_charout(' ', &xpos, &ypos);
+*/
+ graphics_stringout(seqname[j], &xpos, &ypos);
+ }
+ if (seqnumflag) {
+ graphics_setcolor(4);
+/* {
+ int sl = strlen(prenum[j][i]);
+ for (k = 0; k < sl; k++)
+ graphics_charout(prenum[j][i][k], &xpos, &ypos);
+ }
+ graphics_charout(' ', &xpos, &ypos);
+*/
+ graphics_stringout(prenum[j][i], &xpos, &ypos);
+ }
+ for (k = 0; k < outlen; k++) {
+ if (i * outlen + k < consenslen) {
+ graphics_setcolor(col[j][i * outlen + k]);
+ graphics_charout(seq[j][i * outlen + k], &xpos, &ypos);
+ }
+ }
+ linecount++;
+ if (linecount >= lines_per_page) {
+ lines_left -= linecount;
+ linecount = 0;
+ if (lines_left > 0) {
+ if (splitflag) {
+ graphics_exit();
+ pagesymbol++;
+ outname[indx(outname, ".") - 2] = pagesymbol;
+ graphics_init(&xpos, &ypos);
+ } else
+ graphics_newpage(&xpos, &ypos);
+ }
+ } else
+ graphics_newline(&xpos, &ypos);
+ } /* for j */
+ if (linecount + interlines + no_seq <= lines_per_page)
+ { /*will the next block fit?*/
+ for (j = 0; j < interlines; j++) {
+ graphics_newline(&xpos, &ypos);
+ linecount++;
+ }
+ } else {
+ /* skipping interlines ... */
+ lines_left -= interlines;
+ lines_left -= linecount;
+ if (lines_left > 0) {
+ if (splitflag) {
+ graphics_exit();
+ pagesymbol++;
+ outname[indx(outname, ".") - 2] = pagesymbol;
+ graphics_init(&xpos, &ypos);
+ linecount = 0;
+ } else {
+ graphics_newpage(&xpos, &ypos);
+ linecount = 0;
+ }
+ }
+ }
+ } /* for i */
+ graphics_exit();
+}
+
+
+static void do_out(FILE *outf, BOOL goon)
+{
+ int i, j, k, id, sim, conlen;
+ BOOL fl1, fl2;
+ int pc;
+
+ prepare_names();
+
+ if (goon)
+ printf("Building identity/similarity matrix "); fflush(stdout);
+
+ pc = 0;
+ for (i = 1; i <= no_seq; i++) {
+ if (goon) {
+ int p = (int)((20.0*i) / no_seq);
+ while (p > pc) {
+ printf("."); fflush(stdout);
+ pc++;
+ }
+ }
+ fprintf(outf, "%s ", seqname[i - 1]);
+ /* Identities */
+ for (j = 0; j < i - 1; j++) {
+ id = 0;
+ conlen = 0;
+ for (k = 0; k < consenslen; k++) {
+ fl1 = IN_aaset(seq[i-1][k]);
+ fl2 = IN_aaset(seq[j ][k]);
+ if (fl1 || fl2) {
+ conlen++;
+ if (seq[i-1][k] == seq[j][k])
+ id++;
+ }
+ }
+ fprintf(outf, " %5.1f", 100.0 * id / conlen);
+ }
+ fprintf(outf, "%6s", "----");
+ for (j = i; j < no_seq; j++) {
+ sim = 0;
+ conlen = 0;
+ for (k = 0; k < consenslen; k++) {
+ fl1 = IN_aaset(seq[i-1][k]);
+ fl2 = IN_aaset(seq[j ][k]);
+ if (fl1 || fl2) {
+ conlen++;
+ if (seq[i-1][k] == seq[j][k] || grp(seq[i-1][k], seq[j][k]))
+ sim++;
+ }
+ }
+ fprintf(outf, " %5.1f", 100.0 * sim / conlen);
+ }
+ putc('\n', outf);
+ }
+ if (goon)
+ printf(" done\n");
+}
+
+
+static void ident_sim_out(void)
+{
+ if (*identname != '\0') {
+ MYFILE idf;
+ assert( outopen(&idf, identname) != NULL );
+ do_out(idf.f, TRUE);
+ fclose(idf.f);
+ } else
+ do_out(stdout, FALSE);
+}
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Allocate memory -- actually this should be done *
+ * after we know how many sequences there are and *
+ * how long each is -- future work */
+static void allocate1(void)
+{
+ int i;
+
+ cons = NULL;
+ conschar = NULL;
+
+ seq = Malloc(MAX_NO_SEQ * sizeof(char *));
+ col = Malloc(MAX_NO_SEQ * sizeof(byte *));
+ prenum = Malloc(MAX_NO_SEQ * sizeof(numtype *));
+
+ max_no_seq = MAX_NO_SEQ;
+ max_no_res = MAX_NO_RES;
+ for (i = 0; i < MAX_NO_SEQ; i++) {
+ seq[i] = malloc(max_no_res * sizeof(char));
+ col[i] = NULL;
+ prenum[i] = NULL;
+ if (seq[i] == NULL) {
+ if (i > 10) {
+ --i;
+ Free(&seq[i]);
+ --i;
+ Free(&seq[i]);
+ }
+ max_no_seq = i-1;
+ break;
+ }
+ }
+}
+
+static void allocate2(void)
+{
+ int i, need;
+
+ need = no_seq;
+ if (consflag) ++need;
+ if (rulerflag) ++need;
+ if (need > max_no_seq) need = max_no_seq;
+
+ for (i=max_no_seq-1; i >= need; --i)
+ Free(&seq[i]);
+ if (consenslen < max_no_res / 2) {
+ for (i=no_seq; i >= 0; --i) {
+ seq[i] = realloc(seq[i], (consenslen+1)*sizeof(char));
+ assert(seq[i] != NULL);
+ }
+ }
+
+ max_no_seq = need;
+ max_no_res = consenslen+1;
+
+ cons = Malloc(max_no_res * sizeof(char));
+ if (consflag)
+ conschar = Malloc(max_no_res * sizeof(char));
+
+ for (i = 0; i < max_no_seq; i++) {
+ col[i] = Malloc(max_no_res * sizeof(byte));
+ if (seqnumflag)
+ prenum[i] = Malloc(max_no_block * sizeof(numtype));
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+/* main program */
+/*--------------------------------------------------------------------------*/
+
+int main(int argc, char **argv)
+{
+ allocate1();
+ process_command_line(argc, argv);
+
+ ask();
+ switch (inputmode) {
+ case '1': read_file_pretty();
+ break;
+ case '2': read_file_clustal();
+ break;
+ case '3': read_file_maligned();
+ break;
+ case '4': read_file_esee();
+ break;
+ case '5': read_file_phylip();
+ break;
+ }
+
+ if (seqnumflag && !numdefflag)
+ ask_numbers();
+ if (seqconsflag)
+ ask_seqcons();
+ read_cmp();
+
+ make_consensus_length();
+ allocate2();
+ make_consensus();
+
+ if (ident_sim)
+ ident_sim_out();
+
+ make_colors();
+ make_lowcase();
+ graphics_out();
+ return 0;
+}
+
+
+
Added: trunk/packages/boxshade/branches/upstream/current/box_dna.grp
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/box_dna.grp (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/box_dna.grp 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,4 @@
+This file is a Nucleic-acid group file for use with BOXSHADE.
+..
+AGR
+CTY
Added: trunk/packages/boxshade/branches/upstream/current/box_dna.par
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/box_dna.par (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/box_dna.par 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,119 @@
+This is a file of default parameters for use with BOXSHADE
+there are several sections, one for GENERAL parameters and one for each
+output device.
+The parameters may be edited freely, they reflect the input expected
+from the keyboard if BOXSHADE is run interactively. The purpose of each
+parameter is documented briefly within the respective line.
+
+When editing, one has to regard:
+- one parameter per line (background/foreground shading = one parameter)
+- parameters of a section (labeled :SECTION) start in the first line
+ after the label
+- there may be no empty (or comment) lines between the parameters of a
+ section. These lines are allowed only between sections
+- only the leftmost part of every parameter line is looked at. Comments
+ are allowed starting at row 10
+- don't change the section header
+
+:GENERAL
+1 input type (1: PRETTY)
+1 output device (1: ANSI Terminal)
+N consensus to single sequence?
+60 sequence chars per line
+Y sequence names to be printed?
+N sequence numbers to be printed?
+1 No of empty lines between blocks
+N special shading for similar residues
+N special shading for conserved residues
+N consensus output
+ LU consensus display pattern
+N split output to multiple files
+N default numbering (starting at 1)
+0.8 default threshold fraction
+
+
+:HTML
+WB normal residues
+BW identical residues
+3W similar residues
+B2 globally conserved residues
+
+:POSTSCRIPT
+WB normal residues
+BW identical residues
+3W similar residues
+B2 globally conserved residues
+10 character size (in Pts.)
+N landscape mode
+
+:FIG
+WB normal residues
+BW identical residues
+1B similar residues
+BY globally conserved residues
+12 0=Tms,12=Cour,16=Helv,28=Palat
+10 character size (in Pts.)
+
+:LJ250
+B normal residues
+R identical residues
+L similar residues
+M globally conserved residues
+
+
+
+:CRT
+LD normal residues
+BL identical residues
+LR similar residues
+BW globally conserved residues
+
+:RTF
+WK normal residues
+WR identical residues
+WB similar residues
+WM globally conserved residues
+10 character size (in pts)
+
+:ASCII
+. normal residues
+L identical residues
+l similar residues
+L globally conserved residues
+
+:ANSI
+N normal residues
+R identical residues
+B similar residues
+E globally conserved residues
+
+:ReGIS
+WB normal residues
+BW identical residues
+LW similar residues
+BY globally conserved residues
+
+
+:HPGL
+0F1N normal residues (bgnd/fgnd)
+2F1N identical residues
+3F1N similar residues
+2F4N globally conserved residues
+8 character size (in Pts.)
+N landscape mode
+
+:PICTFILE
+WB normal residues
+BW identical residues
+1B similar residues
+B2 globally conserved residues
+10 character size (in Pts.)
+S shade only?
+n landscape mode
+
+:VT
+N
+R
+B
+E
+
Added: trunk/packages/boxshade/branches/upstream/current/box_dna.sim
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/box_dna.sim (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/box_dna.sim 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,19 @@
+This file is a Nucleic-acid similarity file for use with BOXSHADE.
+Is resembles the GCG simplify.txt, but similarities contained
+in this file are not automatically set-forming. This means:
+The line
+I LVM means that I is similar to L,V and M and also that
+ L,V,M are similar to I.
+ It does not imply that L is similar to V or to M.
+For achieving this, more lines (the next ones) are necessary.
+Although is seems weird, this feature has been chosen DELIBERATELY
+because I think it could be helpful in some cases.
+Other format requirements are the same as for SIMPLIFY.TXT in the
+GCG-package.
+..
+A GR
+G AR
+R AG
+C TY
+T CY
+Y CT
Added: trunk/packages/boxshade/branches/upstream/current/box_pep.grp
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/box_pep.grp (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/box_pep.grp 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,15 @@
+This file is a Amino-acid grouping file for use with NEWBOX.
+Each line contains a set of amino acids which are considered
+'similar' when calculating the consensus. The .SIM file is different
+and is used in colouring residues that are "similar" to a single
+consensus residue.
+Other format requirements are the same as for SIMPLIFY.TXT in the
+GCG-package.
+..
+FYW
+ILVM
+RK
+DE
+GA
+TS
+NQ
Added: trunk/packages/boxshade/branches/upstream/current/box_pep.par
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/box_pep.par (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/box_pep.par 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,118 @@
+This is a file of default parameters for use with BOXSHADE
+there are several sections, one for GENERAL parameters and one for each
+output device.
+The parameters may be edited freely, they reflect the input expected
+from the keyboard if BOXSHADE is run interactively. The purpose of each
+parameter is documented briefly within the respective line.
+
+When editing, one has to regard:
+- one parameter per line (background/foreground shading = one parameter)
+- parameters of a section (labeled :SECTION) start in the first line
+ after the label
+- there may be no empty (or comment) lines between the parameters of a
+ section. These lines are allowed only between sections
+- only the leftmost part of every parameter line is looked at. Comments
+ are allowed starting at row 10
+- don't change the section header
+
+:GENERAL
+1 input type (1: PRETTY)
+1 output device (1: ANSI Terminal)
+N consensus to single sequence?
+60 sequence chars per line
+Y sequence names to be printed?
+N sequence numbers to be printed?
+1 No of empty lines between blocks
+Y special shading for similar residues
+N special shading for conserved residues
+N consensus output
+ LU consensus display pattern
+N split output to multiple files
+N default numbering (starting at 1)
+0.5 default threshold fraction
+
+
+:HTML
+WB normal residues
+BW identical residues
+1B similar residues
+B2 globally conserved residues
+
+:POSTSCRIPT
+WB normal residues
+BW identical residues
+1B similar residues
+B2 globally conserved residues
+10 character size (in Pts.)
+n landscape mode
+
+:CRT
+LD normal residues
+BL identical residues
+LR similar residues
+BW globally conserved residues
+
+:RTF
+WK normal residues
+WR identical residues
+WB similar residues
+WM globally conserved residues
+10 character size (in pts)
+
+:ANSI
+N normal residues
+R identical residues
+B similar residues
+E globally conserved residues
+
+:ASCII
+L normal residues
+- identical residues
+l similar residues
+. globally conserved residues
+
+:HPGL
+0F1N normal residues (bgnd/fgnd)
+2F1N identical residues
+3F1N similar residues
+2F4N globally conserved residues
+8 character size (in Pts.)
+N landscape mode
+
+
+:LJ250
+B normal residues
+R identical residues
+L similar residues
+M globally conserved residues
+
+:FIG
+WB normal residues
+BW identical residues
+1B similar residues
+BY globally conserved residues
+12 0=Tms,12=Cour,16=Helv,28=Palat
+10 character size (in Pts.)
+
+:ReGIS
+WB normal residues
+BW identical residues
+LW similar residues
+BY globally conserved residues
+
+:VT
+N normal residues
+R identical residues
+B similar residues
+E globally conserved residues
+
+:PICTFILE
+WB normal residues
+BW identical residues
+1B similar residues
+B2 globally conserved residues
+10 character size (in Pts.)
+T shade only ?
+n landscape mode
+
+
Added: trunk/packages/boxshade/branches/upstream/current/box_pep.sim
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/box_pep.sim (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/box_pep.sim 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,25 @@
+This file is a Amino-acid similarity file for use with BOX.
+Is resembles the GCG simplify.txt, but similarities contained
+in this file are not automatically set-forming. This means:
+The line
+I LVM means that I is similar to L,V and M and also that
+ L,V,M are similar to I.
+ It does not imply that L is similar to V or to M.
+For achieving this, more lines (the next ones) are necessary.
+Although is seems weird, this feature has been chosen DELIBERATELY
+because I think it could be helpful in some cases.
+Other format requirements are the same as for SIMPLIFY.TXT in the
+GCG-package.
+..
+F YW
+Y WF
+W FY
+I LVM
+L VMI
+V MIL
+M ILV
+R K
+D E
+G A
+T S
+N Q
Added: trunk/packages/boxshade/branches/upstream/current/bx_misc.c
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/bx_misc.c (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/bx_misc.c 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,446 @@
+#include "bx_types.h"
+#include <stdarg.h>
+
+#ifdef MSDOS
+#include <io.h>
+#else
+#include <unistd.h>
+#endif
+
+MYFILE outfile = { NULL, FALSE};
+FILE *parfile = NULL;
+
+char depend_err[50] = "";
+
+void *Malloc(size_t sze) {
+ void *res = malloc(sze);
+ assert(res!=NULL);
+ return res;
+}
+
+int min(int a, int b)
+{
+ if (a < b)
+ return a;
+ return b;
+}
+
+static char *binpath = NULL;
+
+void save_binpath(char *arg0) {
+ int sl = strlen(arg0);
+ char *ap = "";
+
+ /* Accept three path seperators: / \ : */
+ while (sl > 0 && strchr("\\/:", arg0[sl-1]) == NULL) --sl;
+ if (sl <= 0) return;
+
+ if (arg0[sl-1] == ':') ap = ":.";
+ binpath = Malloc(sl + strlen(ap) );
+ if (binpath == NULL) return;
+ strncpy(binpath, arg0, sl-1);
+ strcpy(binpath+sl-1, ap);
+}
+
+char *get_logical(char *logical)
+{
+ char *r;
+ static char res[300];
+
+ r = getenv(logical);
+ if (r == NULL) r = "";
+ strcpy(res, r);
+ if (*res != '\0' || strcmp(logical, "BOXDIR")!=0 || binpath == NULL)
+ return res;
+
+ /* looking for BOXDIR -> default to exe directory ! */
+ strcpy(res, binpath); /* exec path */
+ return res;
+}
+
+BOOL fexist(char *fname)
+{
+ BOOL Result;
+ FILE *f;
+
+ f = fopen(fname, TXT_RD);
+ Result = (f != NULL);
+ if (f != NULL)
+ fclose(f);
+ return Result;
+}
+
+int indx(char *mainstring, char *substring)
+{
+ char *cp;
+
+ if (*mainstring == '\0')
+ return 0;
+ cp = strstr(mainstring, substring);
+ if (cp == NULL) return 0;
+ return (int)(cp-mainstring)+1;
+}
+
+MYFILE *outopen(MYFILE *mf, char *fn) {
+ mf->bin = EOLmode != EOL_default;
+ mf->f = fopen(fn, (mf->bin ? BIN_WR : TXT_WR));
+ return (mf->f != NULL ? mf : NULL);
+}
+
+static char *uwb = NULL;
+void uwriteln(MYFILE *f, char *fmt, ...) {
+ va_list argptr;
+
+ if ( !f->bin) {
+defeol:
+ va_start(argptr, fmt);
+ vfprintf(f->f, fmt, argptr);
+ va_end(argptr);
+ fputs("\n", f->f);
+ return;
+ }
+
+ if (uwb == NULL) {
+ uwb = malloc(4000);
+ if (uwb == NULL)
+ goto defeol;
+ }
+
+ {
+ char *cp1, *cp2;
+ int cnt;
+
+ va_start(argptr, fmt);
+ cnt = vsprintf(uwb, fmt, argptr);
+ va_end(argptr);
+ uwb[cnt] = '\n';
+ uwb[cnt+1] = '\0';
+
+ cp1 = uwb;
+ while (cp1 != NULL && *cp1 != '\0') {
+ cp2 = strchr(cp1, '\n');
+ if (cp2 != NULL) {
+ *cp2 = '\0';
+ ++cp2;
+ }
+ fputs(cp1, f->f);
+ if (cp2 != NULL) {
+ fflush(f->f);
+ switch (EOLmode) {
+ case EOL_dos : putc('\r', f->f);
+ putc('\n', f->f);
+ break;
+ case EOL_mac : putc('\r', f->f); break;
+ case EOL_unix :
+ default : putc('\n', f->f); break;
+ }
+ }
+ cp1 = cp2;
+ }
+ }
+}
+
+
+double str2real(void *s)
+{
+ double r;
+ int err;
+
+ err = (sscanf((char *)s, "%lg", &r) == 0);
+ if (err != 0) {
+ strcpy(depend_err, "str2real");
+ return 0.0;
+ } else
+ return r;
+}
+
+
+int str2int(void *s)
+{
+ int i, err;
+
+ err = (sscanf((char *)s, "%d", &i) == 0);
+ if (err != 0) {
+ strcpy(depend_err, "str2real");
+ return 0;
+ } else
+ return i;
+}
+
+
+#if 0
+
+static long rand_m = 100000000L, rand_m1 = 10000, rand_b = 31415821L;
+
+static long rand_a[55];
+static int rand_j, filecount;
+
+char lowcase(char c)
+{
+ if (c <= 90 && c >= 65)
+ return (c + 32);
+ else
+ return c;
+}
+
+char *int2str(char *Result, int intg, int dig)
+{
+ char s[100];
+
+ sprintf(s, "%*d", dig, intg);
+ return strcpy(Result, s);
+}
+
+
+char *real2str(char *Result, double rl, int dig1, int dig2)
+{
+ char s[100];
+
+ sprintf(s, "%*.*f", dig1, dig2, rl);
+ return strcpy(Result, s);
+}
+
+char *get_command_line(char *Result)
+{
+ string255 cl;
+ int i;
+
+ *cl = '\0';
+ if (P_argc > 1) {
+ for (i = 1; i < P_argc; i++)
+ strcat(cl, P_argv[i]);
+ }
+ return strcpy(Result, cl);
+}
+
+static char *getTEMPname(char *Result, char *s_)
+{
+ string255 s;
+
+ strcpy(s, s_);
+ s[strlen(s) - 1] = '~';
+ return strcpy(Result, s);
+}
+
+
+void fopen_(FILE **f, char *fname_, char acc)
+{
+ /*acc = r,w,a */
+ string255 fname;
+ FILE *tmpfile;
+ string255 tmpname, line;
+ char c;
+ char buf1[6144], buf2[6144];
+ BOOL uxmode;
+ char tmpfile_NAME[_FNSIZE];
+
+ strcpy(fname, fname_);
+ tmpfile = NULL;
+ if (acc == 'w' || acc == 'W') {
+ assign(*f, fname);
+/* p2c: dep_tp.pas, line 128: Note: REWRITE does not specify a name [181] */
+ if (*f != NULL)
+ rewind(*f);
+ else
+ *f = tmpfile();
+ if (*f == NULL)
+ _EscIO(FileNotFound);
+ } else if (acc == 'a' || acc == 'A') {
+ assign(*f, fname);
+/* p2c: dep_tp.pas, line 133: Note: APPEND does not specify a name [181] */
+ if (*f != NULL)
+ rewind(*f);
+ else
+ *f = tmpfile();
+ if (*f == NULL)
+ _EscIO(FileNotFound);
+ } else {
+ assign(*f, fname);
+ rewind(*f);
+/* p2c: dep_tp.pas, line 139:
+ * Note: Turbo Pascal conditional compilation directive was ignored [218] */
+ /*$IFNDEF NO_UNIX*/
+ do {
+ c = getc(*f);
+ } while (!(P_eoln(*f) || c == '\n'));
+ rewind(*f);
+ if (c == '\n') {
+ uxmode = TRUE;
+/* p2c: dep_tp.pas, line 142:
+ * Warning: Symbol 'UXMODE' is not defined [221] */
+ } else
+ uxmode = FALSE;
+ if (uxmode) {
+ setvbuf(*f, buf1, _IOFBF, 6144);
+ getTEMPname(tmpname, fname);
+ strcpy(tmpfile_NAME, tmpname);
+ if (tmpfile != NULL)
+ tmpfile = freopen(tmpfile_NAME, "w", tmpfile);
+ else
+ tmpfile = fopen(tmpfile_NAME, "w");
+ _SETIO(tmpfile != NULL, FileNotFound);
+/* p2c: dep_tp.pas, line 149:
+ * Note: Make sure setvbuf() call occurs when file is open [200] */
+ setvbuf(*f, buf2, _IOFBF, 6144);
+ while (!P_eof(*f)) {
+ ureadln(f, (void *)line);
+ if (P_ioresult != 0)
+ goto _Ll_exit;
+ _SETIO(fprintf(tmpfile, "%s\n", line) >= 0, FileWriteError);
+ }
+ if (tmpfile != NULL)
+ fclose(tmpfile);
+ tmpfile = NULL;
+ if (*f != NULL)
+ fclose(*f);
+ *f = NULL;
+/* p2c: dep_tp.pas, line 157: Note: Encountered an ASSIGN statement [179] */
+ assign(*f, tmpname);
+ rewind(*f);
+_Ll_exit:
+ if (P_ioresult != 0)
+ strcpy(depend_err, "could not convert unix format");
+ }
+/* p2c: dep_tp.pas, line 145:
+ * Note: Make sure setvbuf() call occurs when file is open [200] */
+ /*$endif*/
+ }
+/* p2c: dep_tp.pas, line 127: Note: Encountered an ASSIGN statement [179] */
+ if (tmpfile != NULL)
+ fclose(tmpfile);
+
+/* p2c: dep_tp.pas, line 132: Note: Encountered an ASSIGN statement [179] */
+/* p2c: dep_tp.pas, line 137: Note: Encountered an ASSIGN statement [179] */
+}
+
+char *substr_(char *Result, void *original, int pos1, int count)
+{
+ return strsub(Result, (char[256])original, pos1, count);
+}
+
+
+static long mult(long p, long q)
+{
+ long p1, p0, q1, q0;
+
+ p1 = p / rand_m1;
+ p0 = p % rand_m1;
+/* p2c: dep_tp.pas, line 182:
+ * Note: Using % for possibly-negative arguments [317] */
+ q1 = q / rand_m1;
+ q0 = q % rand_m1;
+/* p2c: dep_tp.pas, line 183:
+ * Note: Using % for possibly-negative arguments [317] */
+ return (((p0 * q1 + p1 * q0) % rand_m1 * rand_m1 + p0 * q0) % rand_m);
+/* p2c: dep_tp.pas, line 184:
+ * Note: Using % for possibly-negative arguments [317] */
+/* p2c: dep_tp.pas, line 184:
+ * Note: Using % for possibly-negative arguments [317] */
+}
+
+
+void rand_init(int seed)
+{
+ rand_a[0] = seed;
+ rand_j = 0;
+ do {
+ rand_j++;
+ rand_a[rand_j] = (mult(rand_b, rand_a[rand_j - 1]) + 1) % rand_m;
+/* p2c: dep_tp.pas, line 193:
+ * Note: Using % for possibly-negative arguments [317] */
+ } while (rand_j != 54);
+}
+
+
+int rand_int(int limit)
+{
+ /*from 0 to limit-1*/
+ rand_j = (rand_j + 1) % 55;
+/* p2c: dep_tp.pas, line 198:
+ * Note: Using % for possibly-negative arguments [317] */
+ rand_a[rand_j] = (rand_a[(rand_j + 23) % 55] + rand_a[(rand_j + 54) % 55]) %
+ rand_m;
+/* p2c: dep_tp.pas, line 199:
+ * Note: Using % for possibly-negative arguments [317] */
+/* p2c: dep_tp.pas, line 200:
+ * Note: Using % for possibly-negative arguments [317] */
+/* p2c: dep_tp.pas, line 200:
+ * Note: Using % for possibly-negative arguments [317] */
+ return (rand_a[rand_j] / rand_m1 * limit / rand_m1);
+}
+
+
+double rand_real(void)
+{
+ /* from 0(incl) to 1(excl) */
+ return (rand_int(32000) / 32000.0);
+}
+
+
+typedef char string1[2];
+
+
+void ureadln(FILE **f, void *line)
+{
+ BOOL done;
+ char c;
+ char STR1[256];
+
+ done = FALSE;
+ *(string1)line = '\0';
+ do {
+ c = getc(*f);
+ if (c == '\n')
+ done = TRUE;
+ else if (c != '\015') {
+ sprintf(STR1, "%s%c", (char[256])line, c);
+ strcpy((char *)(&line), STR1);
+ }
+ if (P_eoln(*f)) {
+ fscanf(*f, "%*[^\n]");
+ getc(*f);
+ done = TRUE;
+ }
+ } while (!done);
+}
+
+
+BOOL getunixmode(char *fname)
+{
+ BOOL Result;
+ char c;
+ FILE *f;
+ char f_NAME[_FNSIZE];
+
+ f = NULL;
+ strcpy(f_NAME, fname);
+ if (f != NULL)
+ f = freopen(f_NAME, "r", f);
+ else
+ f = fopen(f_NAME, "r");
+ if (f == NULL)
+ _EscIO(FileNotFound);
+ do {
+ c = getc(f);
+ } while (!(c == '\n' || P_eoln(f)));
+ if (c == '\n')
+ Result = TRUE;
+ else
+ Result = FALSE;
+ if (f != NULL)
+ fclose(f);
+ f = NULL;
+ if (f != NULL)
+ fclose(f);
+ return Result;
+}
+
+void _dep_tp_init(void)
+{
+ static int _was_initialized = 0;
+ if (_was_initialized++)
+ return;
+ filecount = 100;
+ rand_init(1);
+}
+#endif
Added: trunk/packages/boxshade/branches/upstream/current/bx_read.c
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/bx_read.c (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/bx_read.c 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,475 @@
+#include "bx_read.h"
+
+FILE *infile = NULL;
+
+char *Gets(char *s) {
+ fflush(stdout);
+ return gets(s);
+}
+
+/*
+** Handle all those End-Of-Line sequences:
+**
+** System CR LF
+** MAC X -
+** MSDOS X X
+** UNIX - X
+** VMS ? ?
+**
+** Does _NOT_ return '\n' !!!
+*/
+char *Fgets(char *l, size_t sze, FILE *f) {
+ char *cp = l;
+ BOOL cr, eoln = FALSE;
+
+ if (f == stdin)
+ return Gets(l);
+
+ if (feof(f)) return NULL;
+
+ cr = FALSE;
+ while (sze>1 && !feof(f)) {
+ int c = fgetc(f);
+ if (c == EOF) {
+ if (ferror(f)) return NULL;
+ break;
+ }
+ if (cr && c != '\n') {
+ /* CR end-of-line (MAC) */
+ ungetc(c,f);
+ eoln = TRUE;
+ break;
+ } else
+ cr = (c=='\r');
+ if ( cr )
+ continue;
+ --sze;
+ if (c=='\n') { eoln = TRUE; break; }
+ *(cp++) = c;
+ }
+ *cp = '\0';
+
+ cr = FALSE;
+ while (!eoln && !feof(f)) {
+ int c = fgetc(f);
+ if (c == EOF)
+ break;
+ if (cr && c != '\n') {
+ /* CR end-of-line (MAC) */
+ ungetc(c,f);
+ break;
+ } else
+ cr = (c=='\r');
+ if ( cr )
+ continue;
+ if (c=='\n') break;
+ }
+ return l;
+}
+
+void term_par(char *term) {
+ assert(parfile != NULL);
+ rewind(parfile);
+ do {
+ Fgets(line_, 256, parfile);
+ } while (!feof(parfile) && (*line_ != ':' || indx(line_, term) != 2) );
+ assert(!feof(parfile));
+}
+
+void read_file_clustal(void)
+{
+ int i, j, sl;
+ char nametag[41], emptytag[41];
+ int taglen, seqstart, emptycount;
+
+ sprintf(emptytag, "%*s", seqnamelen, "");
+
+ infile = fopen(inname, TXT_RD);
+ assert(infile != NULL);
+
+ no_seq = 0;
+ emptycount = 0;
+ do {
+ Fgets(line_, 256, infile);
+ emptycount++;
+ } while (strlen(line_) >= 5);
+ do {
+ Fgets(line_, 256, infile);
+ emptycount++;
+ } while (strlen(line_) <= 12);
+ taglen = 0;
+ do {
+ if ((sl=strlen(line_)) > 12) {
+ i = 1;
+ do {
+ i++;
+ } while (!isspace(line_[i - 1]) && i < sl);
+ taglen = i - 1;
+ do {
+ i++;
+ } while (isspace(line_[i - 1]) && i < sl);
+ if (taglen < 2) {
+ /* seqstart:=i; */ /****** is that correct ??? ******/
+ strcpy(nametag, emptytag);
+ } else {
+ seqstart = i;
+ strncpy(nametag, line_, taglen);
+ nametag[taglen] = '\0';
+ }
+ } else
+ strcpy(nametag, emptytag);
+ if (strcmp(nametag, emptytag)) {
+ no_seq++;
+ if (no_seq >= max_no_seq) {
+ printf("OOPS, too many sequences in %s. Sorry, limit is %d!\n",
+ inname, max_no_seq);
+ exit(1);
+ }
+ strcpy(seqname[no_seq - 1], emptytag);
+ startno[no_seq - 1] = 1;
+ if (taglen > seqnamelen)
+ taglen = seqnamelen;
+ for (i = 0; i < taglen; i++)
+ seqname[no_seq-1][i] = nametag[i];
+ }
+ if (!feof(infile)) {
+ Fgets(line_, 256, infile);
+ } else
+ strcpy(nametag, emptytag);
+ } while (strcmp(nametag, emptytag));
+
+ rewind(infile);
+
+ printf("%s has %d sequences. Reading ", inname, no_seq);
+ fflush(stdout);
+
+ for (i = 1; i < emptycount; i++) {
+ Fgets(line_, 256, infile);
+ }
+ for (i = 0; i < no_seq; i++)
+ seqlen[i] = 0;
+ while (!feof(infile)) {
+ for (i = 0; i < no_seq; i++) {
+ Fgets(line_, 256, infile);
+ j = 1;
+ while (seqstart + j - 1 <= strlen(line_)) {
+ seq[i][seqlen[i] + j - 1] = toupper(line_[seqstart + j - 2]);
+ j++;
+ }
+ seqlen[i] += j - 1;
+ }
+ if (!feof(infile)) {
+ Fgets(dummystring, 81, infile);
+ }
+ if (feof(infile))
+ break;
+ Fgets(dummystring, 81, infile);
+ printf("."); fflush(stdout);
+ }
+ if (infile != NULL)
+ fclose(infile);
+ printf(" done\n");
+}
+
+
+#define blocklen 10
+#define blockno 5
+#define blockdist 1
+
+
+void read_file_pretty(void)
+{
+ int blockstart, i, j, k;
+ int offs;
+ BOOL found;
+ char nametag[256], tempname[256];
+ char emptytag[81];
+ BOOL msfflag, num_mode;
+
+ infile = NULL;
+ num_mode = FALSE; /*new*/
+ infile = fopen( inname, TXT_RD);
+ assert(infile != NULL);
+ do {
+ Fgets(line_, 256, infile);
+ } while (!(indx(line_, "..") > 0 || feof(infile)));
+ do {
+ Fgets(line_, 256, infile);
+ } while (!(indx(line_, "//") > 0 || feof(infile)));
+ if (!feof(infile))
+ msfflag = TRUE;
+ else {
+ msfflag = FALSE;
+ fseek(infile, 0, SEEK_SET);
+ assert(infile != NULL);
+ do {
+ Fgets(line_, 256, infile);
+ } while (indx(line_, "..") <= 0);
+ }
+
+ Fgets(dummystring, 81, infile);
+ Fgets(line_, 256, infile);
+ /*numbers or first sequence*/
+ if (indx(line_, " 1 ") > 0) {
+ Fgets(line_, 256, infile);
+ num_mode = TRUE;
+ }
+
+ blockstart = 1;
+ while (line_[blockstart - 1] == ' ')
+ blockstart++;
+ while (line_[blockstart - 1] != ' ')
+ blockstart++;
+ while (line_[blockstart - 1] == ' ')
+ blockstart++;
+ sprintf(emptytag, "%*s", blockstart, "");
+ no_seq = 0;
+
+ fseek(infile, 0, SEEK_SET);
+ assert(infile != NULL);
+ do {
+ Fgets(line_, 256, infile);
+ } while (!(indx(line_, "..") > 0 || feof(infile)));
+ do {
+ Fgets(line_, 256, infile);
+ } while (!(indx(line_, "//") > 0 || feof(infile)));
+ while (Fgets(line_, 256, infile) != NULL) {
+ if (strlen(line_) < blockstart)
+ continue;
+/* if (!strcmp(substr_(STR1, (void *)line_, 1, blockstart - 1), emptytag)) */
+ if (! strncmp(line_, emptytag, blockstart - 1) )
+ continue;
+ *tempname = '\0';
+ i = 1;
+ while (line_[i - 1] == ' ')
+ i++;
+ while (line_[i - 1] != ' ') {
+ sprintf(tempname + strlen(tempname), "%c", line_[i - 1]);
+ i++;
+ }
+ if (no_seq == 0) {
+ no_seq = 1;
+ strcpy(seqname[0], tempname);
+ continue;
+ }
+ found = FALSE;
+ for (i = 0; i < no_seq; i++) {
+ if (!strcmp(tempname, seqname[i]))
+ found = TRUE;
+ }
+ if (found == FALSE) {
+ no_seq++;
+ strcpy(seqname[no_seq - 1], tempname);
+ }
+ }
+ for (i = 0; i < no_seq; i++)
+ startno[i] = 1;
+
+ fseek(infile, 0, SEEK_SET);
+ assert(infile != NULL);
+ do {
+ Fgets(line_, 256, infile);
+ } while (indx(line_, "..") <= 0);
+ if (msfflag) {
+ do {
+ Fgets(line_, 256, infile);
+ } while (indx(line_, "//") <= 0);
+ }
+ Fgets(dummystring, 81, infile);
+ if (num_mode) {
+ Fgets(dummystring, 81, infile);
+ }
+ offs = 1;
+ do {
+ i = 1;
+ if (!feof(infile)) {
+ Fgets(line_, 256, infile);
+ }
+ do {
+ if (strlen(line_) >= blockstart) {
+ if (strncmp(line_, emptytag, blockstart-1)) {
+/* if (strcmp(substr_(STR1, (void *)line_, 1, blockstart - 1), emptytag)) { */
+ char *cp = nametag;
+ j = 0;
+ while (line_[j] == ' ')
+ j++;
+ while (line_[j] != ' ') {
+ *(cp++) = line_[j];
+ j++;
+ }
+ *cp = '\0';
+ while (line_[j] == ' ')
+ j++;
+ blockstart = min(blockstart, j+1);
+ } else
+ *nametag = '\0';
+ } else
+ *nametag = '\0';
+ if (strcmp(nametag, seqname[i - 1])) {
+ for (j = -1; j <= blocklen * blockno - 2; j++)
+ seq[i - 1][offs + j] = ' ';
+ } else {
+ for (j = 0; j < blockno; j++) {
+ for (k = -1; k <= blocklen - 2; k++) {
+ if (blockstart + j * (blocklen + blockdist) + k + 1 <= strlen(line_))
+ seq[i - 1][offs + j * blocklen + k] = toupper(
+ line_[blockstart + j * (blocklen + blockdist) + k]);
+ }
+ }
+ if (!feof(infile)) {
+ Fgets(line_, 256, infile);
+ }
+ }
+ i++;
+ } while (i <= no_seq);
+ offs += blocklen * blockno;
+ if (num_mode && !feof(infile)) {
+ Fgets(line_, 256, infile);
+ }
+ } while (!feof(infile));
+ for (i = 0; i < no_seq; i++) {
+ int sl;
+ seqlen[i] = offs - 1;
+ if ((sl=strlen(seqname[i])) < seqnamelen)
+ sprintf(seqname[i]+sl, "%*s", seqnamelen-sl, "");
+ }
+ if (infile != NULL)
+ fclose(infile);
+ infile = NULL;
+}
+
+#undef blocklen
+#undef blockno
+#undef blockdist
+
+
+void read_file_maligned(void)
+{
+ int i, j, sl;
+ char emptytag[256];
+
+ infile = NULL;
+ sprintf(emptytag, "%*s", seqnamelen, "");
+ infile = fopen(inname, TXT_RD);
+ assert(infile != NULL);
+ no_seq = 0;
+ Fgets(line_, 256, infile);
+ Fgets(line_, 256, infile);
+ while (Fgets(line_, 256, infile) != NULL) {
+ if (!feof(infile)) { /*filename*/
+ Fgets(line_, 256, infile);
+ }
+ if (feof(infile))
+ continue;
+ no_seq++;
+ strcpy(seqname[no_seq - 1], emptytag);
+ Fgets(line_, 256, infile);
+ j = min(strlen(line_), seqnamelen);
+ for (i = 0; i < j; i++)
+ seqname[no_seq - 1][i] = line_[i];
+ fscanf(infile, "%d%*[^\n]", &startno[no_seq - 1]);
+ getc(infile); /*seqstart, seqend*/
+ seqlen[no_seq - 1] = 0;
+ while (!feof(infile) && *line_ != '\0') {
+ Fgets(line_, 256, infile);
+ if (*line_ == '\0')
+ break;
+ sl = strlen(line_);
+ for (j = 0; j < sl; j++) {
+ seq[no_seq-1][seqlen[no_seq-1] + j] = toupper(line_[j]);
+ seqlen[no_seq-1] += j+1;
+ }
+ }
+ }
+ if (infile != NULL)
+ fclose(infile);
+}
+
+
+void read_file_esee(void)
+{
+ int i, j;
+ char emptytag[256];
+ byte b, versno, snl;
+
+ infile = NULL;
+ sprintf(emptytag, "%*s", seqnamelen, "");
+ infile = fopen(inname, BIN_RD);
+ assert(infile != NULL);
+ fread(&versno, sizeof(byte), 1, infile);
+ fread(&b, sizeof(byte), 1, infile);
+ no_seq = b;
+ fread(&b, sizeof(byte), 1, infile);
+ no_seq += b * 256;
+ for (i = 0; i < no_seq; i++) {
+ fread(&b, sizeof(byte), 1, infile);
+ seqlen[i] = b;
+ fread(&b, sizeof(byte), 1, infile);
+ seqlen[i] += b * 256 - 1;
+ for (j = 0; j < seqlen[i]; j++) {
+ fread(&b, sizeof(byte), 1, infile);
+ seq[i][j] = toupper(b);
+ }
+ fread(&b, sizeof(byte), 1, infile);
+ if (b != 1)
+ printf("ESEE format error in seq:%2d\n", i + 1);
+ fread(&b, sizeof(byte), 1, infile);
+ snl = b;
+ strcpy(seqname[i], emptytag);
+ startno[i] = 1;
+ for (j = 1; j <= 64; j++) {
+ fread(&b, sizeof(byte), 1, infile);
+ if (j <= snl && j <= seqnamelen)
+ seqname[i][j-1] = b;
+ }
+ for (j = 1; j <= 6; j++) /*linesum*/
+ fread(&b, sizeof(byte), 1, infile);
+ for (j = 1; j <= 6; j++) /*start*/
+ fread(&b, sizeof(byte), 1, infile);
+ fread(&b, sizeof(byte), 1, infile); /*type*/
+ fread(&b, sizeof(byte), 1, infile); /*NrOFF*/
+ fread(&b, sizeof(byte), 1, infile); /*reverse*/
+ }
+ if (infile != NULL)
+ fclose(infile);
+}
+
+
+void read_file_phylip(void)
+{
+ int i, j, sl;
+ FILE *infile;
+ BOOL firstline;
+
+ infile = NULL;
+ infile = fopen(inname, TXT_RD);
+ assert(infile != NULL);
+ no_seq = 0;
+ firstline = TRUE;
+ fscanf(infile, "%d%*[^\n]", &no_seq);
+ getc(infile);
+ while (!feof(infile)) {
+ for (i = 0; i < no_seq; i++) {
+ Fgets(line_, 256, infile);
+ if (firstline) {
+ startno[i] = 1;
+ seqlen[i] = 0;
+ strncpy(seqname[i], line_, 10);
+ seqname[i][10] = '\0';
+ memmove(line_,line_+11, sizeof(line_)-11);
+ }
+ sl = strlen(line_);
+ for (j = 0; j < sl; j++) {
+ if (line_[j] != ' ') {
+ seq[i][seqlen[i]] = line_[j];
+ seqlen[i]++;
+ }
+ }
+ }
+ Fgets(dummystring, 81, infile);
+ firstline = FALSE;
+ }
+ if (infile != NULL)
+ fclose(infile);
+}
+
Added: trunk/packages/boxshade/branches/upstream/current/bx_read.h
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/bx_read.h (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/bx_read.h 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,17 @@
+#ifndef BX_READ_H
+#define BX_READ_H
+
+
+#include "bx_types.h"
+
+extern char *Gets(char *s);
+extern char *Fgets(char *l, size_t sze, FILE *f);
+
+extern void read_file_clustal(void);
+extern void read_file_pretty(void);
+extern void read_file_maligned(void);
+extern void read_file_esee(void);
+extern void read_file_phylip(void);
+
+#endif /*BX_READ_H*/
+
Added: trunk/packages/boxshade/branches/upstream/current/bx_types.h
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/bx_types.h (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/bx_types.h 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,271 @@
+#ifndef BX_TYPES_H
+#define BX_TYPES_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+#ifdef BX_TYPES_G
+# define vextern
+#else
+# define vextern extern
+#endif
+
+#if (defined(__TURBOC__) || defined(GO32))
+#ifndef MSDOS
+#define MSDOS
+#endif
+#undef UNIX
+#undef MAC
+#endif
+
+#ifdef MSDOS
+#define BIN_RD "rb"
+#define TXT_RD "rt"
+#define BIN_WR "wb"
+#define TXT_WR "wt"
+#define c_sep '/' /* command line separator */
+#define C_SEP "/" /* command line separator */
+#define d_sep '\\' /* directory separator */
+#else
+#define BIN_RD "r"
+#define TXT_RD "r"
+#define BIN_WR "w"
+#define TXT_WR "w"
+#define c_sep '-' /* command line separator */
+#define C_SEP "-" /* command line separator */
+#define d_sep '/' /* directory separator */
+#endif
+
+
+#define oPS '1'
+#define oEPS '2'
+#define oHPGL '3'
+#define oRTF '4'
+#if (defined(__TURBOC__) || defined(GO32)) && !defined(_Windows)
+#define oCRT '5'
+#endif
+#define oANSI '6'
+#define oVT '7'
+#define oREGISt '8'
+#define oREGISp '9'
+#define oLJ250 'a'
+#define oASCII 'b'
+#define oFIG 'c'
+#define oPICT 'd'
+#define oHTML 'e'
+
+
+#ifdef oCRT
+#define allowed_devices "123456789abcde"
+#else
+#define allowed_devices "12346789abcde"
+#endif
+
+/* #if defined(__TURBOC__) && !defined(_Windows)
+ #define MAX_NO_RES 5000
+ #else */
+#define MAX_NO_RES 10000
+/* #endif */
+
+#define MAX_NO_SEQ 150
+vextern unsigned max_no_seq;
+vextern unsigned max_no_res;
+
+/* if one allows a large number of residues, and someone sets a short line
+ length, there will be too many blocks. Therefore, the minimum linelength
+ is set here equal to max_no_res/max_no_block to prevent errors in accessing
+ the prenum array. */
+#define min_outlen ((long)((double)max_no_res / max_no_block))
+
+#define max_no_block 400
+
+#define max_outlen 255
+#define max_linelen 255 /* defines linetype */
+#define seqnamelen 40 /* defines sseqnametype */
+#define seqnumlen 4 /* defines numtype */
+
+#define idpref 1
+#define simpref 1
+
+
+typedef int BOOL;
+#ifndef TRUE
+#define TRUE ((BOOL)(1==1))
+#endif
+#ifndef FALSE
+#define FALSE ((BOOL)(1==0))
+#endif
+
+#define YESNO(fl) ((fl) ? 'y' : 'n')
+
+typedef struct {
+ FILE *f;
+ BOOL bin;
+} MYFILE;
+
+typedef unsigned char byte;
+
+typedef char **seqtype;
+
+typedef byte **coltype;
+
+#define max_prenum_len (seqnumlen+1)
+typedef char numtype[max_prenum_len];
+typedef numtype **prenumtype;
+
+typedef char linetype[256];
+
+typedef char sseqnametype[41];
+
+typedef sseqnametype seqnametype[MAX_NO_SEQ];
+
+
+typedef BOOL cmptype[20][20];
+typedef char filenametype[256];
+
+typedef char prestring[21];
+
+typedef char txtstring[21];
+
+typedef char parstringtype[6];
+
+typedef enum {
+ Init, SetCol, CharOut, NewLine, NewPage, Exit
+} actiontype;
+
+typedef enum {
+ rTERM, rPAGE
+} regmodetype;
+
+typedef enum {
+ EOL_default, EOL_unix, EOL_mac, EOL_dos
+} EOLstate;
+
+typedef char cltagtype[21];
+
+typedef char cllinetype[256];
+
+extern char *aaset, *aasetlow;
+
+extern MYFILE outfile;
+extern FILE *parfile;
+
+vextern char dummystring[81];
+
+/* vextern int errcode;*/ /*turbo-specific IO-error indicator*/
+
+vextern seqtype seq; /*all sequences (characters)*/
+vextern int consenslen; /*maximum sequence length */
+vextern int seqlen[MAX_NO_SEQ]; /*all sequence lengths*/
+vextern int startno[MAX_NO_SEQ]; /*all sequence starts*/
+vextern prenumtype prenum; /*blocknumbers for output*/
+vextern coltype col; /*all sequences (cell colors)*/
+vextern char *cons; /*the consensus sequence*/
+vextern char *conschar; /*line for consensus display*/
+vextern seqnametype seqname; /*all sequence names*/
+
+vextern linetype line_; /* line input bufer */
+
+vextern int thr;
+vextern double thrfrac;
+
+vextern int no_seq; /*how many sequences*/
+vextern int outlen; /*length of an output block*/
+vextern int seqname_outlen; /*output length of seqnames*/
+vextern int no_blocks; /*output how many blocks*/
+vextern int lines_per_page; /*how many lines per page*/
+vextern int lines_left; /*how many lines left to print*/
+
+vextern filenametype inname, outname, identname, simname, grpname, parname,
+ clsimname, clgrpname;
+ /*misc. filenames*/
+vextern cmptype simtable, grptable;
+
+vextern char outputmode;
+ /*PS, EPS, HPGL, RTF, (CRT), ANSI, VT100, ReGISterm*/
+ /*ReGISprint, LJ250, ASCII, PICT*/
+
+vextern char inputmode; /*1=Lineup, 2=Clustal, 3=Maligned, 4=ESEE*/
+
+vextern int consensnum; /* sequence to make consensus to */
+
+vextern BOOL lc[5];
+
+vextern BOOL ident_sim, simflag; /*mark similar residues?*/
+vextern BOOL globalflag; /*mark globally consvd. residues?*/
+vextern int interlines; /*how many lines between blocks*/
+vextern BOOL seqnameflag; /*sequence names to be printed*/
+vextern BOOL seqnumflag; /*position numbers to be printed*/
+vextern BOOL rulerflag; /*print ruler?*/
+vextern BOOL seqconsflag; /*consensus to a master sequence*/
+vextern BOOL hideflag; /*hide master sequence*/
+vextern BOOL masternormal; /*print master sequence all-normal*/
+vextern BOOL dnaflag; /*DNA or proteins to be aligned*/
+vextern BOOL interactflag; /*interaction with user?*/
+vextern BOOL clinflag; /*input filename in commandline?*/
+vextern BOOL cloutflag; /*output filename in commandline?*/
+vextern BOOL clparflag; /*param filename in commandline?*/
+vextern BOOL clsimflag; /*file name for similar residues in cmdline?*/
+vextern BOOL clgrpflag; /*file name for grouping residues in cmdline?*/
+vextern BOOL cltypeflag; /*input file type in commandline?*/
+vextern BOOL cldevflag; /*output device type in comline?*/
+vextern BOOL clconsflag; /*cons requested in commandline?*/
+vextern BOOL clsymbconsflag; /*symbcons defined in commandline?*/
+vextern BOOL clthrflag; /*threshold defined in commandline?*/
+vextern BOOL consflag; /*display consensus line?*/
+vextern BOOL clseqconsflag; /*sequence to compare others to specified
+ in command line?*/
+vextern BOOL splitflag; /*multiple file output?*/
+vextern BOOL numdefflag; /*default numbering?*/
+
+vextern EOLstate EOLmode; /* select EOL code of text output */
+
+vextern BOOL shadeonlyflag; /*write only the shading to PICT file?*/
+vextern char symbcons[3]; /*symbols for consensus*/
+
+vextern double dev_maxx, dev_maxy; /*maximal device coordinates*/
+vextern double dev_miny, dev_minx; /*minimal device coordinates*/
+vextern double dev_ysize,dev_xsize;/*character sizes for device*/
+
+vextern int act_color; /*actual color*/
+vextern int act_page; /*actual page no*/
+
+vextern BOOL landscapeflag;
+
+#define depend_mode "tp"
+extern char depend_err[];
+
+#undef min
+extern int min(int a, int b);
+
+extern BOOL fexist(char *fname);
+extern int indx(char *mainstring, char *substring);
+
+extern MYFILE *outopen(MYFILE *mf, char *fn);
+extern void uwriteln(MYFILE *f, char *fmt, ...);
+
+extern void term_par(char *term);
+
+extern int str2int(void *s);
+extern double str2real(void *s);
+
+extern void save_binpath(char *arg0);
+extern char *get_logical(char *logical);
+
+extern void *Malloc(size_t sze);
+#define Free(p) do { \
+ if ((*(p)) != NULL) { \
+ free(*(p)); \
+ (*(p)) = NULL; \
+ } \
+} while (0)
+
+/*extern void Free(void *p);*/
+
+#undef vextern
+
+#endif /*BX_TYPES_H*/
+
Added: trunk/packages/boxshade/branches/upstream/current/clust160.grp
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/clust160.grp (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/clust160.grp 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,19 @@
+This file is a Amino-acid grouping file for use with NEWBOX.
+Each line contains a set of amino acids which are considered
+'similar' when calculating the consensus. The .SIM file is different
+and is used in colouring residues that are "similar" to a single
+consensus residue.
+This table was taken from ClustalW v1.60
+Other format requirements are the same as for SIMPLIFY.TXT in the
+GCG-package.
+..
+ACST
+NT
+EQ
+NQ
+ED
+KRQH
+GN
+NH
+FY
+IVLM
Added: trunk/packages/boxshade/branches/upstream/current/clust160.sim
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/clust160.sim (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/clust160.sim 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,30 @@
+This file is a Amino-acid similarity file for use with BOX.
+Is resembles the GCG simplify.txt, but similarities contained
+in this file are not automatically set-forming. This means:
+The line
+I LVM means that I is similar to L,V and M and also that
+ L,V,M are similar to I.
+ It does not imply that L is similar to V or to M.
+For achieving this, more lines (the next ones) are necessary.
+Although is seems weird, this feature has been chosen DELIBERATELY
+because I think it could be helpful in some cases.
+Other format requirements are the same as for SIMPLIFY.TXT in the
+GCG-package.
+..
+F YW
+Y WF
+W YF
+I LVM
+L VMI
+V MVI
+R KH
+K HR
+H RK
+G A
+A GS
+T S
+S TA
+D EN
+E DQ
+N QD
+Q NE
Added: trunk/packages/boxshade/branches/upstream/current/dv_all.h
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/dv_all.h (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/dv_all.h 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,39 @@
+/* Header for module bx_dev, generated by p2c */
+#ifndef _DV_ALL_HEADER_
+#define _DV_ALL_HEADER_
+
+#include "bx_types.h"
+#include "bx_read.h"
+
+typedef struct {
+ char *dev;
+ void (*Ask)(void);
+ void (*Init)(double *xpos, double *ypos);
+ void (*Setcolor)(int colno);
+ void (*Charout)(char c, double *xpos, double *ypos);
+ void (*Stringout)(char *s, double *xpos, double *ypos);
+ void (*Newline)(double *xpos, double *ypos);
+ void (*Newpage)(double *xpos, double *ypos);
+ void (*Exit)(void);
+} GraphicsDevice;
+
+extern GraphicsDevice Ansi;
+extern GraphicsDevice Ascii;
+#ifdef oCRT
+extern GraphicsDevice Crt;
+#endif
+extern GraphicsDevice Rtf;
+extern GraphicsDevice Pict;
+extern GraphicsDevice Postscript;
+extern GraphicsDevice Eps;
+extern GraphicsDevice Hpgl;
+extern GraphicsDevice Lj250;
+extern GraphicsDevice Fig;
+extern GraphicsDevice RegisT, RegisP;
+extern GraphicsDevice Vt;
+extern GraphicsDevice Html;
+
+extern void GenericStringOut(char *s, double *xpos, double *ypos);
+
+#endif /* _DV_ALL_HEADER_ */
+
Added: trunk/packages/boxshade/branches/upstream/current/dv_ansi.c
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/dv_ansi.c (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/dv_ansi.c 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,167 @@
+#include "dv_all.h"
+
+#define ESC "\x1b"
+
+static char *pre_reset;
+static char *pre[5];
+
+/*------------------------------------*/
+/* ANSI-Terminal specific section */
+/*------------------------------------*/
+
+static void menu_ansi(char **pre, BOOL *lc, char *txt, char *parstring)
+{
+ char code;
+ char instring[41];
+
+ if (interactflag) {
+ printf("\n-------------------------------------------------------------\n");
+ printf("Enter the text attributes for printing of >%s< residues:\n", txt);
+ printf("Different letters specify renditions,\n"
+ "lowercase choices mean lowercase residues:\n"
+ "(N,n) normal (B,b) bold (U,u) underscore (R,r) reverse\n"
+ "(F,f) flashing (E,e) reverse/bold (L,l) reverse/flashing\n\n"
+ "choose from NnBbUuRrFfEeLl ( * %c * ) : ", parstring[0]);
+ Fgets(instring, 41, stdin);
+ } else
+ *instring = '\0';
+ if (*instring == '\0')
+ code = parstring[0];
+ else
+ code = instring[0];
+ if (strchr("NBURELF", toupper(code)) == NULL)
+ code = 'N';
+ *lc = islower(code);
+ code = toupper(code);
+ switch (code) {
+ case 'N': *pre = ESC "[0m"; break;
+ case 'B': *pre = ESC "[0;1m"; break;
+ case 'U': *pre = ESC "[0;4m"; break;
+ case 'R': *pre = ESC "[0;7m"; break;
+ case 'E': *pre = ESC "[0;1;7m"; break;
+ case 'L': *pre = ESC "[0;5;7m"; break;
+ case 'F': *pre = ESC "[0;5m"; break;
+ }
+}
+
+
+static void ask(char *term)
+{
+ char parstring[6];
+
+ term_par(term);
+ if (interactflag)
+ printf("-------------------------------------------------------------\n");
+ pre_reset = ESC "[0m";
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ menu_ansi(&pre[0], lc, "different", parstring);
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ menu_ansi(&pre[1], &lc[1], "identical", parstring);
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ if (simflag)
+ menu_ansi(&pre[2], &lc[2], "similar", parstring);
+ else {
+ pre[2] = pre[0];
+ lc[2] = lc[0];
+ }
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ if (globalflag)
+ menu_ansi(&pre[3], &lc[3], "conserved", parstring);
+ else {
+ pre[3] = pre[1];
+ lc[3] = lc[1];
+ }
+ pre[4] = ESC "[0m";
+ lc[4] = FALSE;
+ if (!cloutflag) {
+ printf("filename for %s-output (return for terminal) : ", term);
+ gets(outname);
+ }
+}
+
+static void ask_vt(void) {
+ ask("VT");
+}
+
+static void ask_ansi(void) {
+ ask("ANSI");
+}
+
+/* ------------------- output functions */
+
+static void VTinit(double *xpos, double *ypos) {
+ if (*outname == '\0') {
+ outfile.f = stdout;
+ outfile.bin = FALSE;
+ } else
+ assert(outopen(&outfile, outname) != NULL);
+ fputs(ESC "[2J" ESC "[0;0H", outfile.f);
+ fputs(pre_reset, outfile.f);
+ dev_minx = 0.0;
+ dev_miny = 1.0;
+ dev_maxx = 80.0;
+ dev_maxy = 25.0;
+ dev_xsize = 1.0;
+ dev_ysize = 1.0;
+ *xpos = dev_minx;
+ *ypos = dev_miny;
+}
+
+static void VTsetcolor(int colno) {
+ fputs(pre[colno], outfile.f);
+}
+
+static void VTcharout(char c, double *xpos, double *ypos) {
+ putc(c, outfile.f);
+ *xpos += dev_xsize;
+}
+
+static void VTnewline(double *xpos, double *ypos) {
+ uwriteln(&outfile, pre_reset);
+ *xpos = dev_minx;
+ *ypos += dev_ysize;
+}
+
+static void VTnewpage(double *xpos, double *ypos) {
+ printf("\007"); fflush(stdout);
+ scanf("%*[^\n]");
+ getchar();
+ *xpos = dev_minx;
+ *ypos = dev_miny;
+}
+
+static void VTexit(void) {
+ uwriteln(&outfile, pre_reset);
+ if (outfile.f != NULL && outfile.f != stdout)
+ fclose(outfile.f);
+ outfile.f = NULL;
+}
+
+GraphicsDevice Ansi = {
+ "ANSI",
+ ask_ansi,
+ VTinit,
+ VTsetcolor,
+ VTcharout,
+ GenericStringOut,
+ VTnewline,
+ VTnewpage,
+ VTexit
+};
+
+GraphicsDevice Vt = {
+ "VT100",
+ ask_vt,
+ VTinit,
+ VTsetcolor,
+ VTcharout,
+ GenericStringOut,
+ VTnewline,
+ VTnewpage,
+ VTexit
+};
+
Added: trunk/packages/boxshade/branches/upstream/current/dv_ascii.c
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/dv_ascii.c (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/dv_ascii.c 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,135 @@
+#include "dv_all.h"
+
+
+static char acs[5]; /*ASCII sprecific vars*/
+static char ascii_char;
+
+
+/*------------------------------------*/
+/* ASCII specific section */
+/*------------------------------------*/
+
+static void menu_ascii(char *acs, BOOL *lc, char *txt, char *parstring)
+{
+ char code;
+ char instring[41];
+
+ if (interactflag) {
+ printf("\n-------------------------------------------------------------\n"
+ "This output method should only be used in conjunction with\n"
+ "\"shading according to a single sequence\"\n"
+ "Enter the symbol used for printing of >%s< residues:\n", txt);
+ printf("(L,l) the letter itself, in upper- or lower case, respectively\n"
+ "or type any other on-character symbol (like . or - )\n"
+ "the blank-character should be enclosed in quotes\n\n"
+ "type one character ( * %c * ) : ", parstring[0]);
+ Fgets(instring, 41, stdin);
+ } else
+ *instring = '\0';
+ if (strlen(instring) == 3)
+ instring[0] = instring[1];
+ if (*instring == '\0')
+ code = parstring[0];
+ else
+ code = instring[0];
+ *lc = islower(code);
+ code = toupper(code);
+ *acs = code;
+}
+
+
+static void ask_ascii(void)
+{
+ char parstring[6];
+
+ term_par("ASCII");
+ if (interactflag)
+ printf("-------------------------------------------------------------\n");
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ menu_ascii(acs, lc, "different", parstring);
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ menu_ascii(&acs[1], &lc[1], "identical", parstring);
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ if (simflag)
+ menu_ascii(&acs[2], &lc[2], "similar", parstring);
+ else {
+ acs[2] = acs[0];
+ lc[2] = lc[0];
+ }
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ if (globalflag)
+ menu_ascii(&acs[3], &lc[3], "conserved", parstring);
+ else {
+ acs[3] = acs[1];
+ lc[3] = lc[1];
+ }
+ acs[4] = 'L';
+ lc[4] = FALSE;
+ if (!cloutflag) {
+ printf("filename for ASCII-output (return for terminal) : ");
+ gets(outname);
+ }
+}
+
+
+static void ASCinit(double *xpos, double *ypos) {
+ if (*outname == '\0') {
+ outfile.f = stdout;
+ outfile.bin = FALSE;
+ } else
+ assert(outopen(&outfile, outname) != NULL);
+ dev_minx = 0.0;
+ dev_miny = 1.0;
+ dev_maxx = 255.0;
+ dev_maxy = 10000.0;
+ dev_xsize = 1.0;
+ dev_ysize = 1.0;
+ *xpos = dev_minx;
+ *ypos = dev_miny;
+}
+
+static void ASCsetcolor(int colno) {
+ ascii_char = acs[colno];
+}
+
+static void ASCcharout(char c, double *xpos, double *ypos) {
+ if (toupper(ascii_char) == 'L')
+ putc(c, outfile.f);
+ else
+ putc(ascii_char, outfile.f);
+ *xpos += dev_xsize;
+}
+
+static void ASCnewline(double *xpos, double *ypos) {
+ uwriteln(&outfile, "");
+ *xpos = dev_minx;
+ *ypos += dev_ysize;
+}
+
+static void ASCnewpage(double *xpos, double *ypos) {
+ *xpos = dev_minx;
+ *ypos = dev_miny;
+}
+
+static void ASCexit(void) {
+ uwriteln(&outfile, "");
+ if (outfile.f != NULL && outfile.f != stdout)
+ fclose(outfile.f);
+ outfile.f = NULL;
+}
+
+GraphicsDevice Ascii = {
+ "ASCII",
+ ask_ascii,
+ ASCinit,
+ ASCsetcolor,
+ ASCcharout,
+ GenericStringOut,
+ ASCnewline,
+ ASCnewpage,
+ ASCexit
+};
Added: trunk/packages/boxshade/branches/upstream/current/dv_crt.c
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/dv_crt.c (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/dv_crt.c 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,171 @@
+#include "dv_all.h"
+
+#ifdef oCRT
+
+typedef struct crtrecord {
+ byte bgnd, fgnd;
+} crtrecord;
+static crtrecord crtrec[5]; /* CRT-specifics*/
+static struct text_info ti;
+
+#include <conio.h>
+
+/*----------------------------------------*/
+/* CRT specific section */
+/*----------------------------------------*/
+
+static void menu_crt(crtrecord *crtrec, BOOL *lc, char *txt, char *parstring)
+{
+ char code;
+ char instring[41];
+
+ if (interactflag) {
+ printf("\n-------------------------------------------------------------\n"
+ "Enter the text attributes for printing of ***>%s<*** residues:\n",
+ txt);
+ printf("First choose the color/gray-value of the letter ***>background<***\n"
+ "Different letters specify different colors,\n"
+ "(R) red (G) green (U) blue \n"
+ "(B) black (L) light gray\n\n"
+ "choose from RGUYDL ( * %c * ) : ", parstring[0]);
+ Fgets(instring, 41, stdin);
+ } else
+ *instring = '\0';
+ if (*instring == '\0')
+ code = parstring[0];
+ else
+ code = instring[0];
+ code = toupper(code);
+ if (strchr("RGUYDL", code) == NULL)
+ code = 'R';
+ switch (code) {
+ case 'B': crtrec->bgnd = BLACK; break;
+ case 'R': crtrec->bgnd = RED; break;
+ case 'G': crtrec->bgnd = GREEN; break;
+ case 'U': crtrec->bgnd = BLUE; break;
+ case 'L': crtrec->bgnd = LIGHTGRAY; break;
+ }
+ if (interactflag) {
+ printf("\n\nNow choose the color/gray-value of the letter **>foreground<**\n"
+ "lowercase choices mean lowercase letters in the sequence:\n"
+ "(R,r) red (G,g) green (U,u) blue (Y,y) yellow\n"
+ "(B,b) black (W,w) white (D,d) dark gray (L,l) light gray\n\n"
+ "choose from RrGgUuYyBbWwDdLl ( * %c * ) : ", parstring[1]);
+ Fgets(instring, 41, stdin);
+ } else
+ *instring = '\0';
+ if (*instring == '\0')
+ code = parstring[1];
+ else
+ code = instring[0];
+ if (strchr("BWRGUYDL", toupper(code)) == NULL)
+ code = 'B';
+
+ *lc = islower(code);
+
+ code = toupper(code);
+ switch (code) {
+ case 'B': crtrec->fgnd = BLACK; break;
+ case 'W': crtrec->fgnd = WHITE; break;
+ case 'R': crtrec->fgnd = RED; break;
+ case 'G': crtrec->fgnd = GREEN; break;
+ case 'U': crtrec->fgnd = BLUE; break;
+ case 'Y': crtrec->fgnd = YELLOW; break;
+ case 'D': crtrec->fgnd = DARKGRAY; break;
+ case 'L': crtrec->fgnd = LIGHTGRAY; break;
+ }
+}
+
+
+static void ask_crt(void)
+{
+ char parstring[6];
+
+ term_par("CRT");
+ if (interactflag)
+ printf("-------------------------------------------------------------\n");
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ menu_crt(crtrec, lc, "different", parstring);
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ menu_crt(&crtrec[1], &lc[1], "identical", parstring);
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ if (simflag)
+ menu_crt(&crtrec[2], &lc[2], "similar", parstring);
+ else {
+ crtrec[2] = crtrec[0];
+ lc[2] = lc[0];
+ }
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ if (globalflag)
+ menu_crt(&crtrec[3], &lc[3], "conserved", parstring);
+ else {
+ crtrec[3] = crtrec[1];
+ lc[3] = lc[1];
+ }
+ crtrec[4] = crtrec[0];
+ lc[4] = lc[0];
+}
+
+
+static void CRTinit(double *xpos, double *ypos) {
+ gettextinfo(&ti);
+ dev_minx = 0.0;
+ dev_miny = 1.0;
+ dev_maxx = ti.screenwidth;
+ dev_maxy = ti.screenheight;
+ dev_xsize = 1.0;
+ dev_ysize = 1.0;
+ *xpos = dev_minx;
+ *ypos = dev_maxy;
+ textbackground(crtrec[0].bgnd);
+ textcolor(crtrec[0].fgnd);
+ clrscr();
+}
+
+static void CRTsetcolor(int colno) {
+ textbackground(crtrec[colno].bgnd);
+ textcolor(crtrec[colno].fgnd);
+}
+
+static void CRTcharout(char c, double *xpos, double *ypos) {
+ putch(c);
+ *xpos += dev_xsize;
+}
+
+static void CRTnewline(double *xpos, double *ypos) {
+ textbackground(crtrec[0].bgnd);
+ textcolor(crtrec[0].fgnd);
+ cprintf("\r\n");
+ *xpos = dev_minx;
+ *ypos -= dev_ysize;
+}
+
+static void CRTnewpage(double *xpos, double *ypos) {
+ scanf("%*[^\n]");
+ getchar();
+ *xpos = dev_minx;
+ *ypos = dev_miny;
+}
+
+static void CRTexit(void) {
+ normvideo();
+ clreol();
+}
+
+GraphicsDevice Crt = {
+ "CRT",
+ ask_crt,
+ CRTinit,
+ CRTsetcolor,
+ CRTcharout,
+ GenericStringOut,
+ CRTnewline,
+ CRTnewpage,
+ CRTexit
+};
+
+#endif
Added: trunk/packages/boxshade/branches/upstream/current/dv_fig.c
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/dv_fig.c (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/dv_fig.c 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,243 @@
+#include "dv_all.h"
+
+/*--------------------------------------------------------------------------*/
+/* fig specific section */
+/*--------------------------------------------------------------------------*/
+
+typedef struct figrecord {
+ int bgnd, fgnd, fontno;
+} figrecord;
+
+static int fig_fontsize; /* XFIG specifics */
+static int fig_fontno_offset; /* 0=Tms,12=Cour,16=Helv,28=Palat */
+static figrecord figrec[5];
+
+static int fig_fontno; /* current values go here*/
+static int fig_fgnd, fig_bgnd; /* ... to here*/
+
+static void menu_fig(figrecord *figrec, BOOL *lc, char *txt, char *parstring)
+{
+ char code;
+ char instring[51];
+
+ if (interactflag) {
+ printf("\n----------------------------------------------------------------\n"
+ "Enter the text attributes for printing of **>%s<** residues:\n",
+ txt);
+ printf("First choose the color/gray-value of the letter **>background<**\n"
+ "Different letters specify different colors,\n"
+ "(B) black (W) white (1,2,3,4) 4 different gray values, 4 is darkest\n\n"
+ "choose from BW1234 ( * %c * ) : ", parstring[0]);
+ Fgets(instring, 51, stdin);
+ } else
+ *instring = '\0';
+ if (*instring == '\0')
+ code = parstring[0];
+ else
+ code = instring[0];
+ code = toupper(code);
+ if (strchr("BW1234", code) == NULL)
+ code = 'W';
+ switch (code) {
+ case 'B': figrec->bgnd = 21; break;
+ case 'W': figrec->bgnd = 0; break;
+ case '1': figrec->bgnd = 4; break;
+ case '2': figrec->bgnd = 8; break;
+ case '3': figrec->bgnd = 12; break;
+ case '4': figrec->bgnd = 16; break;
+ }
+ if (interactflag) {
+ printf("\n\nNow choose the color/gray-value of the letter **>foreground<**\n"
+ "lowercase choices mean lowercase letters in the sequence:\n"
+ "(B,b) black,normal (E,e) black, emphasized\n"
+ "(W,w) white normal (F,f) white, emphasized\n"
+ "(L,l) Blue (M,m) Magenta (Y,y) Yellow (G,g) Green (R,r) Red\n\n"
+ "choose from BbEeWwFfLlMmYyGgRr ( * %c * ) : ", parstring[1]);
+ Fgets(instring, 51, stdin);
+ } else
+ *instring = '\0';
+ if (*instring == '\0')
+ code = parstring[1];
+ else
+ code = instring[0];
+ if (strchr("BEWFLMYGR", toupper(code)) == NULL)
+ code = 'B';
+ *lc = islower(code);
+ code = toupper(code);
+ switch (code) {
+ case 'B':
+ figrec->fgnd = 0;
+ figrec->fontno = 0;
+ break;
+ case 'E':
+ figrec->fgnd = 0;
+ figrec->fontno = 2;
+ break;
+ case 'W':
+ figrec->fgnd = 7;
+ figrec->fontno = 0;
+ break;
+ case 'F':
+ figrec->fgnd = 7;
+ figrec->fontno = 2;
+ break;
+ case 'L':
+ figrec->fgnd = 1;
+ figrec->fontno = 0;
+ break;
+ case 'M':
+ figrec->fgnd = 5;
+ figrec->fontno = 0;
+ break;
+ case 'Y':
+ figrec->fgnd = 6;
+ figrec->fontno = 0;
+ break;
+ case 'G':
+ figrec->fgnd = 2;
+ figrec->fontno = 0;
+ break;
+ case 'R':
+ figrec->fgnd = 4;
+ figrec->fontno = 0;
+ break;
+ }
+}
+
+
+static void ask_fig(void)
+{
+ char parstring[6];
+ char instring[41];
+
+ term_par("FIG");
+ if (interactflag)
+ printf("-------------------------------------------------------------\n");
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ menu_fig(&figrec[0], &lc[0], "different", parstring);
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ menu_fig(&figrec[1], &lc[1], "identical", parstring);
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ if (simflag)
+ menu_fig(&figrec[2], &lc[2], "similar", parstring);
+ else {
+ figrec[2] = figrec[0];
+ lc[2] = lc[0];
+ }
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ if (globalflag)
+ menu_fig(&figrec[3], &lc[3], "conserved", parstring);
+ else {
+ figrec[3] = figrec[1];
+ lc[3] = lc[1];
+ }
+ figrec[4].bgnd = 0;
+ figrec[4].fgnd = 0;
+ figrec[4].fontno = 0;
+ lc[4] = FALSE;
+
+ fscanf(parfile, "%d%*[^\n]", &fig_fontno_offset);
+ getc(parfile);
+ fscanf(parfile, "%d%*[^\n]", &fig_fontsize);
+ getc(parfile);
+ if (interactflag) {
+ do {
+ printf("Character size in Points ( * %4d * ) : ", fig_fontsize);
+ Fgets(instring, 41, stdin);
+ if (*instring != '\0')
+ fig_fontsize = str2int((void *)instring);
+ } while (fig_fontsize < 1 || fig_fontsize > 100);
+ }
+ if (!cloutflag) {
+ printf("name of fig-file : ");
+ gets(outname);
+ }
+}
+
+
+static void FIGinit(double *xpos, double *ypos) {
+ assert(outopen(&outfile, outname) != NULL);
+ dev_minx = fig_fontsize * 4.0;
+ dev_miny = fig_fontsize * 4.0;
+ dev_maxx = 10000.0;
+ dev_maxy = 10000.0;
+ dev_xsize = fig_fontsize + 1.0;
+ dev_ysize = fig_fontsize;
+ *xpos = dev_minx;
+ *ypos = dev_miny;
+ uwriteln(&outfile, "#FIG 2.1");
+ uwriteln(&outfile, "80 2");
+}
+
+static void FIGsetcolor(int colno) {
+ dev_xsize = fig_fontsize + 1.0;
+ fig_fontno = fig_fontno_offset + figrec[colno].fontno;
+ fig_fgnd = figrec[colno].fgnd;
+ fig_bgnd = figrec[colno].bgnd;
+}
+
+static void FIGcharout(char c, double *xpos, double *ypos) {
+
+ if (fig_bgnd > 0) { /*draw box*/
+ double bxshift, byshift;
+ int bx1, by1, bx2, by2;
+
+ bxshift = fig_fontsize * 0.25;
+ byshift = fig_fontsize * 0.15;
+ bx1 = (int)(*xpos + 0.5 - bxshift);
+ bx2 = (int)(*xpos + dev_xsize + 0.5 - bxshift);
+ by2 = (int)(*ypos + 0.5 + byshift);
+ by1 = (int)(*ypos - dev_ysize + 0.5 + byshift);
+
+ /*compound object*/
+ uwriteln(&outfile, "6 %5d%5d%5d%5d", bx2, by1, bx1, by2);
+ uwriteln(&outfile, "2 2 0 0 0 5 0 " /*box*/
+ "%3d 0.0 0 0 0", fig_bgnd);
+ fprintf(outfile.f, "\t ");
+ fprintf(outfile.f, "%5d%5d%5d%5d%5d%5d", bx2, by2, bx2, by1, bx1, by1);
+ uwriteln(&outfile, "%5d%5d%5d%5d 9999 9999", bx1, by2, bx2, by2);
+ }
+
+ fprintf(outfile.f, "4 0 %2d%3d", fig_fontno, fig_fontsize);
+ fprintf(outfile.f, " 0 %2d 0 0.0 4 ", fig_fgnd);
+ fprintf(outfile.f, "%3ld%3ld",(long)(dev_ysize+0.5), (long)(dev_xsize+0.5));
+ fprintf(outfile.f, "%5ld%5ld %c",(long)(*xpos+0.5), (long)(*ypos+0.5), c);
+ uwriteln(&outfile, "\001");
+
+ if (fig_bgnd > 0) /*end of compound*/
+ uwriteln(&outfile, "-6");
+
+ *xpos += dev_xsize;
+}
+
+static void FIGnewline(double *xpos, double *ypos) {
+ *xpos = dev_minx;
+ *ypos += dev_ysize;
+}
+
+static void FIGnewpage(double *xpos, double *ypos) {
+ /* this should never happen*/
+ FIGnewline(xpos, ypos);
+}
+
+static void FIGexit(void) {
+ if (outfile.f != NULL)
+ fclose(outfile.f);
+ outfile.f = NULL;
+}
+
+GraphicsDevice Fig = {
+ "fig",
+ ask_fig,
+ FIGinit,
+ FIGsetcolor,
+ FIGcharout,
+ GenericStringOut,
+ FIGnewline,
+ FIGnewpage,
+ FIGexit
+};
Added: trunk/packages/boxshade/branches/upstream/current/dv_hpgl.c
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/dv_hpgl.c (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/dv_hpgl.c 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,348 @@
+#include "dv_all.h"
+
+#include <stdarg.h>
+
+/*----------------------------------------*/
+/* HPGL specific section */
+/*----------------------------------------*/
+
+typedef struct hpglrecord {
+ char *hatch;
+ int bgnd, fgnd;
+} hpglrecord;
+
+static hpglrecord hpglrec[5]; /* HPGL-specifics*/
+static double hpglcell; /* character cell size */
+static int actcol; /* actual color No. */
+static int hpglpen; /* actual pen No. (1-8/0) */
+static char *hpglhatch; /* actual hatch type */
+
+#define HATCHES 4
+static char *hatches[HATCHES] = { "", "3,0.8,45", "4,0.8,0", "1" };
+
+/* -------------- VERY simple output optimizer */
+
+typedef struct {
+ char c;
+ byte col;
+ float px, py;
+} STORE;
+
+#define MAX_STORE 256
+
+static STORE store[MAX_STORE];
+static int store_idx = 0;
+static int print_len = 0;
+
+static char buf[100];
+static void print(char *fmt, ...) {
+ va_list argptr;
+ int len;
+
+ va_start(argptr, fmt);
+ len = vsprintf(buf, fmt, argptr);
+ va_end(argptr);
+ if (print_len+len > 78) {
+ uwriteln(&outfile, "");
+ print_len = 0;
+ }
+ fprintf(outfile.f, "%s", buf);
+ print_len += len;
+}
+
+
+/* select a new pen */
+static int select_pen(int pen) {
+ if (pen != hpglpen) {
+ hpglpen = pen;
+ print("SP%d;", hpglpen);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+/* write out all stored characters */
+static void flush_fg(int pen) {
+ int idx;
+
+ for (idx = 0; idx < store_idx; ++idx) {
+ if ( store[idx].c != ' '
+ && hpglrec[store[idx].col].fgnd == pen ) {
+ select_pen(pen);
+ print("PU%1.2f,%1.2f;", store[idx].px, store[idx].py);
+ print("LB%c\003;", store[idx].c);
+ }
+ }
+}
+
+/* draw all saved background shadings */
+static void flush_bg(int pen) {
+ int idx, h;
+
+ if (pen <= 0) return;
+ for (idx = 0; idx < store_idx; ++idx) {
+ if (hpglrec[store[idx].col].bgnd != pen) continue;
+ for (h = 0; h < HATCHES; ++h) {
+ if (hpglrec[store[idx].col].hatch == hatches[h]) {
+ double act_x = store[idx].px - dev_xsize/8;
+ double act_y = store[idx].py - dev_ysize/4;
+ select_pen(pen);
+ print("PU%1.2f,%1.2f;", act_x, act_y);
+ if (hatches[h] != hpglhatch) {
+ hpglhatch = hatches[h];
+ print("FT%s;", hpglhatch);
+ }
+ print("RR%1.2f,%1.2f;", dev_xsize, dev_ysize);
+ }
+ }
+ }
+}
+
+/* save stored character cells */
+static void store_flush(void) {
+ int p, sp;
+
+ /* first background */
+ sp = hpglpen;
+ flush_bg(sp); /* actual pen first */
+ for (p=1; p < 10; ++p)
+ if (p!=sp)
+ flush_bg(p);
+
+ /* then foreground */
+ sp = hpglpen;
+ flush_fg(sp); /* actual pen first */
+ for (p=0; p < 10; ++p)
+ if (p!=sp)
+ flush_fg(p);
+
+ store_idx = 0;
+}
+
+/* save a character for optimizing HPGL output */
+static void store_char(char c, int col, double px, double py) {
+ store[store_idx].c = c;
+ store[store_idx].px = (float) px;
+ store[store_idx].py = (float) py;
+ store[store_idx].col= (byte) col;
+ ++store_idx;
+ if (store_idx == MAX_STORE)
+ store_flush();
+}
+
+/* - - - - - - - - - - - - - - */
+
+static void menu_hpgl(hpglrecord *hpglrec, BOOL *lc, char *txt, char *parstring)
+{
+ char code1, code2;
+ char instring[41];
+
+ if (interactflag) {
+ printf("\n-------------------------------------------------------------\n"
+ "Enter the text attributes for printing of **>%s<** residues:\n", txt);
+ printf("First choose color and hatching type of the letter **>background<**\n"
+ "NUMBERS specify plotter Pens,\n"
+ "LETTERS specify hatching types.\n"
+ "input has to be composed of a number and a letter\n"
+ "1-9, 0 : PEN No. (0 means no background)\n"
+ "(N) : no hatching (S) : slash\n"
+ "(C) : crosshatch (F) : fill\n\n"
+ "choose a number and a letter ( * %c%c * ) : ",
+ parstring[0], parstring[1]);
+ Fgets(instring, 41, stdin);
+ } else
+ *instring = '\0';
+ if (*instring == '\0') {
+ code1 = parstring[0];
+ code2 = parstring[1];
+ } else {
+ code1 = instring[0];
+ code2 = instring[1];
+ }
+ code1 = toupper(code1);
+ code2 = toupper(code2);
+ if (strchr("NSCF", code2) == NULL)
+ code2 = 'N';
+ switch (code2) {
+ case 'N':
+ hpglrec->hatch = hatches[0];
+ break;
+ case 'S':
+ hpglrec->hatch = hatches[1];
+ break;
+ case 'C':
+ hpglrec->hatch = hatches[2];
+ break;
+ case 'F':
+ hpglrec->hatch = hatches[3];
+ break;
+ }
+ hpglrec->bgnd = code1-'0';
+ if (interactflag) {
+ printf("\n\nEnter the text attributes for printing of **>%s<** residues:\n",
+ txt);
+ printf("Now choose color and case of the letter **>foreground<**\n"
+ "NUMBERS specify plotter Pens,\n"
+ "A letter \"n\" behind the number means \"normal printing\"\n"
+ "A letter \"l\" behind the number means \"lowercase printing\"\n"
+ "1-9, 0 : PEN No. (0 means no printing)\n"
+ "e.g. \"1n\" means : PEN #1 is to be used\n"
+ "e.g. \"2l\" means : PEN #2 and lowercase types are to be used\n\n"
+ "choose a number and a letter ( * %c%c * ) : ",
+ parstring[2], parstring[3]);
+ Fgets(instring, 41, stdin);
+ } else
+ *instring = '\0';
+ if (*instring == '\0') {
+ code1 = parstring[2];
+ code2 = parstring[3];
+ } else {
+ code1 = instring[0];
+ code2 = instring[1];
+ }
+ if (code2 == 'L' || code2 == 'l')
+ *lc = TRUE;
+ else
+ *lc = FALSE;
+ hpglrec->fgnd = code1 - '0';
+}
+
+
+static void ask_hpgl(void)
+{
+ char parstring[6];
+ char instring[41];
+
+ term_par("HPGL");
+ if (interactflag)
+ printf(
+ "-----------------------------------------------------------------------\n");
+ Fgets(parstring, 6, parfile);
+ parstring[4] = '\0';
+ menu_hpgl(hpglrec, lc, "different", parstring);
+ Fgets(parstring, 6, parfile);
+ parstring[4] = '\0';
+ menu_hpgl(&hpglrec[1], &lc[1], "identical", parstring);
+ Fgets(parstring, 6, parfile);
+ parstring[4] = '\0';
+ if (simflag)
+ menu_hpgl(&hpglrec[2], &lc[2], "similar", parstring);
+ else {
+ hpglrec[2] = hpglrec[0];
+ lc[2] = lc[0];
+ }
+ Fgets(parstring, 6, parfile);
+ parstring[4] = '\0';
+ if (globalflag)
+ menu_hpgl(&hpglrec[3], &lc[3], "conserved", parstring);
+ else {
+ hpglrec[3] = hpglrec[1];
+ lc[3] = lc[1];
+ }
+ hpglrec[4].bgnd = 0;
+ hpglrec[4].hatch = hatches[0];
+ hpglrec[4].fgnd = hpglrec[0].fgnd;
+ lc[4] = FALSE;
+ fscanf(parfile, "%lg%*[^\n]", &hpglcell);
+ getc(parfile);
+ Fgets(parstring, 6, parfile);
+ if (parstring[0] == 'Y' || parstring[0] == 'y')
+ landscapeflag = TRUE;
+ else
+ landscapeflag = FALSE;
+ if (interactflag) {
+ do {
+ printf("Character size in Points ( * %4.1f * ) : ", hpglcell);
+ Fgets(instring, 41, stdin);
+ if (*instring != '\0')
+ hpglcell = str2int((void *)instring);
+ } while (hpglcell < 1 || hpglcell > 100);
+ printf("Rotate plot ( * %c * ) : ", YESNO(landscapeflag));
+ Fgets(instring, 41, stdin);
+ if (*instring != '\0') {
+ if (instring[0] == 'Y' || instring[0] == 'y')
+ landscapeflag = TRUE;
+ else
+ landscapeflag = FALSE;
+ }
+ }
+ if (!cloutflag) {
+ printf("filename for HPGL-output : ");
+ gets(outname);
+ }
+}
+
+
+static void HPGLinit(double *xpos, double *ypos) {
+ double xd, yd;
+
+ if (landscapeflag) {
+ dev_minx = 10.75; /* borders of a A4 page in mm */
+ dev_miny = 5.0;
+ dev_maxx = 260.75;
+ dev_maxy = 185.0;
+ } else {
+ dev_minx = 5.0; /* borders of a A4 page in mm */
+ dev_miny = 10.75;
+ dev_maxx = 185.0;
+ dev_maxy = 260.75;
+ }
+ dev_xsize = hpglcell * 0.351;
+ dev_ysize = hpglcell * 0.351 * 2.0 / 1.5;
+ hpglpen = 0;
+ hpglhatch = hatches[0];
+ *xpos = dev_minx;
+ *ypos = dev_maxy; /* 0,0 is lower left corner */
+ assert(outopen(&outfile, outname) != NULL);
+ xd = dev_xsize * 100 / 1.5 / (dev_maxx - dev_minx);
+ yd = dev_ysize * 100 / 2.0 / (dev_maxy - dev_miny);
+ print("IN;%sIP;SI%5.3f;", (landscapeflag?"RO 90;":""), hpglcell*0.351);
+ print("SC%1.2f,%1.2f,%1.2f,%1.2f;", dev_minx,dev_maxx, dev_miny,dev_maxy);
+ print("SR%1.4f,%1.4f;", xd, yd);
+ uwriteln(&outfile, "PU;");
+ print_len = 0;
+}
+
+static void HPGLsetcolor(int colno) {
+ actcol = colno;
+}
+
+static void HPGLcharout(char c, double *xpos, double *ypos) {
+ store_char(c, actcol, *xpos, *ypos);
+ *xpos += dev_xsize;
+}
+
+static void HPGLnewline(double *xpos, double *ypos) {
+ *xpos = dev_minx;
+ *ypos -= dev_ysize;
+}
+
+static void HPGLnewpage(double *xpos, double *ypos) {
+ store_flush();
+ uwriteln(&outfile, "PG");
+ print_len = 0;
+ *xpos = dev_minx;
+ *ypos = dev_maxy;
+ print("PU;");
+}
+
+static void HPGLexit(void) {
+ store_flush();
+ uwriteln(&outfile, "PG");
+ print_len = 0;
+ if (outfile.f != NULL)
+ fclose(outfile.f);
+ outfile.f = NULL;
+}
+
+GraphicsDevice Hpgl = {
+ "HPGL",
+ ask_hpgl,
+ HPGLinit,
+ HPGLsetcolor,
+ HPGLcharout,
+ GenericStringOut,
+ HPGLnewline,
+ HPGLnewpage,
+ HPGLexit
+};
Added: trunk/packages/boxshade/branches/upstream/current/dv_html.c
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/dv_html.c (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/dv_html.c 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,306 @@
+#include "dv_all.h"
+#include "version.h"
+#include <math.h>
+#include <time.h>
+#include <stdarg.h>
+
+/*----------------------------------------*/
+/* POSTSCRIPT specific section */
+/*----------------------------------------*/
+
+typedef struct {
+ double r, g, b;
+} RGB;
+
+typedef struct {
+ RGB fg, bg;
+} HTMLrecord;
+
+
+static HTMLrecord html[5]; /* POSTSCRIPT-specifics*/
+static int open_TR = FALSE;
+static int open_TABLE = FALSE;
+static int Col;
+
+static void Gray(RGB *rgb, double gray) {
+ rgb->r = gray;
+ rgb->g = gray;
+ rgb->b = gray;
+}
+
+static void Rgb(RGB *rgb, double r, double g, double b) {
+ rgb->r = r;
+ rgb->g = g;
+ rgb->b = b;
+}
+
+static void Code2Color(char code, RGB *rgb) {
+ switch (code) {
+ case 'W': Gray(rgb, 1.0); break;
+ case '1':
+ case '5': Gray(rgb, 0.8);
+ break;
+ case '2':
+ case '6': Gray(rgb, 0.6);
+ break;
+ case '3':
+ case '7': Gray(rgb, 0.4);
+ break;
+ case '4':
+ case '8': Gray(rgb, 0.2);
+ break;
+ case 'B': Gray(rgb, 0.0); break;
+ case 'R': Rgb(rgb, 1.0, 0.0, 0.0); break;
+ case 'G': Rgb(rgb, 0.0, 1.0, 0.0); break;
+ case 'L': Rgb(rgb, 0.0, 0.0, 1.0); break;
+ case 'Y': Rgb(rgb, 1.0, 1.0, 0.0); break;
+ case 'M': Rgb(rgb, 1.0, 0.0, 1.0); break;
+ case 'C': Rgb(rgb, 0.0, 1.0, 1.0); break;
+ }
+}
+
+static void menu_HTML(HTMLrecord *html, BOOL *lc, char *txt, char *parstring)
+{
+ char code;
+ char instring[41];
+
+ if (interactflag) {
+ printf("\n----------------------------------------------------------------\n"
+ "Enter the text attributes for printing of **>%s<** residues:\n", txt);
+ printf("First choose the color/gray-value of the letter **>background<**\n"
+ "Different letters specify different colors,\n"
+ "(B) Black, (W) white (1,2,3,4) 4 different gray values, 4 is darkest\n"
+ "(R) Red, (G) Green, (L) Blue, (Y) Yellow, (M) Magenta, (C) Cyan\n\n"
+ "choose from BWRGLYMC1234 ( * %c * ) : ", parstring[0]);
+ Fgets(instring, 41, stdin);
+ } else
+ *instring = '\0';
+ if (*instring == '\0')
+ code = parstring[0];
+ else
+ code = instring[0];
+ code = toupper(code);
+ if (strchr( "BWRGLYMC1234", code) == NULL)
+ code = 'W';
+
+ Code2Color(code, &(html->bg));
+
+ if (interactflag) {
+ printf("\n\nNow choose the color/gray-value of the letter **>foreground<**\n"
+ "lowercase choices mean lowercase letters in the sequence:\n"
+ "(B,b) black (W,w) white (1,2,3,4) 4 different gray values, 4 is darkest\n"
+ "(R,r) red (G,g) green (5,6,7,8) same, but lowercase letters\n"
+ "(L,l) blue (Y,y) yellow (M,m) magenta (C,c) cyan\n\n"
+ "choose from BbWwRrGgLlYyMmCc12345678 ( * %c * ) : ", parstring[1]);
+ Fgets(instring, 41, stdin);
+ } else
+ *instring = '\0';
+ if (*instring == '\0')
+ code = parstring[1];
+ else
+ code = instring[0];
+ if (strchr("BbWwRrGgLlYyMmCc12345678", code) == NULL)
+ code = 'B';
+
+ switch (code) {
+ case '1' :
+ case '2' :
+ case '3' :
+ case '4' : *lc = FALSE;
+ break;
+ case '5' :
+ case '6' :
+ case '7' :
+ case '8' : *lc = TRUE;
+ break;
+ default : *lc = islower(code);
+ break;
+ }
+
+ code = toupper(code);
+
+ Code2Color(code, &(html->fg));
+}
+
+static void Ask(void)
+{
+ char parstring[6];
+
+ if (interactflag)
+ printf("----------------------------------------------------------------\n");
+ term_par("HTML");
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ menu_HTML(&html[0], &lc[0], "different", parstring);
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ menu_HTML(&html[1], &lc[1], "identical", parstring);
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ if (simflag)
+ menu_HTML(&html[2], &lc[2], "similar", parstring);
+ else {
+ html[2] = html[0];
+ lc[2] = lc[0];
+ }
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ if (globalflag)
+ menu_HTML(&html[3], &lc[3], "conserved", parstring);
+ else {
+ html[3] = html[1];
+ lc[3] = lc[1];
+ }
+ Gray(&html[4].bg, 1.0);
+ Gray(&html[4].fg, 0.0);
+ lc[4] = FALSE;
+
+ if (!cloutflag)
+ do {
+ printf("filename for HTML-output : ");
+ gets(outname);
+ } while (*outname == '\0');
+}
+
+#define col255(cv) ((int)(255.0*(cv)))
+
+static void ColWrite(RGB *rgb) {
+ fprintf(outfile.f, "\"#%02X%02X%02X\"", col255(rgb->r), col255(rgb->g), col255(rgb->b));
+}
+
+static int coleq(RGB *c1, RGB *c2) {
+ return (col255(c1->r) == col255(c2->r))
+ && (col255(c1->g) == col255(c2->g))
+ && (col255(c1->b) == col255(c2->b));
+}
+
+#define isBG(rgb) coleq((rgb),&html[4].bg)
+#define isTC(rgb) coleq((rgb),&html[4].fg)
+
+static void StartTR(void) {
+ if (!open_TR) {
+ uwriteln(&outfile, "<tr align=center>");
+ open_TR = TRUE;
+ }
+}
+
+static void CloseTR(void) {
+ if (open_TR) {
+ uwriteln(&outfile, "</tr>");
+ open_TR = FALSE;
+ }
+}
+
+static void StartTable(void) {
+ uwriteln(&outfile, "<table border=0 cellspacing=0 CELLPADDING=0>");
+ open_TR = FALSE;
+ open_TABLE = TRUE;
+}
+
+static void CloseTable(void) {
+ CloseTR();
+ if (open_TABLE) {
+ uwriteln(&outfile, "</table>");
+ open_TABLE = FALSE;
+ }
+}
+
+static void dv_Init(double *xpos, double *ypos) {
+ dev_minx = 0.0;
+ dev_miny = 0.0;
+ dev_maxx = 1000.0;
+ dev_maxy = 10000.0;
+ dev_xsize = 1.0;
+ dev_ysize = 1.0;
+ *xpos = dev_minx;
+ *ypos = dev_maxy - dev_ysize;
+ lines_per_page = (int)((dev_maxy - dev_miny) / dev_ysize);
+ assert( outopen(&outfile, outname) != NULL);
+
+ uwriteln(&outfile, "<html>");
+ uwriteln(&outfile, "<head>");
+ uwriteln(&outfile, "<title>BoxShade " BOXSHADE_ver " Output</title>");
+ uwriteln(&outfile, "</head>");
+ fprintf(outfile.f, "<body BGCOLOR=");
+ ColWrite(&html[4].bg);
+ fprintf(outfile.f, " TEXT=");
+ ColWrite(&html[4].fg);
+ uwriteln(&outfile, ">");
+}
+
+static void Setcolor(int colno) {
+ Col = colno;
+}
+
+static void StrgChar(int ch, char *s, double *xpos, double *ypos) {
+ char *fc = "";
+ if (!open_TABLE) StartTable();
+ StartTR();
+ fprintf(outfile.f, "<td%s", (s != NULL ? " align=left": "") );
+ if (!isBG(&html[Col].bg)) {
+ fprintf(outfile.f, " BGCOLOR=");
+ ColWrite(&html[Col].bg);
+ }
+ fprintf(outfile.f, ">");
+ if (!isTC(&html[Col].fg)) {
+ fprintf(outfile.f, "<FONT COLOR=");
+ ColWrite(&html[Col].fg);
+ fprintf(outfile.f, ">");
+ fc = "</FONT>";
+ }
+ if (s == NULL) {
+ if (ch != ' ') fprintf(outfile.f, "%c%s", ch, fc);
+ else fprintf(outfile.f, " %s", fc);
+ *xpos += dev_xsize;
+ } else {
+ fprintf(outfile.f, "%s%s ", s, fc);
+ *xpos += strlen(s)*dev_xsize;
+ }
+ uwriteln(&outfile, "</TD>");
+}
+
+static void Charout(char c, double *xpos, double *ypos) {
+ StrgChar(c, NULL, xpos, ypos);
+}
+
+static void Stringout(char *s, double *xpos, double *ypos) {
+ StrgChar('\0', s, xpos, ypos);
+}
+
+static void Newline(double *xpos, double *ypos) {
+ if (!open_TR) {
+ StartTR();
+ uwriteln(&outfile, "<td> </td>");
+ }
+ CloseTR();
+ *xpos = dev_minx;
+ *ypos -= dev_ysize;
+}
+
+static void Newpage(double *xpos, double *ypos) {
+ Newline(xpos, ypos);
+ *xpos = dev_minx;
+ *ypos = dev_maxy - dev_ysize;
+}
+
+static void dv_Exit(void) {
+ CloseTR();
+ CloseTable();
+ uwriteln(&outfile, "</body>");
+ uwriteln(&outfile, "</html>");
+ if (outfile.f != NULL)
+ fclose(outfile.f);
+ outfile.f = NULL;
+}
+
+GraphicsDevice Html = {
+ "HTML",
+ Ask,
+ dv_Init,
+ Setcolor,
+ Charout,
+ Stringout,
+ Newline,
+ Newpage,
+ dv_Exit
+};
Added: trunk/packages/boxshade/branches/upstream/current/dv_lj250.c
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/dv_lj250.c (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/dv_lj250.c 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,138 @@
+#include "dv_all.h"
+
+#define CMD "\x9b"
+
+static char *pre_reset;
+static char *pre[5];
+
+/*--------------------------------------------------------------------------*/
+/* LJ250 specific section */
+/*--------------------------------------------------------------------------*/
+
+static void menu_lj250(char **pre, BOOL *lc, char *txt, char *parstring)
+{
+ char code;
+ char instring[51];
+
+ if (interactflag) {
+ printf("\n"
+ "-------------------------------------------------------------\n"
+ "Enter the text attributes for printing of >%s< residues:\n", txt);
+ printf("Different letters specify different colors,\n"
+ "lowercase choices mean lowercase residues:\n"
+ "(B,b) black,normal (E,e) black, emphasized (L,l) Blue\n"
+ "(C,c) Cyan (M,m) Magenta (Y,y) Yellow (G,g) Green (R,r) Red\n\n"
+ "choose from BbEeLlCcMmYyGgRr (* %c *) : ", parstring[0]);
+ Fgets(instring, 51, stdin);
+ } else
+ *instring = '\0';
+ if (*instring == '\0')
+ code = parstring[0];
+ else
+ code = instring[0];
+ if (strchr("BELCMYGR", toupper(code)) == NULL)
+ code = 'B';
+ *lc = islower(code);
+ code = tolower(code);
+ switch (code) {
+ case 'b': *pre = CMD "0m"; break;
+ case 'e': *pre = CMD "0;1m"; break;
+ case 'l': *pre = CMD "0;34m"; break;
+ case 'c': *pre = CMD "0;36m"; break;
+ case 'm': *pre = CMD "0;35m"; break;
+ case 'y': *pre = CMD "0;33m"; break;
+ case 'g': *pre = CMD "0;32m"; break;
+ case 'r': *pre = CMD "0;31m"; break;
+ }
+}
+
+
+static void ask_lj250(void)
+{
+ char parstring[6];
+
+ term_par("LJ250");
+ if (interactflag)
+ printf("-------------------------------------------------------------\n");
+ pre_reset = CMD "0m";
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ menu_lj250(&pre[0], lc, "different", parstring);
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ menu_lj250(&pre[1], &lc[1], "identical", parstring);
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ if (simflag)
+ menu_lj250(&pre[2], &lc[2], "similar", parstring);
+ else {
+ pre[2] = pre[0];
+ lc[2] = lc[0];
+ }
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ if (globalflag)
+ menu_lj250(&pre[3], &lc[3], "conserved", parstring);
+ else {
+ pre[3] = pre[1];
+ lc[3] = lc[1];
+ }
+ pre[4] = CMD "0m";
+ lc[4] = FALSE;
+ if (!cloutflag) {
+ printf("name of print-file : ");
+ gets(outname);
+ }
+}
+
+static void LJinit(double *xpos, double *ypos) {
+ assert(outopen(&outfile, outname) != NULL);
+ fputs(pre_reset, outfile.f);
+ dev_minx = 0.0;
+ dev_miny = 1.0;
+ dev_maxx = 80.0;
+ dev_maxy = 63.0;
+ dev_xsize = 1.0;
+ dev_ysize = 1.0;
+ *xpos = dev_minx;
+ *ypos = dev_miny;
+}
+
+static void LJsetcolor(int colno) {
+ fputs(pre[colno], outfile.f);
+}
+
+static void LJcharout(char c, double *xpos, double *ypos) {
+ putc(c, outfile.f);
+ *xpos += dev_xsize;
+}
+
+static void LJnewline(double *xpos, double *ypos) {
+ uwriteln(&outfile, "");
+ *xpos = dev_minx;
+ *ypos += dev_ysize;
+}
+
+static void LJnewpage(double *xpos, double *ypos) {
+ uwriteln(&outfile, "\f");
+ *xpos = dev_minx;
+ *ypos = dev_miny;
+}
+
+static void LJexit(void) {
+ if (outfile.f != NULL)
+ fclose(outfile.f);
+ outfile.f = NULL;
+}
+
+GraphicsDevice Lj250 = {
+ "LJ250",
+ ask_lj250,
+ LJinit,
+ LJsetcolor,
+ LJcharout,
+ GenericStringOut,
+ LJnewline,
+ LJnewpage,
+ LJexit
+};
Added: trunk/packages/boxshade/branches/upstream/current/dv_pict.c
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/dv_pict.c (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/dv_pict.c 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,429 @@
+#include "dv_all.h"
+
+/*----------------------------------------*/
+/* PICTfile specific section */
+/*----------------------------------------*/
+
+#define CHR static char
+
+CHR *StrBlack = "\001\0\0\0\0\0\0";
+CHR *StrWhite = "\002\377\377\377\377\377\377"; /* \377 = 255 */
+CHR *StrGrey1 = "\003\335\335\335\335\335\335"; /* \335 = 221 */
+CHR *StrGrey2 = "\004\273\273\273\273\273\273"; /* \273 = 187 */
+CHR *StrGrey3 = "\005\210\210\210\210\210\210"; /* \210 = 136 */
+CHR *StrGrey4 = "\006\125\125\125\125\125\125"; /* \125 = 85 */
+CHR *StrRed = "\007\377\377\063\063\0\0"; /* \377 = 255, \063 = 51 */
+CHR *StrPurple = "\010\231\231\0\0\314\314"; /* \231 = 153, \314 = 204 */
+CHR *StrDBlue = "\011\0\0\0\0\335\335"; /* \335 = 221 */
+CHR *StrLBlue = "\012\146\146\377\377\377\377"; /* \146 = 102, \377 = 255 */
+CHR *StrGreen = "\013\0\0\210\210\0\0"; /* \210 = 136 */
+CHR *StrYellow = "\014\377\377\377\377\0\0"; /* \377 = 255 */
+CHR *StrMagenta= "\015\377\377\0\0\231\231"; /* \377 = 255, \231 = 153 */
+
+CHR *StrHeaderOp = "\0\021\002\377\014\0\377\377\377\377";
+
+CHR *LongTextOp = "\0\050"; /* \050 = 40 */
+CHR *RGBfgndOp = "\0\032"; /* \032 = 26 */
+CHR *EndPicOp = "\0\377"; /* \377 = 255 */
+CHR *PaintRectOp= "\0\061"; /* \061 = 49 */
+
+CHR *StrHiLiteClip = "\0\036\0\001\0\012"; /* \036 = 30; \001 = 1, \012 = 10 */
+
+CHR *StrCourierBold=
+ "\0\054\0\012\0\026\007" /* \054 = 44, \012 = 10, \026 = 22 */
+ "Courier"
+ "\0\003\0\026\0\004\001\0\0\015\0"; /* \026 = 22, \015 = 13 */
+
+typedef struct PictRec {
+ char *bgnd, *fgnd;
+} PictRec;
+
+static PictRec pict[5]; /*PICTfile specifics*/
+
+static int pictcell; /*PICT files allow only integer values for char size*/
+static char CurrentColour;
+static PictRec *WantedColour;
+static int WantedColNo, xshift, yshift, pcount;
+static char StrFormat[8];
+static char StrFormat2[16];
+
+static FILE *outf = NULL;
+
+static void menu_pictfile(PictRec *pict, BOOL *lc, char *txt, char *parstring)
+{
+ char code;
+ char instring[41];
+
+ if (interactflag) {
+ printf("\n----------------------------------------------------------------\n"
+ "Enter the text attributes for printing of **>%s<** residues:\n", txt);
+ printf("First choose the color/gray-value of the letter **>background<**\n"
+ "Different letters specify different colors,\n"
+ "(B) Black, (W) white (1,2,3,4) 4 different gray values, 4 is darkest\n"
+ "(R) Red, (P) Purple, (M) Magenta, (Y) Yellow, (G) Green,\n"
+ "(L) Light blue, (D) Dark blue\n\n"
+ "choose from BWRPMYGLD1234 ( * %c * ) : ", parstring[0]);
+ Fgets(instring, 41, stdin);
+ } else
+ *instring = '\0';
+ if (*instring == '\0')
+ code = parstring[0];
+ else
+ code = instring[0];
+ code = toupper(code);
+ if (strchr("BWRPMGYLD1234", code) == NULL)
+ code = 'W';
+ switch (code) {
+ case 'B': pict->bgnd = StrBlack; break;
+ case 'W': pict->bgnd = StrWhite; break;
+ case '1': pict->bgnd = StrGrey1; break;
+ case '2': pict->bgnd = StrGrey2; break;
+ case '3': pict->bgnd = StrGrey3; break;
+ case '4': pict->bgnd = StrGrey4; break;
+ case 'R': pict->bgnd = StrRed; break;
+ case 'P': pict->bgnd = StrPurple; break;
+ case 'M': pict->bgnd = StrMagenta; break;
+ case 'G': pict->bgnd = StrGreen; break;
+ case 'Y': pict->bgnd = StrYellow; break;
+ case 'L': pict->bgnd = StrLBlue; break;
+ case 'D': pict->bgnd = StrDBlue; break;
+ }
+ if (interactflag) {
+ printf("\n\nNow choose the color/gray-value of the letter **>foreground<**\n"
+ "lowercase choices mean lowercase letters in the sequence:\n"
+ "(B,b) black (W,w) white (1,2,3,4) 4 different gray values, 4 is darkest\n"
+ " (5,6,7,8) same, but lowercase letters\n"
+ "(R) Red, (P) Purple, (M) Magenta, (Y) Yellow, (G) Green,\n"
+ "(L) Light blue, (D) Dark blue\n\n"
+ "choose from BbWwRrPpMmYyGgLlDd12345678 ( * %c * ) : ",
+ parstring[1]);
+ Fgets(instring, 41, stdin);
+ } else
+ *instring = '\0';
+ if (*instring == '\0')
+ code = parstring[1];
+ else
+ code = instring[0];
+ if (strchr("BWRPMGYLD12345678", toupper(code)) == NULL)
+ code = 'B';
+ *lc = islower(code);
+ if (code == '4' || code == '3' || code == '2' || code == '1')
+ *lc = FALSE;
+ if (code == '8' || code == '7' || code == '6' || code == '5')
+ *lc = TRUE;
+ code = toupper(code);
+ switch (code) {
+ case 'B': pict->fgnd = StrBlack; break;
+ case 'W': pict->fgnd = StrWhite; break;
+ case '5':
+ case '1': pict->fgnd = StrGrey1; break;
+ case '6':
+ case '2': pict->fgnd = StrGrey2; break;
+ case '7':
+ case '3': pict->fgnd = StrGrey3; break;
+ case '8':
+ case '4': pict->fgnd = StrGrey4; break;
+ case 'R': pict->fgnd = StrRed; break;
+ case 'P': pict->fgnd = StrPurple; break;
+ case 'M': pict->fgnd = StrMagenta; break;
+ case 'G': pict->fgnd = StrGreen; break;
+ case 'Y': pict->fgnd = StrYellow; break;
+ case 'L': pict->fgnd = StrLBlue; break;
+ case 'D': pict->fgnd = StrDBlue; break;
+ }
+}
+
+
+static void ask_pict(void)
+{
+ char parstring[6];
+ char instring[41];
+
+ splitflag = TRUE;
+
+ /*although you can have multipage PICTs, I have defined the boundary of
+ the ones created here as an A4 page. Very large PICTs, in any event, with
+ 1000s of objects, might give the average drawing program a headache!*/
+
+ if (interactflag)
+ printf("----------------------------------------------------------------\n");
+ term_par("PICTFILE");
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ menu_pictfile(&pict[0], &lc[0], "different", parstring);
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ menu_pictfile(&pict[1], &lc[1], "identical", parstring);
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ if (simflag)
+ menu_pictfile(&pict[2], &lc[2], "similar", parstring);
+ else {
+ pict[2] = pict[0];
+ lc[2] = lc[0];
+ }
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ if (globalflag)
+ menu_pictfile(&pict[3], &lc[3], "conserved", parstring);
+ else {
+ pict[3] = pict[1];
+ lc[3] = lc[1];
+ }
+ pict[4].bgnd = StrWhite;
+ pict[4].fgnd = StrBlack;
+ lc[4] = FALSE;
+ fscanf(parfile, "%d%*[^\n]", &pictcell);
+ getc(parfile);
+ Fgets(parstring, 6, parfile);
+ shadeonlyflag = toupper(parstring[0]) == 'S';
+ Fgets(parstring, 6, parfile);
+ landscapeflag = toupper(parstring[0]) == 'Y';
+ if (interactflag) {
+ do {
+ printf("Character size in Points(5-20) ( * %4d * ) : ", pictcell);
+ Fgets(instring, 41, stdin);
+ if (*instring != '\0')
+ pictcell = str2int((void *)instring);
+ } while (pictcell < 5 || pictcell > 20);
+ /*rather arbitrary limitation, but should cover most people's needs*/
+
+ printf("Save shading (S) or Shading+Text (T) (* %c *) ",
+ (shadeonlyflag ? 'S' : 'T'));
+ Fgets(instring, 41, stdin);
+ if (*instring != '\0')
+ shadeonlyflag = toupper(instring[0]) == 'S';
+
+ printf("Rotate page ( * %c * ) : ", YESNO(landscapeflag));
+ Fgets(instring, 41, stdin);
+ if (*instring != '\0')
+ landscapeflag = toupper(instring[0]) == 'Y';
+ }
+ if (!cloutflag) {
+ printf("filename for PICT file output : ");
+ gets(outname);
+ }
+}
+
+
+static void MakePoint(int *xpoint, int *ypoint)
+{
+ /*converts a pair of points into a string containing the values as hex*/
+ /*in the order yvalue (hi), yvalue(lo), xvalue(hi), xvalue(lo)*/
+ putc( (*ypoint >> 8)&255, outf);
+ putc( (*ypoint )&255, outf);
+ putc( (*xpoint >> 8)&255, outf);
+ putc( (*xpoint )&255, outf);
+}
+
+
+static void PICTinit(double *xpos, double *ypos) {
+ int i, linelen, tlx, tly, brx, bry;
+
+ if (landscapeflag) {
+ dev_miny = 30.0; /* borders of an A4 page in point units */
+ dev_minx = 30.0;
+ dev_maxy = 565.0;
+ dev_maxx = 800.0;
+ } else {
+ dev_minx = 30.0; /* borders of an A4 page in point units */
+ dev_miny = 30.0;
+ dev_maxx = 565.0;
+ dev_maxy = 800.0;
+ }
+ dev_xsize = pictcell * 0.85; /* cells do overlap in x-direction */
+ dev_ysize = pictcell;
+ *xpos = dev_minx;
+ *ypos = dev_miny + dev_ysize;
+ /* 0,0 is top left corner, and we increase ypos to go down the page*/
+ lines_per_page = (int)((dev_maxy - dev_miny) / dev_ysize);
+
+ if (pictcell < 15) { xshift = 1; yshift = 2; }
+ else { xshift = 2; yshift = 3; }
+ /* as the size of the unit cell gets larger, the shift of the
+ character to place it nicely in the "box" changes; I haven't worked
+ out a nice formula that gives integer values that work for any
+ number of points */
+
+ outf = fopen(outname, BIN_WR);
+ assert(outf != NULL);
+
+ /* Calculate here the TopLeft and BottomRight corners of the PICT, based on
+ the size of the image and the page dimensions entered above: changing
+ these to reflect, e.g. US Letter paper will result in a changed 'window'
+ in which the program will draw the PICT. Note that BOXSHADE allows both
+ PICT and EPSF to be *wider* than the defined page (i.e. it doesn't check
+ for user errors over what will fit), but it does split the output into
+ separate files of one 'page-full' (or less) */
+
+ linelen = outlen;
+ if (seqnameflag)
+ linelen += seqname_outlen + 1;
+ if (seqnumflag)
+ linelen += seqnumlen + 1;
+ tly = (int)dev_minx;
+ tlx = (int)dev_miny;
+
+ if (lines_left < lines_per_page)
+ brx = tly + (int)(0.5 + (lines_left + 1) * dev_ysize);
+ else
+ brx = tly + (int)(0.5 + lines_per_page * dev_ysize);
+
+ bry = tlx + (int)(0.5 + linelen * dev_xsize);
+
+ StrFormat[0] = tlx / 256;
+ StrFormat[1] = tlx & 255;
+ StrFormat[2] = tly / 256;
+ StrFormat[3] = tly & 255;
+ StrFormat[4] = brx / 256;
+ StrFormat[5] = brx & 255;
+ StrFormat[6] = bry / 256;
+ StrFormat[7] = bry & 255;
+
+ for (i = 0; i <= 15; i++)
+ StrFormat2[i] = '\0'; /*yes, I know I'm being lazy!*/
+
+ StrFormat2[4] = tlx / 256;
+ StrFormat2[5] = tlx & 255;
+ StrFormat2[0] = tly / 256;
+ StrFormat2[1] = tly & 255;
+ StrFormat2[12] = brx / 256;
+ StrFormat2[13] = brx & 255;
+ StrFormat2[8] = bry / 256;
+ StrFormat2[9] = bry & 255;
+
+ /* I have to write a header of 512 bytes plus 2 bytes for the
+ PICT size field, which fortunately is never read. */
+
+ for (i = 1; i <= 514; i++)
+ putc(0, outf);
+
+ /* now we write the various header opcodes and size for the file */
+ for (i = 0; i <= 7; i++)
+ putc(StrFormat[i], outf);
+ for (i = 0; i <= 9; i++)
+ putc(StrHeaderOp[i], outf);
+ for (i = 0; i <= 15; i++)
+ putc(StrFormat2[i], outf);
+ for (i = 1; i <= 4; i++)
+ putc(0, outf);
+ for (i = 0; i <= 5; i++)
+ putc(StrHiLiteClip[i], outf);
+ for (i = 0; i <= 7; i++)
+ putc(StrFormat[i], outf);
+ for (i = 0; i <= 24; i++)
+ putc(StrCourierBold[i], outf);
+ putc(pictcell, outf);
+ pcount = 592;
+}
+
+static void PICTsetcolor(int colno) {
+ WantedColour = &pict[colno];
+ WantedColNo = colno;
+}
+
+static void PICTcharout(char c, double *xpos, double *ypos) {
+ int xpoint, ypoint, i;
+
+ if (WantedColNo < 4) {
+ if (CurrentColour != WantedColour->bgnd[0]) {
+ if (pcount > 1016) {
+ for (i = pcount; i <= 1023; i++)
+ putc(0, outf);
+ putc('\n', outf);
+ pcount = 0;
+ }
+ fprintf(outf, "%c%c", RGBfgndOp[0], RGBfgndOp[1]);
+ for (i = 1; i <= 6; i++)
+ putc(WantedColour->bgnd[i], outf);
+ CurrentColour = WantedColour->bgnd[0];
+ pcount += 8;
+ }
+
+ if (pcount > 1014) {
+ for (i = pcount; i <= 1023; i++)
+ putc(0, outf);
+ putc('\n', outf);
+ pcount = 0;
+ }
+ fprintf(outf, "%c%c", PaintRectOp[0], PaintRectOp[1]);
+ xpoint = (int)(*xpos - xshift + 0.5);
+ ypoint = (int)(*ypos + yshift - dev_ysize + 0.5);
+ MakePoint(&xpoint, &ypoint);
+ xpoint = (int)(*xpos - xshift + dev_xsize + 0.5);
+ ypoint = (int)(*ypos + yshift + 0.5);
+ MakePoint(&xpoint, &ypoint);
+ pcount += 10;
+ }
+
+ if (!shadeonlyflag) { /*print the text*/
+ if (CurrentColour != WantedColour->fgnd[0]) {
+ if (pcount > 1016) {
+ for (i = pcount; i <= 1023; i++)
+ putc(0, outf);
+ putc('\n', outf);
+ pcount = 0;
+ }
+ fprintf(outf, "%c%c", RGBfgndOp[0], RGBfgndOp[1]);
+ for (i = 1; i <= 6; i++)
+ putc(WantedColour->fgnd[i], outf);
+ CurrentColour = WantedColour->fgnd[0];
+ pcount += 8;
+ }
+
+ if (pcount > 1016) {
+ for (i = pcount; i <= 1023; i++)
+ putc(0, outf);
+ putc('\n', outf);
+ pcount = 0;
+ }
+ fprintf(outf, "%c%c", LongTextOp[0], LongTextOp[1]);
+ xpoint = (int)(*xpos + 0.5);
+ ypoint = (int)(*ypos + 0.5);
+ MakePoint(&xpoint, &ypoint);
+ fprintf(outf, "\001%c", c);
+ pcount += 8;
+ }
+ *xpos += dev_xsize; /*need to move anyway*/
+}
+
+static void PICTnewline(double *xpos, double *ypos) {
+ *xpos = dev_minx;
+ *ypos += dev_ysize;
+}
+
+static void PICTnewpage(double *xpos, double *ypos) {
+ /* this should never be accessed - /split is enforced with
+ PICT files to stop them becoming too large */
+ *xpos = dev_minx;
+ *ypos = dev_miny + dev_ysize;
+}
+
+static void PICTexit(void) {
+ int i;
+ if (pcount > 1022) {
+ for (i = pcount; i <= 1023; i++)
+ putc(0, outf);
+ putc('\n', outf);
+ pcount = 0;
+ }
+ fprintf(outf, "%c%c", EndPicOp[0], EndPicOp[1]);
+ for (i = pcount; i <= 1021; i++)
+ putc(0, outf);
+ if (outf != NULL)
+ fclose(outf);
+ outf = NULL;
+}
+
+
+GraphicsDevice Pict = {
+ "PICT",
+ ask_pict,
+ PICTinit,
+ PICTsetcolor,
+ PICTcharout,
+ GenericStringOut,
+ PICTnewline,
+ PICTnewpage,
+ PICTexit
+};
Added: trunk/packages/boxshade/branches/upstream/current/dv_ps.c
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/dv_ps.c (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/dv_ps.c 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,621 @@
+#include "dv_all.h"
+#include "version.h"
+#include <math.h>
+#include <time.h>
+#include <stdarg.h>
+
+/*----------------------------------------*/
+/* POSTSCRIPT specific section */
+/*----------------------------------------*/
+
+/* maximum line length in postscript file (approx) */
+#define MAXLEN 70
+
+/* max string length in print commands */
+#define MAX_PRINT_LEN 300
+
+typedef struct {
+ double r, g, b, k;
+} RGBK;
+
+typedef struct {
+ RGBK fg, bg;
+} psrecord;
+
+
+static char last_ps_cl;
+static int act_ps_col;
+static char save_sb[MAXLEN+30];
+static int ps_count;
+static BOOL new_y, new_x;
+
+static psrecord ps[5]; /* POSTSCRIPT-specifics*/
+static char pscc[5];
+static double pscell; /* character cell size */
+
+static void gray(RGBK *rgbk, double gray) {
+ rgbk->r = 0;
+ rgbk->g = 0;
+ rgbk->b = 0;
+ rgbk->k = gray;
+}
+
+static void rgb(RGBK *rgbk, double r, double g, double b) {
+ rgbk->r = r;
+ rgbk->g = g;
+ rgbk->b = b;
+ rgbk->k = 0;
+}
+
+static void Code2Color(char code, RGBK *rgbk) {
+ switch (code) {
+ case 'W': gray(rgbk, 1.0); break;
+ case '1':
+ case '5': gray(rgbk, 0.8);
+ break;
+ case '2':
+ case '6': gray(rgbk, 0.6);
+ break;
+ case '3':
+ case '7': gray(rgbk, 0.4);
+ break;
+ case '4':
+ case '8': gray(rgbk, 0.2);
+ break;
+ case 'B': gray(rgbk, 0.0); break;
+ case 'R': rgb(rgbk, 1.0, 0.0, 0.0); break;
+ case 'G': rgb(rgbk, 0.0, 1.0, 0.0); break;
+ case 'L': rgb(rgbk, 0.0, 0.0, 1.0); break;
+ case 'Y': rgb(rgbk, 1.0, 1.0, 0.0); break;
+ case 'M': rgb(rgbk, 1.0, 0.0, 1.0); break;
+ case 'C': rgb(rgbk, 0.0, 1.0, 1.0); break;
+ }
+}
+
+static void menu_postscript(psrecord *ps, BOOL *lc, char *txt, char *parstring)
+{
+ char code;
+ char instring[41];
+
+ if (interactflag) {
+ printf("\n----------------------------------------------------------------\n"
+ "Enter the text attributes for printing of **>%s<** residues:\n", txt);
+ printf("First choose the color/gray-value of the letter **>background<**\n"
+ "Different letters specify different colors,\n"
+ "(B) Black, (W) white (1,2,3,4) 4 different gray values, 4 is darkest\n"
+ "(R) Red, (G) Green, (L) Blue, (Y) Yellow, (M) Magenta, (C) Cyan\n\n"
+ "choose from BWRGLYMC1234 ( * %c * ) : ", parstring[0]);
+ Fgets(instring, 41, stdin);
+ } else
+ *instring = '\0';
+ if (*instring == '\0')
+ code = parstring[0];
+ else
+ code = instring[0];
+ code = toupper(code);
+ if (strchr( "BWRGLYMC1234", code) == NULL)
+ code = 'W';
+
+ Code2Color(code, &(ps->bg));
+
+ if (interactflag) {
+ printf("\n\nNow choose the color/gray-value of the letter **>foreground<**\n"
+ "lowercase choices mean lowercase letters in the sequence:\n"
+ "(B,b) black (W,w) white (1,2,3,4) 4 different gray values, 4 is darkest\n"
+ "(R,r) red (G,g) green (5,6,7,8) same, but lowercase letters\n"
+ "(L,l) blue (Y,y) yellow (M,m) magenta (C,c) cyan\n\n"
+ "choose from BbWwRrGgLlYyMmCc12345678 ( * %c * ) : ", parstring[1]);
+ Fgets(instring, 41, stdin);
+ } else
+ *instring = '\0';
+ if (*instring == '\0')
+ code = parstring[1];
+ else
+ code = instring[0];
+ if (strchr("BbWwRrGgLlYyMmCc12345678", code) == NULL)
+ code = 'B';
+
+ switch (code) {
+ case '1' :
+ case '2' :
+ case '3' :
+ case '4' : *lc = FALSE;
+ break;
+ case '5' :
+ case '6' :
+ case '7' :
+ case '8' : *lc = TRUE;
+ break;
+ default : *lc = islower(code);
+ break;
+ }
+
+ code = toupper(code);
+
+ Code2Color(code, &(ps->fg));
+}
+
+static void ask(BOOL makeEPS)
+{
+ char parstring[6];
+ char instring[41];
+ int i;
+ char lk;
+
+ if (interactflag)
+ printf("----------------------------------------------------------------\n");
+ term_par("POSTSCRIPT");
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ menu_postscript(&ps[0], &lc[0], "different", parstring);
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ menu_postscript(&ps[1], &lc[1], "identical", parstring);
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ if (simflag)
+ menu_postscript(&ps[2], &lc[2], "similar", parstring);
+ else {
+ ps[2] = ps[0];
+ lc[2] = lc[0];
+ }
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ if (globalflag)
+ menu_postscript(&ps[3], &lc[3], "conserved", parstring);
+ else {
+ ps[3] = ps[1];
+ lc[3] = lc[1];
+ }
+ gray(&ps[4].bg, 1.0);
+ gray(&ps[4].fg, 0.0);
+ lc[4] = FALSE;
+
+ lk = 'K'-1;
+ for (i = 0; i <= 4; i++) {
+ if (!globalflag && i == 3) continue;
+ pscc[i] = ++lk;
+ }
+
+ fscanf(parfile, "%lg%*[^\n]", &pscell);
+ getc(parfile);
+ Fgets(parstring, 6, parfile);
+ landscapeflag = toupper(parstring[0]) == 'Y';
+ if (interactflag) {
+ do {
+ printf("Character size in Points ( * %4.1f * ) : ", pscell);
+ Fgets(instring, 41, stdin);
+ if (*instring != '\0')
+ pscell = str2int((void *)instring);
+ } while (pscell < 1 || pscell > 100);
+ if (!makeEPS) {
+ printf("Rotate plot ( * %c * ) : ", YESNO(landscapeflag));
+ Fgets(instring, 41, stdin);
+ if (*instring != '\0')
+ landscapeflag = toupper(instring[0]) == 'Y';
+ }
+ }
+
+ if (!cloutflag)
+ do {
+ printf("filename for POSTSCRIPT-output : ");
+ gets(outname);
+ } while (*outname == '\0');
+}
+
+static void ask_postscript(void) {
+ ask(FALSE);
+}
+
+static void ask_eps(void) {
+ ask(TRUE);
+}
+
+static void ps_nl(void)
+{
+ if (ps_count > 0)
+ uwriteln(&outfile, "");
+ ps_count = 0;
+}
+
+static void ps_space(void)
+{
+ if (ps_count > MAXLEN)
+ ps_nl();
+ else
+ if (ps_count > 0){
+ putc(' ', outfile.f);
+ ps_count++;
+ }
+}
+
+static void ps_string(int cmd, char *fmt, va_list arg_list) {
+ char *cp1, *cp2;
+ static char *buf = NULL;
+
+ if (buf == NULL)
+ buf=Malloc(MAX_PRINT_LEN);
+ vsprintf(buf, fmt, arg_list);
+ cp1 = buf;
+ while (cp1 != NULL && *cp1 != '\0') {
+ cp2 = strchr(cp1, '\n');
+ if (cp2 != NULL) {
+ *cp2 = '\0';
+ ++cp2;
+ }
+ while (*cp1 != '\0') {
+ if (cmd && *cp1 == ' ')
+ ps_space();
+ else
+ if ( (*cp1 & 0x80) != 0)
+ ps_count += fprintf(outfile.f, "\\%03o", (*cp1)&0xff);
+ else {
+ putc(*cp1, outfile.f);
+ ++ps_count;
+ }
+ ++cp1;
+ }
+ if (cp2 != NULL) ps_nl();
+ cp1 = cp2;
+ }
+ if (cmd)
+ ps_space();
+}
+
+static void ps_str(char *fmt, ...) {
+ va_list argptr;
+
+ va_start(argptr, fmt);
+ ps_string(FALSE, fmt, argptr);
+ va_end(argptr);
+}
+
+static void ps_cmd(char *fmt, ...) {
+ va_list argptr;
+
+ va_start(argptr, fmt);
+ ps_string(TRUE, fmt, argptr);
+ va_end(argptr);
+}
+
+static void ps_fp(double r, int nk)
+{
+ char s[20], *cp;
+
+ sprintf(s, "%1.*f", nk, r);
+ if (nk > 0) {
+ cp = s + strlen(s);
+ while (cp-s > 0 && *(cp-1) == '0')
+ --cp;
+ if (cp-s > 0 && *(cp-1) == '.')
+ --cp;
+ *cp = '\0';
+ }
+ cp = s;
+ while (*cp == ' ') ++cp;
+ ps_cmd("%s", cp);
+}
+
+static void ps_date(void)
+{
+ time_t timer;
+ struct tm *tblock;
+
+ /* gets time of day */
+ timer = time(NULL);
+
+ /* converts date/time to a structure */
+ tblock = localtime(&timer);
+
+ ps_str("%s", asctime(tblock));
+}
+
+static void PageSetup(int pn)
+{
+ ps_str("\n"
+ "%%%%Page: %d %d\n"
+ "%%%%BeginPageSetup\n"
+ "psetup\n"
+ "%%%%EndPageSetup\n", pn, pn);
+}
+
+static void close_sb(void)
+{
+ if (*save_sb != '\0') {
+ int sl = strlen(save_sb);
+ if (ps_count + sl > MAXLEN)
+ ps_nl();
+ ps_str("(%s)%c", save_sb, (sl > 1 ? 'S' : 'C'));
+ ps_space();
+ }
+ *save_sb = '\0';
+}
+
+static void add_sb(char c)
+{
+ int sl = strlen(save_sb);
+ save_sb[sl++] = c;
+ save_sb[sl ] = '\0';
+ if (ps_count+sl > MAXLEN) {
+ ps_str("(%s)%c", save_sb, (sl > 1 ? 'S' : 'C'));
+ ps_space();
+ *save_sb = '\0';
+ }
+}
+
+static void ps_color(RGBK *c) {
+ if (c->k > 0 || (c->r == 0 && c->g == 0 && c->b == 0)) {
+ ps_fp(c->k, 1);
+ ps_cmd("setgray");
+ } else {
+ ps_fp(c->r, 1);
+ ps_fp(c->g, 1);
+ ps_fp(c->b, 1);
+ ps_cmd("setrgbcolor");
+ }
+}
+
+/* static int ps_white(RGBK *c) {
+ return (c->k > 0.9999);
+} */
+
+static void DVinit(BOOL makeEPS, double *xpos, double *ypos) {
+ int i;
+ double linelen, bbox_x0, bbox_x1, bbox_y0, bbox_y1;
+
+ if (landscapeflag && !makeEPS) {
+ dev_miny = 30.0; /* borders of a A4 page in point units */
+ dev_minx = 30.0;
+ dev_maxy = 545.0;
+ dev_maxx = 800.0;
+ } else {
+ dev_minx = 30.0; /* borders of a A4 page in point units */
+ dev_miny = 30.0;
+ dev_maxx = 575.0;
+ dev_maxy = 760.0;
+ }
+ dev_xsize = pscell * 0.7; /* cells do overlap in x-direction */
+ dev_ysize = pscell;
+ *xpos = dev_minx;
+ *ypos = dev_maxy - dev_ysize; /* 0,0 is lower left corner */
+ lines_per_page = (int)((dev_maxy - dev_miny) / dev_ysize);
+ assert( outopen(&outfile, outname) != NULL);
+
+ ps_str("%%!PS-Adobe-2.0%s\n", (makeEPS ? " EPSF-2.0" : "") );
+ ps_str("%%%%Creator: BOXshade %s\n", BOXSHADE_ver);
+ ps_str("%%%%Title: BOXSHADE document %s\n", inname);
+ ps_str("%%%%CreationDate: "); ps_date(); ps_nl();
+
+ ps_str("%%%%Pages: %s\n", (makeEPS ? "1" : "(atend)") );
+ /*calculate the bounding box positions, trying to take into account the
+ actual length of line and the depth on the page (if more than one
+ page). Note that if the figure is more than one page, one really MUST
+ use the /split option with EPSF, or the results will be a mess.*/
+ if (makeEPS) {
+ linelen = outlen;
+ if (seqnameflag)
+ linelen += seqname_outlen + 1;
+ if (seqnumflag)
+ linelen += seqnumlen + 1;
+ bbox_x0 = dev_minx - 1;
+ if (lines_left > lines_per_page)
+ bbox_y0 = dev_maxy - lines_per_page * dev_ysize;
+ else
+ bbox_y0 = dev_maxy - lines_left * dev_ysize - 1;
+ /*if the bbox is set too wide for the paper, it will be clipped by the
+ printer; however, it should appear as too wide in the graphics
+ program, so the user will notice it.*/
+ bbox_x1 = dev_minx + linelen * dev_xsize + 1;
+ bbox_y1 = dev_maxy + 1;
+ ps_str("%%%%BoundingBox: %ld %ld %ld %ld\n",
+ (long)bbox_x0, (long)bbox_y0, (long)bbox_x1, (long)bbox_y1);
+ } else {
+ if (landscapeflag) {
+ ps_str("%%%%BoundingBox: %ld %ld %ld %ld\n",
+ (long)dev_miny-1, (long)dev_minx-1, (long)dev_maxy+1, (long)dev_maxx+1);
+ ps_str("%%%%Orientation: landscape\n");
+ } else {
+ ps_str("%%%%BoundingBox: %ld %ld %ld %ld\n",
+ (long)dev_minx-1, (long)dev_miny-1, (long)dev_maxx+1, (long)dev_maxy+1);
+ ps_str("%%%%Orientation: portrait\n");
+ }
+ ps_str("%%%%PaperSize: a4\n");
+ }
+
+ ps_str("%%%%DocumentNeededFonts: Courier-Bold\n"
+ "%%%%DocumentData: Clean7Bit\n"
+ "%%%%LanguageLevel: 1\n"
+ "%%%%EndComments\n"
+ "%%%%BeginProlog\n");
+ ps_cmd("/bd { bind def } bind def");
+ ps_cmd("/xd { exch def } bd");
+ ps_nl();
+ ps_str("%%\n"
+ "%% custom color selection\n%%\n"
+ "%% grayscale:\n%%\n"
+ "%% '<gray> setgray'\n%%\n"
+ "%% <gray> is a real number between\n"
+ "%% 0.0 (black) and 1.0 (white)\n%%\n");
+ ps_str("%% RGB (red/green/blue) colors:\n%%\n"
+ "%% '<r> <g> <b> setrgbcolor'\n%%\n"
+ "%% each color compoment <?> is a real'\n"
+ "%% number between 0.0 (zero intensity) and\n"
+ "%% 1.0 (max intensity)\n%%\n"
+ "%% Change the following definitions for your needs !\n"
+ "%%");
+ ps_nl();
+ for (i = 0; i <= 4; i++) {
+ if (!globalflag && i == 3) continue;
+ switch (i) {
+ case 0: ps_str("%% -- different residues"); break;
+ case 1: ps_str("%% -- identical residues"); break;
+ case 2: ps_str("%% -- similar residues"); break;
+ case 3: ps_str("%% -- conserved residues"); break;
+ case 4: ps_str("%% -- normal text"); break;
+ }
+ ps_nl();
+ ps_cmd("/bg%c {", pscc[i]); ps_color(&ps[i].bg); ps_cmd("} bd");
+ ps_str("%% background");
+ ps_nl();
+ ps_cmd("/fg%c {", pscc[i]); ps_color(&ps[i].fg); ps_cmd("} bd");
+ ps_str("%% foreground");
+ ps_nl();
+ }
+ ps_str("%%\n%% end of custom color selection\n%%");
+ ps_nl();
+ ps_cmd("/px 0 def");
+ ps_cmd("/py 0 def");
+ ps_cmd("/fg {0 setgray} bd");
+ ps_cmd("/bg {1 setgray} bd");
+
+ ps_cmd("/C {px py moveto gsave");
+ ps_fp(-0.03*pscell, 1);
+ ps_fp(-0.05*pscell, 1);
+ ps_cmd("rmoveto");
+ ps_fp(0.70*pscell, 1);
+ ps_cmd("0 rlineto 0");
+ ps_fp(pscell,1);
+ ps_cmd("rlineto");
+ ps_fp(-0.70*pscell, 1);
+ ps_cmd("0 rlineto closepath "
+ "bg fill grestore fg 0 2 rmoveto show "
+ "/px px");
+ ps_fp(dev_xsize, 2);
+ ps_cmd("add def} bd", dev_xsize);
+
+ ps_cmd("/X {/px xd} bd "
+ "/Y {/py xd} bd "
+ "/A {Y X} bd");
+
+/*
+ ps_cmd("/S { /strg xd /idx 0 def { strg idx 1 "
+ "getinterval C /idx idx 1 add def strg length idx "
+ "eq {exit} if } loop } bd");
+*/
+ ps_cmd("/S {0 1 2 index length 1 sub {"
+ "2 copy 1 getinterval C pop"
+ "} for pop} bd");
+
+ ps_cmd("/psetup {/Courier-Bold findfont");
+ ps_fp(pscell, 1);
+ ps_cmd("scalefont setfont} bd");
+
+ for (i = 0; i <= 4; i++) {
+ if (!globalflag && i == 3) continue;
+ ps_cmd("/%c {/bg {bg%c} bd"
+ " /fg {fg%c} bd"
+ "} bd", pscc[i], pscc[i], pscc[i]);
+ }
+ ps_nl();
+
+ ps_str("%%%%EndProlog\n"
+ "%%%%BeginSetup\n");
+ ps_cmd("save%s", (makeEPS ? "" : " initgraphics") );
+ if (landscapeflag && !makeEPS)
+ ps_cmd("575 0 translate 90 rotate");
+ ps_cmd("120 currentscreen 3 -1 roll pop setscreen\n");
+ ps_str("%%%%EndSetup\n");
+
+ PageSetup(1);
+ last_ps_cl = ' ';
+ act_ps_col = 4;
+ new_x = new_y = TRUE;
+ *save_sb = '\0';
+ ps_count = 0;
+}
+
+static void Setcolor(int colno) {
+ if (!globalflag && colno == 3) colno = 1;
+ act_ps_col = colno;
+}
+
+static void Charout(char c, double *xpos, double *ypos) {
+ if (pscc[act_ps_col] != last_ps_cl) {
+ close_sb();
+ last_ps_cl = pscc[act_ps_col];
+ ps_cmd("%c", last_ps_cl);
+ }
+ if (new_y && new_x) {
+ close_sb();
+ ps_fp(*xpos, 1);
+ ps_fp(*ypos, 1);
+ ps_cmd("A");
+ new_x = new_y = FALSE;
+ } else
+ if (new_y) {
+ close_sb();
+ ps_fp(*ypos, 1);
+ ps_cmd("Y");
+ new_y = FALSE;
+ } else
+ if (new_x) {
+ close_sb();
+ ps_fp(*xpos, 1);
+ ps_cmd("X");
+ new_x = FALSE;
+ }
+ add_sb(c);
+ *xpos += dev_xsize;
+}
+
+static void Newline(double *xpos, double *ypos) {
+ close_sb();
+ *xpos = dev_minx;
+ *ypos -= dev_ysize;
+ new_x = new_y = TRUE;
+}
+
+static void PSnewpage(double *xpos, double *ypos) {
+ close_sb();
+ *xpos = dev_minx;
+ ps_cmd("copypage erasepage");
+ PageSetup(act_page + 1);
+ *ypos = dev_maxy - dev_ysize;
+ new_x = new_y = TRUE;
+ last_ps_cl = ' ';
+}
+
+static void DVexit(BOOL makeEPS) {
+ close_sb();
+ if (!makeEPS)
+ ps_cmd("copypage erasepage");
+ ps_str("\n%%%%Trailer\n");
+ ps_str("restore\n");
+ if (!makeEPS)
+ ps_str("%%%%Pages: %d\n", act_page);
+ else
+ ps_str("showpage\n");
+ ps_str("%%%%EOF\n");
+ if (outfile.f != NULL)
+ fclose(outfile.f);
+ outfile.f = NULL;
+}
+
+static void EPSinit(double *xpos, double *ypos) { DVinit(TRUE, xpos, ypos); }
+static void PSinit(double *xpos, double *ypos) { DVinit(FALSE, xpos, ypos); }
+static void PSexit(void) { DVexit(FALSE); }
+static void EPSexit(void) { DVexit(TRUE); }
+
+GraphicsDevice Postscript = {
+ "PS",
+ ask_postscript,
+ PSinit,
+ Setcolor,
+ Charout,
+ GenericStringOut,
+ Newline,
+ PSnewpage,
+ PSexit
+};
+
+GraphicsDevice Eps = {
+ "EPS",
+ ask_eps,
+ EPSinit,
+ Setcolor,
+ Charout,
+ GenericStringOut,
+ Newline,
+ Newline,
+ EPSexit
+};
Added: trunk/packages/boxshade/branches/upstream/current/dv_regis.c
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/dv_regis.c (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/dv_regis.c 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,215 @@
+#include "dv_all.h"
+#include <math.h>
+
+/*--------------------------------------------------------------------------*/
+/* ReGIS specific section */
+/*--------------------------------------------------------------------------*/
+
+#define ESC "\x1b"
+
+typedef char regisstring[31];
+
+static regisstring regstr[5]; /*ReGIS-specifics*/
+
+static void menu_regis(char *regstr, BOOL *lc, char *txt, char *parstring)
+{
+ char code;
+ char instring[51];
+
+ *regstr = '\0';
+ if (interactflag) {
+ printf("\n-----------------------------------------------------------------------\n"
+ "Enter the text attributes for printing of **>%s<** residues:\n", txt);
+ printf("First choose the color/gray-value of the letter **>background<**\n"
+ "Different letters specify different colors,\n"
+ "(B) black (W) white (L) Blue (G) Green (R) Red\n"
+ " (C) Cyan (M) Magenta (Y) Yellow \n"
+ "(1,2,3,4) 4 different gray values, 4 is darkest\n\n"
+ "choose from BWLGRCMY1234 (* %c *) : ", parstring[0]);
+ Fgets(instring, 51, stdin);
+ } else
+ *instring = '\0';
+ if (*instring == '\0')
+ code = parstring[0];
+ else
+ code = instring[0];
+ code = tolower(code);
+ if (strchr("bwlgrcmy1234", code) == NULL)
+ code = 'w';
+ switch (code) {
+ case 'b': strcat(regstr, "S(I(D));"); break;
+ case 'w': strcat(regstr, "S(I(W));"); break;
+ case 'l': strcat(regstr, "S(I(B));"); break;
+ case 'g': strcat(regstr, "S(I(G));"); break;
+ case 'r': strcat(regstr, "S(I(R));"); break;
+ case 'c': strcat(regstr, "S(I(C));"); break;
+ case 'm': strcat(regstr, "S(I(M));"); break;
+ case 'y': strcat(regstr, "S(I(Y));"); break;
+ case '1': strcat(regstr, "S(I(H0L80S0));"); break;
+ case '2': strcat(regstr, "S(I(H0L60S0));"); break;
+ case '3': strcat(regstr, "S(I(H0L40S0));"); break;
+ case '4': strcat(regstr, "S(I(H0L20S0));"); break;
+ }
+ if (interactflag) {
+ printf("\n\nNow choose the color/gray-value of the letter **>foreground<**\n"
+ "lowercase choices mean lowercase letters in the sequence:\n"
+ "(B,b) black (W,w) white (L,l) Blue (G,g) Green (R,r) Red\n"
+ "(C,c) Cyan (M,m) Magenta (Y,y) Yellow \n"
+ "(1,2,3,4) 4 different gray values, 4 is darkest\n"
+ "(5,6,7,8) 4 different gray values, 8 is darkest, but lowercase letters\n\n"
+ "choose from BWLGRCMY1234/bwlgrcmy5678 (* %c *) : ", parstring[1]);
+ Fgets(instring, 51, stdin);
+ printf("\n\n");
+ } else
+ *instring = '\0';
+ if (*instring == '\0')
+ code = parstring[1];
+ else
+ code = instring[0];
+ if (strchr("BWLGRCMY12345678", toupper(code)) == NULL)
+ code = 'B';
+ *lc = islower(code);
+ if (code == '4' || code == '3' || code == '2' || code == '1')
+ *lc = FALSE;
+ code = tolower(code);
+ switch (code) {
+ case 'b': strcat(regstr, "W(I(D));"); break;
+ case 'w': strcat(regstr, "W(I(W));"); break;
+ case 'l': strcat(regstr, "W(I(B));"); break;
+ case 'g': strcat(regstr, "W(I(G));"); break;
+ case 'r': strcat(regstr, "W(I(R));"); break;
+ case 'c': strcat(regstr, "W(I(C));"); break;
+ case 'm': strcat(regstr, "W(I(M));"); break;
+ case 'y': strcat(regstr, "W(I(Y));"); break;
+ case '1':
+ case '5': strcat(regstr, "W(I(H0L80S0));"); break;
+ case '2':
+ case '6': strcat(regstr, "W(I(H0L60S0));"); break;
+ case '3':
+ case '7': strcat(regstr, "W(I(H0L40S0));"); break;
+ case '4':
+ case '8': strcat(regstr, "W(I(H0L20S0));"); break;
+ }
+}
+
+
+static void ask_regis(void)
+{
+ char parstring[6];
+
+ if (interactflag)
+ printf("-----------------------------------------------------------------------\n");
+ term_par("ReGIS");
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ menu_regis(regstr[0], &lc[0], "different", parstring);
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ menu_regis(regstr[1], &lc[1], "identical", parstring);
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ if (simflag)
+ menu_regis(regstr[2], &lc[2], "similar", parstring);
+ else {
+ strcpy(regstr[2], regstr[0]);
+ lc[2] = lc[0];
+ }
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ if (globalflag)
+ menu_regis(regstr[3], &lc[3], "conserved", parstring);
+ else {
+ strcpy(regstr[3], regstr[1]);
+ lc[3] = lc[1];
+ }
+ strcpy(regstr[4], "S(I(W));W(I(D));");
+ lc[4] = FALSE;
+ if (!cloutflag) {
+ printf("filename for REGIS-output : ");
+ gets(outname);
+ }
+}
+
+
+static void DVinit(regmodetype regmode, double *xpos, double *ypos) {
+ dev_minx = 0.0;
+ dev_miny = 0.0;
+ dev_maxx = 799.0;
+ if (regmode == rTERM) dev_maxy = 479.0;
+ else dev_maxy = 1199.0;
+ dev_xsize = 9.0;
+ dev_ysize = 20.0;
+ assert(outopen(&outfile, outname) != NULL);
+ uwriteln(&outfile, "%s", ESC "[?38l" ESC "Pp");
+ uwriteln(&outfile, "S(I(W)E);S(C0);S(A[0,0][%ld,%ld]);",
+ (long)floor(dev_maxx + 0.5), (long)floor(dev_maxy + 0.5));
+ uwriteln(&outfile, "P[0,0];W(R);T(S1)");
+ *xpos = dev_minx;
+ *ypos = dev_miny;
+}
+
+static void RTinit(double *xpos, double *ypos) { DVinit(rTERM, xpos, ypos); }
+static void RPinit(double *xpos, double *ypos) { DVinit(rPAGE, xpos, ypos); }
+
+static void Rsetcolor(int colno) {
+ fputs(regstr[colno], outfile.f);
+}
+
+static void Rcharout(char c, double *xpos, double *ypos) {
+ uwriteln(&outfile, "T\"%c\";", c);
+ *xpos += dev_xsize;
+}
+
+static void Rnewline(double *xpos, double *ypos) {
+ *xpos = dev_minx;
+ *ypos += dev_ysize;
+ uwriteln(&outfile, "P[0,%ld];", (long)floor(*ypos + 0.5));
+}
+
+static void RPnewpage(double *xpos, double *ypos) {
+ uwriteln(&outfile, "S(FI(W)E);S(C0);S(A[0,0][%ld,%ld]);",
+ (long)floor(dev_maxx + 0.5), (long)floor(dev_maxy + 0.5));
+ uwriteln(&outfile, "P[0,0];W(R);T(S1)");
+ *xpos = dev_minx;
+ *ypos = dev_miny;
+}
+
+static void RTnewpage(double *xpos, double *ypos) {
+ putchar('\007');
+ scanf("%*[^\n]");
+ getchar();
+ RPnewpage(xpos, ypos);
+}
+
+static void Rexit(void) {
+ uwriteln(&outfile, "%s", ESC "\\" ESC "[23;1H");
+ if (outfile.f != NULL)
+ fclose(outfile.f);
+ outfile.f = NULL;
+}
+
+
+
+GraphicsDevice RegisT = {
+ "REGISt",
+ ask_regis,
+ RTinit,
+ Rsetcolor,
+ Rcharout,
+ GenericStringOut,
+ Rnewline,
+ RTnewpage,
+ Rexit
+};
+
+GraphicsDevice RegisP = {
+ "REGISp",
+ ask_regis,
+ RPinit,
+ Rsetcolor,
+ Rcharout,
+ GenericStringOut,
+ Rnewline,
+ RPnewpage,
+ Rexit
+};
Added: trunk/packages/boxshade/branches/upstream/current/dv_rtf.c
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/dv_rtf.c (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/dv_rtf.c 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,206 @@
+#include "dv_all.h"
+
+/*----------------------------------------*/
+/* RTF specific section */
+/*----------------------------------------*/
+
+typedef struct rtfrecord {
+ int bgnd, fgnd;
+} rtfrecord;
+
+static rtfrecord rtfrec[5]; /*RTF-specifics*/
+static int rtfcell;
+
+static void menu_rtf(rtfrecord *rtfrec, BOOL *lc, char *txt, char *parstring)
+{
+ char code;
+ char instring[41];
+
+ if (interactflag) {
+ printf("\n-------------------------------------------------------------\n"
+ "Enter the text attributes for printing of ***>%s<*** residues:\n", txt);
+ printf("First choose the color/gray-value of the letter ***>background<***\n"
+ "Different letters specify different colors,\n"
+ "!! Background colors are not supported on most RTF-programs !!\n"
+ "(R) red (G) green (B) blue (C) cyan\n"
+ "(M) magenta (Y) yellow (K) black (W) white\n"
+ "(D) dark gray (L) light gray\n\n"
+ "choose from RGBCMYKWDL ( * %c * ) : ", parstring[0]);
+ Fgets(instring, 41, stdin);
+ } else
+ *instring = '\0';
+ if (*instring == '\0')
+ code = parstring[0];
+ else
+ code = instring[0];
+ code = toupper(code);
+ if (strchr("RGBCMYKWDL", code) == NULL)
+ code = 'W';
+ switch (code) {
+ case 'R': rtfrec->bgnd = 2; break;
+ case 'G': rtfrec->bgnd = 3; break;
+ case 'B': rtfrec->bgnd = 4; break;
+ case 'C': rtfrec->bgnd = 5; break;
+ case 'M': rtfrec->bgnd = 6; break;
+ case 'Y': rtfrec->bgnd = 7; break;
+ case 'K': rtfrec->bgnd = 0; break;
+ case 'W': rtfrec->bgnd = 1; break;
+ case 'D': rtfrec->bgnd = 8; break;
+ case 'L': rtfrec->bgnd = 9; break;
+ }
+ if (interactflag) {
+ printf("\n\nNow choose the color/gray-value of the letter ***>foreground<***\n"
+ "lowercase choices mean lowercase letters in the sequence:\n"
+ "(R) red (G) green (B) blue (C) cyan\n"
+ "(M) magenta (Y) yellow (K) black (W) white\n"
+ "(D) dark gray (L) light gray\n\n"
+ "choose from RrGgBbCcMmYyKkWwDdLl ( * %c * ) : ", parstring[1]);
+ Fgets(instring, 41, stdin);
+ } else
+ *instring = '\0';
+ if (*instring == '\0')
+ code = parstring[1];
+ else
+ code = instring[0];
+ if (strchr("RGBCMYKWDL", code) == NULL)
+ code = 'K';
+ *lc = islower(code);
+ code = toupper(code);
+ switch (code) {
+ case 'R': rtfrec->fgnd = 2; break;
+ case 'G': rtfrec->fgnd = 3; break;
+ case 'B': rtfrec->fgnd = 4; break;
+ case 'C': rtfrec->fgnd = 5; break;
+ case 'M': rtfrec->fgnd = 6; break;
+ case 'Y': rtfrec->fgnd = 7; break;
+ case 'K': rtfrec->fgnd = 0; break;
+ case 'W': rtfrec->fgnd = 1; break;
+ case 'D': rtfrec->fgnd = 8; break;
+ case 'L': rtfrec->fgnd = 9; break;
+ }
+}
+
+
+static void ask_rtf(void)
+{
+ char parstring[6];
+ char instring[41];
+
+ if (interactflag)
+ printf("-------------------------------------------------------------\n");
+
+ term_par("RTF");
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ menu_rtf(rtfrec, lc, "different", parstring);
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ menu_rtf(&rtfrec[1], &lc[1], "identical", parstring);
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ if (simflag)
+ menu_rtf(&rtfrec[2], &lc[2], "similar", parstring);
+ else {
+ rtfrec[2] = rtfrec[0];
+ lc[2] = lc[0];
+ }
+ Fgets(parstring, 6, parfile);
+ parstring[2] = '\0';
+ if (globalflag)
+ menu_rtf(&rtfrec[3], &lc[3], "conserved", parstring);
+ else {
+ rtfrec[3] = rtfrec[1];
+ lc[3] = lc[1];
+ }
+ rtfrec[4].bgnd = 1;
+ rtfrec[4].fgnd = 0;
+ lc[4] = FALSE;
+ fscanf(parfile, "%d%*[^\n]", &rtfcell);
+ getc(parfile);
+ if (interactflag) {
+ do {
+ printf("Character size in Points ( * %2d * ) : ", rtfcell);
+ Fgets(instring, 41, stdin);
+ if (*instring != '\0')
+ rtfcell = str2int((void *)instring);
+ } while (rtfcell < 1 || rtfcell > 40);
+ }
+ if (!cloutflag) {
+ printf("filename for RTF-output : ");
+ gets(outname);
+ }
+}
+
+
+static void RTFinit(double *xpos, double *ypos) {
+ dev_minx = 0.0;
+ dev_miny = 1.0;
+ dev_maxx = 10480.0;
+ dev_maxy = 15000.0;
+ dev_xsize = rtfcell * 120.0 / 10;
+ dev_ysize = rtfcell * 20.0;
+ *xpos = dev_minx;
+ *ypos = dev_maxy;
+ assert(outopen(&outfile, outname) != NULL);
+ uwriteln(&outfile, "{\\rtf1\\ansi\\deff0");
+ uwriteln(&outfile, "{\\fonttbl{\\f0\\fmodern Courier New;}}");
+ uwriteln(&outfile, "{\\info{\\author BOXSHADE}}");
+ uwriteln(&outfile, "{\\colortbl\n"
+ "\\red0\\green0\\blue0;"
+ "\\red255\\green255\\blue255;"
+ "\\red255\\green0\\blue0;"
+ "\\red0\\green255\\blue0;"
+ "\\red0\\green0\\blue255;"
+ "\\red0\\green255\\blue255;"
+ "\\red255\\green0\\blue255;"
+ "\\red255\\green255\\blue0;"
+ "\\red128\\green128\\blue128;"
+ "\\red192\\green192\\blue192;}");
+ uwriteln(&outfile, "\\paperw11880\\paperh16820\\margl1000\\margr500");
+ uwriteln(&outfile, "\\margt910\\margb910\\sectd\\cols1\\pard\\plain");
+ uwriteln(&outfile, "\\fs%d", rtfcell * 2);
+}
+
+static void RTFsetcolor(int colno) {
+ uwriteln(&outfile, "");
+ fprintf(outfile.f, "\\highlight%d\\cf%d ",
+ rtfrec[colno].bgnd, rtfrec[colno].fgnd);
+}
+
+static void RTFcharout(char c, double *xpos, double *ypos) {
+ putc(c, outfile.f);
+ *xpos += dev_xsize;
+}
+
+static void RTFnewline(double *xpos, double *ypos) {
+ uwriteln(&outfile, "\n\\highlight%d\\cf%d \\line",
+ rtfrec[0].bgnd, rtfrec[0].fgnd);
+ *xpos = dev_minx;
+ *ypos -= dev_ysize;
+}
+
+static void RTFnewpage(double *xpos, double *ypos) {
+ uwriteln(&outfile, "\\page");
+ *xpos = dev_minx;
+ *ypos = dev_miny;
+}
+
+static void RTFexit(void) {
+ uwriteln(&outfile, "}");
+ if (outfile.f != NULL)
+ fclose(outfile.f);
+ outfile.f = NULL;
+}
+
+
+GraphicsDevice Rtf = {
+ "RTF",
+ ask_rtf,
+ RTFinit,
+ RTFsetcolor,
+ RTFcharout,
+ GenericStringOut,
+ RTFnewline,
+ RTFnewpage,
+ RTFexit
+};
Added: trunk/packages/boxshade/branches/upstream/current/makefile.bcc
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/makefile.bcc (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/makefile.bcc 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,40 @@
+# BOXSHADE makefile with BC++ and Borland make
+
+CC = bcc
+CFLAGS = -ml
+LDFLAGS= -ml
+OBJ =.obj
+EXE =.exe
+
+HEADER = bx_types.h bx_read.h dv_all.h
+
+CSRCbx = box.c bx_read.c bx_misc.c
+
+CSRCdv = dv_ansi.c dv_ascii.c dv_crt.c dv_fig.c \
+ dv_hpgl.c dv_lj250.c dv_pict.c dv_ps.c\
+ dv_regis.c dv_rtf.c dv_html.c
+
+OBJS = box$(OBJ) bx_read$(OBJ) bx_misc$(OBJ) \
+ dv_ansi$(OBJ) dv_ascii$(OBJ) dv_crt$(OBJ) dv_fig$(OBJ) \
+ dv_hpgl$(OBJ) dv_lj250$(OBJ) dv_pict$(OBJ) dv_ps$(OBJ)\
+ dv_regis$(OBJ) dv_rtf$(OBJ) dv_html$(OBJ)
+
+boxshade$(EXE): $(OBJS)
+ $(CC) $(LDFLAGS) -e$@ @&&|
+ $(OBJS)
+|
+
+box$(OBJ): box.c bx_types.h bx_read.h dv_all.h version.h
+bx_read$(OBJ): bx_read.c bx_types.h bx_read.h
+bx_misc$(OBJ): bx_misc.c bx_types.h
+dv_ansi$(OBJ): dv_ansi.c bx_types.h bx_read.h dv_all.h
+dv_ascii$(OBJ): dv_ascii.c bx_types.h bx_read.h dv_all.h
+dv_crt$(OBJ): dv_crt.c bx_types.h bx_read.h dv_all.h
+dv_fig$(OBJ): dv_fig.c bx_types.h bx_read.h dv_all.h
+dv_hpgl$(OBJ): dv_hpgl.c bx_types.h bx_read.h dv_all.h
+dv_html$(OBJ): dv_html.c bx_types.h bx_read.h dv_all.h version.h
+dv_lj250$(OBJ): dv_lj250.c bx_types.h bx_read.h dv_all.h
+dv_pict$(OBJ): dv_pict.c bx_types.h bx_read.h dv_all.h
+dv_ps$(OBJ): dv_ps.c bx_types.h bx_read.h dv_all.h version.h
+dv_regis$(OBJ): dv_regis.c bx_types.h bx_read.h dv_all.h
+dv_rtf$(OBJ): dv_rtf.c bx_types.h bx_read.h dv_all.h
Added: trunk/packages/boxshade/branches/upstream/current/makefile.djp
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/makefile.djp (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/makefile.djp 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,42 @@
+# BOXSHADE makefile with DJGPP and GNU-make (MS-DOS):
+CC = gcc
+CFLAGS = -Wall -O
+LDFLAGS= -s
+LIBS = -lm
+OBJ =.o
+EXE =.exe
+
+HEADER = bx_types.h bx_read.h dv_all.h
+
+CSRCbx = box.c bx_read.c bx_misc.c
+
+CSRCdv = dv_ansi.c dv_ascii.c dv_crt.c dv_fig.c \
+ dv_hpgl.c dv_lj250.c dv_pict.c dv_ps.c\
+ dv_regis.c dv_rtf.c dv_html.c
+
+OBJS = box$(OBJ) bx_read$(OBJ) bx_misc$(OBJ) \
+ dv_ansi$(OBJ) dv_ascii$(OBJ) dv_crt$(OBJ) dv_fig$(OBJ) \
+ dv_hpgl$(OBJ) dv_lj250$(OBJ) dv_pict$(OBJ) dv_ps$(OBJ)\
+ dv_regis$(OBJ) dv_rtf$(OBJ) dv_html$(OBJ)
+
+boxshade$(EXE): $(OBJS)
+ $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
+
+depend:
+ gcc -MM $(CSRCbx) >depend
+ gcc -MM $(CSRCdv) >>depend
+
+box$(OBJ): box.c bx_types.h bx_read.h dv_all.h version.h
+bx_read$(OBJ): bx_read.c bx_types.h bx_read.h
+bx_misc$(OBJ): bx_misc.c bx_types.h
+dv_ansi$(OBJ): dv_ansi.c bx_types.h bx_read.h dv_all.h
+dv_ascii$(OBJ): dv_ascii.c bx_types.h bx_read.h dv_all.h
+dv_crt$(OBJ): dv_crt.c bx_types.h bx_read.h dv_all.h
+dv_fig$(OBJ): dv_fig.c bx_types.h bx_read.h dv_all.h
+dv_hpgl$(OBJ): dv_hpgl.c bx_types.h bx_read.h dv_all.h
+dv_html$(OBJ): dv_html.c bx_types.h bx_read.h dv_all.h version.h
+dv_lj250$(OBJ): dv_lj250.c bx_types.h bx_read.h dv_all.h
+dv_pict$(OBJ): dv_pict.c bx_types.h bx_read.h dv_all.h
+dv_ps$(OBJ): dv_ps.c bx_types.h bx_read.h dv_all.h version.h
+dv_regis$(OBJ): dv_regis.c bx_types.h bx_read.h dv_all.h
+dv_rtf$(OBJ): dv_rtf.c bx_types.h bx_read.h dv_all.h
Added: trunk/packages/boxshade/branches/upstream/current/makefile.unx
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/makefile.unx (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/makefile.unx 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,42 @@
+# BOXSHADE makefile for unix (tested under Linux && Solaris)
+CC = gcc
+CFLAGS = -O
+LDFLAGS= -s
+LIBS = -lm
+OBJ =.o
+EXE =
+
+HEADER = bx_types.h bx_read.h dv_all.h
+
+CSRCbx = box.c bx_read.c bx_misc.c
+
+CSRCdv = dv_ansi.c dv_ascii.c dv_crt.c dv_fig.c\
+ dv_hpgl.c dv_lj250.c dv_pict.c dv_ps.c\
+ dv_regis.c dv_rtf.c dv_html.c
+
+OBJS = box$(OBJ) bx_read$(OBJ) bx_misc$(OBJ) \
+ dv_ansi$(OBJ) dv_ascii$(OBJ) dv_crt$(OBJ) dv_fig$(OBJ) \
+ dv_hpgl$(OBJ) dv_lj250$(OBJ) dv_pict$(OBJ) dv_ps$(OBJ)\
+ dv_regis$(OBJ) dv_rtf$(OBJ) dv_html$(OBJ)
+
+boxshade$(EXE): $(OBJS)
+ $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
+
+depend:
+ gcc -MM $(CSRCbx) >depend
+ gcc -MM $(CSRCdv) >>depend
+
+box$(OBJ): box.c bx_types.h bx_read.h dv_all.h version.h
+bx_read$(OBJ): bx_read.c bx_types.h bx_read.h
+bx_misc$(OBJ): bx_misc.c bx_types.h
+dv_ansi$(OBJ): dv_ansi.c bx_types.h bx_read.h dv_all.h
+dv_ascii$(OBJ): dv_ascii.c bx_types.h bx_read.h dv_all.h
+dv_crt$(OBJ): dv_crt.c bx_types.h bx_read.h dv_all.h
+dv_fig$(OBJ): dv_fig.c bx_types.h bx_read.h dv_all.h
+dv_hpgl$(OBJ): dv_hpgl.c bx_types.h bx_read.h dv_all.h
+dv_html$(OBJ): dv_html.c bx_types.h bx_read.h dv_all.h version.h
+dv_lj250$(OBJ): dv_lj250.c bx_types.h bx_read.h dv_all.h
+dv_pict$(OBJ): dv_pict.c bx_types.h bx_read.h dv_all.h
+dv_ps$(OBJ): dv_ps.c bx_types.h bx_read.h dv_all.h version.h
+dv_regis$(OBJ): dv_regis.c bx_types.h bx_read.h dv_all.h
+dv_rtf$(OBJ): dv_rtf.c bx_types.h bx_read.h dv_all.h
Added: trunk/packages/boxshade/branches/upstream/current/makefile.w16
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/makefile.w16 (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/makefile.w16 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,79 @@
+#
+# Borland C++ IDE generated makefile
+#
+
+#BCCPATH=k:\borlandc
+BCCPATH=e:\comp\bc45
+
+CC = bcc
+LDFLAGS= -L$(BCCPATH)\LIB -Twe -c -C -x
+OBJ =.obj
+EXE =.exe
+
+CFG = BccW16.cfg
+
+.c.obj:
+ $(CC) +$(CFG) -P- -c -o$@ $<
+
+CSRCbx = box.c bx_read.c bx_misc.c
+
+CSRCdv = dv_ansi.c dv_ascii.c dv_crt.c dv_fig.c \
+ dv_hpgl.c dv_lj250.c dv_pict.c dv_ps.c\
+ dv_regis.c dv_rtf.c dv_html.c
+
+OBJS = box$(OBJ) bx_read$(OBJ) bx_misc$(OBJ) \
+ dv_ansi$(OBJ) dv_ascii$(OBJ) dv_crt$(OBJ) dv_fig$(OBJ) \
+ dv_hpgl$(OBJ) dv_lj250$(OBJ) dv_pict$(OBJ) dv_ps$(OBJ)\
+ dv_regis$(OBJ) dv_rtf$(OBJ) dv_html$(OBJ)
+
+boxshade$(EXE): $(CFG) $(OBJS)
+ tlink @&&|
+ /v $(LDFLAGS) +
+$(BCCPATH)\LIB\c0wl.obj+
+box.obj+
+bx_misc.obj+
+bx_read.obj+
+dv_ansi.obj+
+dv_ascii.obj+
+dv_crt.obj+
+dv_fig.obj+
+dv_hpgl.obj+
+dv_lj250.obj+
+dv_pict.obj+
+dv_ps.obj+
+dv_regis.obj+
+dv_rtf.obj+
+dv_html.obj
+$<,$*
+$(BCCPATH)\LIB\import.lib+
+$(BCCPATH)\LIB\mathwl.lib+
+$(BCCPATH)\LIB\cwl.lib
+
+|
+
+#Compiler configuration file
+BccW16.cfg :
+ Copy &&|
+-N
+-v
+-vi
+-ml
+-WS
+-I$(BCCPATH)\INCLUDE
+-D
+| $@
+
+box$(OBJ): box.c bx_types.h bx_read.h dv_all.h version.h
+bx_read$(OBJ): bx_read.c bx_types.h bx_read.h
+bx_misc$(OBJ): bx_misc.c bx_types.h
+dv_ansi$(OBJ): dv_ansi.c bx_types.h bx_read.h dv_all.h
+dv_ascii$(OBJ): dv_ascii.c bx_types.h bx_read.h dv_all.h
+dv_crt$(OBJ): dv_crt.c bx_types.h bx_read.h dv_all.h
+dv_fig$(OBJ): dv_fig.c bx_types.h bx_read.h dv_all.h
+dv_hpgl$(OBJ): dv_hpgl.c bx_types.h bx_read.h dv_all.h
+dv_html$(OBJ): dv_html.c bx_types.h bx_read.h dv_all.h version.h
+dv_lj250$(OBJ): dv_lj250.c bx_types.h bx_read.h dv_all.h
+dv_pict$(OBJ): dv_pict.c bx_types.h bx_read.h dv_all.h
+dv_ps$(OBJ): dv_ps.c bx_types.h bx_read.h dv_all.h version.h
+dv_regis$(OBJ): dv_regis.c bx_types.h bx_read.h dv_all.h
+dv_rtf$(OBJ): dv_rtf.c bx_types.h bx_read.h dv_all.h
Added: trunk/packages/boxshade/branches/upstream/current/positive.grp
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/positive.grp (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/positive.grp 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,20 @@
+This file is a Amino-acid grouping file for use with NEWBOX.
+Each line contains a set of amino acids which are considered
+'similar' when calculating the consensus.
+This table was taken from ClustalX v1.3b:
+WEAK groups:
+ These are all the positively scoring groups that occur in
+ the Gonnet Pam250 matrix.
+..
+FYW
+CSA
+ATV
+SAG
+STNK
+STPA
+SGND
+SNDEQK
+NDEQHK
+NEQHRK
+FVLIM
+HFY
Added: trunk/packages/boxshade/branches/upstream/current/positive.sim
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/positive.sim (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/positive.sim 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,70 @@
+This file is a Amino-acid similarity file for use with BOX.
+
+This file is used in colouring residues that are "similar"
+to a single consensus residue.
+
+Similarities contained in this file are not automatically
+set-forming. This means:
+The line
+I LVM means that I is similar to L,V and M and also that
+ L,V,M are similar to I.
+ It does not imply that L is similar to V or to M.
+For achieving this, more lines (the next ones) are necessary.
+Although is seems weird, this feature has been chosen DELIBERATELY
+because I think it could be helpful in some cases.
+
+This table was taken from ClustalX v1.3b:
+WEAK groups:
+ These are all the positively scoring groups that occur in
+ the Gonnet Pam250 matrix
+..
+F YW
+Y WF
+W FY
+C SA
+S AC
+A CS
+A TV
+T VA
+V AT
+S AG
+A GS
+G SA
+S TNK
+T NKS
+N KST
+K STN
+S TPA
+T PAS
+P AST
+A STP
+S GND
+G NDS
+N DSG
+D SGN
+S NDEQK
+N DEQKS
+D EQKSN
+E QKSND
+Q KSNDE
+K SNDEQ
+N DEQHK
+D EQHKN
+E QHKND
+Q HKNDE
+H KNDEQ
+K NDEQH
+N EQHRK
+E QHRKN
+Q HRKNE
+H RKNEQ
+R KNEQH
+K NEQHR
+F VLIM
+V LIMF
+L IMFV
+I MFVL
+M FVLI
+H FY
+F YH
+Y HF
Added: trunk/packages/boxshade/branches/upstream/current/strong.grp
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/strong.grp (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/strong.grp 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,17 @@
+This file is a Amino-acid grouping file for use with NEWBOX.
+Each line contains a set of amino acids which are considered
+'similar' when calculating the consensus.
+This table was taken from ClustalX v1.3b:
+STRONG groups:
+ These are all the positively scoring groups that occur in
+ the Gonnet Pam250 matrix with score >0.5
+..
+STA
+NEQK
+NHQK
+NDEQ
+QHRK
+MILV
+MILF
+HY
+FYW
Added: trunk/packages/boxshade/branches/upstream/current/strong.sim
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/strong.sim (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/strong.sim 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,51 @@
+This file is a Amino-acid similarity file for use with BOX.
+
+This file is used in colouring residues that are "similar"
+to a single consensus residue.
+
+Similarities contained in this file are not automatically
+set-forming. This means:
+The line
+I LVM means that I is similar to L,V and M and also that
+ L,V,M are similar to I.
+ It does not imply that L is similar to V or to M.
+For achieving this, more lines (the next ones) are necessary.
+Although is seems weird, this feature has been chosen DELIBERATELY
+because I think it could be helpful in some cases.
+
+This table was taken from ClustalX v1.3b:
+STRONG groups:
+ These are all the positively scoring groups that occur in
+ the Gonnet Pam250 matrix with score >0.5
+..
+S TA
+T AS
+A ST
+N EQK
+E QKN
+Q KNE
+K NEQ
+N HQK
+H QKN
+Q KNH
+K NHQ
+N DEQ
+D EQN
+E QND
+Q NDE
+Q HRK
+H RKQ
+R KQH
+K QHR
+M ILV
+I LVM
+L VMI
+V MIL
+M ILF
+I LFM
+L FMI
+F MIL
+H Y
+F YW
+Y WF
+W FY
Added: trunk/packages/boxshade/branches/upstream/current/version.h
===================================================================
--- trunk/packages/boxshade/branches/upstream/current/version.h (rev 0)
+++ trunk/packages/boxshade/branches/upstream/current/version.h 2006-10-07 01:02:17 UTC (rev 143)
@@ -0,0 +1,2 @@
+/* acktual boxshade version */
+#define BOXSHADE_ver "v3.31 C (beta, 970507)"
More information about the debian-med-commit
mailing list