⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arg.h

📁 早期freebsd实现
💻 H
📖 第 1 页 / 共 2 页
字号:
    "FTMTIME",    "FTATIME",    "FTCTIME",    "FTSOCK",    "FTCHR",    "FTBLK",    "FTFILE",    "FTDIR",    "FTPIPE",    "FTLINK",    "SYMLINK",    "READLINK",    "FTSUID",    "FTSGID",    "FTSVTX",    "FTTTY",    "FTTEXT",    "FTBINARY",    "SOCKET",    "BIND",    "CONNECT",    "LISTEN",    "ACCEPT",    "GHBYNAME",    "GHBYADDR",    "GHOSTENT",    "GNBYNAME",    "GNBYADDR",    "GNETENT",    "GPBYNAME",    "GPBYNUMBER",    "GPROTOENT",    "GSBYNAME",    "GSBYPORT",    "GSERVENT",    "SHOSTENT",    "SNETENT",    "SPROTOENT",    "SSERVENT",    "EHOSTENT",    "ENETENT",    "EPROTOENT",    "ESERVENT",    "SOCKPAIR",    "SHUTDOWN",    "GSOCKOPT",    "SSOCKOPT",    "GETSOCKNAME",    "GETPEERNAME",    "SSELECT",    "FILENO",    "BINMODE",    "VEC",    "GPWNAM",    "GPWUID",    "GPWENT",    "SPWENT",    "EPWENT",    "GGRNAM",    "GGRGID",    "GGRENT",    "SGRENT",    "EGRENT",    "GETLOGIN",    "OPENDIR",    "READDIR",    "TELLDIR",    "SEEKDIR",    "REWINDDIR",    "CLOSEDIR",    "SYSCALL",    "PIPE",    "TRY",    "EVALONCE",    "269"};#endif#define A_NULL 0#define A_EXPR 1#define A_CMD 2#define A_STAB 3#define A_LVAL 4#define A_SINGLE 5#define A_DOUBLE 6#define A_BACKTICK 7#define A_READ 8#define A_SPAT 9#define A_LEXPR 10#define A_ARYLEN 11#define A_ARYSTAB 12#define A_LARYLEN 13#define A_GLOB 14#define A_WORD 15#define A_INDREAD 16#define A_LARYSTAB 17#define A_STAR 18#define A_LSTAR 19#define A_WANTARRAY 20#define A_LENSTAB 21#define A_MASK 31#define A_DONT 32		/* or this into type to suppress evaluation */#ifndef DOINITextern char *argname[];#elsechar *argname[] = {    "A_NULL",    "EXPR",    "CMD",    "STAB",    "LVAL",    "LITERAL",    "DOUBLEQUOTE",    "BACKTICK",    "READ",    "SPAT",    "LEXPR",    "ARYLEN",    "ARYSTAB",    "LARYLEN",    "GLOB",    "WORD",    "INDREAD",    "LARYSTAB",    "STAR",    "LSTAR",    "WANTARRAY",    "LENSTAB",    "22"};#endif#ifndef DOINITextern bool hoistable[];#elsebool hoistable[] =  {0,	/* A_NULL */   0,	/* EXPR */   1,	/* CMD */   1,	/* STAB */   0,	/* LVAL */   1,	/* SINGLE */   0,	/* DOUBLE */   0,	/* BACKTICK */   0,	/* READ */   0,	/* SPAT */   0,	/* LEXPR */   1,	/* ARYLEN */   1,	/* ARYSTAB */   0,	/* LARYLEN */   0,	/* GLOB */   1,	/* WORD */   0,	/* INDREAD */   0,	/* LARYSTAB */   1,	/* STAR */   1,	/* LSTAR */   1,	/* WANTARRAY */   0,	/* LENSTAB */   0,	/* 21 */};#endifunion argptr {    ARG		*arg_arg;    char	*arg_cval;    STAB	*arg_stab;    SPAT	*arg_spat;    CMD		*arg_cmd;    STR		*arg_str;    HASH	*arg_hash;};struct arg {    union argptr arg_ptr;    short	arg_len;    unsigned short arg_type;    unsigned short arg_flags;};#define AF_ARYOK 1		/* op can handle multiple values here */#define AF_POST 2		/* post *crement this item */#define AF_PRE 4		/* pre *crement this item */#define AF_UP 8			/* increment rather than decrement */#define AF_COMMON 16		/* left and right have symbols in common */#define AF_DEPR 32		/* an older form of the construct */#define AF_LISTISH 64		/* turn into list if important */#define AF_LOCAL 128		/* list of local variables *//* * Most of the ARG pointers are used as pointers to arrays of ARG.  When * so used, the 0th element is special, and represents the operator to * use on the list of arguments following.  The arg_len in the 0th element * gives the maximum argument number, and the arg_str is used to store * the return value in a more-or-less static location.  Sorry it's not * re-entrant (yet), but it sure makes it efficient.  The arg_type of the * 0th element is an operator (O_*) rather than an argument type (A_*). */#define Nullarg Null(ARG*)#ifndef DOINITEXT unsigned short opargs[MAXO+1];#else#define A(e1,e2,e3)        (e1+(e2<<2)+(e3<<4))#define A5(e1,e2,e3,e4,e5) (e1+(e2<<2)+(e3<<4)+(e4<<6)+(e5<<8))unsigned short opargs[MAXO+1] = {	A(0,0,0),	/* NULL */	A(1,1,0),	/* RCAT */	A(1,0,0),	/* ITEM */	A(1,0,0),	/* SCALAR */	A(0,0,0),	/* ITEM2 */	A(0,0,0),	/* ITEM3 */	A(1,1,0),	/* CONCAT */	A(3,1,0),	/* REPEAT */	A(1,0,0),	/* MATCH */	A(1,0,0),	/* NMATCH */	A(1,0,0),	/* SUBST */	A(1,0,0),	/* NSUBST */	A(1,1,0),	/* ASSIGN */	A(1,0,0),	/* LOCAL */	A(3,3,0),	/* AASSIGN */	A(0,0,0),	/* SASSIGN */	A(3,0,0),	/* CHOP */	A(1,0,0),	/* DEFINED */	A(1,0,0),	/* UNDEF */	A(1,0,0),	/* STUDY */	A(1,1,0),	/* POW */	A(1,1,0),	/* MULTIPLY */	A(1,1,0),	/* DIVIDE */	A(1,1,0),	/* MODULO */	A(1,1,0),	/* ADD */	A(1,1,0),	/* SUBTRACT */	A(1,1,0),	/* LEFT_SHIFT */	A(1,1,0),	/* RIGHT_SHIFT */	A(1,1,0),	/* LT */	A(1,1,0),	/* GT */	A(1,1,0),	/* LE */	A(1,1,0),	/* GE */	A(1,1,0),	/* EQ */	A(1,1,0),	/* NE */	A(1,1,0),	/* NCMP */	A(1,1,0),	/* BIT_AND */	A(1,1,0),	/* XOR */	A(1,1,0),	/* BIT_OR */	A(1,0,0),	/* AND */	A(1,0,0),	/* OR */	A(1,0,0),	/* COND_EXPR */	A(1,1,0),	/* COMMA */	A(1,0,0),	/* NEGATE */	A(1,0,0),	/* NOT */	A(1,0,0),	/* COMPLEMENT */	A(1,0,0),	/* SELECT */	A(1,0,0),	/* WRITE */	A(1,1,1),	/* DBMOPEN */	A(1,0,0),	/* DBMCLOSE */	A(1,1,0),	/* OPEN */	A(1,0,0),	/* TRANS */	A(1,0,0),	/* NTRANS */	A(1,0,0),	/* CLOSE */	A(0,0,0),	/* EACH */	A(0,0,0),	/* VALUES */	A(0,0,0),	/* KEYS */	A(0,0,0),	/* LARRAY */	A(0,0,0),	/* ARRAY */	A(0,1,0),	/* AELEM */	A(0,1,0),	/* DELETE */	A(0,0,0),	/* LHASH */	A(0,0,0),	/* HASH */	A(0,1,0),	/* HELEM */	A(0,1,0),	/* LAELEM */	A(0,1,0),	/* LHELEM */	A(0,3,3),	/* LSLICE */	A(0,3,0),	/* ASLICE */	A(0,3,0),	/* HSLICE */	A(0,3,0),	/* LASLICE */	A(0,3,0),	/* LHSLICE */	A(0,3,1),	/* SPLICE */	A(0,3,0),	/* PUSH */	A(0,0,0),	/* POP */	A(0,0,0),	/* SHIFT */	A(1,1,0),	/* UNPACK */	A(1,0,1),	/* SPLIT */	A(1,0,0),	/* LENGTH */	A(3,0,0),	/* SPRINTF */	A(1,1,1),	/* SUBSTR */	A(1,3,0),	/* PACK */	A(0,3,0),	/* GREP */	A(1,3,0),	/* JOIN */	A(1,1,0),	/* SLT */	A(1,1,0),	/* SGT */	A(1,1,0),	/* SLE */	A(1,1,0),	/* SGE */	A(1,1,0),	/* SEQ */	A(1,1,0),	/* SNE */	A(1,1,0),	/* SCMP */	A(0,3,0),	/* SUBR */	A(0,3,0),	/* DBSUBR */	A(1,0,0),	/* CALLER */	A(1,3,0),	/* SORT */	A(0,3,0),	/* REVERSE */	A(0,3,0),	/* WARN */	A(0,3,0),	/* DIE */	A(1,3,0),	/* PRINTF */	A(1,3,0),	/* PRINT */	A(1,0,0),	/* CHDIR */	A(1,0,0),	/* EXIT */	A(1,0,0),	/* RESET */	A(3,0,0),	/* LIST */	A(1,0,0),	/* EOF */	A(1,0,0),	/* GETC */	A(1,0,0),	/* TELL */	A5(1,1,1,1,0),	/* RECV */	A(1,1,3),	/* READ */	A(1,1,3),	/* SYSREAD */	A(1,1,3),	/* SYSWRITE */	A(1,1,3),	/* SEND */	A(1,1,1),	/* SEEK */	A(0,3,0),	/* RETURN */	A(0,0,0),	/* REDO */	A(0,0,0),	/* NEXT */	A(0,0,0),	/* LAST */	A(0,0,0),	/* DUMP */	A(0,0,0),	/* GOTO */	A(1,1,1),	/* INDEX */	A(1,1,1),	/* RINDEX */	A(0,0,0),	/* TIME */	A(0,0,0),	/* TIMES */	A(1,0,0),	/* LOCALTIME */	A(1,0,0),	/* GMTIME */	A(1,1,0),	/* TRUNCATE */	A(1,0,0),	/* LSTAT */	A(1,0,0),	/* STAT */	A(1,1,0),	/* CRYPT */	A(1,1,0),	/* ATAN2 */	A(1,0,0),	/* SIN */	A(1,0,0),	/* COS */	A(1,0,0),	/* RAND */	A(1,0,0),	/* SRAND */	A(1,0,0),	/* EXP */	A(1,0,0),	/* LOG */	A(1,0,0),	/* SQRT */	A(1,0,0),	/* INT */	A(1,0,0),	/* ORD */	A(1,0,0),	/* ALARM */	A(1,0,0),	/* SLEEP */	A(1,1,0),	/* RANGE */	A(1,0,0),	/* F_OR_R */	A(1,0,0),	/* FLIP */	A(0,1,0),	/* FLOP */	A(0,0,0),	/* FORK */	A(0,0,0),	/* WAIT */	A(1,1,0),	/* WAITPID */	A(1,3,0),	/* SYSTEM */	A(1,3,0),	/* EXEC */	A(1,0,0),	/* HEX */	A(1,0,0),	/* OCT */	A(0,3,0),	/* CHOWN */	A(0,3,0),	/* KILL */	A(0,3,0),	/* UNLINK */	A(0,3,0),	/* CHMOD */	A(0,3,0),	/* UTIME */	A(1,0,0),	/* UMASK */	A(1,1,0),	/* MSGGET */	A(1,1,1),	/* SHMGET */	A(1,1,1),	/* SEMGET */	A(1,1,1),	/* MSGCTL */	A(1,1,1),	/* SHMCTL */	A5(1,1,1,1,0),	/* SEMCTL */	A(1,1,1),	/* MSGSND */	A5(1,1,1,1,1),	/* MSGRCV */	A(1,1,1),	/* SEMOP */	A5(1,1,1,1,0),	/* SHMREAD */	A5(1,1,1,1,0),	/* SHMWRITE */	A(1,1,0),	/* RENAME */	A(1,1,0),	/* LINK */	A(1,1,0),	/* MKDIR */	A(1,0,0),	/* RMDIR */	A(0,0,0),	/* GETPPID */	A(1,0,0),	/* GETPGRP */	A(1,1,0),	/* SETPGRP */	A(1,1,0),	/* GETPRIORITY */	A(1,1,1),	/* SETPRIORITY */	A(1,0,0),	/* CHROOT */	A(1,1,1),	/* FCNTL */	A(1,1,1),	/* SYSIOCTL */	A(1,1,0),	/* FLOCK */	A(0,3,0),	/* UNSHIFT */	A(1,0,0),	/* REQUIRE */	A(1,0,0),	/* DOFILE */	A(1,0,0),	/* EVAL */	A(1,0,0),	/* FTRREAD */	A(1,0,0),	/* FTRWRITE */	A(1,0,0),	/* FTREXEC */	A(1,0,0),	/* FTEREAD */	A(1,0,0),	/* FTEWRITE */	A(1,0,0),	/* FTEEXEC */	A(1,0,0),	/* FTIS */	A(1,0,0),	/* FTEOWNED */	A(1,0,0),	/* FTROWNED */	A(1,0,0),	/* FTZERO */	A(1,0,0),	/* FTSIZE */	A(1,0,0),	/* FTMTIME */	A(1,0,0),	/* FTATIME */	A(1,0,0),	/* FTCTIME */	A(1,0,0),	/* FTSOCK */	A(1,0,0),	/* FTCHR */	A(1,0,0),	/* FTBLK */	A(1,0,0),	/* FTFILE */	A(1,0,0),	/* FTDIR */	A(1,0,0),	/* FTPIPE */	A(1,0,0),	/* FTLINK */	A(1,1,0),	/* SYMLINK */	A(1,0,0),	/* READLINK */	A(1,0,0),	/* FTSUID */	A(1,0,0),	/* FTSGID */	A(1,0,0),	/* FTSVTX */	A(1,0,0),	/* FTTTY */	A(1,0,0),	/* FTTEXT */	A(1,0,0),	/* FTBINARY */	A5(1,1,1,1,0),	/* SOCKET */	A(1,1,0),	/* BIND */	A(1,1,0),	/* CONNECT */	A(1,1,0),	/* LISTEN */	A(1,1,0),	/* ACCEPT */	A(1,0,0),	/* GHBYNAME */	A(1,1,0),	/* GHBYADDR */	A(0,0,0),	/* GHOSTENT */	A(1,0,0),	/* GNBYNAME */	A(1,1,0),	/* GNBYADDR */	A(0,0,0),	/* GNETENT */	A(1,0,0),	/* GPBYNAME */	A(1,0,0),	/* GPBYNUMBER */	A(0,0,0),	/* GPROTOENT */	A(1,1,0),	/* GSBYNAME */	A(1,1,0),	/* GSBYPORT */	A(0,0,0),	/* GSERVENT */	A(1,0,0),	/* SHOSTENT */	A(1,0,0),	/* SNETENT */	A(1,0,0),	/* SPROTOENT */	A(1,0,0),	/* SSERVENT */	A(0,0,0),	/* EHOSTENT */	A(0,0,0),	/* ENETENT */	A(0,0,0),	/* EPROTOENT */	A(0,0,0),	/* ESERVENT */	A5(1,1,1,1,1),	/* SOCKPAIR */	A(1,1,0),	/* SHUTDOWN */	A(1,1,1),	/* GSOCKOPT */	A5(1,1,1,1,0),	/* SSOCKOPT */	A(1,0,0),	/* GETSOCKNAME */	A(1,0,0),	/* GETPEERNAME */	A5(1,1,1,1,0),	/* SSELECT */	A(1,0,0),	/* FILENO */	A(1,0,0),	/* BINMODE */	A(1,1,1),	/* VEC */	A(1,0,0),	/* GPWNAM */	A(1,0,0),	/* GPWUID */	A(0,0,0),	/* GPWENT */	A(0,0,0),	/* SPWENT */	A(0,0,0),	/* EPWENT */	A(1,0,0),	/* GGRNAM */	A(1,0,0),	/* GGRGID */	A(0,0,0),	/* GGRENT */	A(0,0,0),	/* SGRENT */	A(0,0,0),	/* EGRENT */	A(0,0,0),	/* GETLOGIN */	A(1,1,0),	/* OPENDIR */	A(1,0,0),	/* READDIR */	A(1,0,0),	/* TELLDIR */	A(1,1,0),	/* SEEKDIR */	A(1,0,0),	/* REWINDDIR */	A(1,0,0),	/* CLOSEDIR */	A(1,3,0),	/* SYSCALL */	A(1,1,0),	/* PIPE */	A(0,0,0),	/* TRY */	A(1,0,0),	/* EVALONCE */	0};#undef A#undef A5#endifint do_trans();int do_split();bool do_eof();long do_tell();bool do_seek();int do_tms();int do_time();int do_stat();STR *do_push();FILE *nextargv();STR *do_fttext();int do_slice();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -