MS-DOS patches to perl.
Apply this patch to the standard perl source, version 4, patch level 19,
using "patch -p."  Do this in the root directory of the perl source
distribution.

You can cat all these patches together and pipe the output to patch -p.

Len Reed
Holos Software, Inc.
..!gatech!holos0!lbr
holos0!lbr@gatech.edu
--------------------------------------
*** msdos/ms-dos.h.old	Sun Feb 23 08:48:16 1992
--- msdos/ms-dos.h	Thu Nov 14 08:56:36 1991
***************
*** 0 ****
--- 1,100 ----
+ /* $Header: c:/usr/lbr/perl/RCS/ms-dos.h 1.1 90/10/15 15:18:53 lbr Exp $
+  *
+  *    (C) Copyright 1988, 1990 Diomidis Spinellis.
+  *    (C) Copyright 1990 Leonard Reed.
+  *
+  *    You may distribute under the terms of the GNU General Public License
+  *    as specified in the README file that comes with the perl 3.0 kit.
+  *
+  * $Log:	ms-dos.h $
+  * Revision 1.1  90/10/15  15:18:53  lbr
+  * Initial revision
+  * 
+  */
+ 
+ #ifndef MK_FP
+ 	/* Macro to make a far pointer from segment, offset */
+ # define MK_FP(seg,ofs) \
+ 	((void far *) (((unsigned long)(seg) << 16) | (unsigned)(ofs)))
+ #endif
+ 
+ enum action {
+     han_delete, 	/* delete the (handle) file */
+     fdelete,	 	/* delete the (stream) file */
+     execute,		/* execute the command, file open as (FILE *) */
+     swap_file		/* swap file (handle open) */
+ };
+ 
+ typedef union {	/* handle or stream pointer */
+     FILE *f;
+     int h;
+ } HFD;
+ 
+ struct todo {
+     HFD hfd;			/* handle or stream pointer */
+     char *name;			/* Name of the file (to unlink) */
+     const char *command;	/* Command to execute */
+     enum action what;		/* What to do */
+     int child_status;		/* "wait" value of child: used only
+ 			           for pipes read by parent
+ 				*/
+     struct todo *next;		/* Next structure */
+ };
+ 
+ struct todo *add_temp_file(FILE *, int, char *, char *, enum action , int);
+ void block_signals(void);
+ void unblock_signals(void);
+ void msdos_sig_death(int);
+ int swap_spawn(int, char *, char **);
+ int exec( int, char far *, char far *, int, int);
+ void cleanup_msdos_temps(void);
+ 
+ /* Structure of MS-DOS system file table entry.  Sure is silly that we
+    have to play with this.  The pack pragma is because the words in
+    this table are not even word aligned!  (The guys who "designed"
+    this stuff never looked beyond the 8088.)
+ 
+    Refer to Waite Group's MS-DOS Developer Guide, 2nd. edition, pp. 212-213,
+    for infor about this structure.
+ */
+ 
+ #pragma pack(1)
+ struct sft {
+     unsigned int ref_count;	/* number of references */
+     unsigned int open_mode;
+     unsigned char dattrib;
+     unsigned int flags;		/* flags including DOS_SFT_NOINHERIT */
+     unsigned long dbb;
+     unsigned int init_cluster;
+     unsigned int time;
+     unsigned int date;
+     unsigned long file_size;
+     unsigned long file_offset;
+     unsigned int relative_cluster;
+     unsigned int current_cluster;
+     unsigned int block_number;
+     unsigned char dir_index;
+     char file_name[8];
+     char file_ext[3];
+     char unknown[4];
+     unsigned int mach_owner;
+     unsigned int psp_owner;
+     unsigned int status;
+     char only_in_40[6];		/* unknown, only found in DOS 4.0+ */
+ };
+ #pragma pack()
+ 
+     /* Convert handle to MS-DOS system file table entry pointer */
+ struct sft far * dos_sys_file(int);
+ 
+ #define DOS_SFT_NOINHERIT 0x1000	/* flags mask for noinherit by child */
+ 
+ int dos_get_nofiles(void);
+ unsigned char far * dos_get_sft_map(void);
+ 
+ 	/* Call dos directly, bypassing the C library "intelligence." */
+ int dos_close(int);
+ int dos_dup(int);
+ int dos_dup2(int, int);
+ 
+ #define KSH_META_CHARS "*\"?<>|()&][$#`'\\"	/* Korn shell metachars */
