📄 arg.h
字号:
"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 + -