-/* $Header: perl.h,v 3.0.1.4 89/12/21 20:07:35 lwall Locked $
+/* $Header: perl.h,v 3.0.1.7 90/03/27 16:12:52 lwall Locked $
*
* Copyright (c) 1989, Larry Wall
*
* as specified in the README file that comes with the perl 3.0 kit.
*
* $Log: perl.h,v $
+ * Revision 3.0.1.7 90/03/27 16:12:52 lwall
+ * patch16: MSDOS support
+ * patch16: support for machines that can't cast negative floats to unsigned ints
+ *
+ * Revision 3.0.1.6 90/03/12 16:40:43 lwall
+ * patch13: did some ndir straightening up for Xenix
+ *
+ * Revision 3.0.1.5 90/02/28 17:52:28 lwall
+ * patch9: Configure now determines whether volatile is supported
+ * patch9: volatilized some more variables for super-optimizing compilers
+ * patch9: unused VREG symbol deleted
+ * patch9: perl can now start up other interpreters scripts
+ * patch9: you may now undef $/ to have no input record separator
+ * patch9: nested evals clobbered their longjmp environment
+ *
* Revision 3.0.1.4 89/12/21 20:07:35 lwall
* patch7: arranged for certain registers to be restored after longjmp()
* patch7: Configure now compiles a test program to figure out time.h fiasco
*
*/
-#ifdef __STDC__
+#define VOIDUSED 1
+#include "config.h"
+
+#ifdef MSDOS
+/*
+ * BUGGY_MSC:
+ * This symbol is defined if you are the unfortunate owner of a buggy
+ * Microsoft C compiler and want to use intrinsic functions. Versions
+ * up to 5.1 are known conform to this definition. This is not needed
+ * under Unix.
+ */
+#define BUGGY_MSC /**/
+/*
+ * BINARY:
+ * This symbol is defined if you run under an operating system that
+ * distinguishes between binary and text files. If so the function
+ * setmode will be used to set the file into binary mode. Unix
+ * doesn't distinguish.
+ */
+#define BINARY /**/
+
+#else /* !MSDOS */
+
+/*
+ * The following symbols are defined if your operating system supports
+ * functions by that name. All Unixes I know of support them, thus they
+ * are not checked by the configuration script, but are directly defined
+ * here.
+ */
+#define CHOWN
+#define CHROOT
+#define FORK
+#define GETLOGIN
+#define GETPPID
+#define KILL
+#define LINK
+#define PIPE
+#define WAIT
+#define UMASK
+/*
+ * The following symbols are defined if your operating system supports
+ * password and group functions in general. All Unix systems do.
+ */
+#define GROUP
+#define PASSWD
+
+#endif /* !MSDOS */
+
+#if defined(HASVOLATILE) || defined(__STDC__)
#define VOLATILE volatile
-#define VREG
#else
#define VOLATILE
-#define VREG register
#endif
-#define VOIDUSED 1
-#include "config.h"
-
#ifdef IAMSUID
# ifndef TAINT
# define TAINT
#define ntohi ntohl
#endif
-#if defined(I_DIRENT) && !defined(xenix)
+#if defined(I_DIRENT) && !defined(M_XENIX)
# include <dirent.h>
# define DIRENT dirent
#else
-# ifdef I_SYSDIR
-# ifdef hp9000s500
-# include <ndir.h> /* may be wrong in the future */
-# else
-# include <sys/dir.h>
-# endif
+# ifdef I_SYSNDIR
+# include <sys/ndir.h>
# define DIRENT direct
# else
-# ifdef I_SYSNDIR
-# include <sys/ndir.h>
+# ifdef I_SYSDIR
+# ifdef hp9000s500
+# include <ndir.h> /* may be wrong in the future */
+# else
+# include <sys/dir.h>
+# endif
# define DIRENT direct
# endif
# endif
#include "array.h"
#include "hash.h"
-#if defined(iAPX286) || defined(M_I286) || defined(I80286)
+#if defined(iAPX286) || defined(M_I286) || defined(I80286) || defined(M_I86)
# define I286
#endif
#endif
#endif
+#ifdef CASTNEGFLOAT
+#define U_S(what) ((unsigned short)(what))
+#define U_I(what) ((unsigned int)(what))
+#define U_L(what) ((unsigned long)(what))
+#else
+unsigned long castulong();
+#define U_S(what) ((unsigned int)castulong(what))
+#define U_I(what) ((unsigned int)castulong(what))
+#define U_L(what) (castulong(what))
+#endif
+
CMD *add_label();
CMD *block_head();
CMD *append_line();
void do_join();
void do_sprintf();
void do_accept();
+void do_pipe();
void do_vecset();
void savelist();
void saveitem();
void savesptr();
void savehptr();
void restorelist();
+void repeatcpy();
HASH *savehash();
ARRAY *saveary();
+EXT char **origargv;
+EXT int origargc;
EXT line_t line INIT(0);
EXT line_t subline INIT(0);
EXT STR *subname INIT(Nullstr);
EXT char *filename;
EXT char *origfilename;
-EXT FILE *rsfp;
+EXT FILE * VOLATILE rsfp;
EXT char buf[1024];
EXT char *bufptr;
EXT char *oldbufptr;
EXT STR *linestr INIT(Nullstr);
-EXT char record_separator INIT('\n');
+EXT int record_separator INIT('\n');
EXT int rslen INIT(1);
EXT char *ofs INIT(Nullch);
EXT int ofslen INIT(0);
EXT bool sawstudy INIT(FALSE); /* do fbminstr on all strings */
EXT bool sawi INIT(FALSE); /* study must assume case insensitive */
EXT bool sawvec INIT(FALSE);
+EXT bool localizing INIT(FALSE); /* are we processing a local() list? */
#ifdef CSH
char *cshname INIT(CSH);
EXT char tokenbuf[256];
EXT int expectterm INIT(TRUE); /* how to interpret ambiguous tokens */
-EXT int in_eval INIT(FALSE); /* trap fatal errors? */
+EXT VOLATILE int in_eval INIT(FALSE); /* trap fatal errors? */
EXT int multiline INIT(0); /* $*--do strings hold >1 line? */
EXT int forkprocess; /* so do_open |- can return proc# */
EXT int do_undump INIT(0); /* -u or dump seen? */
EXT int unsafe;
#ifdef DEBUGGING
-EXT int debug INIT(0);
+EXT VOLATILE int debug INIT(0);
EXT int dlevel INIT(0);
EXT int dlmax INIT(128);
EXT char *debname;
EXT int loop_max INIT(128);
EXT jmp_buf top_env;
-EXT jmp_buf eval_env;
-EXT char *goto_targ INIT(Nullch); /* cmd_exec gets strange when set */
+EXT char * VOLATILE goto_targ INIT(Nullch); /* cmd_exec gets strange when set */
EXT ARRAY *stack; /* THE STACK */
-EXT ARRAY *savestack; /* to save non-local values on */
+EXT ARRAY * VOLATILE savestack; /* to save non-local values on */
EXT ARRAY *tosave; /* strings to save on recursive subroutine */
EXT ARRAY *pidstatary; /* keep pids and statuses by fd for mypopen */
+EXT int *di; /* for tmp use in debuggers */
+EXT char *dc;
+EXT short *ds;
+
double atof();
long time();
struct tm *gmtime(), *localtime();