This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perlapi: Refactor placements, headings of some functions
[perl5.git] / util.h
... / ...
CommitLineData
1/* util.h
2 *
3 * Copyright (C) 1991, 1992, 1993, 1999, 2001, 2002, 2003, 2004, 2005,
4 * 2007, by Larry Wall and others
5 *
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
8 *
9 */
10
11#ifdef VMS
12# define PERL_FILE_IS_ABSOLUTE(f) \
13 (*(f) == '/' \
14 || (strchr(f,':') \
15 || ((*(f) == '[' || *(f) == '<') \
16 && (isWORDCHAR((f)[1]) || strchr("$-_]>",(f)[1])))))
17
18#else /* !VMS */
19# if defined(WIN32) || defined(__CYGWIN__)
20# define PERL_FILE_IS_ABSOLUTE(f) \
21 (*(f) == '/' || *(f) == '\\' /* UNC/rooted path */ \
22 || ((f)[0] && (f)[1] == ':')) /* drive name */
23# else /* !WIN32 */
24# ifdef NETWARE
25# define PERL_FILE_IS_ABSOLUTE(f) \
26 (((f)[0] && (f)[1] == ':') /* drive name */ \
27 || ((f)[0] == '\\' && (f)[1] == '\\') /* UNC path */ \
28 || ((f)[3] == ':')) /* volume name, currently only sys */
29# else /* !NETWARE */
30# if defined(DOSISH) || defined(__SYMBIAN32__)
31# define PERL_FILE_IS_ABSOLUTE(f) \
32 (*(f) == '/' \
33 || ((f)[0] && (f)[1] == ':')) /* drive name */
34# else /* NEITHER DOSISH NOR SYMBIANISH */
35# define PERL_FILE_IS_ABSOLUTE(f) (*(f) == '/')
36# endif /* DOSISH */
37# endif /* NETWARE */
38# endif /* WIN32 */
39#endif /* VMS */
40
41/*
42=head1 Miscellaneous Functions
43
44=for apidoc ibcmp
45
46This is a synonym for (! foldEQ())
47
48=for apidoc ibcmp_locale
49
50This is a synonym for (! foldEQ_locale())
51
52=cut
53*/
54#define ibcmp(s1, s2, len) cBOOL(! foldEQ(s1, s2, len))
55#define ibcmp_locale(s1, s2, len) cBOOL(! foldEQ_locale(s1, s2, len))
56
57/* outside the core, perl.h undefs HAS_QUAD if IV isn't 64-bit
58 We can't swap this to HAS_QUAD, because the logic here affects the type of
59 perl_drand48_t below, and that is visible outside of the core. */
60#if defined(U64TYPE) && !defined(USING_MSVC6)
61/* use a faster implementation when quads are available,
62 * but not with VC6 on Windows */
63# define PERL_DRAND48_QUAD
64#endif
65
66#ifdef PERL_DRAND48_QUAD
67
68/* U64 is only defined under PERL_CORE, but this needs to be visible
69 * elsewhere so the definition of PerlInterpreter is complete.
70 */
71typedef U64TYPE perl_drand48_t;
72
73#else
74
75struct PERL_DRAND48_T {
76 U16 seed[3];
77};
78
79typedef struct PERL_DRAND48_T perl_drand48_t;
80
81#endif
82
83#define PL_RANDOM_STATE_TYPE perl_drand48_t
84
85#define Perl_drand48_init(seed) (Perl_drand48_init_r(&PL_random_state, (seed)))
86#define Perl_drand48() (Perl_drand48_r(&PL_random_state))
87
88/*
89 * Local variables:
90 * c-indentation-style: bsd
91 * c-basic-offset: 4
92 * indent-tabs-mode: nil
93 * End:
94 *
95 * ex: set ts=8 sts=4 sw=4 et:
96 */