📄 perl.h
字号:
/* $RCSfile: perl.h,v $$Revision: 4.0.1.7 $$Date: 1993/02/05 19:40:30 $ * * Copyright (c) 1991, Larry Wall * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. * * $Log: perl.h,v $ * Revision 4.0.1.7 1993/02/05 19:40:30 lwall * patch36: worked around certain busted compilers that don't init statics right * * Revision 4.0.1.6 92/06/08 14:55:10 lwall * patch20: added Atari ST portability * patch20: bcopy() and memcpy() now tested for overlap safety * patch20: Perl now distinguishes overlapped copies from non-overlapped * patch20: removed implicit int declarations on functions * * Revision 4.0.1.5 91/11/11 16:41:07 lwall * patch19: uts wrongly defines S_ISDIR() et al * patch19: too many preprocessors can't expand a macro right in #if * patch19: added little-endian pack/unpack options * * Revision 4.0.1.4 91/11/05 18:06:10 lwall * patch11: various portability fixes * patch11: added support for dbz * patch11: added some support for 64-bit integers * patch11: hex() didn't understand leading 0x * * Revision 4.0.1.3 91/06/10 01:25:10 lwall * patch10: certain pattern optimizations were botched * * Revision 4.0.1.2 91/06/07 11:28:33 lwall * patch4: new copyright notice * patch4: made some allowances for "semi-standard" C * patch4: many, many itty-bitty portability fixes * * Revision 4.0.1.1 91/04/11 17:49:51 lwall * patch1: hopefully straightened out some of the Xenix mess * * Revision 4.0 91/03/20 01:37:56 lwall * 4.0 baseline. * */#define VOIDWANT 1#include "config.h"#ifdef MYMALLOC# ifdef HIDEMYMALLOC# define malloc Mymalloc# define realloc Myremalloc# define free Myfree# endif# define safemalloc malloc# define saferealloc realloc# define safefree free#endif/* work around some libPW problems */#define fatal Myfatal#ifdef DOINITchar Error[1];#endif/* define this once if either system, instead of cluttering up the src */#if defined(MSDOS) || defined(atarist)#define DOSISH 1#endif#ifdef DOSISH/* This stuff now in the MS-DOS config.h file. */#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 HAS_ALARM#define HAS_CHOWN#define HAS_CHROOT#define HAS_FORK#define HAS_GETLOGIN#define HAS_GETPPID#define HAS_KILL#define HAS_LINK#define HAS_PIPE#define HAS_WAIT#define HAS_UMASK/* * The following symbols are defined if your operating system supports * password and group functions in general. All Unix systems do. */#define HAS_GROUP#define HAS_PASSWD#endif /* !MSDOS */#if defined(__STDC__) || defined(_AIX) || defined(__stdc__)# define STANDARD_C 1#endif#if defined(HASVOLATILE) || defined(STANDARD_C)#define VOLATILE volatile#else#define VOLATILE#endif#ifdef IAMSUID# ifndef TAINT# define TAINT# endif#endif#ifndef HAS_VFORK# define vfork fork#endif#ifdef HAS_GETPGRP2# ifndef HAS_GETPGRP# define HAS_GETPGRP# endif# define getpgrp getpgrp2#endif#ifdef HAS_SETPGRP2# ifndef HAS_SETPGRP# define HAS_SETPGRP# endif# define setpgrp setpgrp2#endif#include <stdio.h>#include <ctype.h>#include <setjmp.h>#ifndef MSDOS#ifdef PARAM_NEEDS_TYPES#include <sys/types.h>#endif#include <sys/param.h>#endif#ifdef STANDARD_C/* Use all the "standard" definitions */#include <stdlib.h>#include <string.h>#define MEM_SIZE size_t#elsetypedef unsigned int MEM_SIZE;#endif /* STANDARD_C */#if defined(HAS_MEMCMP) && defined(mips) && defined(ultrix)#undef HAS_MEMCMP#endif#ifdef HAS_MEMCPY# ifndef STANDARD_C# ifndef memcpy extern char * memcpy();# endif# endif#else# ifndef memcpy# ifdef HAS_BCOPY# define memcpy(d,s,l) bcopy(s,d,l)# else# define memcpy(d,s,l) my_bcopy(s,d,l)# endif# endif#endif /* HAS_MEMCPY */#ifdef HAS_MEMSET# ifndef STANDARD_C# ifndef memset extern char *memset();# endif# endif# define memzero(d,l) memset(d,0,l)#else# ifndef memzero# ifdef HAS_BZERO# define memzero(d,l) bzero(d,l)# else# define memzero(d,l) my_bzero(d,l)# endif# endif#endif /* HAS_MEMSET */#ifdef HAS_MEMCMP# ifndef STANDARD_C# ifndef memcmp extern int memcmp();# endif# endif#else# ifndef memcmp# define memcmp(s1,s2,l) my_memcmp(s1,s2,l)# endif#endif /* HAS_MEMCMP *//* we prefer bcmp slightly for comparisons that don't care about ordering */#ifndef HAS_BCMP# ifndef bcmp# define bcmp(s1,s2,l) memcmp(s1,s2,l)# endif#endif /* HAS_BCMP */#ifndef HAS_MEMMOVE#if defined(HAS_BCOPY) && defined(SAFE_BCOPY)#define memmove(d,s,l) bcopy(s,d,l)#else#if defined(HAS_MEMCPY) && defined(SAFE_MEMCPY)#define memmove(d,s,l) memcpy(d,s,l)#else#define memmove(d,s,l) my_bcopy(s,d,l)#endif#endif#endif#ifndef _TYPES_ /* If types.h defines this it's easy. */#ifndef major /* Does everyone's types.h define this? */#include <sys/types.h>#endif#endif#ifdef I_NETINET_IN#include <netinet/in.h>#endif#include <sys/stat.h>#if defined(uts) || defined(UTekV)#undef S_ISDIR#undef S_ISCHR#undef S_ISBLK#undef S_ISREG#undef S_ISFIFO#undef S_ISLNK#define S_ISDIR(P) (((P)&S_IFMT)==S_IFDIR)#define S_ISCHR(P) (((P)&S_IFMT)==S_IFCHR)#define S_ISBLK(P) (((P)&S_IFMT)==S_IFBLK)#define S_ISREG(P) (((P)&S_IFMT)==S_IFREG)#define S_ISFIFO(P) (((P)&S_IFMT)==S_IFIFO)#ifdef S_IFLNK#define S_ISLNK(P) (((P)&S_IFMT)==S_IFLNK)#endif#endif#ifdef I_TIME# include <time.h>#endif#ifdef I_SYS_TIME# ifdef SYSTIMEKERNEL# define KERNEL# endif# include <sys/time.h># ifdef SYSTIMEKERNEL# undef KERNEL# endif#endif#ifndef MSDOS#include <sys/times.h>#endif#if defined(HAS_STRERROR) && (!defined(HAS_MKDIR) || !defined(HAS_RMDIR))#undef HAS_STRERROR#endif#include <errno.h>#ifndef MSDOS#ifndef errnoextern int errno; /* ANSI allows errno to be an lvalue expr */#endif#endif#ifndef strerror#ifdef HAS_STRERRORchar *strerror();#elseextern int sys_nerr;extern char *sys_errlist[];#define strerror(e) ((e) < 0 || (e) >= sys_nerr ? "(unknown)" : sys_errlist[e])#endif#endif#ifdef I_SYSIOCTL#ifndef _IOCTL_#include <sys/ioctl.h>#endif#endif#if defined(mc300) || defined(mc500) || defined(mc700) || defined(mc6000)#ifdef HAS_SOCKETPAIR#undef HAS_SOCKETPAIR#endif#ifdef HAS_NDBM#undef HAS_NDBM#endif#endif#ifdef WANT_DBZ#include <dbz.h>#define SOME_DBM#define dbm_fetch(db,dkey) fetch(dkey)#define dbm_delete(db,dkey) fatal("dbz doesn't implement delete")#define dbm_store(db,dkey,dcontent,flags) store(dkey,dcontent)#define dbm_close(db) dbmclose()#define dbm_firstkey(db) (fatal("dbz doesn't implement traversal"),fetch())#define nextkey() (fatal("dbz doesn't implement traversal"),fetch())#define dbm_nextkey(db) (fatal("dbz doesn't implement traversal"),fetch())#ifdef HAS_NDBM#undef HAS_NDBM#endif#ifndef HAS_ODBM#define HAS_ODBM#endif#else#ifdef HAS_GDBM#ifdef I_GDBM#include <gdbm.h>#endif#define SOME_DBM#ifdef HAS_NDBM#undef HAS_NDBM#endif#ifdef HAS_ODBM#undef HAS_ODBM#endif#else#ifdef HAS_NDBM#include <ndbm.h>#define SOME_DBM#ifdef HAS_ODBM#undef HAS_ODBM#endif#else#ifdef HAS_ODBM#ifdef NULL#undef NULL /* suppress redefinition message */#endif#include <dbm.h>#ifdef NULL#undef NULL#endif#define NULL 0 /* silly thing is, we don't even use this */#define SOME_DBM#define dbm_fetch(db,dkey) fetch(dkey)#define dbm_delete(db,dkey) delete(dkey)#define dbm_store(db,dkey,dcontent,flags) store(dkey,dcontent)#define dbm_close(db) dbmclose()#define dbm_firstkey(db) firstkey()#endif /* HAS_ODBM */#endif /* HAS_NDBM */#endif /* HAS_GDBM */#endif /* WANT_DBZ */#ifdef SOME_DBMEXT char *dbmkey;EXT int dbmlen;#endif#if INTSIZE == 2#define htoni htons#define ntohi ntohs#else#define htoni htonl#define ntohi ntohl#endif#if defined(I_DIRENT)# include <dirent.h># define DIRENT dirent#else# ifdef I_SYS_NDIR# include <sys/ndir.h># define DIRENT direct# else# ifdef I_SYS_DIR# ifdef hp9000s500# include <ndir.h> /* may be wrong in the future */# else# include <sys/dir.h># endif# define DIRENT direct# endif# endif#endif#ifdef FPUTS_BOTCH/* work around botch in SunOS 4.0.1 and 4.0.2 */# ifndef fputs# define fputs(str,fp) fprintf(fp,"%s",str)# endif#endif/* * The following gobbledygook brought to you on behalf of __STDC__. * (I could just use #ifndef __STDC__, but this is more bulletproof * in the face of half-implementations.) */#ifndef S_IFMT# ifdef _S_IFMT# define S_IFMT _S_IFMT# else# define S_IFMT 0170000# endif#endif#ifndef S_ISDIR# define S_ISDIR(m) ((m & S_IFMT) == S_IFDIR)#endif#ifndef S_ISCHR# define S_ISCHR(m) ((m & S_IFMT) == S_IFCHR)#endif#ifndef S_ISBLK# ifdef S_IFBLK# define S_ISBLK(m) ((m & S_IFMT) == S_IFBLK)# else# define S_ISBLK(m) (0)# endif#endif#ifndef S_ISREG# define S_ISREG(m) ((m & S_IFMT) == S_IFREG)#endif#ifndef S_ISFIFO# ifdef S_IFIFO# define S_ISFIFO(m) ((m & S_IFMT) == S_IFIFO)# else# define S_ISFIFO(m) (0)# endif#endif#ifndef S_ISLNK# ifdef _S_ISLNK# define S_ISLNK(m) _S_ISLNK(m)# else# ifdef _S_IFLNK# define S_ISLNK(m) ((m & S_IFMT) == _S_IFLNK)# else# ifdef S_IFLNK# define S_ISLNK(m) ((m & S_IFMT) == S_IFLNK)# else# define S_ISLNK(m) (0)# endif# endif# endif#endif#ifndef S_ISSOCK# ifdef _S_ISSOCK# define S_ISSOCK(m) _S_ISSOCK(m)# else# ifdef _S_IFSOCK# define S_ISSOCK(m) ((m & S_IFMT) == _S_IFSOCK)# else# ifdef S_IFSOCK# define S_ISSOCK(m) ((m & S_IFMT) == S_IFSOCK)# else# define S_ISSOCK(m) (0)# endif# endif# endif#endif#ifndef S_IRUSR# ifdef S_IREAD# define S_IRUSR S_IREAD# define S_IWUSR S_IWRITE# define S_IXUSR S_IEXEC# else# define S_IRUSR 0400# define S_IWUSR 0200# define S_IXUSR 0100# endif# define S_IRGRP (S_IRUSR>>3)# define S_IWGRP (S_IWUSR>>3)# define S_IXGRP (S_IXUSR>>3)# define S_IROTH (S_IRUSR>>6)# define S_IWOTH (S_IWUSR>>6)# define S_IXOTH (S_IXUSR>>6)#endif#ifndef S_ISUID# define S_ISUID 04000#endif#ifndef S_ISGID# define S_ISGID 02000#endif#ifdef f_next#undef f_next#endif#if defined(cray) || defined(gould) || defined(i860)# define SLOPPYDIVIDE#endif#if defined(cray) || defined(convex) || defined (uts) || BYTEORDER > 0xffff# define QUAD#endif#ifdef QUAD# ifdef cray# define quad int# else# if defined(convex) || defined (uts)# define quad long long# else# define quad long# endif# endif#endiftypedef MEM_SIZE STRLEN;typedef struct arg ARG;typedef struct cmd CMD;typedef struct formcmd FCMD;typedef struct scanpat SPAT;typedef struct stio STIO;typedef struct sub SUBR;typedef struct string STR;typedef struct atbl ARRAY;typedef struct htbl HASH;typedef struct regexp REGEXP;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -