aboutsummaryrefslogtreecommitdiffstats
path: root/biology/mapm3
diff options
context:
space:
mode:
authorrafan <rafan@FreeBSD.org>2008-04-06 12:49:05 +0800
committerrafan <rafan@FreeBSD.org>2008-04-06 12:49:05 +0800
commit31642abe3e120390d0384d76ae967e9982d57cc7 (patch)
tree58f930ac9505de92b9808a09cb87775250ecf63c /biology/mapm3
parent48a6b4ab16d2e8058e6be505adabdf779d93e98b (diff)
downloadfreebsd-ports-gnome-31642abe3e120390d0384d76ae967e9982d57cc7.tar.gz
freebsd-ports-gnome-31642abe3e120390d0384d76ae967e9982d57cc7.tar.zst
freebsd-ports-gnome-31642abe3e120390d0384d76ae967e9982d57cc7.zip
MAPMAKER/EXP is a linkage analysis package designed to help construct primary
linkage maps of markers segregating in experimental crosses. MAPMAKER/EXP performs full multipoint linkage analysis (simultaneous estimation of all recombination fractions from the primary data) for dominant, recessive, and co- dominant (e.g. RFLP-like) markers. MAPMAKER/EXP is an experimental-cross-only successor to the original MAPMAKER program. MAPMAKER/QTL is a companion program to MAPMAKER/EXP which allows one to map genes controlling polygenic quantitative traits in F2 intercrosses and BC1 backcrosses relative to a genetic linkage map. More information on MAPMAKER/QTL can be found in the technical report (included with MAPMAKER/QTL). WWW: http://www.broad.mit.edu/ftp/distribution/software/mapmaker3/ PR: ports/122452 Submitted by: Tassilo Philipp <tphilipp at potion-studios.com>
Diffstat (limited to 'biology/mapm3')
-rw-r--r--biology/mapm3/Makefile26
-rw-r--r--biology/mapm3/distinfo3
-rw-r--r--biology/mapm3/files/patch-Makefile54
-rw-r--r--biology/mapm3/files/patch-lib-iolib.c11
-rw-r--r--biology/mapm3/files/patch-lib-iolib.h78
-rw-r--r--biology/mapm3/files/patch-lib-makehelp.c81
-rw-r--r--biology/mapm3/files/patch-lib-shell.c81
-rw-r--r--biology/mapm3/files/patch-lib-syscode.c43
-rw-r--r--biology/mapm3/files/patch-lib-system.h71
-rw-r--r--biology/mapm3/files/patch-mapm-chroms.c29
-rw-r--r--biology/mapm3/files/patch-mapm-database.c11
-rw-r--r--biology/mapm3/files/patch-mapm-info.c41
-rw-r--r--biology/mapm3/files/patch-mapm-map_info.h11
-rw-r--r--biology/mapm3/files/patch-mapm-mapm.h11
-rw-r--r--biology/mapm3/files/patch-mapm-maps.c72
-rw-r--r--biology/mapm3/files/patch-mapm-npt_cmds.c11
-rw-r--r--biology/mapm3/files/patch-mapm-print.c11
-rw-r--r--biology/mapm3/files/patch-mapm-reader.c191
-rw-r--r--biology/mapm3/files/patch-mapm-state.c18
-rw-r--r--biology/mapm3/files/patch-mapm-sys_cmds.c47
-rw-r--r--biology/mapm3/files/patch-mapm-two_cmds.c16
-rw-r--r--biology/mapm3/files/patch-quant-qcmds.c93
-rw-r--r--biology/mapm3/files/patch-quant-qraw.c53
-rw-r--r--biology/mapm3/files/patch-sun-xmapmaker9
-rw-r--r--biology/mapm3/files/patch-sun-xqtl9
-rw-r--r--biology/mapm3/pkg-descr13
-rw-r--r--biology/mapm3/pkg-plist6
27 files changed, 1100 insertions, 0 deletions
diff --git a/biology/mapm3/Makefile b/biology/mapm3/Makefile
new file mode 100644
index 000000000000..d0f9634ce1a4
--- /dev/null
+++ b/biology/mapm3/Makefile
@@ -0,0 +1,26 @@
+# New ports collection makefile for: mapm3
+# Date created: 26 March 2008
+# Whom: Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# $FreeBSD$
+#
+
+PORTNAME= mapm3
+PORTVERSION= 3.0
+CATEGORIES= biology
+MASTER_SITES= http://www.broad.mit.edu/ftp/distribution/software/mapmaker3/ \
+ ftp://ftp.ibiblio.org/pub/academic/biology/molbio/mapmaker/ \
+ http://iubio.bio.indiana.edu/soft/molbio/qtl/mapmaker/ \
+ http://www.mirrorservice.org/sites/iubio.bio.indiana.edu/molbio/qtl/mapmaker/
+DISTNAME= mapm3-source
+EXTRACT_SUFX= .tar.Z
+
+MAINTAINER= tphilipp@potion-studios.com
+COMMENT= Constructs linkage maps of markers segregating in experimental crosses
+
+NO_WRKSUBDIR= yes
+
+post-patch:
+ ${CP} ${WRKSRC}/sun/* ${WRKSRC}
+
+.include <bsd.port.mk>
diff --git a/biology/mapm3/distinfo b/biology/mapm3/distinfo
new file mode 100644
index 000000000000..70b391930184
--- /dev/null
+++ b/biology/mapm3/distinfo
@@ -0,0 +1,3 @@
+MD5 (mapm3-source.tar.Z) = 8aa7a061d32a49c8704c1a5c4b31aa2d
+SHA256 (mapm3-source.tar.Z) = 107c8d0e7e89e2fe43fe17233d38c22161def851c8094435f3440a39c0cdca4c
+SIZE (mapm3-source.tar.Z) = 1321227
diff --git a/biology/mapm3/files/patch-Makefile b/biology/mapm3/files/patch-Makefile
new file mode 100644
index 000000000000..0b1a8f1454d0
--- /dev/null
+++ b/biology/mapm3/files/patch-Makefile
@@ -0,0 +1,54 @@
+--- Makefile.orig 2008-04-04 20:05:29.000000000 +0000
++++ Makefile 2008-04-04 19:51:04.000000000 +0000
+@@ -16,6 +16,7 @@
+ ####
+ #### For Macs with A/UX, use: SYS= -D_SYS_AUX
+ #### For DECStations, use: SYS= -D_SYS_ULTRIX
++#### For modern BSD systems (added for FreeBSD 6.3 port) use: SYS= -D_SYS_BSD
+ #### For PC's with WATCOM C/386 use the special Makefile instead,
+ #### No other ports are built in yet. Please do them, and tell us how!
+ #### Refer to lib/system.h and lib/syscode.c for ideas.
+@@ -24,7 +25,7 @@
+ #### datasets (roughly 5000 loci vs 1000 loci). For even bigger datasets,
+ #### modify mapm/mapm.h.
+
+-SYS= -D_SYS_SUNOS
++SYS= -D_SYS_BSD -D_BIG_DATASETS
+
+ #### Next define the system libraries to link with Mapmaker. On SunOS, Ultrix
+ #### and other vanilla-ish BSD systems, the correct setting is:
+@@ -46,7 +47,7 @@
+ #### Be sure that you have write permission to this directory (e.g. you may
+ #### need to be logged in as "root" to install MAPMAKER in some directories).
+
+-DIR= /usr/local/bin
++DIR= ${PREFIX}/bin
+
+ #### RDLN below refers to the GNU Readline library, which can (optionally) be
+ #### used by MAPMAKER to provide interactive command line editing. See the
+@@ -70,9 +71,11 @@
+ #### (see the end of readline/readline.c). Readline will not compile on
+ #### A/UX without using GCC instead of A/UX's cc (because it needs alloca).
+
+-OUR_LIB= gnu.o
+-GNU_OPT= -D_GNU_READLINE -I.
+-GNU_LIBS= -L$(RDLN) -lreadline
++#OUR_LIB= gnu.o
++#GNU_OPT= -D_GNU_READLINE -I.
++OUR_LIB= lib.o
++GNU_OPT=
++#GNU_LIBS= -L$(RDLN) -lreadline
+
+ #### Now we specify the commands used to compile MAPMAKER. The stuff
+ #### below works on Sun SPARCStations running SunOS 4.1.x (aka Solaris 1.x)
+@@ -82,8 +85,8 @@
+ #### person at your site should be able to figure out what to do almost
+ #### trivially. See the file INSTALL.ME for details.
+
+-COMPILE= cc
+-LINKALL= cc
++COMPILE= ${CC}
++LINKALL= ${CC}
+ LINKLIB= ld -r
+ DELETE= rm -f
+ INSTALL= cp
diff --git a/biology/mapm3/files/patch-lib-iolib.c b/biology/mapm3/files/patch-lib-iolib.c
new file mode 100644
index 000000000000..4d845b2f6321
--- /dev/null
+++ b/biology/mapm3/files/patch-lib-iolib.c
@@ -0,0 +1,11 @@
+--- lib/iolib.c.orig 2008-04-04 20:05:29.000000000 +0000
++++ lib/iolib.c 2008-03-23 15:39:56.000000000 +0000
+@@ -299,7 +299,7 @@
+ }
+
+
+-void fgetln(fp) /* ln is side-effected. */
++void fgetln_(fp) /* ln is side-effected. */
+ FILE *fp;
+ {
+ if (fp==stdin) { getln("? "); return; }
diff --git a/biology/mapm3/files/patch-lib-iolib.h b/biology/mapm3/files/patch-lib-iolib.h
new file mode 100644
index 000000000000..c753073dc5aa
--- /dev/null
+++ b/biology/mapm3/files/patch-lib-iolib.h
@@ -0,0 +1,78 @@
+--- lib/iolib.h.orig 2008-04-04 20:05:29.000000000 +0000
++++ lib/iolib.h 2008-04-03 20:00:49.000000000 +0000
+@@ -53,9 +53,9 @@
+ conditions. Assume its really only one (or maybe 2-3) lines. ps_ is similar,
+ but for internal use only by the functions in this library.
+
+-Ln is a global input string side-effected by getln() and fgetln().
++Ln is a global input string side-effected by getln() and fgetln_().
+ The pointer ln itself may be side-effected, (eg: by the token parsing
+-routines) as it is reset during each call to getln() or fgetln().
++routines) as it is reset during each call to getln() or fgetln_().
+ However, the string space used to hold the input line is reused, and
+ any pointers into the ln string which you saved may point to trash
+ after one of these calls. Ln is alloced for 2K chars, leaving lots of
+@@ -66,7 +66,7 @@
+ word breaks, converting tabs to spaces (every 8 chars), buffering
+ output (perhaps multiple lines!) and more. The do_fwrite() function does
+ not do this. Similarly, the getln() function despace()es,
+-lowercase()es, and filter()s its input, while fgetln(), input(), and
++lowercase()es, and filter()s its input, while fgetln_(), input(), and
+ finput() functions do not [yes, it's a somewhat odd inconsistancy, but
+ it's handy].
+
+@@ -254,6 +254,14 @@
+ files! (The obvious exception is logging and input redirection, for which
+ you should use the rather carefuly crafted routines described above!) */
+
++/* Mimics 'writable string' behaviour which wasn't problematic in some old
++ pre '89 code. GCC supported it for a long time via the -fwritable-strings
++ option. However, as of version 3.4, it was declared deprecated, and removed
++ in later versions. A lot of the code depends on this questionable behaviour,
++ so the following macro is used throughout this *BSD port. */
++#define WRS(s) (char[]){(s)}
++
++
+ bool make_filename(); /* args: char *name; int mode; char *extension;
+ This turns name into a perfectly valid file name, and returns TRUE if this
+ was possible. The name may include a directory specification - otherwise it
+@@ -277,7 +285,7 @@
+ #define APPEND "a"
+ void close_file(); /* args: FILE *fp; */
+
+-bool end_of_file(); /* args: FILE *fp; returns TRUE if finput() or fgetln()
++bool end_of_file(); /* args: FILE *fp; returns TRUE if finput() or fgetln_()
+ will be able to grab a new line from the file. */
+ bool end_of_text(); /* args: FILE *fp; Like an end-of-file test, except it also
+ returns TRUE if rest of the file is white. As a side-effect, it will step
+@@ -289,17 +297,17 @@
+
+ #define fpr(fp) fprint(fp,ps)
+ #define fwp(fp) fwrite(fp,ps)
+-#define fnl(fp) fwrite(fp,"\n")
++#define fnl(fp) fwrite(fp,WRS("\n"))
+
+ void finput(); /* args: FILE *fp; char *str; int max_input_chars; */
+-void fgetln(); /* args: FILE *fp; side-effects global char *ln;
+- Finput() and fgetln() both return a filter()ed line, and on end-of-file, the
++void fgetln_(); /* args: FILE *fp; side-effects global char *ln;
++ Finput() and fgetln_() both return a filter()ed line, and on end-of-file, the
+ ENDOFILE message is sent. Str must have room for max_input_chars+1 chars,
+ and only max_input_chars-1 chars can usually be read, as a '\n' may be read
+ in at the end and then deleted from the string. */
+
+ void fgetdataln(); /* args: FILE *fp; int *count; side-effects global ln;
+- Like fgetln(), although this skips null (white) and comment lines (those
++ Like fgetln_(), although this skips null (white) and comment lines (those
+ beginning with a '#' in the leftmost position. Also, each time any line is
+ read from the file (data, null, or comment), *count is incremented. */
+
+@@ -329,7 +337,7 @@
+
+ extern char *ps_, *ln_; /* input and output strings for the library only */
+ extern char *linebuf; /* tty output buffer */
+-extern char *gotln, *lnptr; /* input line for getln(), fgetln() */
++extern char *gotln, *lnptr; /* input line for getln(), fgetln_() */
+
+ extern FILE **in_fp; /* the "stack" of input files for redirecting input */
+ extern int redirs;
diff --git a/biology/mapm3/files/patch-lib-makehelp.c b/biology/mapm3/files/patch-lib-makehelp.c
new file mode 100644
index 000000000000..b32c1600d4d1
--- /dev/null
+++ b/biology/mapm3/files/patch-lib-makehelp.c
@@ -0,0 +1,81 @@
+--- lib/makehelp.c.orig 2008-04-04 20:05:29.000000000 +0000
++++ lib/makehelp.c 2008-03-27 21:52:37.000000000 +0000
+@@ -131,7 +131,7 @@
+ {
+ close_file(file);
+
+- fwrite(hlp,"@end\n");
++ fwrite(hlp,WRS("@end\n"));
+ close_file(hlp);
+
+ write_topics_and_end();
+@@ -172,9 +172,9 @@
+ strcpy(man_name, argv[4]);
+
+ strcpy(code_failed,code_name);
+- make_filename(code_failed,FORCE_EXTENSION,"failed");
++ make_filename(code_failed,FORCE_EXTENSION,WRS("failed"));
+ strcpy(final_hlp_name,hlp_name);
+- make_filename_in_dir(final_hlp_name,FORCE_EXTENSION,"help",
++ make_filename_in_dir(final_hlp_name,FORCE_EXTENSION,WRS("help"),
+ FORCE_DIR,argv[5]);
+
+ file= open_file(file_name,READ);
+@@ -187,16 +187,16 @@
+ matrix(entry,MAX_COMMANDS,MAXLINE+1,char);
+
+ /* start help file 12345678901234567890123456789012345 */
+- fwrite(hlp, "#MAPMAKER help file - do not edit!\n");
++ fwrite(hlp,WRS("#MAPMAKER help file - do not edit!\n"));
+ pos= 34l + LINE_BREAK_LEN;
+
+ /* code file */
+- fwrite(code,"/* MAPMAKER help code file - do not edit! */ \n\n");
+- fwrite(code,"#define INC_LIB \n#define INC_SHELL \n");
+- fwrite(code,"#include \"system.h\" \n\n");
++ fwrite(code,WRS("/* MAPMAKER help code file - do not edit! */ \n\n"));
++ fwrite(code,WRS("#define INC_LIB \n#define INC_SHELL \n"));
++ fwrite(code,WRS("#include \"system.h\" \n\n"));
+ /* sf(ps,"char help_filename[]= \"%s\";\n\n",final_hlp_name);
+ fwrite(code,ps); */
+- fwrite(code,"void make_help_entries()\n{\n");
++ fwrite(code,WRS("void make_help_entries()\n{\n"));
+
+ /* man file */
+ man_write_title();
+@@ -242,7 +242,7 @@
+ strcpy(name,str+i); despace(name);
+ nextstr();
+ sf(ps,"\t%s... ",name); pr(); flush();
+-
++
+ if (streq(type,"cmd")) parse_entry(CMD,name,abbreviation);
+ else if (streq(type,"opt")) parse_entry(OPT,name,abbreviation);
+ else if (streq(type,"param")) parse_entry(PAR,name,abbreviation);
+@@ -419,7 +419,7 @@
+ sf(ps," mktopic(%d,\"%s\",TOP,%ldl);\n",s,temp,position[s]);
+ fpr(code); s++;
+ }
+- fprint(code,"}\n");
++ fprint(code,WRS("}\n"));
+ }
+
+
+@@ -681,7 +681,7 @@
+ case TOP:
+ man_write_line("");
+ strcpy(upcase,section[s]); uppercase(upcase);
+- sf(temp," %s\(%d\) %s ",(s>=10 ? "":" "),s,upcase); s++; break;
++ sf(temp," %s(%d) %s ",(s>=10 ? "":" "),s,upcase); s++; break;
+ case CMD:
+ strcpy(upcase,entry[i]); uppercase(upcase);
+ sf(temp," %s Command ",upcase); break;
+@@ -718,7 +718,7 @@
+ if (entry_type[i]==TOP) {
+ man_write_line("");
+ strcpy(upcase,section[s]); uppercase(upcase);
+- sf(temp,"%s\(%d\) %s ",(s>=10 ? "":""),s,upcase); s++;
++ sf(temp,"%s(%d) %s ",(s>=10 ? "":""),s,upcase); s++;
+ man_write_line(temp);
+ } else {
+ sf(temp,"%s%s",entry[i],(entry_type[i]==HLP ? "*":""));
diff --git a/biology/mapm3/files/patch-lib-shell.c b/biology/mapm3/files/patch-lib-shell.c
new file mode 100644
index 000000000000..b558288fd6aa
--- /dev/null
+++ b/biology/mapm3/files/patch-lib-shell.c
@@ -0,0 +1,81 @@
+--- lib/shell.c.orig 2008-04-04 20:05:29.000000000 +0000
++++ lib/shell.c 2008-03-27 21:24:20.000000000 +0000
+@@ -129,7 +129,7 @@
+
+ run {
+ strcpy(name,version_filename);
+- if (!make_filename_in_dir(name,FORCE_EXTENSION,".v",
++ if (!make_filename_in_dir(name,FORCE_EXTENSION,WRS(".v"),
+ FORCE_DIR,CODE_DIR)) send(CANTOPEN);
+ fp=open_file(name,READ);
+ finput(fp,ln_,MAXLINE); p=ln_; /* don't hack &ln_ */
+@@ -226,7 +226,7 @@
+ help_uses_wimp_help= FALSE;
+
+ help_file=NULL;
+- if (make_filename_in_dir(help_filename,FORCE_EXTENSION,HELP_EXT,
++ if (make_filename_in_dir(help_filename,FORCE_EXTENSION,WRS(HELP_EXT),
+ DEFAULT_DIR,CODE_DIR)) {
+ run help_file=open_file(help_filename,READ);
+ except_when(CANTOPEN) {}
+@@ -950,7 +950,7 @@
+ use_uncrunched_args();
+ get_one_arg(stoken,sREQUIRED,file_name);
+
+- if (!make_filename(file_name,DEFAULT_EXTENSION,"in"))
++ if (!make_filename(file_name,DEFAULT_EXTENSION,WRS("in")))
+ error("bad input file name");
+ else redirect_input(file_name,TRUE); /* verbose -> messages */
+ }
+@@ -972,7 +972,7 @@
+ usage_error(1);
+
+ } else if (!nullstr(file_name)) {
+- if (!make_filename(file_name,DEFAULT_EXTENSION,"out"))
++ if (!make_filename(file_name,DEFAULT_EXTENSION,WRS("out")))
+ sf(ps,"error: Bad photo file name");
+ if (!photo_to_file(file_name,"a"))
+ sf(ps,"error: Unable to open photo file '%s'\n",file_name);
+@@ -1080,12 +1080,12 @@
+ else if (topic_help_key[i]==HELPLESS) print(NO_HELP_KEY);
+ else {
+ fgoto_line(help_file,topic_help_key[i]);
+- fgetln(help_file);
++ fgetln_(help_file);
+ got_any=FALSE;
+ while (ln[0]!='@') {
+ got_any=TRUE;
+ print(ln); nl();
+- fgetln(help_file);
++ fgetln_(help_file);
+ }
+ if (!got_any) print(NO_HELP_KEY);
+ }
+@@ -1131,12 +1131,12 @@
+ else if (cmd[i]->help_key==HELPLESS) print(NO_HELP_KEY);
+ else {
+ fgoto_line(help_file,cmd[i]->help_key);
+- fgetln(help_file);
++ fgetln_(help_file);
+ got_any=FALSE;
+ while (ln[0]!='@') {
+ got_any=TRUE;
+ print(ln); nl();
+- fgetln(help_file);
++ fgetln_(help_file);
+ }
+ if (!got_any) print(NO_HELP_KEY);
+ }
+@@ -1164,10 +1164,10 @@
+ { print(NO_HELP_KEY); nl(); print(SURROGATE_ABOUT); }
+ else {
+ fgoto_line(help_file,n);
+- fgetln(help_file);
++ fgetln_(help_file);
+ while (ln[0]!='@') {
+ print(ln); nl();
+- fgetln(help_file);
++ fgetln_(help_file);
+ }
+ }
+ nl(); print(MOREHELP0); print(MOREHELP1); print(MOREHELP2);
diff --git a/biology/mapm3/files/patch-lib-syscode.c b/biology/mapm3/files/patch-lib-syscode.c
new file mode 100644
index 000000000000..c74d4b58c6ce
--- /dev/null
+++ b/biology/mapm3/files/patch-lib-syscode.c
@@ -0,0 +1,43 @@
+--- lib/syscode.c.orig 2008-04-04 20:05:29.000000000 +0000
++++ lib/syscode.c 2008-03-27 21:03:12.000000000 +0000
+@@ -198,7 +198,7 @@
+ long fseekvalue= 0L;
+ frewind(fp);
+ run while (fseekvalue < index-1) {
+- fgetln(help_file);
++ fgetln_(help_file);
+ fseekvalue+=len(ln)+1;
+ } except_when(ENDOFILE) return(FALSE);
+ return(TRUE);
+@@ -742,26 +742,26 @@
+
+ } else if (matches(argv[i]+1,"load")) {
+ check_file_arg(*argc_ptr-i,argv[i+1],file_arg[LOAD_FILE_ARG],
+- "load","data",argv[0],READ);
++ WRS("load"),WRS("data"),argv[0],READ);
+ prep_it=FALSE;
+ argv[i++][0]='\0'; argv[i][0]='\0';
+ } else if (matches(argv[i]+1,"prep")) {
+ check_file_arg(*argc_ptr-i,argv[i+1],file_arg[LOAD_FILE_ARG],
+- "prep","raw",argv[0],READ);
++ WRS("prep"),WRS("raw"),argv[0],READ);
+ prep_it=TRUE;
+ argv[i++][0]='\0'; argv[i][0]='\0';
+ } else if (matches(argv[i]+1,"run")) {
+ check_file_arg(*argc_ptr-i,argv[i+1],file_arg[RUN_FILE_ARG],
+- "run","in",argv[0],READ);
++ WRS("run"),WRS("in"),argv[0],READ);
+ argv[i++][0]='\0'; argv[i][0]='\0';
+ } else if (matches(argv[i]+1,"photo")) {
+ check_file_arg(*argc_ptr-i,argv[i+1],file_arg[PHOTO_FILE_ARG],
+- "photo","out",argv[0],APPEND);
++ WRS("photo"),WRS("out"),argv[0],APPEND);
+ append_it=TRUE;
+ argv[i++][0]='\0'; argv[i][0]='\0';
+ } else if (matches(argv[i]+1,"out")) {
+ check_file_arg(*argc_ptr-i,argv[i+1],file_arg[PHOTO_FILE_ARG],
+- "photo","out",argv[0],WRITE);
++ WRS("photo"),WRS("out"),argv[0],WRITE);
+ append_it=FALSE;
+ argv[i++][0]='\0'; argv[i][0]='\0';
+ } else if (matches(argv[i]+1,"help")) {
diff --git a/biology/mapm3/files/patch-lib-system.h b/biology/mapm3/files/patch-lib-system.h
new file mode 100644
index 000000000000..a030b5a46fd2
--- /dev/null
+++ b/biology/mapm3/files/patch-lib-system.h
@@ -0,0 +1,71 @@
+--- lib/system.h.orig 2008-04-04 20:05:29.000000000 +0000
++++ lib/system.h 2008-03-27 20:49:34.000000000 +0000
+@@ -43,6 +43,7 @@
+ _SYS_OSF Specifics for OSF/1 for DEC Alpha (like, if it ever ships)
+ _SYS_AIX Specifics for the inferior but marketable AIX (RISC or other?)
+ _SYS_HPUX Specifics for HP-UX (8.x?) for HP 9000/700 series.
++ _SYS_BSD Specifics for modern BSD systems (tested on FreeBSD 6.3)
+ _SYS_UNIX Basic Unix semantics, defined if any one of the above is
+
+ _SYS_WATCOM Specifics for WATCOM C/386 9.0 with apropriate libraries
+@@ -86,6 +87,11 @@
+ #else
+ #ifdef _SYS_AUX
+ #define _SYS_UNIX /* Note: NOT _SYS_MAC */
++#else
++#ifdef _SYS_BSD
++#define _SYS_UNIX
++#else
++#endif
+ #endif
+ #endif
+ #endif
+@@ -191,6 +197,9 @@
+ #ifdef _SYS_ULTRIX
+ #define SIGHANDLE void
+ #endif
++#ifdef _SYS_BSD
++#define SIGHANDLE void
++#endif
+
+
+
+@@ -210,10 +219,14 @@
+ #ifdef _SYS_ULTRIX
+ #define USE_RANDOM
+ #else
++#ifdef _SYS_BSD
++#define USE_DRAND48 /* bsd has 'random' */
++#else
+ #define USE_SRAND
+ #endif
+ #endif
+ #endif
++#endif
+
+
+ /***************************** C-Library **************************************
+@@ -282,6 +295,14 @@
+ #define QSORT_LENGTH int /* actually width is an int, not a unsigned */
+ #endif
+
++#ifdef _SYS_BSD /* modern BSD systems (tested on FreeBSD 6.3) */
++#define CALLOC_PTR_TO char
++#define CALLOC_NUM_TYPE size_t /* unsigned in man page is wrong? */
++#define SIZEOF_TYPE size_t
++#define QSORT_DATA_PTR_TO char
++#define QSORT_LENGTH int /* actually width is an int, not a unsigned */
++#endif
++
+ #ifdef _SYS_AUX /* just like ULTRIX? */
+ #define CALLOC_PTR_TO char
+ #define CALLOC_NUM_TYPE size_t /* unsigned in man page is wrong? */
+@@ -583,7 +604,7 @@
+ #include <signal.h>
+ #include <errno.h>
+ #include <time.h> /* for ctime() def - Who does not have this file? */
+-#include <malloc.h>
++#include <stdlib.h>
+ #include <sys/types.h>
+
+ #ifdef TRY_WINSIZE
diff --git a/biology/mapm3/files/patch-mapm-chroms.c b/biology/mapm3/files/patch-mapm-chroms.c
new file mode 100644
index 000000000000..c05d3afac62e
--- /dev/null
+++ b/biology/mapm3/files/patch-mapm-chroms.c
@@ -0,0 +1,29 @@
+--- mapm/chroms.c.orig 2008-04-04 20:05:29.000000000 +0000
++++ mapm/chroms.c 2008-03-27 21:25:42.000000000 +0000
+@@ -909,7 +909,7 @@
+ write_map(fp, chromosome->map_list[i]);
+ }
+
+- fprint(fp,"*Assignments and Placements:\n");
++ fprint(fp,WRS("*Assignments and Placements:\n"));
+ for (locus=0; locus< raw.num_markers; locus++) {
+ sf(ps,"*%-8s %2d",raw.locus_name[locus],assignment[locus]->status);
+ fpr(fp);
+@@ -943,7 +943,7 @@
+ MAP *map;
+
+ /* chromosomes */
+- fgetln(fp);
++ fgetln_(fp);
+ stoken(&ln,sREQUIRED,word);
+ if (!streq(word,"*Chromosomes:") || !itoken(&ln,iREQUIRED,&num_chroms)) {
+ baddata("error finding *Chromosomes:");
+@@ -957,7 +957,7 @@
+ baddata("listed number of chromosomes and actual number do not agree");
+ }
+
+- fgetln(fp);
++ fgetln_(fp);
+ if (!streq(ln,"*Assignments and Placements:"))
+ baddata("error finding *Assignments and Placements:");
+ for (locus=0; locus < raw.num_markers; locus++) {
diff --git a/biology/mapm3/files/patch-mapm-database.c b/biology/mapm3/files/patch-mapm-database.c
new file mode 100644
index 000000000000..bed345d6f69a
--- /dev/null
+++ b/biology/mapm3/files/patch-mapm-database.c
@@ -0,0 +1,11 @@
+--- mapm/database.c.orig 2008-04-04 20:05:29.000000000 +0000
++++ mapm/database.c 2008-03-27 21:26:48.000000000 +0000
+@@ -45,7 +45,7 @@
+ get_one_arg(stoken, sREQUIRED, out_name);
+
+ /* force file extension to be ".data" */
+- make_filename(out_name, FORCE_EXTENSION, ".data");
++ make_filename(out_name, FORCE_EXTENSION, WRS(".data"));
+
+ /* make a function call to a procedure which connects to the database */
+ get_from_database();
diff --git a/biology/mapm3/files/patch-mapm-info.c b/biology/mapm3/files/patch-mapm-info.c
new file mode 100644
index 000000000000..d90cc8cb2a38
--- /dev/null
+++ b/biology/mapm3/files/patch-mapm-info.c
@@ -0,0 +1,41 @@
+--- mapm/info.c.orig 2008-04-04 20:05:29.000000000 +0000
++++ mapm/info.c 2008-03-27 21:26:18.000000000 +0000
+@@ -966,9 +966,9 @@
+ class[locus]);
+ fpr(fp);
+ }
+- fprint(fp,"*Classes:\n");
++ fprint(fp,WRS("*Classes:\n"));
+ for (i=0; i<NUM_CLASSES; i++)
+- { fprint(fp,"*"); fprint(fp,class_name[i]); fnl(fp); }
++ { fprint(fp,WRS("*")); fprint(fp,class_name[i]); fnl(fp); }
+ }
+
+
+@@ -980,12 +980,12 @@
+ real rate;
+ char temp_locus_name[NAME_LEN+2], word[TOKLEN+1];
+
+- fgetln(fp);
++ fgetln_(fp);
+ if (sscanf(ln,"%s %d %d",word,&num_groups,&num_orders)!=3 ||
+ !streq(word,"*OrderInfo:")) baddata("expected '*OrderInfo: # #'");
+
+ for (locus=0; locus < raw.num_markers; locus++) {
+- fgetln(fp);
++ fgetln_(fp);
+
+ if (!nstoken(&ln,sREQUIRED,temp_locus_name,NAME_LEN+1) ||
+ temp_locus_name[0]!='*' || len(temp_locus_name)<2)
+@@ -1007,9 +1007,9 @@
+ order_next[locus]= ord_next;
+ class[locus]= class_num;
+ }
+- fgetln(fp); if (!streq(ln,"*Classes:")) baddata("bad classes");
++ fgetln_(fp); if (!streq(ln,"*Classes:")) baddata("bad classes");
+ for (i=0; i<NUM_CLASSES; i++)
+- { fgetln(fp); strcpy(class_name[i],ln+1); }
++ { fgetln_(fp); strcpy(class_name[i],ln+1); }
+ }
+
+
diff --git a/biology/mapm3/files/patch-mapm-map_info.h b/biology/mapm3/files/patch-mapm-map_info.h
new file mode 100644
index 000000000000..d16778b5dc62
--- /dev/null
+++ b/biology/mapm3/files/patch-mapm-map_info.h
@@ -0,0 +1,11 @@
+--- mapm/map_info.h.orig 2008-04-04 20:05:29.000000000 +0000
++++ mapm/map_info.h 2008-03-31 00:14:48.000000000 +0000
+@@ -215,7 +215,7 @@
+ /***** Chromosome framework, assignment, and placement stuff - chroms.c *****/
+
+ extern SAVED_LIST *chromosome; /* malloced by allocate_mapping_structs() */
+-#define chrom2str(x) ((x)>=0 ? chromosome->map_list[x]->map_name : "none")
++#define chrom2str(x) ((x)>=0 ? chromosome->map_list[x]->map_name : WRS("none"))
+ bool isa_chrom(); /* args: char *name; int *chrom; side-effected if TRUE */
+ #define num_chromosomes (chromosome->num_maps)
+ extern int current_chrom; /* set by the sequence command or reset_state() */
diff --git a/biology/mapm3/files/patch-mapm-mapm.h b/biology/mapm3/files/patch-mapm-mapm.h
new file mode 100644
index 000000000000..95473a631fa7
--- /dev/null
+++ b/biology/mapm3/files/patch-mapm-mapm.h
@@ -0,0 +1,11 @@
+--- mapm/mapm.h.orig 2008-04-04 20:05:29.000000000 +0000
++++ mapm/mapm.h 2008-03-16 13:53:32.000000000 +0000
+@@ -19,7 +19,7 @@
+ #define command void /* needed if INC_SHELL was not defined */
+ #endif
+
+-#include "system.h"
++#include "../lib/system.h"
+
+
+ /***************** MAPM Constants *****************/
diff --git a/biology/mapm3/files/patch-mapm-maps.c b/biology/mapm3/files/patch-mapm-maps.c
new file mode 100644
index 000000000000..7fa271809f84
--- /dev/null
+++ b/biology/mapm3/files/patch-mapm-maps.c
@@ -0,0 +1,72 @@
+--- mapm/maps.c.orig 2008-04-04 20:05:29.000000000 +0000
++++ mapm/maps.c 2008-03-23 15:39:56.000000000 +0000
+@@ -592,7 +592,7 @@
+
+ clean_map(map);
+
+- fgetln(fp);
++ fgetln_(fp);
+ if (!nstoken(&ln,sREQUIRED,name,NAME_LEN+1) || name[0]!='*' ||
+ sscanf(ln,"%d %d %d %d %lf",&num_loci,&unlink,&sex,&errors,&like)!=5)
+ baddata("expected *chrom-name # # # #");
+@@ -603,31 +603,31 @@
+ strcpy(map->map_name,name+1); map->allow_errors= errors;
+ map->num_loci=num_loci; map->log_like=like;
+
+- fgetln(fp);
++ fgetln_(fp);
+ for (i=0; i<num_loci; i++) {
+- if (nullstr(ln)) fgetln(fp);
++ if (nullstr(ln)) fgetln_(fp);
+ if (!itoken(&ln,iREQUIRED,&num)) send(CRASH);
+ map->locus[i]=num;
+ }
+- fgetln(fp);
++ fgetln_(fp);
+ for (i=0; i<num_loci-1; i++) {
+- if (nullstr(ln)) fgetln(fp);
++ if (nullstr(ln)) fgetln_(fp);
+ if (!rtoken(&ln,rREQUIRED,&rnum)) send(CRASH);
+ map->rec_frac[i][MALE]=rnum;
+ }
+
+ if (raw.data_type==CEPH && sex) {
+- fgetln(fp);
++ fgetln_(fp);
+ for(i=0; i<num_loci-1; i++) {
+- if (nullstr(ln)) fgetln(fp);
++ if (nullstr(ln)) fgetln_(fp);
+ if (!rtoken(&ln,rREQUIRED,&rnum)) send(CRASH);
+ map->rec_frac[i][FEMALE]=rnum;
+ }
+ } else for (i=0; i<num_loci-1; i++) map->rec_frac[i][FEMALE]=0.0;
+
+- fgetln(fp);
++ fgetln_(fp);
+ for(i=0; i<num_loci-1; i++) {
+- if (nullstr(ln)) fgetln(fp);
++ if (nullstr(ln)) fgetln_(fp);
+ if (!itoken(&ln,iREQUIRED,&num)) send(CRASH);
+ map->fix_interval[i]=num;
+ }
+@@ -637,7 +637,7 @@
+ matrix(map->error_lod,map->max_loci,raw.data.f2.num_indivs,real);
+ }
+ for (i=0; i<map->num_loci; i++) {
+- fgetln(fp);
++ fgetln_(fp);
+ if (!stoken(&ln,sREQUIRED,str) || !streq(str,"errors"))
+ send(CRASH);
+ if (!rtoken(&ln,rREQUIRED,&rnum)) send(CRASH);
+@@ -646,9 +646,9 @@
+ for(j=0; j<raw.data.f2.num_indivs; j++)
+ map->error_lod[i][j]= 0.0;
+ } else {
+- fgetln(fp);
++ fgetln_(fp);
+ for (j=0; j<raw.data.f2.num_indivs; j++) {
+- if (nullstr(ln)) fgetln(fp);
++ if (nullstr(ln)) fgetln_(fp);
+ if (!rtoken(&ln,rREQUIRED,&rnum)) send(CRASH);
+ map->error_lod[i][j]=rnum;
+ }
diff --git a/biology/mapm3/files/patch-mapm-npt_cmds.c b/biology/mapm3/files/patch-mapm-npt_cmds.c
new file mode 100644
index 000000000000..7eb33051e6c6
--- /dev/null
+++ b/biology/mapm3/files/patch-mapm-npt_cmds.c
@@ -0,0 +1,11 @@
+--- mapm/npt_cmds.c.orig 2008-04-04 20:05:29.000000000 +0000
++++ mapm/npt_cmds.c 2008-03-27 21:27:12.000000000 +0000
+@@ -78,7 +78,7 @@
+ nomore_args(num_args);
+
+ run {
+- if (!make_filename(name,FORCE_EXTENSION,PS_EXT))
++ if (!make_filename(name,FORCE_EXTENSION,WRS(PS_EXT)))
+ { sf(ps,"illegal filename '%s'",name); error(ps); }
+ fp= open_file(name,WRITE);
+ sf(ps,"Drawing map in PostScript file '%s'... \n",name); pr();
diff --git a/biology/mapm3/files/patch-mapm-print.c b/biology/mapm3/files/patch-mapm-print.c
new file mode 100644
index 000000000000..02cdedf67133
--- /dev/null
+++ b/biology/mapm3/files/patch-mapm-print.c
@@ -0,0 +1,11 @@
+--- mapm/print.c.orig 2008-04-04 20:05:29.000000000 +0000
++++ mapm/print.c 2008-03-27 21:34:40.000000000 +0000
+@@ -540,7 +540,7 @@
+ }
+ }
+
+-#define MAPPING_HEAD1\
++#define MAPPING_HEAD1 \
+ " 2nd Left "
+ #define MAPPING_HEAD2 \
+ " Num Name Assignment Chrom LOD Mapping Like Locus Errors"
diff --git a/biology/mapm3/files/patch-mapm-reader.c b/biology/mapm3/files/patch-mapm-reader.c
new file mode 100644
index 000000000000..d6e122742099
--- /dev/null
+++ b/biology/mapm3/files/patch-mapm-reader.c
@@ -0,0 +1,191 @@
+--- mapm/reader.c.orig 2008-04-04 20:05:29.000000000 +0000
++++ mapm/reader.c 2008-03-27 21:10:18.000000000 +0000
+@@ -81,7 +81,7 @@
+
+ void getdataln(fp) /* get next nonblank,noncomment data file line */
+ FILE *fp;
+-{ do { fgetln(fp); data_line++; } while (nullstr(ln)||ln[0]=='#'); }
++{ do { fgetln_(fp); data_line++; } while (nullstr(ln)||ln[0]=='#'); }
+
+
+ void baddata(reason) /* send data reading error message */
+@@ -135,7 +135,7 @@
+ char tmpname[PATH_LENGTH+1];
+
+ make_filename(name,FORCE_EXTENSION,ext);
+- strcpy(tmpname,name); make_filename(tmpname,FORCE_EXTENSION,TEMP_EXT);
++ strcpy(tmpname,name); make_filename(tmpname,FORCE_EXTENSION,WRS(TEMP_EXT));
+
+ fp=NULL; *exists=FALSE;
+ run {
+@@ -162,7 +162,7 @@
+ bool exists;
+ {
+ char tmpname[PATH_LENGTH+1], oldname[PATH_LENGTH+1];
+- strcpy(tmpname,name); make_filename(tmpname,FORCE_EXTENSION,TEMP_EXT);
++ strcpy(tmpname,name); make_filename(tmpname,FORCE_EXTENSION,WRS(TEMP_EXT));
+ strcpy(oldname,name); make_filename(oldname,FORCE_EXTENSION,oldext);
+
+ if (exists) { rename_file(name,oldname); }
+@@ -214,7 +214,7 @@
+ raw.data.f2.cross_type);
+ print(" ok\n");
+
+- make_filename(name,FORCE_EXTENSION,MAPS_EXT); strcpy(type,"map");
++ make_filename(name,FORCE_EXTENSION,WRS(MAPS_EXT)); strcpy(type,"map");
+ run {
+ fp2=NULL;
+ fp2=open_file(name,READ);
+@@ -228,7 +228,7 @@
+ close_file(fp2);
+ } except_when(CANTOPEN) { } /* need a better handler */
+
+- make_filename(name,FORCE_EXTENSION,TWO_EXT); strcpy(type,"two-point");
++ make_filename(name,FORCE_EXTENSION,WRS(TWO_EXT)); strcpy(type,"two-point");
+ run {
+ fp2=NULL;
+ fp2=open_file(name,READ);
+@@ -240,7 +240,7 @@
+ close_file(fp2);
+ } except_when(CANTOPEN) { } /* need a better handler */
+
+- make_filename(name,FORCE_EXTENSION,THREE_EXT); strcpy(type,"three-point");
++ make_filename(name,FORCE_EXTENSION,WRS(THREE_EXT)); strcpy(type,"three-point");
+ run {
+ fp2=NULL;
+ fp2=open_file(name,READ);
+@@ -285,39 +285,39 @@
+ run {
+ strcpy(name,base_name);
+ if (save_genos_too) {
+- fp= start_save_to_file(name,DATA_EXT,"genotype",&exists);
++ fp= start_save_to_file(name,WRS(DATA_EXT),"genotype",&exists);
+ write_f2_data(fp); /* deals with header and magic number */
+ close_file(fp); fp=NULL;
+- finish_save_to_file(name,DATA_OLD,exists);
++ finish_save_to_file(name,WRS(DATA_OLD),exists);
+ }
+- fp= start_save_to_file(name,MAPS_EXT,"map",&exists);
++ fp= start_save_to_file(name,WRS(MAPS_EXT),"map",&exists);
+ write_magic_number(fp,"map");
+ write_order_data(fp);
+ write_mapping_data(fp);
+ write_status(fp);
+ close_file(fp); fp=NULL;
+- finish_save_to_file(name,MAPS_OLD,exists);
++ finish_save_to_file(name,WRS(MAPS_OLD),exists);
+
+ if (two_pt_touched) {
+- fp= start_save_to_file(name,TWO_EXT,"two-point",&exists);
++ fp= start_save_to_file(name,WRS(TWO_EXT),"two-point",&exists);
+ write_magic_number(fp,"two-point");
+ write_two_pt(fp);
+ close_file(fp); fp=NULL;
+- finish_save_to_file(name,TWO_OLD,exists);
++ finish_save_to_file(name,WRS(TWO_OLD),exists);
+ }
+ if (three_pt_touched) {
+- fp= start_save_to_file(name,THREE_EXT,"three-point",&exists);
++ fp= start_save_to_file(name,WRS(THREE_EXT),"three-point",&exists);
+ write_magic_number(fp,"three-point");
+ write_three_pt(fp);
+ close_file(fp); fp=NULL;
+- finish_save_to_file(name,THREE_OLD,exists);
++ finish_save_to_file(name,WRS(THREE_OLD),exists);
+ }
+ if (num_traits>0) {
+- fp= start_save_to_file(name,TRAIT_EXT,"traits",&exists);
++ fp= start_save_to_file(name,WRS(TRAIT_EXT),"traits",&exists);
+ write_magic_number(fp,"trait");
+ write_traits(fp);
+ close_file(fp); fp=NULL;
+- finish_save_to_file(name,TRAIT_OLD,exists);
++ finish_save_to_file(name,WRS(TRAIT_OLD),exists);
+ free_traits();
+ }
+ two_pt_touched= FALSE;
+@@ -576,15 +576,15 @@
+ char header[MAXLINE+1];
+
+ if (raw.data.f2.cross_type==F2_INTERCROSS)
+- fprint(fp,"prepared data f2 intercross\n");
++ fprint(fp,WRS("prepared data f2 intercross\n"));
+ else if (raw.data.f2.cross_type==F2_BACKCROSS)
+- fprint(fp,"prepared data f2 backcross\n");
++ fprint(fp,WRS("prepared data f2 backcross\n"));
+ else if (raw.data.f2.cross_type==RI_SIB)
+- fprint(fp,"prepared data f2 ri-sib\n");
++ fprint(fp,WRS("prepared data f2 ri-sib\n"));
+ else if (raw.data.f2.cross_type==RI_SELF)
+- fprint(fp,"prepared data f2 ri-self\n");
++ fprint(fp,WRS("prepared data f2 ri-self\n"));
+ else if (raw.data.f2.cross_type==F3_SELF)
+- fprint(fp,"prepared data f3\n");
++ fprint(fp,WRS("prepared data f3\n"));
+
+ sf(header,"%d %d %d\n",raw.filenumber,raw.data.f2.num_indivs,
+ raw.num_markers); fprint(fp,header);
+@@ -593,7 +593,7 @@
+ sf(ps,"*%-10s ", raw.locus_name[i]);
+ fpr(fp);
+ for (j=0; j<raw.data.f2.num_indivs; j++) {
+- if (j%50==0 && j!=0) fprint(fp,"\n ");
++ if (j%50==0 && j!=0) fprint(fp,WRS("\n "));
+ sf(ps,"%c",raw.data.f2.allele[i][j]);
+ fpr(fp);
+ }
+@@ -828,9 +828,7 @@
+ char *symb;
+ {
+ /* CHANGED FOR THIS VERION - NOW READS "-AHBCD" */
+-
+- if (chr==symb[0]) return(MISSING_DATA);
+- else if (chr==symb[1]) return(PARENTAL_TYPE_A);
++if (chr==symb[0]) return(MISSING_DATA); else if (chr==symb[1]) return(PARENTAL_TYPE_A);
+ else if (chr==symb[2]) return(HYBRID_TYPE_H);
+ else if (chr==symb[3]) return(PARENTAL_TYPE_B);
+ else if (chr==symb[4]) return(TYPE_NOT_A);
+@@ -856,26 +854,26 @@
+ fnl(fp);
+ }
+ fnl(fp);
+- fprint(fp,"#QTL only variables:\n");
+- fprint(fp,"*Print mapm loci: 1\n");
+- fprint(fp,"*Like tolerance: 0.001\n");
+- fprint(fp,"*Brute force: 1\n");
+- fprint(fp,"*Max intervals: -7\n");
+- fprint(fp,"*Max continuous vars: -3\n");
+- fprint(fp,"*Max wiggles: 0\n");
+- fprint(fp,"*Max compares: 0\n");
+- fprint(fp,"*Default units: 1\n");
+- fprint(fp,"*Chromosomes: 0\n");
+- fprint(fp,"*Number of contexts: 1\n");
+- fprint(fp,"*Active context: 0\n");
++ fprint(fp,WRS("#QTL only variables:\n"));
++ fprint(fp,WRS("*Print mapm loci: 1\n"));
++ fprint(fp,WRS("*Like tolerance: 0.001\n"));
++ fprint(fp,WRS("*Brute force: 1\n"));
++ fprint(fp,WRS("*Max intervals: -7\n"));
++ fprint(fp,WRS("*Max continuous vars: -3\n"));
++ fprint(fp,WRS("*Max wiggles: 0\n"));
++ fprint(fp,WRS("*Max compares: 0\n"));
++ fprint(fp,WRS("*Default units: 1\n"));
++ fprint(fp,WRS("*Chromosomes: 0\n"));
++ fprint(fp,WRS("*Number of contexts: 1\n"));
++ fprint(fp,WRS("*Active context: 0\n"));
+ fnl(fp);
+- fprint(fp,"*Context 1\n");
++ fprint(fp,WRS("*Context 1\n"));
+ if(num_traits == 1)
+- fprint(fp,"*Trait: 0\n");
++ fprint(fp,WRS("*Trait: 0\n"));
+ else
+- fprint(fp,"*Trait: -1\n");
+- fprint(fp,"*Named sequences: 0\n");
+- fprint(fp,"*Sequence history: 0\n");
++ fprint(fp,WRS("*Trait: -1\n"));
++ fprint(fp,WRS("*Named sequences: 0\n"));
++ fprint(fp,WRS("*Sequence history: 0\n"));
+ }
+
+
diff --git a/biology/mapm3/files/patch-mapm-state.c b/biology/mapm3/files/patch-mapm-state.c
new file mode 100644
index 000000000000..b27e385af297
--- /dev/null
+++ b/biology/mapm3/files/patch-mapm-state.c
@@ -0,0 +1,18 @@
+--- mapm/state.c.orig 2008-04-04 20:05:29.000000000 +0000
++++ mapm/state.c 2008-04-03 19:37:40.000000000 +0000
+@@ -734,7 +734,7 @@
+ {
+ int i, usenum;
+
+- fprint(fp,"*MapmakerStatusInfo:\n");
++ fprint(fp,WRS("*MapmakerStatusInfo:\n"));
+
+ sf(ps,"*PrintNames: %d\n",print_names); fpr(fp);
+ sf(ps,"*Tolerance: %lf\n",tolerance); fpr(fp);
+@@ -852,5 +852,5 @@
+ load_table(context[i]->sequence_history,fp,INDEX_BY_NUMBER,num);
+ }
+
+- if (the_seq_history_num>0) set_current_seq("none",FALSE);
++ if (the_seq_history_num>0) set_current_seq(WRS("none"),FALSE);
+ }
diff --git a/biology/mapm3/files/patch-mapm-sys_cmds.c b/biology/mapm3/files/patch-mapm-sys_cmds.c
new file mode 100644
index 000000000000..9307cf7feb6e
--- /dev/null
+++ b/biology/mapm3/files/patch-mapm-sys_cmds.c
@@ -0,0 +1,47 @@
+--- mapm/sys_cmds.c.orig 2008-04-04 20:05:29.000000000 +0000
++++ mapm/sys_cmds.c 2008-03-27 21:28:05.000000000 +0000
+@@ -98,7 +98,7 @@
+ close_file(fp);
+ if (raw) {
+ strcpy(run_file,name);
+- make_filename(run_file,FORCE_EXTENSION,PREP_EXT);
++ make_filename(run_file,FORCE_EXTENSION,WRS(PREP_EXT));
+ if (!redirect_input(run_file,FALSE)) {
+ sf(ps,"unable to run file '%s'... skipping initialization\n",
+ run_file); pr();
+@@ -145,7 +145,7 @@
+ if (!prev_data) print("no data are loaded\n");
+ else { sf(ps,DATA_LOADED,raw.filename,data_info(TRUE)); pr(); }
+ } else {
+- fp=try_to_open(name,FORCE_EXTENSION,DATA_EXT,prev_data);
++ fp=try_to_open(name,FORCE_EXTENSION,WRS(DATA_EXT),prev_data);
+ if (prev_data) try_to_unload(fp,TRUE,auto_save,TRUE,just_prepared);
+ try_to_load(fp,name,prev_data,FALSE);
+ just_prepared=FALSE;
+@@ -169,7 +169,7 @@
+ if (streq(&name[end-4],DATA_EXT) || streq(&name[end-4],DATA_OLD) ||...
+ error(RAW_EXTENSION); */
+
+- fp= try_to_open(name,DEFAULT_EXTENSION,RAW_EXT,prev_data);
++ fp= try_to_open(name,DEFAULT_EXTENSION,WRS(RAW_EXT),prev_data);
+ if (prev_data) try_to_unload(fp,TRUE,auto_save,TRUE,just_prepared);
+ try_to_load(fp,name,prev_data,TRUE);
+ just_prepared=TRUE;
+@@ -186,7 +186,7 @@
+ get_one_arg(stoken,"",name); new_name= !nullstr(name);
+ /* want to change this so it sets raw.filename only AFTER it writes OK */
+
+- if (new_name && !make_filename(name,FORCE_EXTENSION,DATA_EXT))
++ if (new_name && !make_filename(name,FORCE_EXTENSION,WRS(DATA_EXT)))
+ { sf(ps,BAD_FILENAME,name); error(ps); }
+
+ run {
+@@ -621,7 +621,7 @@
+ for (j=num_seq_tokens-1; j>i; j--)
+ strcpy(seq_tokens[j+1],seq_tokens[j]);
+ /* this is severly broken, if len(appendage) > TOKLEN */
+- strcpy(seq_tokens[i+i],appendage);
++ strcpy(seq_tokens[i+1],appendage);
+ num_seq_tokens++;
+
+ untokenize_seq(new_seq,seq_tokens,num_seq_tokens);
diff --git a/biology/mapm3/files/patch-mapm-two_cmds.c b/biology/mapm3/files/patch-mapm-two_cmds.c
new file mode 100644
index 000000000000..bfb068015135
--- /dev/null
+++ b/biology/mapm3/files/patch-mapm-two_cmds.c
@@ -0,0 +1,16 @@
+--- mapm/two_cmds.c.orig 2008-04-04 20:05:29.000000000 +0000
++++ mapm/two_cmds.c 2008-04-03 19:58:42.000000000 +0000
+@@ -698,11 +698,11 @@
+
+ if (!print_names) {
+ print("\n log-likelihood differences\n");
+-print( " count markers a-b-c b-a-c a-c-b\n");
++print(" count markers a-b-c b-a-c a-c-b\n");
+ /* 12345: 1234 1234 1234 */
+ } else {
+ print("\n log-likelihood differences\n");
+-print( " count markers a-b-c b-a-c a-c-b\n");
++print(" count markers a-b-c b-a-c a-c-b\n");
+ /* 12345: 123456789 123456789 123456789 */
+ }
+
diff --git a/biology/mapm3/files/patch-quant-qcmds.c b/biology/mapm3/files/patch-quant-qcmds.c
new file mode 100644
index 000000000000..39bee743f5d4
--- /dev/null
+++ b/biology/mapm3/files/patch-quant-qcmds.c
@@ -0,0 +1,93 @@
+--- quant/qcmds.c.orig 2008-04-04 20:05:29.000000000 +0000
++++ quant/qcmds.c 2008-03-27 21:30:08.000000000 +0000
+@@ -1348,7 +1348,7 @@
+ if (nullstr(args)) {
+ if (!data_loaded()) print(NO_LOADED_DATA); else {
+ strcpy(tfile,raw.file);
+- make_filename(tfile,FORCE_EXTENSION,TRAIT_EXT);
++ make_filename(tfile,FORCE_EXTENSION,WRS(TRAIT_EXT));
+ sf(ps,LOADED_DATA,raw.file,tfile,"",raw.n_indivs,
+ (raw.data_type==BACKCROSS ? "backcross":"intercross"),
+ raw.n_loci,raw.n_traits,maybe_s(raw.n_traits)); pr();
+@@ -1363,9 +1363,9 @@
+ nstoken(&args,sREQUIRED,dfile,PATH_LENGTH); tfile[0]='\0';
+ nomore_args(num_args);
+ run {
+- if (!make_filename(dfile,FORCE_EXTENSION,DATA_EXT)) send(CANTOPEN);
++ if (!make_filename(dfile,FORCE_EXTENSION,WRS(DATA_EXT))) send(CANTOPEN);
+ fpa= open_file(dfile,READ);
+- fgetln(fpa);
++ fgetln_(fpa);
+
+ if (streq(ln,"prepared data f2 backcross")) {
+ strcpy(geno_chars,default_backcross_chars);
+@@ -1384,11 +1384,11 @@
+ }
+
+ strcpy(tfile,dfile);
+- if (!make_filename(tfile,FORCE_EXTENSION,TRAIT_EXT))
++ if (!make_filename(tfile,FORCE_EXTENSION,WRS(TRAIT_EXT)))
+ send(CANTOPEN);
+ fpb = open_file(tfile,READ);
+ strcpy(mfile,dfile);
+- if (!make_filename(mfile,FORCE_EXTENSION,MAPS_EXT))
++ if (!make_filename(mfile,FORCE_EXTENSION,WRS(MAPS_EXT)))
+ send(CANTOPEN);
+ fpc = open_file(mfile,READ);
+
+@@ -1449,7 +1449,7 @@
+
+ out_name = get_temp_string();
+ strcpy(out_name,in_name);
+- make_filename(out_name,FORCE_EXTENSION,DATA_EXT);
++ make_filename(out_name,FORCE_EXTENSION,WRS(DATA_EXT));
+
+ fp = open_file(in_name,READ);
+ getdataln(fp); crunch(ln);
+@@ -1488,7 +1488,7 @@
+ name = mkstrcpy(raw.file);
+ name3 = mkstrcpy(raw.file);
+ name2 = "dummy.qtls";
+- make_filename(name, FORCE_EXTENSION, QTL_EXT);
++ make_filename(name, FORCE_EXTENSION, WRS(QTL_EXT));
+
+ /* The following accounts for the case where there is no file 'name'
+ (i.e. it makes one) */
+@@ -1500,7 +1500,7 @@
+ close_file(fp);
+ }
+
+- make_filename(name3, FORCE_EXTENSION, QTL_OLD);
++ make_filename(name3, FORCE_EXTENSION, WRS(QTL_OLD));
+ run {
+ fp = open_file(name2, WRITE);
+ sf(ps,"Now saving %s...\n",name); pr();
+@@ -1520,8 +1520,8 @@
+ }
+
+ name2="dummy.traits";
+- make_filename(name, FORCE_EXTENSION, TRAIT_EXT);
+- make_filename(name3, FORCE_EXTENSION, TRAIT_OLD);
++ make_filename(name, FORCE_EXTENSION, WRS(TRAIT_EXT));
++ make_filename(name3, FORCE_EXTENSION, WRS(TRAIT_OLD));
+ run {
+ fp = open_file(name2, WRITE);
+ sf(ps,"Now saving %s...\n",name); pr();
+@@ -1560,7 +1560,7 @@
+ save_wiggle(fp,i);
+ }
+
+- fprint(fp,"#Compares\n");
++ fprint(fp,WRS("#Compares\n"));
+
+ fprintf(fp,"%d %d\n",num_compares,first_compare);
+ for(i = 0; i < num_compares; i++) {
+@@ -1587,7 +1587,7 @@
+
+ run {
+ strcpy(name,raw.file);
+- make_filename(name,FORCE_EXTENSION,QTL_EXT);
++ make_filename(name,FORCE_EXTENSION,WRS(QTL_EXT));
+ fp= open_file(name,READ);
+
+ if(fscanf(fp,"%d\n",&filenum) != 1) send(IOERROR); /* KLUDGE */
diff --git a/biology/mapm3/files/patch-quant-qraw.c b/biology/mapm3/files/patch-quant-qraw.c
new file mode 100644
index 000000000000..5185a1c8c018
--- /dev/null
+++ b/biology/mapm3/files/patch-quant-qraw.c
@@ -0,0 +1,53 @@
+--- quant/qraw.c.orig 2008-04-04 20:05:29.000000000 +0000
++++ quant/qraw.c 2008-03-27 21:30:39.000000000 +0000
+@@ -124,7 +124,7 @@
+
+ void getdataln(fp) /* get next nonblank/noncomment data file line */
+ FILE *fp;
+-{ do { fgetln(fp); BADDATA_line_num++; } while(nullstr(ln) || ln[0]=='#');
++{ do { fgetln_(fp); BADDATA_line_num++; } while(nullstr(ln) || ln[0]=='#');
+ BADDATA_ln= ln; }
+ real read_map_distance();
+ void read_map_locus();
+@@ -426,13 +426,13 @@
+
+ for(j=0;j<raw.n_indivs;j++) {
+ if(j % 5 == 0 && j != 0)
+- fprint(fp,"\n ");
++ fprint(fp,WRS("\n "));
+ sf(ps,"%12.3lf ", raw.trait[j][i]);fpr(fp);
+ }
+ fnl(fp);
+ }
+
+- fprint(fp,"#QTL only variables:\n");
++ fprint(fp,WRS("#QTL only variables:\n"));
+ sf(ps,"*Print mapm loci: %d\n", print_mapm_loci);fpr(fp);
+ sf(ps,"*Like tolerance: %lf\n",like_tolerance);fpr(fp);
+ sf(ps,"*Brute force: %d\n",brute_force);fpr(fp);
+@@ -452,21 +452,21 @@
+ sf(ps, "chr%d %d\n", i+1, raw.chrom_n_loci[i]); fpr(fp);
+ for(j=0;j<raw.chrom_n_loci[i];j++) {
+ if(j % 18 == 0 && j != 0)
+- fprint(fp,"\n");
++ fprint(fp,WRS("\n"));
+ sf(ps, "%d ",order[loci_tot]);fpr(fp);
+ loci_tot++;
+ }
+ fnl(fp);
+ for(j=0;j<raw.chrom_n_loci[i]-1;j++) {
+ if(j % 12 == 0 && j != 0)
+- fprint(fp,"\n");
++ fprint(fp,WRS("\n"));
+ sf(ps, "%.4lf ",map_space[map_tot]);fpr(fp);
+ map_tot++;
+ }
+ fnl(fp);
+ map_tot++;
+- fprint(fp,"0\n");
+- fprint(fp,"0\n");
++ fprint(fp,WRS("0\n"));
++ fprint(fp,WRS("0\n"));
+ }
+ sf(ps,"*Number of contexts: %d\n",num_contexts);
+ fpr(fp);
diff --git a/biology/mapm3/files/patch-sun-xmapmaker b/biology/mapm3/files/patch-sun-xmapmaker
new file mode 100644
index 000000000000..03b5254505cf
--- /dev/null
+++ b/biology/mapm3/files/patch-sun-xmapmaker
@@ -0,0 +1,9 @@
+--- sun/xmapmaker.orig 2008-04-04 20:05:29.000000000 +0000
++++ sun/xmapmaker 2008-04-04 19:59:32.000000000 +0000
+@@ -10,5 +10,5 @@
+ else if (-e /usr/openwin/demo/xterm) then
+ exec /usr/openwin/demo/xterm $xoptions $fontsize -e $program $*
+ else
+- exec xterm $options $fontsize -e $program
++ exec xterm $xoptions $fontsize -e $program
+ endif
diff --git a/biology/mapm3/files/patch-sun-xqtl b/biology/mapm3/files/patch-sun-xqtl
new file mode 100644
index 000000000000..963adade779f
--- /dev/null
+++ b/biology/mapm3/files/patch-sun-xqtl
@@ -0,0 +1,9 @@
+--- sun/xqtl.orig 2008-04-04 20:05:29.000000000 +0000
++++ sun/xqtl 2008-04-04 19:59:41.000000000 +0000
+@@ -10,5 +10,5 @@
+ else if (-e /usr/openwin/demo/xterm) then
+ exec /usr/openwin/demo/xterm $xoptions $fontsize -e $program $*
+ else
+- exec xterm $options $fontsize -e $program
++ exec xterm $xoptions $fontsize -e $program
+ endif
diff --git a/biology/mapm3/pkg-descr b/biology/mapm3/pkg-descr
new file mode 100644
index 000000000000..047ad9a17f87
--- /dev/null
+++ b/biology/mapm3/pkg-descr
@@ -0,0 +1,13 @@
+MAPMAKER/EXP is a linkage analysis package designed to help construct primary
+linkage maps of markers segregating in experimental crosses. MAPMAKER/EXP
+performs full multipoint linkage analysis (simultaneous estimation of all
+recombination fractions from the primary data) for dominant, recessive, and co-
+dominant (e.g. RFLP-like) markers. MAPMAKER/EXP is an experimental-cross-only
+successor to the original MAPMAKER program.
+
+MAPMAKER/QTL is a companion program to MAPMAKER/EXP which allows one to map
+genes controlling polygenic quantitative traits in F2 intercrosses and BC1
+backcrosses relative to a genetic linkage map. More information on MAPMAKER/QTL
+can be found in the technical report (included with MAPMAKER/QTL).
+
+WWW: http://www.broad.mit.edu/ftp/distribution/software/mapmaker3/
diff --git a/biology/mapm3/pkg-plist b/biology/mapm3/pkg-plist
new file mode 100644
index 000000000000..e5821ac6aeaa
--- /dev/null
+++ b/biology/mapm3/pkg-plist
@@ -0,0 +1,6 @@
+bin/mapmaker
+bin/mapmaker.help
+bin/qtl
+bin/qtl.help
+bin/xmapmaker
+bin/xqtl