sv.h
来自「MSYS在windows下模拟了一个类unix的终端」· C头文件 代码 · 共 1,102 行 · 第 1/3 页
H
1,102 行
* union trick (as suggested by Gurusamy Sarathy). * For further information see Geir Johansen's problem report titled [ID 20000612.002] Perl problem on Cray system * The any pointer (known as IoANY()) will also be a good place * to hang any IO disciplines to. */ union { DIR * xiou_dirp; /* for opendir, readdir, etc */ void * xiou_any; /* for alignment */ } xio_dirpu; long xio_lines; /* $. */ long xio_page; /* $% */ long xio_page_len; /* $= */ long xio_lines_left; /* $- */ char * xio_top_name; /* $^ */ GV * xio_top_gv; /* $^ */ char * xio_fmt_name; /* $~ */ GV * xio_fmt_gv; /* $~ */ char * xio_bottom_name;/* $^B */ GV * xio_bottom_gv; /* $^B */ short xio_subprocess; /* -| or |- */ char xio_type; char xio_flags;};#define xio_dirp xio_dirpu.xiou_dirp#define xio_any xio_dirpu.xiou_any#define IOf_ARGV 1 /* this fp iterates over ARGV */#define IOf_START 2 /* check for null ARGV and substitute '-' */#define IOf_FLUSH 4 /* this fp wants a flush after write op */#define IOf_DIDTOP 8 /* just did top of form */#define IOf_UNTAINT 16 /* consider this fp (and its data) "safe" */#define IOf_NOLINE 32 /* slurped a pseudo-line from empty file */#define IOf_FAKE_DIRP 64 /* xio_dirp is fake (source filters kludge) *//* The following macros define implementation-independent predicates on SVs. *//*=for apidoc Am|bool|SvNIOK|SV* svReturns a boolean indicating whether the SV contains a number, integer ordouble.=for apidoc Am|bool|SvNIOKp|SV* svReturns a boolean indicating whether the SV contains a number, integer ordouble. Checks the B<private> setting. Use C<SvNIOK>.=for apidoc Am|void|SvNIOK_off|SV* svUnsets the NV/IV status of an SV.=for apidoc Am|bool|SvOK|SV* svReturns a boolean indicating whether the value is an SV.=for apidoc Am|bool|SvIOKp|SV* svReturns a boolean indicating whether the SV contains an integer. Checksthe B<private> setting. Use C<SvIOK>.=for apidoc Am|bool|SvNOKp|SV* svReturns a boolean indicating whether the SV contains a double. Checks theB<private> setting. Use C<SvNOK>.=for apidoc Am|bool|SvPOKp|SV* svReturns a boolean indicating whether the SV contains a character string.Checks the B<private> setting. Use C<SvPOK>.=for apidoc Am|bool|SvIOK|SV* svReturns a boolean indicating whether the SV contains an integer.=for apidoc Am|void|SvIOK_on|SV* svTells an SV that it is an integer.=for apidoc Am|void|SvIOK_off|SV* svUnsets the IV status of an SV.=for apidoc Am|void|SvIOK_only|SV* svTells an SV that it is an integer and disables all other OK bits.=for apidoc Am|void|SvIOK_only_UV|SV* svTells and SV that it is an unsigned integer and disables all other OK bits.=for apidoc Am|void|SvIOK_UV|SV* svReturns a boolean indicating whether the SV contains an unsigned integer.=for apidoc Am|void|SvIOK_notUV|SV* svReturns a boolean indicating whether the SV contains an signed integer.=for apidoc Am|bool|SvNOK|SV* svReturns a boolean indicating whether the SV contains a double.=for apidoc Am|void|SvNOK_on|SV* svTells an SV that it is a double.=for apidoc Am|void|SvNOK_off|SV* svUnsets the NV status of an SV.=for apidoc Am|void|SvNOK_only|SV* svTells an SV that it is a double and disables all other OK bits.=for apidoc Am|bool|SvPOK|SV* svReturns a boolean indicating whether the SV contains a characterstring.=for apidoc Am|void|SvPOK_on|SV* svTells an SV that it is a string.=for apidoc Am|void|SvPOK_off|SV* svUnsets the PV status of an SV.=for apidoc Am|void|SvPOK_only|SV* svTells an SV that it is a string and disables all other OK bits.=for apidoc Am|bool|SvOOK|SV* svReturns a boolean indicating whether the SvIVX is a valid offset value forthe SvPVX. This hack is used internally to speed up removal of charactersfrom the beginning of a SvPV. When SvOOK is true, then the start of theallocated string buffer is really (SvPVX - SvIVX).=for apidoc Am|bool|SvROK|SV* svTests if the SV is an RV.=for apidoc Am|void|SvROK_on|SV* svTells an SV that it is an RV.=for apidoc Am|void|SvROK_off|SV* svUnsets the RV status of an SV.=for apidoc Am|SV*|SvRV|SV* svDereferences an RV to return the SV.=for apidoc Am|IV|SvIVX|SV* svReturns the integer which is stored in the SV, assuming SvIOK istrue.=for apidoc Am|UV|SvUVX|SV* svReturns the unsigned integer which is stored in the SV, assuming SvIOK istrue.=for apidoc Am|NV|SvNVX|SV* svReturns the double which is stored in the SV, assuming SvNOK istrue.=for apidoc Am|char*|SvPVX|SV* svReturns a pointer to the string in the SV. The SV must contain astring.=for apidoc Am|STRLEN|SvCUR|SV* svReturns the length of the string which is in the SV. See C<SvLEN>.=for apidoc Am|STRLEN|SvLEN|SV* svReturns the size of the string buffer in the SV, not including any partattributable to C<SvOOK>. See C<SvCUR>.=for apidoc Am|char*|SvEND|SV* svReturns a pointer to the last character in the string which is in the SV.See C<SvCUR>. Access the character as *(SvEND(sv)).=for apidoc Am|HV*|SvSTASH|SV* svReturns the stash of the SV.=for apidoc Am|void|SvCUR_set|SV* sv|STRLEN lenSet the length of the string which is in the SV. See C<SvCUR>.=cut*/#define SvNIOK(sv) (SvFLAGS(sv) & (SVf_IOK|SVf_NOK))#define SvNIOKp(sv) (SvFLAGS(sv) & (SVp_IOK|SVp_NOK))#define SvNIOK_off(sv) (SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK| \ SVp_IOK|SVp_NOK|SVf_IVisUV))#define SvOK(sv) (SvFLAGS(sv) & SVf_OK)#define SvOK_off(sv) (SvFLAGS(sv) &= ~(SVf_OK|SVf_AMAGIC| \ SVf_IVisUV|SVf_UTF8), \ SvOOK_off(sv))#define SvOK_off_exc_UV(sv) (SvFLAGS(sv) &= ~(SVf_OK|SVf_AMAGIC| \ SVf_UTF8), \ SvOOK_off(sv))#define SvOKp(sv) (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK))#define SvIOKp(sv) (SvFLAGS(sv) & SVp_IOK)#define SvIOKp_on(sv) ((void)SvOOK_off(sv), SvFLAGS(sv) |= SVp_IOK)#define SvNOKp(sv) (SvFLAGS(sv) & SVp_NOK)#define SvNOKp_on(sv) (SvFLAGS(sv) |= SVp_NOK)#define SvPOKp(sv) (SvFLAGS(sv) & SVp_POK)#define SvPOKp_on(sv) (SvFLAGS(sv) |= SVp_POK)#define SvIOK(sv) (SvFLAGS(sv) & SVf_IOK)#define SvIOK_on(sv) ((void)SvOOK_off(sv), \ SvFLAGS(sv) |= (SVf_IOK|SVp_IOK))#define SvIOK_off(sv) (SvFLAGS(sv) &= ~(SVf_IOK|SVp_IOK|SVf_IVisUV))#define SvIOK_only(sv) ((void)SvOK_off(sv), \ SvFLAGS(sv) |= (SVf_IOK|SVp_IOK))#define SvIOK_only_UV(sv) ((void)SvOK_off_exc_UV(sv), \ SvFLAGS(sv) |= (SVf_IOK|SVp_IOK))#define SvIOK_UV(sv) ((SvFLAGS(sv) & (SVf_IOK|SVf_IVisUV)) \ == (SVf_IOK|SVf_IVisUV))#define SvIOK_notUV(sv) ((SvFLAGS(sv) & (SVf_IOK|SVf_IVisUV)) \ == SVf_IOK)#define SvIsUV(sv) (SvFLAGS(sv) & SVf_IVisUV)#define SvIsUV_on(sv) (SvFLAGS(sv) |= SVf_IVisUV)#define SvIsUV_off(sv) (SvFLAGS(sv) &= ~SVf_IVisUV)#define SvNOK(sv) (SvFLAGS(sv) & SVf_NOK)#define SvNOK_on(sv) (SvFLAGS(sv) |= (SVf_NOK|SVp_NOK))#define SvNOK_off(sv) (SvFLAGS(sv) &= ~(SVf_NOK|SVp_NOK))#define SvNOK_only(sv) ((void)SvOK_off(sv), \ SvFLAGS(sv) |= (SVf_NOK|SVp_NOK))/*=for apidoc Am|void|SvUTF8|SV* svReturns a boolean indicating whether the SV contains UTF-8 encoded data.=for apidoc Am|void|SvUTF8_on|SV *svTells an SV that it is a string and encoded in UTF8. Do not use frivolously.=for apidoc Am|void|SvUTF8_off|SV *svUnsets the UTF8 status of an SV.=for apidoc Am|void|SvPOK_only_UTF8|SV* svTells an SV that it is a UTF8 string (do not use frivolously)and disables all other OK bits. =cut */#define SvUTF8(sv) (SvFLAGS(sv) & SVf_UTF8)#define SvUTF8_on(sv) (SvFLAGS(sv) |= (SVf_UTF8))#define SvUTF8_off(sv) (SvFLAGS(sv) &= ~(SVf_UTF8))#define SvPOK(sv) (SvFLAGS(sv) & SVf_POK)#define SvPOK_on(sv) (SvFLAGS(sv) |= (SVf_POK|SVp_POK))#define SvPOK_off(sv) (SvFLAGS(sv) &= ~(SVf_POK|SVp_POK))#define SvPOK_only(sv) (SvFLAGS(sv) &= ~(SVf_OK|SVf_AMAGIC| \ SVf_IVisUV|SVf_UTF8), \ SvFLAGS(sv) |= (SVf_POK|SVp_POK))#define SvPOK_only_UTF8(sv) (SvFLAGS(sv) &= ~(SVf_OK|SVf_AMAGIC| \ SVf_IVisUV), \ SvFLAGS(sv) |= (SVf_POK|SVp_POK))#define SvOOK(sv) (SvFLAGS(sv) & SVf_OOK)#define SvOOK_on(sv) ((void)SvIOK_off(sv), SvFLAGS(sv) |= SVf_OOK)#define SvOOK_off(sv) (SvOOK(sv) && sv_backoff(sv))#define SvFAKE(sv) (SvFLAGS(sv) & SVf_FAKE)#define SvFAKE_on(sv) (SvFLAGS(sv) |= SVf_FAKE)#define SvFAKE_off(sv) (SvFLAGS(sv) &= ~SVf_FAKE)#define SvROK(sv) (SvFLAGS(sv) & SVf_ROK)#define SvROK_on(sv) (SvFLAGS(sv) |= SVf_ROK)#define SvROK_off(sv) (SvFLAGS(sv) &= ~(SVf_ROK|SVf_AMAGIC))#define SvMAGICAL(sv) (SvFLAGS(sv) & (SVs_GMG|SVs_SMG|SVs_RMG))#define SvMAGICAL_on(sv) (SvFLAGS(sv) |= (SVs_GMG|SVs_SMG|SVs_RMG))#define SvMAGICAL_off(sv) (SvFLAGS(sv) &= ~(SVs_GMG|SVs_SMG|SVs_RMG))#define SvGMAGICAL(sv) (SvFLAGS(sv) & SVs_GMG)#define SvGMAGICAL_on(sv) (SvFLAGS(sv) |= SVs_GMG)#define SvGMAGICAL_off(sv) (SvFLAGS(sv) &= ~SVs_GMG)#define SvSMAGICAL(sv) (SvFLAGS(sv) & SVs_SMG)#define SvSMAGICAL_on(sv) (SvFLAGS(sv) |= SVs_SMG)#define SvSMAGICAL_off(sv) (SvFLAGS(sv) &= ~SVs_SMG)#define SvRMAGICAL(sv) (SvFLAGS(sv) & SVs_RMG)#define SvRMAGICAL_on(sv) (SvFLAGS(sv) |= SVs_RMG)#define SvRMAGICAL_off(sv) (SvFLAGS(sv) &= ~SVs_RMG)#define SvAMAGIC(sv) (SvFLAGS(sv) & SVf_AMAGIC)#define SvAMAGIC_on(sv) (SvFLAGS(sv) |= SVf_AMAGIC)#define SvAMAGIC_off(sv) (SvFLAGS(sv) &= ~SVf_AMAGIC)#define SvGAMAGIC(sv) (SvFLAGS(sv) & (SVs_GMG|SVf_AMAGIC)) /*#define Gv_AMG(stash) \ (HV_AMAGICmb(stash) && \ ((!HV_AMAGICbad(stash) && HV_AMAGIC(stash)) || Gv_AMupdate(stash)))*/#define Gv_AMG(stash) (PL_amagic_generation && Gv_AMupdate(stash))#define SvWEAKREF(sv) ((SvFLAGS(sv) & (SVf_ROK|SVprv_WEAKREF)) \ == (SVf_ROK|SVprv_WEAKREF))#define SvWEAKREF_on(sv) (SvFLAGS(sv) |= (SVf_ROK|SVprv_WEAKREF))#define SvWEAKREF_off(sv) (SvFLAGS(sv) &= ~(SVf_ROK|SVprv_WEAKREF))#define SvTHINKFIRST(sv) (SvFLAGS(sv) & SVf_THINKFIRST)#define SvPADBUSY(sv) (SvFLAGS(sv) & SVs_PADBUSY)#define SvPADTMP(sv) (SvFLAGS(sv) & SVs_PADTMP)#define SvPADTMP_on(sv) (SvFLAGS(sv) |= SVs_PADTMP|SVs_PADBUSY)#define SvPADTMP_off(sv) (SvFLAGS(sv) &= ~SVs_PADTMP)#define SvPADMY(sv) (SvFLAGS(sv) & SVs_PADMY)#define SvPADMY_on(sv) (SvFLAGS(sv) |= SVs_PADMY|SVs_PADBUSY)#define SvTEMP(sv) (SvFLAGS(sv) & SVs_TEMP)#define SvTEMP_on(sv) (SvFLAGS(sv) |= SVs_TEMP)#define SvTEMP_off(sv) (SvFLAGS(sv) &= ~SVs_TEMP)#define SvOBJECT(sv) (SvFLAGS(sv) & SVs_OBJECT)#define SvOBJECT_on(sv) (SvFLAGS(sv) |= SVs_OBJECT)#define SvOBJECT_off(sv) (SvFLAGS(sv) &= ~SVs_OBJECT)#define SvREADONLY(sv) (SvFLAGS(sv) & SVf_READONLY)#define SvREADONLY_on(sv) (SvFLAGS(sv) |= SVf_READONLY)#define SvREADONLY_off(sv) (SvFLAGS(sv) &= ~SVf_READONLY)#define SvSCREAM(sv) (SvFLAGS(sv) & SVp_SCREAM)#define SvSCREAM_on(sv) (SvFLAGS(sv) |= SVp_SCREAM)#define SvSCREAM_off(sv) (SvFLAGS(sv) &= ~SVp_SCREAM)#define SvCOMPILED(sv) (SvFLAGS(sv) & SVpfm_COMPILED)#define SvCOMPILED_on(sv) (SvFLAGS(sv) |= SVpfm_COMPILED)#define SvCOMPILED_off(sv) (SvFLAGS(sv) &= ~SVpfm_COMPILED)#define SvEVALED(sv) (SvFLAGS(sv) & SVrepl_EVAL)#define SvEVALED_on(sv) (SvFLAGS(sv) |= SVrepl_EVAL)#define SvEVALED_off(sv) (SvFLAGS(sv) &= ~SVrepl_EVAL)#define SvTAIL(sv) (SvFLAGS(sv) & SVpbm_TAIL)#define SvTAIL_on(sv) (SvFLAGS(sv) |= SVpbm_TAIL)#define SvTAIL_off(sv) (SvFLAGS(sv) &= ~SVpbm_TAIL)#define SvVALID(sv) (SvFLAGS(sv) & SVpbm_VALID)#define SvVALID_on(sv) (SvFLAGS(sv) |= SVpbm_VALID)#define SvVALID_off(sv) (SvFLAGS(sv) &= ~SVpbm_VALID)#define SvRV(sv) ((XRV*) SvANY(sv))->xrv_rv#define SvRVx(sv) SvRV(sv)#define SvIVX(sv) ((XPVIV*) SvANY(sv))->xiv_iv#define SvIVXx(sv) SvIVX(sv)#define SvUVX(sv) ((XPVUV*) SvANY(sv))->xuv_uv#define SvUVXx(sv) SvUVX(sv)#define SvNVX(sv) ((XPVNV*)SvANY(sv))->xnv_nv#define SvNVXx(sv) SvNVX(sv)#define SvPVX(sv) ((XPV*) SvANY(sv))->xpv_pv#define SvPVXx(sv) SvPVX(sv)#define SvCUR(sv) ((XPV*) SvANY(sv))->xpv_cur#define SvLEN(sv) ((XPV*) SvANY(sv))->xpv_len#define SvLENx(sv) SvLEN(sv)#define SvEND(sv)(((XPV*) SvANY(sv))->xpv_pv + ((XPV*)SvANY(sv))->xpv_cur)#define SvENDx(sv) ((PL_Sv = (sv)), SvEND(PL_Sv))#define SvMAGIC(sv) ((XPVMG*) SvANY(sv))->xmg_magic#define SvSTASH(sv) ((XPVMG*) SvANY(sv))->xmg_stash#define SvIV_set(sv, val) \ STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \ (((XPVIV*) SvANY(sv))->xiv_iv = val); } STMT_END#define SvNV_set(sv, val) \ STMT_START { assert(SvTYPE(sv) == SVt_NV || SvTYPE(sv) >= SVt_PVNV); \ (((XPVNV*) SvANY(sv))->xnv_nv = val); } STMT_END#define SvPV_set(sv, val) \ STMT_START { assert(SvTYPE(sv) >= SVt_PV); \ (((XPV*) SvANY(sv))->xpv_pv = val); } STMT_END#define SvCUR_set(sv, val) \ STMT_START { assert(SvTYPE(sv) >= SVt_PV); \ (((XPV*) SvANY(sv))->xpv_cur = val); } STMT_END#define SvLEN_set(sv, val) \ STMT_START { assert(SvTYPE(sv) >= SVt_PV); \ (((XPV*) SvANY(sv))->xpv_len = val); } STMT_END#define SvEND_set(sv, val) \ STMT_START { assert(SvTYPE(sv) >= SVt_PV); \ (((XPV*) SvANY(sv))->xpv_cur = val - SvPVX(sv)); } STMT_END#define BmRARE(sv) ((XPVBM*) SvANY(sv))->xbm_rare
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?