3 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010,
4 * 2011, 2012 by Larry Wall and others
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.
12 * Anything that Hobbits had no immediate use for, but were unwilling to
13 * throw away, they called a mathom. Their dwellings were apt to become
14 * rather crowded with mathoms, and many of the presents that passed from
15 * hand to hand were of that sort.
17 * [p.5 of _The Lord of the Rings_: "Prologue"]
23 * This file contains mathoms, various binary artifacts from previous
24 * versions of Perl which we cannot completely remove from the core
25 * code. There are two reasons functions should be here:
27 * 1) A function has been replaced by a macro within a minor release,
28 * so XS modules compiled against an older release will expect to
29 * still be able to link against the function
30 * 2) A function Perl_foo(...) with #define foo Perl_foo(aTHX_ ...)
31 * has been replaced by a macro, e.g. #define foo(...) foo_flags(...,0)
32 * but XS code may still explicitly use the long form, i.e.
35 * This file can't just be cleaned out periodically, because that would break
36 * builds with -DPERL_NO_SHORT_NAMES
38 * NOTE: ALL FUNCTIONS IN THIS FILE should have an entry with the 'b' flag in
41 * To move a function to this file, simply cut and paste it here, and change
42 * its embed.fnc entry to additionally have the 'b' flag. If, for some reason
43 * a function you'd like to be treated as mathoms can't be moved from its
44 * current place, simply enclose it between
50 * and add the 'b' flag in embed.fnc.
52 * The compilation of this file can be suppressed; see INSTALL
54 * Some blurb for perlapi.pod:
56 head1 Obsolete backwards compatibility functions
58 Some of these are also deprecated. You can exclude these from
59 your compiled Perl by adding this option to Configure:
60 C<-Accflags='-DNO_MATHOMS'>
68 #define PERL_IN_MATHOMS_C
72 /* ..." warning: ISO C forbids an empty source file"
73 So make sure we have something in here by processing the headers anyway.
77 /* The functions in this file should be able to call other deprecated functions
78 * without a compiler warning */
79 GCC_DIAG_IGNORE(-Wdeprecated-declarations)
81 /* ref() is now a macro using Perl_doref;
82 * this version provided for binary compatibility only.
85 Perl_ref(pTHX_ OP *o, I32 type)
87 return doref(o, type, TRUE);
91 =for apidoc_section $SV
94 Unsets the RV status of the SV, and decrements the reference count of
95 whatever was being referenced by the RV. This can almost be thought of
96 as a reversal of C<newSVrv>. This is C<sv_unref_flags> with the C<flag>
97 being zero. See C<L</SvROK_off>>.
103 Perl_sv_unref(pTHX_ SV *sv)
105 PERL_ARGS_ASSERT_SV_UNREF;
107 sv_unref_flags(sv, 0);
111 =for apidoc_section $tainting
114 Taint an SV. Use C<SvTAINTED_on> instead.
120 Perl_sv_taint(pTHX_ SV *sv)
122 PERL_ARGS_ASSERT_SV_TAINT;
124 sv_magic((sv), NULL, PERL_MAGIC_taint, NULL, 0);
127 /* sv_2iv() is now a macro using Perl_sv_2iv_flags();
128 * this function provided for binary compatibility only
132 Perl_sv_2iv(pTHX_ SV *sv)
134 PERL_ARGS_ASSERT_SV_2IV;
136 return sv_2iv_flags(sv, SV_GMAGIC);
139 /* sv_2uv() is now a macro using Perl_sv_2uv_flags();
140 * this function provided for binary compatibility only
144 Perl_sv_2uv(pTHX_ SV *sv)
146 PERL_ARGS_ASSERT_SV_2UV;
148 return sv_2uv_flags(sv, SV_GMAGIC);
151 /* sv_2nv() is now a macro using Perl_sv_2nv_flags();
152 * this function provided for binary compatibility only
156 Perl_sv_2nv(pTHX_ SV *sv)
158 return sv_2nv_flags(sv, SV_GMAGIC);
162 /* sv_2pv() is now a macro using Perl_sv_2pv_flags();
163 * this function provided for binary compatibility only
167 Perl_sv_2pv(pTHX_ SV *sv, STRLEN *lp)
169 PERL_ARGS_ASSERT_SV_2PV;
171 return sv_2pv_flags(sv, lp, SV_GMAGIC);
175 =for apidoc_section $SV
176 =for apidoc sv_2pv_nolen
178 Like C<sv_2pv()>, but doesn't return the length too. You should usually
179 use the macro wrapper C<SvPV_nolen(sv)> instead.
185 Perl_sv_2pv_nolen(pTHX_ SV *sv)
187 PERL_ARGS_ASSERT_SV_2PV_NOLEN;
188 return sv_2pv(sv, NULL);
192 =for apidoc_section $SV
193 =for apidoc sv_2pvbyte_nolen
195 Return a pointer to the byte-encoded representation of the SV.
196 May cause the SV to be downgraded from UTF-8 as a side-effect.
198 Usually accessed via the C<SvPVbyte_nolen> macro.
204 Perl_sv_2pvbyte_nolen(pTHX_ SV *sv)
206 PERL_ARGS_ASSERT_SV_2PVBYTE_NOLEN;
208 return sv_2pvbyte(sv, NULL);
212 =for apidoc_section $SV
213 =for apidoc sv_2pvutf8_nolen
215 Return a pointer to the UTF-8-encoded representation of the SV.
216 May cause the SV to be upgraded to UTF-8 as a side-effect.
218 Usually accessed via the C<SvPVutf8_nolen> macro.
224 Perl_sv_2pvutf8_nolen(pTHX_ SV *sv)
226 PERL_ARGS_ASSERT_SV_2PVUTF8_NOLEN;
228 return sv_2pvutf8(sv, NULL);
232 =for apidoc_section $SV
233 =for apidoc sv_force_normal
235 Undo various types of fakery on an SV: if the PV is a shared string, make
236 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
237 an C<xpvmg>. See also C<L</sv_force_normal_flags>>.
243 Perl_sv_force_normal(pTHX_ SV *sv)
245 PERL_ARGS_ASSERT_SV_FORCE_NORMAL;
247 sv_force_normal_flags(sv, 0);
250 /* sv_setsv() is now a macro using Perl_sv_setsv_flags();
251 * this function provided for binary compatibility only
255 Perl_sv_setsv(pTHX_ SV *dsv, SV *ssv)
257 PERL_ARGS_ASSERT_SV_SETSV;
259 sv_setsv_flags(dsv, ssv, SV_GMAGIC);
262 /* sv_catpvn() is now a macro using Perl_sv_catpvn_flags();
263 * this function provided for binary compatibility only
267 Perl_sv_catpvn(pTHX_ SV *dsv, const char* sstr, STRLEN slen)
269 PERL_ARGS_ASSERT_SV_CATPVN;
271 sv_catpvn_flags(dsv, sstr, slen, SV_GMAGIC);
275 Perl_sv_catpvn_mg(pTHX_ SV *dsv, const char *sstr, STRLEN len)
277 PERL_ARGS_ASSERT_SV_CATPVN_MG;
279 sv_catpvn_flags(dsv,sstr,len,SV_GMAGIC|SV_SMAGIC);
282 /* sv_catsv() is now a macro using Perl_sv_catsv_flags();
283 * this function provided for binary compatibility only
287 Perl_sv_catsv(pTHX_ SV *dsv, SV *sstr)
289 PERL_ARGS_ASSERT_SV_CATSV;
291 sv_catsv_flags(dsv, sstr, SV_GMAGIC);
295 Perl_sv_catsv_mg(pTHX_ SV *dsv, SV *sstr)
297 PERL_ARGS_ASSERT_SV_CATSV_MG;
299 sv_catsv_flags(dsv,sstr,SV_GMAGIC|SV_SMAGIC);
303 =for apidoc_section $SV
306 Use the C<SvPV_nolen> macro instead
311 /* sv_pv() is now a macro using SvPV_nolen();
312 * this function provided for binary compatibility only
316 Perl_sv_pv(pTHX_ SV *sv)
318 PERL_ARGS_ASSERT_SV_PV;
323 return sv_2pv(sv, NULL);
326 /* sv_pvn_force() is now a macro using Perl_sv_pvn_force_flags();
327 * this function provided for binary compatibility only
331 Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp)
333 PERL_ARGS_ASSERT_SV_PVN_FORCE;
335 return sv_pvn_force_flags(sv, lp, SV_GMAGIC);
338 /* sv_pvbyte () is now a macro using Perl_sv_2pv_flags();
339 * this function provided for binary compatibility only
343 Perl_sv_pvbyte(pTHX_ SV *sv)
345 PERL_ARGS_ASSERT_SV_PVBYTE;
347 (void)sv_utf8_downgrade(sv, FALSE);
352 =for apidoc_section $SV
353 =for apidoc sv_pvbyte
355 Use C<SvPVbyte_nolen> instead.
361 =for apidoc_section $SV
362 =for apidoc sv_pvutf8
364 Use the C<SvPVutf8_nolen> macro instead
371 Perl_sv_pvutf8(pTHX_ SV *sv)
373 PERL_ARGS_ASSERT_SV_PVUTF8;
379 /* sv_utf8_upgrade() is now a macro using sv_utf8_upgrade_flags();
380 * this function provided for binary compatibility only
384 Perl_sv_utf8_upgrade(pTHX_ SV *sv)
386 PERL_ARGS_ASSERT_SV_UTF8_UPGRADE;
388 return sv_utf8_upgrade_flags(sv, SV_GMAGIC);
391 #if defined(HUGE_VAL) || (defined(USE_LONG_DOUBLE) && defined(HUGE_VALL))
393 * This hack is to force load of "huge" support from libm.a
394 * So it is in perl for (say) POSIX to use.
395 * Needed for SunOS with Sun's 'acc' for example.
400 # if defined(USE_LONG_DOUBLE) && defined(HUGE_VALL)
409 Perl_gv_fullname3(pTHX_ SV *sv, const GV *gv, const char *prefix)
411 PERL_ARGS_ASSERT_GV_FULLNAME3;
413 gv_fullname4(sv, gv, prefix, TRUE);
417 Perl_gv_efullname3(pTHX_ SV *sv, const GV *gv, const char *prefix)
419 PERL_ARGS_ASSERT_GV_EFULLNAME3;
421 gv_efullname4(sv, gv, prefix, TRUE);
425 =for apidoc_section $GV
426 =for apidoc gv_fetchmethod
428 See L</gv_fetchmethod_autoload>.
434 Perl_gv_fetchmethod(pTHX_ HV *stash, const char *name)
436 PERL_ARGS_ASSERT_GV_FETCHMETHOD;
438 return gv_fetchmethod_autoload(stash, name, TRUE);
442 Perl_hv_iternext(pTHX_ HV *hv)
444 PERL_ARGS_ASSERT_HV_ITERNEXT;
446 return hv_iternext_flags(hv, 0);
450 Perl_hv_magic(pTHX_ HV *hv, GV *gv, int how)
452 PERL_ARGS_ASSERT_HV_MAGIC;
454 sv_magic(MUTABLE_SV(hv), MUTABLE_SV(gv), how, NULL, 0);
458 Perl_do_open(pTHX_ GV *gv, const char *name, I32 len, int as_raw,
459 int rawmode, int rawperm, PerlIO *supplied_fp)
461 PERL_ARGS_ASSERT_DO_OPEN;
463 return do_openn(gv, name, len, as_raw, rawmode, rawperm,
464 supplied_fp, (SV **) NULL, 0);
469 Perl_do_aexec(pTHX_ SV *really, SV **mark, SV **sp)
471 PERL_ARGS_ASSERT_DO_AEXEC;
473 return do_aexec5(really, mark, sp, 0, 0);
478 Perl_is_utf8_string_loc(const U8 *s, const STRLEN len, const U8 **ep)
480 PERL_ARGS_ASSERT_IS_UTF8_STRING_LOC;
482 return is_utf8_string_loclen(s, len, ep, 0);
486 =for apidoc_section $SV
487 =for apidoc sv_nolocking
489 Dummy routine which "locks" an SV when there is no locking module present.
490 Exists to avoid test for a C<NULL> function pointer and because it could
491 potentially warn under some level of strict-ness.
493 "Superseded" by C<sv_nosharing()>.
499 Perl_sv_nolocking(pTHX_ SV *sv)
507 =for apidoc_section $SV
508 =for apidoc sv_nounlocking
510 Dummy routine which "unlocks" an SV when there is no locking module present.
511 Exists to avoid test for a C<NULL> function pointer and because it could
512 potentially warn under some level of strict-ness.
514 "Superseded" by C<sv_nosharing()>.
518 PERL_UNLOCK_HOOK in intrpvar.h is the macro that refers to this, and guarantees
519 that mathoms gets loaded.
524 Perl_sv_nounlocking(pTHX_ SV *sv)
531 Perl_sv_usepvn_mg(pTHX_ SV *sv, char *ptr, STRLEN len)
533 PERL_ARGS_ASSERT_SV_USEPVN_MG;
535 sv_usepvn_flags(sv,ptr,len, SV_SMAGIC);
540 Perl_sv_usepvn(pTHX_ SV *sv, char *ptr, STRLEN len)
542 PERL_ARGS_ASSERT_SV_USEPVN;
544 sv_usepvn_flags(sv,ptr,len, 0);
548 Perl_hv_store_ent(pTHX_ HV *hv, SV *keysv, SV *val, U32 hash)
550 return (HE *)hv_common(hv, keysv, NULL, 0, 0, HV_FETCH_ISSTORE, val, hash);
554 Perl_hv_exists_ent(pTHX_ HV *hv, SV *keysv, U32 hash)
556 PERL_ARGS_ASSERT_HV_EXISTS_ENT;
558 return cBOOL(hv_common(hv, keysv, NULL, 0, 0, HV_FETCH_ISEXISTS, 0, hash));
562 Perl_hv_fetch_ent(pTHX_ HV *hv, SV *keysv, I32 lval, U32 hash)
564 PERL_ARGS_ASSERT_HV_FETCH_ENT;
566 return (HE *)hv_common(hv, keysv, NULL, 0, 0,
567 (lval ? HV_FETCH_LVALUE : 0), NULL, hash);
571 Perl_hv_delete_ent(pTHX_ HV *hv, SV *keysv, I32 flags, U32 hash)
573 PERL_ARGS_ASSERT_HV_DELETE_ENT;
575 return MUTABLE_SV(hv_common(hv, keysv, NULL, 0, 0, flags | HV_DELETE, NULL,
580 Perl_hv_store_flags(pTHX_ HV *hv, const char *key, I32 klen, SV *val, U32 hash,
583 return (SV**) hv_common(hv, NULL, key, klen, flags,
584 (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), val, hash);
588 Perl_hv_store(pTHX_ HV *hv, const char *key, I32 klen_i32, SV *val, U32 hash)
600 return (SV **) hv_common(hv, NULL, key, klen, flags,
601 (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), val, hash);
605 Perl_hv_exists(pTHX_ HV *hv, const char *key, I32 klen_i32)
610 PERL_ARGS_ASSERT_HV_EXISTS;
619 return cBOOL(hv_common(hv, NULL, key, klen, flags, HV_FETCH_ISEXISTS, 0, 0));
623 Perl_hv_fetch(pTHX_ HV *hv, const char *key, I32 klen_i32, I32 lval)
628 PERL_ARGS_ASSERT_HV_FETCH;
637 return (SV **) hv_common(hv, NULL, key, klen, flags,
638 lval ? (HV_FETCH_JUST_SV | HV_FETCH_LVALUE)
639 : HV_FETCH_JUST_SV, NULL, 0);
643 Perl_hv_delete(pTHX_ HV *hv, const char *key, I32 klen_i32, I32 flags)
648 PERL_ARGS_ASSERT_HV_DELETE;
652 k_flags = HVhek_UTF8;
657 return MUTABLE_SV(hv_common(hv, NULL, key, klen, k_flags, flags | HV_DELETE,
664 return MUTABLE_AV(newSV_type(SVt_PVAV));
665 /* sv_upgrade does AvREAL_only():
668 AvMAX(av) = AvFILLp(av) = -1; */
674 HV * const hv = MUTABLE_HV(newSV_type(SVt_PVHV));
681 Perl_sv_insert(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len,
682 const char *const little, const STRLEN littlelen)
684 PERL_ARGS_ASSERT_SV_INSERT;
685 sv_insert_flags(bigstr, offset, len, little, littlelen, SV_GMAGIC);
689 Perl_save_freesv(pTHX_ SV *sv)
695 Perl_save_mortalizesv(pTHX_ SV *sv)
697 PERL_ARGS_ASSERT_SAVE_MORTALIZESV;
699 save_mortalizesv(sv);
703 Perl_save_freeop(pTHX_ OP *o)
709 Perl_save_freepv(pTHX_ char *pv)
720 #ifdef PERL_DONT_CREATE_GVSV
722 Perl_gv_SVadd(pTHX_ GV *gv)
729 Perl_gv_AVadd(pTHX_ GV *gv)
735 Perl_gv_HVadd(pTHX_ GV *gv)
741 Perl_gv_IOadd(pTHX_ GV *gv)
749 return MUTABLE_IO(newSV_type(SVt_PVIO));
755 return my_stat_flags(SV_GMAGIC);
761 return my_lstat_flags(SV_GMAGIC);
765 Perl_sv_eq(pTHX_ SV *sv1, SV *sv2)
767 return sv_eq_flags(sv1, sv2, SV_GMAGIC);
770 #ifdef USE_LOCALE_COLLATE
772 Perl_sv_collxfrm(pTHX_ SV *const sv, STRLEN *const nxp)
774 PERL_ARGS_ASSERT_SV_COLLXFRM;
775 return sv_collxfrm_flags(sv, nxp, SV_GMAGIC);
781 Perl_sv_2bool(pTHX_ SV *const sv)
783 PERL_ARGS_ASSERT_SV_2BOOL;
784 return sv_2bool_flags(sv, SV_GMAGIC);
788 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
790 return newATTRSUB(floor, o, proto, NULL, block);
794 Perl_sv_mortalcopy(pTHX_ SV *const oldsv)
796 return Perl_sv_mortalcopy_flags(aTHX_ oldsv, SV_GMAGIC);
800 Perl_sv_copypv(pTHX_ SV *const dsv, SV *const ssv)
802 PERL_ARGS_ASSERT_SV_COPYPV;
804 sv_copypv_flags(dsv, ssv, SV_GMAGIC);
808 =for apidoc_section $unicode
809 =for apidoc is_utf8_char_buf
811 This is identical to the macro L<perlapi/isUTF8_CHAR>.
816 Perl_is_utf8_char_buf(const U8 *buf, const U8* buf_end)
819 PERL_ARGS_ASSERT_IS_UTF8_CHAR_BUF;
821 return isUTF8_CHAR(buf, buf_end);
825 =for apidoc_section $unicode
826 =for apidoc utf8_to_uvuni
828 Returns the Unicode code point of the first character in the string C<s>
829 which is assumed to be in UTF-8 encoding; C<retlen> will be set to the
830 length, in bytes, of that character.
832 Some, but not all, UTF-8 malformations are detected, and in fact, some
833 malformed input could cause reading beyond the end of the input buffer, which
834 is one reason why this function is deprecated. The other is that only in
835 extremely limited circumstances should the Unicode versus native code point be
836 of any interest to you.
838 If C<s> points to one of the detected malformations, and UTF8 warnings are
839 enabled, zero is returned and C<*retlen> is set (if C<retlen> doesn't point to
840 NULL) to -1. If those warnings are off, the computed value if well-defined (or
841 the Unicode REPLACEMENT CHARACTER, if not) is silently returned, and C<*retlen>
842 is set (if C<retlen> isn't NULL) so that (S<C<s> + C<*retlen>>) is the
843 next possible position in C<s> that could begin a non-malformed character.
844 See L<perlapi/utf8n_to_uvchr> for details on when the REPLACEMENT CHARACTER is returned.
850 Perl_utf8_to_uvuni(pTHX_ const U8 *s, STRLEN *retlen)
853 PERL_ARGS_ASSERT_UTF8_TO_UVUNI;
855 return NATIVE_TO_UNI(valid_utf8_to_uvchr(s, retlen));
858 /* return ptr to little string in big string, NULL if not found */
859 /* The original version of this routine was donated by Corey Satten. */
862 Perl_instr(const char *big, const char *little)
864 PERL_ARGS_ASSERT_INSTR;
866 return instr(big, little);
870 Perl_newSVsv(pTHX_ SV *const old)
876 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
878 PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
880 return sv_utf8_downgrade(sv, fail_ok);
884 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
886 PERL_ARGS_ASSERT_SV_2PVUTF8;
888 return sv_2pvutf8(sv, lp);
892 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
894 PERL_ARGS_ASSERT_SV_2PVBYTE;
896 return sv_2pvbyte(sv, lp);
900 Perl_uvuni_to_utf8(pTHX_ U8 *d, UV uv)
902 PERL_ARGS_ASSERT_UVUNI_TO_UTF8;
904 return uvoffuni_to_utf8_flags(d, uv, 0);
908 =for apidoc_section $unicode
909 =for apidoc utf8n_to_uvuni
911 Instead use L<perlapi/utf8_to_uvchr_buf>, or rarely, L<perlapi/utf8n_to_uvchr>.
913 This function was useful for code that wanted to handle both EBCDIC and
914 ASCII platforms with Unicode properties, but starting in Perl v5.20, the
915 distinctions between the platforms have mostly been made invisible to most
916 code, so this function is quite unlikely to be what you want. If you do need
917 this precise functionality, use instead
918 C<L<NATIVE_TO_UNI(utf8_to_uvchr_buf(...))|perlapi/utf8_to_uvchr_buf>>
919 or C<L<NATIVE_TO_UNI(utf8n_to_uvchr(...))|perlapi/utf8n_to_uvchr>>.
925 Perl_utf8n_to_uvuni(pTHX_ const U8 *s, STRLEN curlen, STRLEN *retlen, U32 flags)
927 PERL_ARGS_ASSERT_UTF8N_TO_UVUNI;
929 return NATIVE_TO_UNI(utf8n_to_uvchr(s, curlen, retlen, flags));
933 =for apidoc_section $unicode
934 =for apidoc utf8_to_uvchr
936 Returns the native code point of the first character in the string C<s>
937 which is assumed to be in UTF-8 encoding; C<retlen> will be set to the
938 length, in bytes, of that character.
940 Some, but not all, UTF-8 malformations are detected, and in fact, some
941 malformed input could cause reading beyond the end of the input buffer, which
942 is why this function is deprecated. Use L</utf8_to_uvchr_buf> instead.
944 If C<s> points to one of the detected malformations, and UTF8 warnings are
945 enabled, zero is returned and C<*retlen> is set (if C<retlen> isn't
946 C<NULL>) to -1. If those warnings are off, the computed value if well-defined (or
947 the Unicode REPLACEMENT CHARACTER, if not) is silently returned, and C<*retlen>
948 is set (if C<retlen> isn't NULL) so that (S<C<s> + C<*retlen>>) is the
949 next possible position in C<s> that could begin a non-malformed character.
950 See L</utf8n_to_uvchr> for details on when the REPLACEMENT CHARACTER is returned.
956 Perl_utf8_to_uvchr(pTHX_ const U8 *s, STRLEN *retlen)
958 PERL_ARGS_ASSERT_UTF8_TO_UVCHR;
960 /* This function is unsafe if malformed UTF-8 input is given it, which is
961 * why the function is deprecated. If the first byte of the input
962 * indicates that there are more bytes remaining in the sequence that forms
963 * the character than there are in the input buffer, it can read past the
964 * end. But we can make it safe if the input string happens to be
965 * NUL-terminated, as many strings in Perl are, by refusing to read past a
966 * NUL, which is what UTF8_CHK_SKIP() does. A NUL indicates the start of
967 * the next character anyway. If the input isn't NUL-terminated, the
968 * function remains unsafe, as it always has been. */
970 return utf8_to_uvchr_buf(s, s + UTF8_CHK_SKIP(s), retlen);
975 #endif /* NO_MATHOMS */
978 * ex: set ts=8 sts=4 sw=4 et: