aboutsummaryrefslogtreecommitdiff
path: root/unix/bin.cygwin
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
commitfa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch)
treebdda434976bc09c864f2e4fa6f16ba1952b1e555 /unix/bin.cygwin
downloadiraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz
Initial commit
Diffstat (limited to 'unix/bin.cygwin')
-rw-r--r--unix/bin.cygwin/arch_includes/fio.h146
-rw-r--r--unix/bin.cygwin/arch_includes/pllseg.h62
-rw-r--r--unix/bin.cygwin/arch_includes/plrseg.h68
-rwxr-xr-xunix/bin.cygwin/f2c.e.exebin0 -> 268298 bytes
-rw-r--r--unix/bin.cygwin/f2c.h228
-rw-r--r--unix/bin.cygwin/fio.h146
-rw-r--r--unix/bin.cygwin/libf2c.abin0 -> 147408 bytes
-rw-r--r--unix/bin.cygwin/pllseg.h62
-rw-r--r--unix/bin.cygwin/plrseg.h68
9 files changed, 780 insertions, 0 deletions
diff --git a/unix/bin.cygwin/arch_includes/fio.h b/unix/bin.cygwin/arch_includes/fio.h
new file mode 100644
index 00000000..4d9e8f49
--- /dev/null
+++ b/unix/bin.cygwin/arch_includes/fio.h
@@ -0,0 +1,146 @@
+# FIO.H -- FIO definitions.
+
+# Logical seek: adjust i/o pointer to the seek offset. If the buffer was
+# being written into when the seek occurs, adjust ITOP and OTOP to mark
+# the end of the good data in the buffer, then set IOP to new offset.
+
+define (UPDATE_IOP, if (bufptr[$1] != NULL && otop[$1] == buftop[$1]) { itop[$1] = min(buftop[$1], max(itop[$1], iop[$1])) ; otop[$1] = itop[$1] })
+define (LSEEK, {UPDATE_IOP($1);iop[$1]=($2-boffset[$1]+bufptr[$1])})
+define LNOTE (boffset[$1]+iop[$1]-bufptr[$1])
+define BUF_MODIFIED (otop[$1] > bufptr[$1])
+
+define INACTIVE 0
+define READ_IN_PROGRESS 1
+define WRITE_IN_PROGRESS 2
+
+
+# File descriptor structure (dynamically allocated part)
+
+define SZ_FFNAME 255
+define LEN_FIODES (20+LEN_CHANDES+256)
+
+define FCHAN Memi[$1] # os channnel
+define FMODE Memi[$1+1] # mode of access
+define FTYPE Memi[$1+2] # binary or text
+define FDEV Memi[$1+3] # device index
+define FBUFSIZE Memi[$1+4] # buffer size
+define FIRSTBUFOFF Memi[$1+5] # offset of first file buffer
+define FNBUFS Memi[$1+6] # number of buffers
+define FLOCBUF Memi[$1+7] # zlocva of aread buffer
+define FPBBUFSIZE Memi[$1+8] # size pushback buffer
+define FPBBUF Memi[$1+9] # ptr to pushback buffer
+define FPBTOP Memi[$1+10] # ptr to top of pbbuf
+define FPBIOP Memi[$1+11] # iop into pbbuf
+define FPBSP Memi[$1+12] # pbbuf stack pointer
+define FILSTAT Memi[$1+13] # channel status
+define FNCHARS Memi[$1+14] # nchars last i/o
+define FNBYTES Memi[$1+15] # nbytes last rec read
+define FBUFMODE Memi[$1+16] # i/o mode for buffer
+define FFIOMODE Memi[$1+17] # i/o mode for file
+define FCD Memi[$1+18] # ptr to chan descr.
+ # (open)
+define FLCD ($1+20) # local storage for cd
+define FNAME Memc[P2C($1+20+LEN_CHANDES)] # filename
+
+# Channel descriptor (stored in fd if file not multiply open). The DEVPAR
+# (device parameter) fields are reserved for use with special devices and
+# are not used by FIO.
+
+define LEN_CHANDES (10+256)
+define FREFCNT Memi[FCD($1)] # chan reference count
+define FCIOMODE Memi[FCD($1)+1] # chan i/o mode
+define FCLOSEFD Memi[FCD($1)+2] # close chan when inactive
+define FAFD Memi[FCD($1)+3] # active fd
+define FBLKSIZE Memi[FCD($1)+4] # device block size
+define FOPTBUFSIZE Memi[FCD($1)+5] # "optimum" buffer size
+define FMAXBUFSIZE Memi[FCD($1)+6] # maximum buffer size
+define FDEVOPEN Memi[FCD($1)+7] # device zopen proc
+define FILSZ_PTR FCD($1)+8
+define FILSIZE Meml[FILSZ_PTR($1)] # file size, chars
+define FPKOSFN Memc[P2C(FCD($1)+10)] # packed osfn of file
+
+
+# Flags
+
+define FF_FLUSHNL 1B # flush each line to output device
+define FF_READ 2B # read perm on file
+define FF_WRITE 4B # write perm on file
+define FF_EOF 10B # at EOF
+define FF_ERR 20B # i/o error
+define FF_KEEP 40B # keep file open after task quits?
+define FF_FLUSH 100B # write each line to z buffer
+define FF_RAW 200B # raw i/o when reading a text device
+define FF_NDELAY 400B # nonblocking i/o
+define FF_PUSHBACK 1000B # data is pushed back into input
+
+
+# Device table entry points
+
+define LEN_DTE 7 # length of device table entry
+define TX_DRIVER 1 # index into devtbl of textfile driver
+define BF_DRIVER 8 # index of binary file driver
+define TY_DRIVER 15 # index of terminal driver
+define PR_DRIVER 22 # index of IPC driver
+define SF_DRIVER 29 # index of static file driver
+define STD_DRIVER ($1 <= 29) # is device code that of a std driver?
+
+define ZGETTX zdev[FDEV($1)] # text files
+define ZPUTTX zdev[FDEV($1)+1]
+define ZFLSTX zdev[FDEV($1)+2]
+define ZSTTTX zdev[FDEV($1)+3]
+define ZCLSTX zdev[FDEV($1)+4]
+define ZSEKTX zdev[FDEV($1)+5]
+define ZNOTTX zdev[FDEV($1)+6]
+
+define ZARDBF zdev[FDEV($1)] # binary files
+define ZAWRBF zdev[FDEV($1)+1]
+define ZAWTBF zdev[FDEV($1)+2]
+define ZSTTBF zdev[FDEV($1)+3]
+define ZCLSBF zdev[FDEV($1)+4]
+
+
+# File status codes (ZFSTTX, ZFSTTB). FIO makes a distinction between the
+# device block size, which establishes the alignment restrictions for
+# asynchronous reads and writes, and the "optimal" buffer size, the default
+# buffer size supplied by the device z-routines, which defines the minimum
+# buffer size for efficient sequential access to the device.
+
+define FSTT_BLKSIZE 1 # block size, bytes
+define FSTT_FILSIZE 2 # file size, bytes
+define FSTT_OPTBUFSIZE 3 # optimum buffer size, bytes
+define FSTT_MAXBUFSIZE 4 # optimum buffer size, bytes
+
+define REMOVE_PROTECTION 0 # for ZFPROT
+define SET_PROTECTION 1
+define QUERY_PROTECTION 2
+
+define STRING_FILE (-1) # open a string as a file
+define SZ_SPOOLBUF 4096 # def. initial size of a spool buffer
+
+
+# Filename Mapping definitions.
+
+define SZ_VFNFN 127 # max size ROOT or EXTN in VFN
+define SZ_OSDIR 255 # max chars in V_OSDIR field
+
+define VFN_READ 1 # VFN access modes for VFNOPEN
+define VFN_WRITE 2
+define VFN_UNMAP 3
+
+define VFN_NOUPDATE 0 # update flag for VFNCLOSE
+define VFN_UPDATE 1
+
+
+# Terminal driver escape sequences.
+
+define LEN_RAWCMD 5 # +1 for iomode character (N|B)
+define RAWOFF "\033-rAw" # raw mode off
+define RAWON "\033+rAw" # raw mode on
+
+define LEN_SETREDRAW 6 # 5 char escape sequence + code
+define SETREDRAW "\033=rDw" # set/enable screen redraw code
+
+
+# Magtape driver global definitions.
+
+define LEN_MTDEVPOS 5
diff --git a/unix/bin.cygwin/arch_includes/pllseg.h b/unix/bin.cygwin/arch_includes/pllseg.h
new file mode 100644
index 00000000..c2bc1811
--- /dev/null
+++ b/unix/bin.cygwin/arch_includes/pllseg.h
@@ -0,0 +1,62 @@
+# PLLSEG.H -- Macros for sequentially reading segments of a line list.
+#
+# pll_init (ll, descriptor)
+# npix = pll_nleft (descriptor)
+# val = pll_getseg (ll, descriptor, npix, value)
+#
+# pll_init Initialize descriptor for sequential i/o from the linelist LL.
+# pll_nleft Number of pixels left in the current line segment of constant
+# value. Zero is returned at the EOL.
+# pll_getseg Read NPIX pixels from the current segment, advancing to the
+# next segment automatically when the the current segment is
+# exhausted.
+#
+# The descriptor is an integer array, the contents of which are hidden from
+# the application using these macros. This package uses the internal
+# procedure PLL_NEXTSEG, which is included in PL package library.
+
+# Range list i/o descriptor.
+define LEN_PLLDES 7
+define ld_nleft $1[1]
+define ld_value $1[2]
+define ld_x $1[3]
+define ld_ip $1[4]
+define ld_hi $1[5]
+define ld_next_nleft $1[6]
+define ld_next_value $1[7]
+
+# PLL_NLEFT -- Number of pixels left in the current segment.
+define pll_nleft ld_nleft($1)
+
+## PLL_INIT -- Initialize the linelist descriptor.
+#define (pll_init, { # $1=ll $2=des
+# # ld_x($2) = 1
+# ld_hi($2) = 1
+# if (LL_OLDFORMAT($1))
+# ld_ip($2) = OLL_FIRST
+# else
+# ld_ip($2) = LL_FIRST($1)
+# ld_next_nleft($2) = 0
+# ld_nleft($2) = 0
+# call pll_nextseg ($1, $2)
+#})
+
+define (pll_init, {ld_hi($2)=1;if(LL_OLDFORMAT($1)){ld_ip($2)=OLL_FIRST;}else{ld_ip($2)=LL_FIRST($1);}ld_next_nleft($2)=0;ld_nleft($2)=0;call pll_nextseg($1,$2);})
+
+#
+## PLL_GETSEG -- Read pixels from the current segment.
+#define (pll_getseg, { # $1=ll $2=des $3=npix $4=value
+# $4 = ld_value($2)
+# # ld_x($2) = ld_x($2) + $3
+# ld_nleft($2) = ld_nleft($2) - $3
+# if (ld_nleft($2) <= 0)
+# if (ld_next_nleft($2) > 0) {
+# ld_nleft($2) = ld_next_nleft($2)
+# ld_value($2) = ld_next_value($2)
+# ld_next_nleft($2) = 0
+# } else
+# call pll_nextseg ($1, $2)
+#})
+
+define (pll_getseg, {$4=ld_value($2);ld_nleft($2)=ld_nleft($2)-$3;if(ld_nleft($2)<=0){if(ld_next_nleft($2)>0){ld_nleft($2)=ld_next_nleft($2);ld_value($2)=ld_next_value($2);ld_next_nleft($2)=0;}else{call pll_nextseg($1,$2);}}})
+
diff --git a/unix/bin.cygwin/arch_includes/plrseg.h b/unix/bin.cygwin/arch_includes/plrseg.h
new file mode 100644
index 00000000..2f32a9ab
--- /dev/null
+++ b/unix/bin.cygwin/arch_includes/plrseg.h
@@ -0,0 +1,68 @@
+# PLRSEG.H -- Macros for sequentially reading segments of a range list.
+#
+# plr_init (rl, descriptor)
+# npix = plr_nleft (descriptor)
+# val = plr_getseg (rl, descriptor, npix, value)
+#
+# plr_init Initialize descriptor for sequential i/o from the rangelist RL.
+# plr_nleft Number of pixels left in the current line segment of constant
+# value. Zero is returned at the EOL.
+# plr_getseg Read NPIX pixels from the current segment, advancing to the
+# next segment automatically when the the current segment is
+# exhausted.
+#
+# The descriptor is an integer array, the contents of which are hidden from
+# the application using these macros.
+
+# Range list i/o descriptor.
+define LEN_PLRDES 4
+define rd_nleft $1[1]
+define rd_value $1[2]
+define rd_x $1[3]
+define rd_rn $1[4]
+
+# PLR_NLEFT -- Number of pixels left in the current segment.
+define plr_nleft rd_nleft($1)
+
+# PLR_INIT -- Initialize the rangelist descriptor.
+#define (plr_init, { # $1=rl $2=des
+# rd_x($2) = 1
+# rd_rn($2) = RL_FIRST
+# plr_nextseg ($1, $2)
+#})
+
+# PLR_GETSEG -- Read pixels from the current segment.
+#define (plr_getseg, { # $1=rl $2=des $3=npix $4=value
+# $4 = rd_value($2)
+# rd_x($2) = rd_x($2) + $3
+# rd_nleft($2) = rd_nleft($2) - $3
+# if (rd_nleft($2) <= 0)
+# plr_nextseg ($1, $2)
+#})
+
+# PLR_NEXTSEG -- Set up the next segment (internal routine).
+#define (plr_nextseg, { # $1=rl $2=des
+# if (rd_rn($2) <= RL_LEN($1)) {
+# if ($1[1,rd_rn($2)] > rd_x($2)) {
+# rd_value($2) = 0
+# rd_nleft($2) = $1[1,rd_x($2)] - rd_x($2)
+# } else {
+# rd_value($2) = $1[3,rd_rn($2)]
+# rd_nleft($2) = $1[2,rd_rn($2)]
+# rd_rn($2) = rd_rn($2) + 1
+# }
+# } else if (rd_x($2) <= RL_AXLEN($1)) {
+# rd_value($2) = 0
+# rd_nleft($2) = RL_AXLEN($1) - rd_x($2) + 1
+# }
+#})
+
+
+# PLR_INIT -- Initialize the rangelist descriptor.
+define (plr_init, {rd_x($2)=1;rd_rn($2)=RL_FIRST;plr_nextseg($1,$2);})
+
+# PLR_GETSEG -- Read pixels from the current segment.
+define (plr_getseg, {$4=rd_value($2);rd_x($2)=rd_x($2)+$3;rd_nleft($2)=rd_nleft($2)-$3;if(rd_nleft($2) <= 0){plr_nextseg($1,$2)}})
+
+# PLR_NEXTSEG -- Set up the next segment (internal routine).
+define (plr_nextseg, {if(rd_rn($2)<=RL_LEN($1)){if($1[1,rd_rn($2)]>rd_x($2)){rd_value($2)=0;rd_nleft($2)=$1[1,rd_x($2)]-rd_x($2);}else{rd_value($2)=$1[3,rd_rn($2)];rd_nleft($2)=$1[2,rd_rn($2)];rd_rn($2)=rd_rn($2)+1;}}else if(rd_x($2)<=RL_AXLEN($1)){rd_value($2)=0;rd_nleft($2)=RL_AXLEN($1)-rd_x($2)+1;}})
diff --git a/unix/bin.cygwin/f2c.e.exe b/unix/bin.cygwin/f2c.e.exe
new file mode 100755
index 00000000..d6bfb29b
--- /dev/null
+++ b/unix/bin.cygwin/f2c.e.exe
Binary files differ
diff --git a/unix/bin.cygwin/f2c.h b/unix/bin.cygwin/f2c.h
new file mode 100644
index 00000000..6af1cdc0
--- /dev/null
+++ b/unix/bin.cygwin/f2c.h
@@ -0,0 +1,228 @@
+/* f2c.h -- Standard Fortran to C header file */
+
+/** barf [ba:rf] 2. "He suggested using FORTRAN, and everybody barfed."
+
+ - From The Shogakukan DICTIONARY OF NEW ENGLISH (Second edition) */
+
+#ifndef F2C_INCLUDE
+#define F2C_INCLUDE
+
+/*
+typedef long int integer;
+typedef long int logical;
+*/
+typedef int integer;
+typedef int logical;
+
+typedef unsigned long int uinteger;
+typedef char *address;
+typedef short int shortint;
+typedef float real;
+typedef double doublereal;
+typedef struct { real r, i; } complex;
+typedef struct { doublereal r, i; } doublecomplex;
+typedef short int shortlogical;
+typedef char logical1;
+typedef char integer1;
+#ifdef INTEGER_STAR_8 /* Adjust for integer*8. */
+typedef long long longint; /* system-dependent */
+typedef unsigned long long ulongint; /* system-dependent */
+#define qbit_clear(a,b) ((a) & ~((ulongint)1 << (b)))
+#define qbit_set(a,b) ((a) | ((ulongint)1 << (b)))
+#endif
+
+#define TRUE_ (1)
+#define FALSE_ (0)
+
+/* Extern is for use with -E */
+#ifndef Extern
+#define Extern extern
+#endif
+
+/* I/O stuff */
+
+#ifdef f2c_i2
+/* for -i2 */
+typedef short flag;
+typedef short ftnlen;
+typedef short ftnint;
+#else
+typedef long int flag;
+typedef long int ftnlen;
+typedef long int ftnint;
+#endif
+
+/*external read, write*/
+typedef struct
+{ flag cierr;
+ ftnint ciunit;
+ flag ciend;
+ char *cifmt;
+ ftnint cirec;
+} cilist;
+
+/*internal read, write*/
+typedef struct
+{ flag icierr;
+ char *iciunit;
+ flag iciend;
+ char *icifmt;
+ ftnint icirlen;
+ ftnint icirnum;
+} icilist;
+
+/*open*/
+typedef struct
+{ flag oerr;
+ ftnint ounit;
+ char *ofnm;
+ ftnlen ofnmlen;
+ char *osta;
+ char *oacc;
+ char *ofm;
+ ftnint orl;
+ char *oblnk;
+} olist;
+
+/*close*/
+typedef struct
+{ flag cerr;
+ ftnint cunit;
+ char *csta;
+} cllist;
+
+/*rewind, backspace, endfile*/
+typedef struct
+{ flag aerr;
+ ftnint aunit;
+} alist;
+
+/* inquire */
+typedef struct
+{ flag inerr;
+ ftnint inunit;
+ char *infile;
+ ftnlen infilen;
+ ftnint *inex; /*parameters in standard's order*/
+ ftnint *inopen;
+ ftnint *innum;
+ ftnint *innamed;
+ char *inname;
+ ftnlen innamlen;
+ char *inacc;
+ ftnlen inacclen;
+ char *inseq;
+ ftnlen inseqlen;
+ char *indir;
+ ftnlen indirlen;
+ char *infmt;
+ ftnlen infmtlen;
+ char *inform;
+ ftnint informlen;
+ char *inunf;
+ ftnlen inunflen;
+ ftnint *inrecl;
+ ftnint *innrec;
+ char *inblank;
+ ftnlen inblanklen;
+} inlist;
+
+#define VOID void
+
+union Multitype { /* for multiple entry points */
+ integer1 g;
+ shortint h;
+ integer i;
+ /* longint j; */
+ real r;
+ doublereal d;
+ complex c;
+ doublecomplex z;
+ };
+
+typedef union Multitype Multitype;
+
+/*typedef long int Long;*/ /* No longer used; formerly in Namelist */
+
+struct Vardesc { /* for Namelist */
+ char *name;
+ char *addr;
+ ftnlen *dims;
+ int type;
+ };
+typedef struct Vardesc Vardesc;
+
+struct Namelist {
+ char *name;
+ Vardesc **vars;
+ int nvars;
+ };
+typedef struct Namelist Namelist;
+
+#define abs(x) ((x) >= 0 ? (x) : -(x))
+#define dabs(x) (doublereal)abs(x)
+#define min(a,b) ((a) <= (b) ? (a) : (b))
+#define max(a,b) ((a) >= (b) ? (a) : (b))
+#define dmin(a,b) (doublereal)min(a,b)
+#define dmax(a,b) (doublereal)max(a,b)
+#define bit_test(a,b) ((a) >> (b) & 1)
+#define bit_clear(a,b) ((a) & ~((uinteger)1 << (b)))
+#define bit_set(a,b) ((a) | ((uinteger)1 << (b)))
+
+/* procedure parameter types for -A and -C++ */
+
+#define F2C_proc_par_types 1
+#ifdef __cplusplus
+typedef int /* Unknown procedure type */ (*U_fp)(...);
+typedef shortint (*J_fp)(...);
+typedef integer (*I_fp)(...);
+typedef real (*R_fp)(...);
+typedef doublereal (*D_fp)(...), (*E_fp)(...);
+typedef /* Complex */ VOID (*C_fp)(...);
+typedef /* Double Complex */ VOID (*Z_fp)(...);
+typedef logical (*L_fp)(...);
+typedef shortlogical (*K_fp)(...);
+typedef /* Character */ VOID (*H_fp)(...);
+typedef /* Subroutine */ int (*S_fp)(...);
+#else
+typedef int /* Unknown procedure type */ (*U_fp)();
+typedef shortint (*J_fp)();
+typedef integer (*I_fp)();
+typedef real (*R_fp)();
+typedef doublereal (*D_fp)(), (*E_fp)();
+typedef /* Complex */ VOID (*C_fp)();
+typedef /* Double Complex */ VOID (*Z_fp)();
+typedef logical (*L_fp)();
+typedef shortlogical (*K_fp)();
+typedef /* Character */ VOID (*H_fp)();
+typedef /* Subroutine */ int (*S_fp)();
+#endif
+/* E_fp is for real functions when -R is not specified */
+typedef VOID C_f; /* complex function */
+typedef VOID H_f; /* character function */
+typedef VOID Z_f; /* double complex function */
+typedef doublereal E_f; /* real function with -R not specified */
+
+/* undef any lower-case symbols that your C compiler predefines, e.g.: */
+
+#ifndef Skip_f2c_Undefs
+#undef cray
+#undef gcos
+#undef mc68010
+#undef mc68020
+#undef mips
+#undef pdp11
+#undef sgi
+#undef sparc
+#undef sun
+#undef sun2
+#undef sun3
+#undef sun4
+#undef u370
+#undef u3b
+#undef u3b2
+#undef u3b5
+#undef unix
+#undef vax
+#endif
+#endif
diff --git a/unix/bin.cygwin/fio.h b/unix/bin.cygwin/fio.h
new file mode 100644
index 00000000..4d9e8f49
--- /dev/null
+++ b/unix/bin.cygwin/fio.h
@@ -0,0 +1,146 @@
+# FIO.H -- FIO definitions.
+
+# Logical seek: adjust i/o pointer to the seek offset. If the buffer was
+# being written into when the seek occurs, adjust ITOP and OTOP to mark
+# the end of the good data in the buffer, then set IOP to new offset.
+
+define (UPDATE_IOP, if (bufptr[$1] != NULL && otop[$1] == buftop[$1]) { itop[$1] = min(buftop[$1], max(itop[$1], iop[$1])) ; otop[$1] = itop[$1] })
+define (LSEEK, {UPDATE_IOP($1);iop[$1]=($2-boffset[$1]+bufptr[$1])})
+define LNOTE (boffset[$1]+iop[$1]-bufptr[$1])
+define BUF_MODIFIED (otop[$1] > bufptr[$1])
+
+define INACTIVE 0
+define READ_IN_PROGRESS 1
+define WRITE_IN_PROGRESS 2
+
+
+# File descriptor structure (dynamically allocated part)
+
+define SZ_FFNAME 255
+define LEN_FIODES (20+LEN_CHANDES+256)
+
+define FCHAN Memi[$1] # os channnel
+define FMODE Memi[$1+1] # mode of access
+define FTYPE Memi[$1+2] # binary or text
+define FDEV Memi[$1+3] # device index
+define FBUFSIZE Memi[$1+4] # buffer size
+define FIRSTBUFOFF Memi[$1+5] # offset of first file buffer
+define FNBUFS Memi[$1+6] # number of buffers
+define FLOCBUF Memi[$1+7] # zlocva of aread buffer
+define FPBBUFSIZE Memi[$1+8] # size pushback buffer
+define FPBBUF Memi[$1+9] # ptr to pushback buffer
+define FPBTOP Memi[$1+10] # ptr to top of pbbuf
+define FPBIOP Memi[$1+11] # iop into pbbuf
+define FPBSP Memi[$1+12] # pbbuf stack pointer
+define FILSTAT Memi[$1+13] # channel status
+define FNCHARS Memi[$1+14] # nchars last i/o
+define FNBYTES Memi[$1+15] # nbytes last rec read
+define FBUFMODE Memi[$1+16] # i/o mode for buffer
+define FFIOMODE Memi[$1+17] # i/o mode for file
+define FCD Memi[$1+18] # ptr to chan descr.
+ # (open)
+define FLCD ($1+20) # local storage for cd
+define FNAME Memc[P2C($1+20+LEN_CHANDES)] # filename
+
+# Channel descriptor (stored in fd if file not multiply open). The DEVPAR
+# (device parameter) fields are reserved for use with special devices and
+# are not used by FIO.
+
+define LEN_CHANDES (10+256)
+define FREFCNT Memi[FCD($1)] # chan reference count
+define FCIOMODE Memi[FCD($1)+1] # chan i/o mode
+define FCLOSEFD Memi[FCD($1)+2] # close chan when inactive
+define FAFD Memi[FCD($1)+3] # active fd
+define FBLKSIZE Memi[FCD($1)+4] # device block size
+define FOPTBUFSIZE Memi[FCD($1)+5] # "optimum" buffer size
+define FMAXBUFSIZE Memi[FCD($1)+6] # maximum buffer size
+define FDEVOPEN Memi[FCD($1)+7] # device zopen proc
+define FILSZ_PTR FCD($1)+8
+define FILSIZE Meml[FILSZ_PTR($1)] # file size, chars
+define FPKOSFN Memc[P2C(FCD($1)+10)] # packed osfn of file
+
+
+# Flags
+
+define FF_FLUSHNL 1B # flush each line to output device
+define FF_READ 2B # read perm on file
+define FF_WRITE 4B # write perm on file
+define FF_EOF 10B # at EOF
+define FF_ERR 20B # i/o error
+define FF_KEEP 40B # keep file open after task quits?
+define FF_FLUSH 100B # write each line to z buffer
+define FF_RAW 200B # raw i/o when reading a text device
+define FF_NDELAY 400B # nonblocking i/o
+define FF_PUSHBACK 1000B # data is pushed back into input
+
+
+# Device table entry points
+
+define LEN_DTE 7 # length of device table entry
+define TX_DRIVER 1 # index into devtbl of textfile driver
+define BF_DRIVER 8 # index of binary file driver
+define TY_DRIVER 15 # index of terminal driver
+define PR_DRIVER 22 # index of IPC driver
+define SF_DRIVER 29 # index of static file driver
+define STD_DRIVER ($1 <= 29) # is device code that of a std driver?
+
+define ZGETTX zdev[FDEV($1)] # text files
+define ZPUTTX zdev[FDEV($1)+1]
+define ZFLSTX zdev[FDEV($1)+2]
+define ZSTTTX zdev[FDEV($1)+3]
+define ZCLSTX zdev[FDEV($1)+4]
+define ZSEKTX zdev[FDEV($1)+5]
+define ZNOTTX zdev[FDEV($1)+6]
+
+define ZARDBF zdev[FDEV($1)] # binary files
+define ZAWRBF zdev[FDEV($1)+1]
+define ZAWTBF zdev[FDEV($1)+2]
+define ZSTTBF zdev[FDEV($1)+3]
+define ZCLSBF zdev[FDEV($1)+4]
+
+
+# File status codes (ZFSTTX, ZFSTTB). FIO makes a distinction between the
+# device block size, which establishes the alignment restrictions for
+# asynchronous reads and writes, and the "optimal" buffer size, the default
+# buffer size supplied by the device z-routines, which defines the minimum
+# buffer size for efficient sequential access to the device.
+
+define FSTT_BLKSIZE 1 # block size, bytes
+define FSTT_FILSIZE 2 # file size, bytes
+define FSTT_OPTBUFSIZE 3 # optimum buffer size, bytes
+define FSTT_MAXBUFSIZE 4 # optimum buffer size, bytes
+
+define REMOVE_PROTECTION 0 # for ZFPROT
+define SET_PROTECTION 1
+define QUERY_PROTECTION 2
+
+define STRING_FILE (-1) # open a string as a file
+define SZ_SPOOLBUF 4096 # def. initial size of a spool buffer
+
+
+# Filename Mapping definitions.
+
+define SZ_VFNFN 127 # max size ROOT or EXTN in VFN
+define SZ_OSDIR 255 # max chars in V_OSDIR field
+
+define VFN_READ 1 # VFN access modes for VFNOPEN
+define VFN_WRITE 2
+define VFN_UNMAP 3
+
+define VFN_NOUPDATE 0 # update flag for VFNCLOSE
+define VFN_UPDATE 1
+
+
+# Terminal driver escape sequences.
+
+define LEN_RAWCMD 5 # +1 for iomode character (N|B)
+define RAWOFF "\033-rAw" # raw mode off
+define RAWON "\033+rAw" # raw mode on
+
+define LEN_SETREDRAW 6 # 5 char escape sequence + code
+define SETREDRAW "\033=rDw" # set/enable screen redraw code
+
+
+# Magtape driver global definitions.
+
+define LEN_MTDEVPOS 5
diff --git a/unix/bin.cygwin/libf2c.a b/unix/bin.cygwin/libf2c.a
new file mode 100644
index 00000000..58bcc126
--- /dev/null
+++ b/unix/bin.cygwin/libf2c.a
Binary files differ
diff --git a/unix/bin.cygwin/pllseg.h b/unix/bin.cygwin/pllseg.h
new file mode 100644
index 00000000..c2bc1811
--- /dev/null
+++ b/unix/bin.cygwin/pllseg.h
@@ -0,0 +1,62 @@
+# PLLSEG.H -- Macros for sequentially reading segments of a line list.
+#
+# pll_init (ll, descriptor)
+# npix = pll_nleft (descriptor)
+# val = pll_getseg (ll, descriptor, npix, value)
+#
+# pll_init Initialize descriptor for sequential i/o from the linelist LL.
+# pll_nleft Number of pixels left in the current line segment of constant
+# value. Zero is returned at the EOL.
+# pll_getseg Read NPIX pixels from the current segment, advancing to the
+# next segment automatically when the the current segment is
+# exhausted.
+#
+# The descriptor is an integer array, the contents of which are hidden from
+# the application using these macros. This package uses the internal
+# procedure PLL_NEXTSEG, which is included in PL package library.
+
+# Range list i/o descriptor.
+define LEN_PLLDES 7
+define ld_nleft $1[1]
+define ld_value $1[2]
+define ld_x $1[3]
+define ld_ip $1[4]
+define ld_hi $1[5]
+define ld_next_nleft $1[6]
+define ld_next_value $1[7]
+
+# PLL_NLEFT -- Number of pixels left in the current segment.
+define pll_nleft ld_nleft($1)
+
+## PLL_INIT -- Initialize the linelist descriptor.
+#define (pll_init, { # $1=ll $2=des
+# # ld_x($2) = 1
+# ld_hi($2) = 1
+# if (LL_OLDFORMAT($1))
+# ld_ip($2) = OLL_FIRST
+# else
+# ld_ip($2) = LL_FIRST($1)
+# ld_next_nleft($2) = 0
+# ld_nleft($2) = 0
+# call pll_nextseg ($1, $2)
+#})
+
+define (pll_init, {ld_hi($2)=1;if(LL_OLDFORMAT($1)){ld_ip($2)=OLL_FIRST;}else{ld_ip($2)=LL_FIRST($1);}ld_next_nleft($2)=0;ld_nleft($2)=0;call pll_nextseg($1,$2);})
+
+#
+## PLL_GETSEG -- Read pixels from the current segment.
+#define (pll_getseg, { # $1=ll $2=des $3=npix $4=value
+# $4 = ld_value($2)
+# # ld_x($2) = ld_x($2) + $3
+# ld_nleft($2) = ld_nleft($2) - $3
+# if (ld_nleft($2) <= 0)
+# if (ld_next_nleft($2) > 0) {
+# ld_nleft($2) = ld_next_nleft($2)
+# ld_value($2) = ld_next_value($2)
+# ld_next_nleft($2) = 0
+# } else
+# call pll_nextseg ($1, $2)
+#})
+
+define (pll_getseg, {$4=ld_value($2);ld_nleft($2)=ld_nleft($2)-$3;if(ld_nleft($2)<=0){if(ld_next_nleft($2)>0){ld_nleft($2)=ld_next_nleft($2);ld_value($2)=ld_next_value($2);ld_next_nleft($2)=0;}else{call pll_nextseg($1,$2);}}})
+
diff --git a/unix/bin.cygwin/plrseg.h b/unix/bin.cygwin/plrseg.h
new file mode 100644
index 00000000..2f32a9ab
--- /dev/null
+++ b/unix/bin.cygwin/plrseg.h
@@ -0,0 +1,68 @@
+# PLRSEG.H -- Macros for sequentially reading segments of a range list.
+#
+# plr_init (rl, descriptor)
+# npix = plr_nleft (descriptor)
+# val = plr_getseg (rl, descriptor, npix, value)
+#
+# plr_init Initialize descriptor for sequential i/o from the rangelist RL.
+# plr_nleft Number of pixels left in the current line segment of constant
+# value. Zero is returned at the EOL.
+# plr_getseg Read NPIX pixels from the current segment, advancing to the
+# next segment automatically when the the current segment is
+# exhausted.
+#
+# The descriptor is an integer array, the contents of which are hidden from
+# the application using these macros.
+
+# Range list i/o descriptor.
+define LEN_PLRDES 4
+define rd_nleft $1[1]
+define rd_value $1[2]
+define rd_x $1[3]
+define rd_rn $1[4]
+
+# PLR_NLEFT -- Number of pixels left in the current segment.
+define plr_nleft rd_nleft($1)
+
+# PLR_INIT -- Initialize the rangelist descriptor.
+#define (plr_init, { # $1=rl $2=des
+# rd_x($2) = 1
+# rd_rn($2) = RL_FIRST
+# plr_nextseg ($1, $2)
+#})
+
+# PLR_GETSEG -- Read pixels from the current segment.
+#define (plr_getseg, { # $1=rl $2=des $3=npix $4=value
+# $4 = rd_value($2)
+# rd_x($2) = rd_x($2) + $3
+# rd_nleft($2) = rd_nleft($2) - $3
+# if (rd_nleft($2) <= 0)
+# plr_nextseg ($1, $2)
+#})
+
+# PLR_NEXTSEG -- Set up the next segment (internal routine).
+#define (plr_nextseg, { # $1=rl $2=des
+# if (rd_rn($2) <= RL_LEN($1)) {
+# if ($1[1,rd_rn($2)] > rd_x($2)) {
+# rd_value($2) = 0
+# rd_nleft($2) = $1[1,rd_x($2)] - rd_x($2)
+# } else {
+# rd_value($2) = $1[3,rd_rn($2)]
+# rd_nleft($2) = $1[2,rd_rn($2)]
+# rd_rn($2) = rd_rn($2) + 1
+# }
+# } else if (rd_x($2) <= RL_AXLEN($1)) {
+# rd_value($2) = 0
+# rd_nleft($2) = RL_AXLEN($1) - rd_x($2) + 1
+# }
+#})
+
+
+# PLR_INIT -- Initialize the rangelist descriptor.
+define (plr_init, {rd_x($2)=1;rd_rn($2)=RL_FIRST;plr_nextseg($1,$2);})
+
+# PLR_GETSEG -- Read pixels from the current segment.
+define (plr_getseg, {$4=rd_value($2);rd_x($2)=rd_x($2)+$3;rd_nleft($2)=rd_nleft($2)-$3;if(rd_nleft($2) <= 0){plr_nextseg($1,$2)}})
+
+# PLR_NEXTSEG -- Set up the next segment (internal routine).
+define (plr_nextseg, {if(rd_rn($2)<=RL_LEN($1)){if($1[1,rd_rn($2)]>rd_x($2)){rd_value($2)=0;rd_nleft($2)=$1[1,rd_x($2)]-rd_x($2);}else{rd_value($2)=$1[3,rd_rn($2)];rd_nleft($2)=$1[2,rd_rn($2)];rd_rn($2)=rd_rn($2)+1;}}else if(rd_x($2)<=RL_AXLEN($1)){rd_value($2)=0;rd_nleft($2)=RL_AXLEN($1)-rd_x($2)+1;}})