integrate cfgperl changes#6231..6240 into mainline
Gurusamy Sarathy [Tue, 11 Jul 2000 18:12:10 +0000 (18:12 +0000)]
p4raw-link: @6240 on //depot/cfgperl: 514e70b26394e6b272960ab8b9b8b7dbb1e2c068
p4raw-link: @6231 on //depot/cfgperl: 7906debc4b99f108310cdade6e486754c15481e7

p4raw-id: //depot/perl@6355
p4raw-branched: from //depot/cfgperl@6353 'branch in' pod/perlutil.pod
p4raw-integrated: from //depot/cfgperl@6353 'copy in' pod/roffitall
(@5753..) op.h (@5833..) README.cygwin (@6096..)
lib/ExtUtils/MM_VMS.pm (@6140..) lib/File/Find.pm (@6156..)
Configure config_h.SH hints/solaris_2.sh (@6217..) Todo-5.6
(@6232..) keywords.h lib/warnings.pm opcode.h opnames.h pp.sym
regnodes.h warnings.h (@6236..) 'ignore' ext/B/B/Asmdata.pm
ext/ByteLoader/byterun.c ext/ByteLoader/byterun.h (@6236..)
p4raw-integrated: from //depot/cfgperl@6240 'copy in' utils/h2xs.PL
(@6192..)
p4raw-integrated: from //depot/cfgperl@6238 'merge in' vms/vms.c
(@6198..)
p4raw-integrated: from //depot/cfgperl@6237 'copy in' utf8.c (@6221..)
pod/perlapi.pod pod/perlintern.pod pp_proto.h (@6236..)
'ignore' embedvar.h perlapi.h (@6236..) 'merge in' embed.pl
(@6225..) embed.h objXSUB.h perlapi.c proto.h (@6236..)
p4raw-integrated: from //depot/cfgperl@6232 'copy in' pod/Makefile
pod/perltoc.pod (@6161..) MANIFEST (@6227..)

23 files changed:
Configure
MANIFEST
README.cygwin
Todo-5.6
config_h.SH
embed.h
embed.pl
hints/solaris_2.sh
lib/ExtUtils/MM_VMS.pm
lib/File/Find.pm
objXSUB.h
op.h
perlapi.c
pod/Makefile
pod/perlapi.pod
pod/perlintern.pod
pod/perltoc.pod
pod/perlutil.pod [new file with mode: 0644]
pod/roffitall
proto.h
utf8.c
utils/h2xs.PL
vms/vms.c

index 19c83a0..023b2d9 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -20,7 +20,7 @@
 
 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
 #
-# Generated on Wed May 31 23:34:04 EET DST 2000 [metaconfig 3.0 PL70]
+# Generated on Tue Jun 27 04:45:48 EET DST 2000 [metaconfig 3.0 PL70]
 # (with additional metaconfig patches by perlbug@perl.com)
 
 cat >/tmp/c1$$ <<EOF
@@ -288,7 +288,6 @@ bincompat5005=''
 d_bincompat5005=''
 byteorder=''
 cc=''
-gccversion=''
 ccflags=''
 cppflags=''
 ldflags=''
@@ -597,6 +596,7 @@ fflushNULL=''
 fflushall=''
 fpossize=''
 fpostype=''
+gccversion=''
 gidformat=''
 gidsign=''
 gidsize=''
@@ -2798,7 +2798,11 @@ int main() {
 #endif
 }
 EOP
-       ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
+       case "$cc" in
+       '') modelcc="$cc" ;;
+       *) modelcc="cc" ;;
+       esac
+       ( $modelcc -o pdp11 pdp11.c ) >/dev/null 2>&1
        if $test -f pdp11 && ./pdp11 2>/dev/null; then
                dflt='unsplit split'
        else
@@ -3075,6 +3079,47 @@ fi
 if $test -f cc.cbu; then
     . ./cc.cbu
 fi
+: Quick sanity check, we will do a fuller one later when we know
+: the various flags and libs
+$rm -f try try.*
+$cat >try.c <<EOM
+int main(int argc, char *argv[]) {
+  return 0;
+}
+EOM
+if $cc -o try try.c; then
+   :
+else
+   echo "Uh-oh, the C compiler "$cc" doesn't seem to be working..." >&4
+   despair=yes
+   trygcc=yes
+   case "$cc" in
+   *gcc) trygcc=no ;;
+   esac
+   case "`$cc -v 2>&1`" in
+   *gcc*) trygcc=no ;;
+   esac
+   if $test X"$trygcc" = Xyes; then
+      if gcc -o try try.c; then
+        echo " "
+        echo "You seem to have a working gcc, though."
+        rp="Do you want to use it?"
+        dflt=y
+        . ./myread
+        case "$ans" in
+        [yY]*) cc=gcc; despair=no ;;
+        esac
+      fi
+   fi
+   if $test X"$despair" = Xyes; then
+      echo "You need to find a working C compiler." >&4
+      echo "I cannot continue any further, aborting." >&4
+      exit 1
+   fi
+fi
+$rm -f try try.*
+
+
 echo " "
 echo "Checking for GNU cc in disguise and/or its version number..." >&4
 $cat >gccvers.c <<EOM
@@ -3113,6 +3158,154 @@ case "$gccversion" in
 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
 esac
 
+: see how we invoke the C preprocessor
+echo " "
+echo "Now, how can we feed standard input to your C preprocessor..." >&4
+cat <<'EOT' >testcpp.c
+#define ABC abc
+#define XYZ xyz
+ABC.XYZ
+EOT
+cd ..
+if test ! -f cppstdin; then
+       if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
+               # AIX cc -E doesn't show the absolute headerfile
+               # locations but we'll cheat by using the -M flag.
+               echo 'cat >.$$.c; rm -f .$$.u; '"$cc"' ${1+"$@"} -M -c .$$.c 2>/dev/null; test -s .$$.u && awk '"'"'$2 ~ /\.h$/ { print "# 0 \""$2"\"" }'"'"' .$$.u; rm -f .$$.o .$$.u; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' > cppstdin
+       else
+               echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
+       fi
+else
+       echo "Keeping your $hint cppstdin wrapper."
+fi
+chmod 755 cppstdin
+wrapper=`pwd`/cppstdin
+ok='false'
+cd UU
+
+if $test "X$cppstdin" != "X" && \
+       $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
+then
+       echo "You used to use $cppstdin $cppminus so we'll use that again."
+       case "$cpprun" in
+       '') echo "But let's see if we can live without a wrapper..." ;;
+       *)
+               if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
+                       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
+               then
+                       echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
+                       ok='true'
+               else
+                       echo "(However, $cpprun $cpplast does not work, let's see...)"
+               fi
+               ;;
+       esac
+else
+       case "$cppstdin" in
+       '') ;;
+       *)
+               echo "Good old $cppstdin $cppminus does not seem to be of any help..."
+               ;;
+       esac
+fi
+
+if $ok; then
+       : nothing
+elif echo 'Maybe "'"$cc"' -E" will work...'; \
+       $cc -E <testcpp.c >testcpp.out 2>&1; \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+       echo "Yup, it does."
+       x_cpp="$cc -E"
+       x_minus='';
+elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
+       $cc -E - <testcpp.c >testcpp.out 2>&1; \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+       echo "Yup, it does."
+       x_cpp="$cc -E"
+       x_minus='-';
+elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
+       $cc -P <testcpp.c >testcpp.out 2>&1; \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+       echo "Yipee, that works!"
+       x_cpp="$cc -P"
+       x_minus='';
+elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
+       $cc -P - <testcpp.c >testcpp.out 2>&1; \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+       echo "At long last!"
+       x_cpp="$cc -P"
+       x_minus='-';
+elif echo 'No such luck, maybe "'$cpp'" will work...'; \
+       $cpp <testcpp.c >testcpp.out 2>&1; \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+       echo "It works!"
+       x_cpp="$cpp"
+       x_minus='';
+elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
+       $cpp - <testcpp.c >testcpp.out 2>&1; \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+       echo "Hooray, it works!  I was beginning to wonder."
+       x_cpp="$cpp"
+       x_minus='-';
+elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
+       $wrapper <testcpp.c >testcpp.out 2>&1; \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+       x_cpp="$wrapper"
+       x_minus=''
+       echo "Eureka!"
+else
+       dflt=''
+       rp="No dice.  I can't find a C preprocessor.  Name one:"
+       . ./myread
+       x_cpp="$ans"
+       x_minus=''
+       $x_cpp <testcpp.c >testcpp.out 2>&1
+       if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+               echo "OK, that will do." >&4
+       else
+echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
+               exit 1
+       fi
+fi
+
+case "$ok" in
+false)
+       cppstdin="$x_cpp"
+       cppminus="$x_minus"
+       cpprun="$x_cpp"
+       cpplast="$x_minus"
+       set X $x_cpp
+       shift
+       case "$1" in
+       "$cpp")
+               echo "Perhaps can we force $cc -E using a wrapper..."
+               if $wrapper <testcpp.c >testcpp.out 2>&1; \
+                       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
+               then
+                       echo "Yup, we can."
+                       cppstdin="$wrapper"
+                       cppminus='';
+               else
+                       echo "Nope, we'll have to live without it..."
+               fi
+               ;;
+       esac
+       case "$cpprun" in
+       "$wrapper")
+               cpprun=''
+               cpplast=''
+               ;;
+       esac
+       ;;
+esac
+
+case "$cppstdin" in
+"$wrapper"|'cppstdin') ;;
+*) $rm -f $wrapper;;
+esac
+$rm -f testcpp.c testcpp.out
+
 : decide how portable to be.  Allow command line overrides.
 case "$d_portable" in
 "$undef") ;;
@@ -3406,7 +3599,7 @@ if $test -f /bin/mips && /bin/mips; then
 /bsd43
 #endif
 EOCP
-       if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
+       if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
                dflt='/bsd43/usr/include'
                incpath='/bsd43'
                mips_type='BSD 4.3'
@@ -3439,154 +3632,6 @@ y)      fn=d/
        ;;
 esac
 
-: see how we invoke the C preprocessor
-echo " "
-echo "Now, how can we feed standard input to your C preprocessor..." >&4
-cat <<'EOT' >testcpp.c
-#define ABC abc
-#define XYZ xyz
-ABC.XYZ
-EOT
-cd ..
-if test ! -f cppstdin; then
-       if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
-               # AIX cc -E doesn't show the absolute headerfile
-               # locations but we'll cheat by using the -M flag.
-               echo 'cat >.$$.c; rm -f .$$.u; '"$cc"' ${1+"$@"} -M -c .$$.c 2>/dev/null; test -s .$$.u && awk '"'"'$2 ~ /\.h$/ { print "# 0 \""$2"\"" }'"'"' .$$.u; rm -f .$$.o .$$.u; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' > cppstdin
-       else
-               echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
-       fi
-else
-       echo "Keeping your $hint cppstdin wrapper."
-fi
-chmod 755 cppstdin
-wrapper=`pwd`/cppstdin
-ok='false'
-cd UU
-
-if $test "X$cppstdin" != "X" && \
-       $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
-then
-       echo "You used to use $cppstdin $cppminus so we'll use that again."
-       case "$cpprun" in
-       '') echo "But let's see if we can live without a wrapper..." ;;
-       *)
-               if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
-                       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
-               then
-                       echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
-                       ok='true'
-               else
-                       echo "(However, $cpprun $cpplast does not work, let's see...)"
-               fi
-               ;;
-       esac
-else
-       case "$cppstdin" in
-       '') ;;
-       *)
-               echo "Good old $cppstdin $cppminus does not seem to be of any help..."
-               ;;
-       esac
-fi
-
-if $ok; then
-       : nothing
-elif echo 'Maybe "'"$cc"' -E" will work...'; \
-       $cc -E <testcpp.c >testcpp.out 2>&1; \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
-       echo "Yup, it does."
-       x_cpp="$cc -E"
-       x_minus='';
-elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
-       $cc -E - <testcpp.c >testcpp.out 2>&1; \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
-       echo "Yup, it does."
-       x_cpp="$cc -E"
-       x_minus='-';
-elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
-       $cc -P <testcpp.c >testcpp.out 2>&1; \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
-       echo "Yipee, that works!"
-       x_cpp="$cc -P"
-       x_minus='';
-elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
-       $cc -P - <testcpp.c >testcpp.out 2>&1; \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
-       echo "At long last!"
-       x_cpp="$cc -P"
-       x_minus='-';
-elif echo 'No such luck, maybe "'$cpp'" will work...'; \
-       $cpp <testcpp.c >testcpp.out 2>&1; \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
-       echo "It works!"
-       x_cpp="$cpp"
-       x_minus='';
-elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
-       $cpp - <testcpp.c >testcpp.out 2>&1; \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
-       echo "Hooray, it works!  I was beginning to wonder."
-       x_cpp="$cpp"
-       x_minus='-';
-elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
-       $wrapper <testcpp.c >testcpp.out 2>&1; \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
-       x_cpp="$wrapper"
-       x_minus=''
-       echo "Eureka!"
-else
-       dflt=''
-       rp="No dice.  I can't find a C preprocessor.  Name one:"
-       . ./myread
-       x_cpp="$ans"
-       x_minus=''
-       $x_cpp <testcpp.c >testcpp.out 2>&1
-       if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
-               echo "OK, that will do." >&4
-       else
-echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
-               exit 1
-       fi
-fi
-
-case "$ok" in
-false)
-       cppstdin="$x_cpp"
-       cppminus="$x_minus"
-       cpprun="$x_cpp"
-       cpplast="$x_minus"
-       set X $x_cpp
-       shift
-       case "$1" in
-       "$cpp")
-               echo "Perhaps can we force $cc -E using a wrapper..."
-               if $wrapper <testcpp.c >testcpp.out 2>&1; \
-                       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
-               then
-                       echo "Yup, we can."
-                       cppstdin="$wrapper"
-                       cppminus='';
-               else
-                       echo "Nope, we'll have to live without it..."
-               fi
-               ;;
-       esac
-       case "$cpprun" in
-       "$wrapper")
-               cpprun=''
-               cpplast=''
-               ;;
-       esac
-       ;;
-esac
-
-case "$cppstdin" in
-"$wrapper"|'cppstdin') ;;
-*) $rm -f $wrapper;;
-esac
-$rm -f testcpp.c testcpp.out
-
 : Set private lib path
 case "$plibpth" in
 '') if ./mips; then
@@ -9190,10 +9235,6 @@ eval $inlibc
 set getespwnam d_getespwnam
 eval $inlibc
 
-: see if getespwnam exists
-set getespwnam d_getespwnam
-eval $inlibc
-
 
 : see if getfsstat exists
 set getfsstat d_getfsstat
@@ -9376,10 +9417,6 @@ eval $hasproto
 set getprpwnam d_getprpwnam
 eval $inlibc
 
-: see if getprpwnam exists
-set getprpwnam d_getprpwnam
-eval $inlibc
-
 : see if getpwent exists
 set getpwent d_getpwent
 eval $inlibc
@@ -14358,10 +14395,6 @@ eval $inhdr
 set prot.h i_prot
 eval $inhdr
 
-: see if this is a prot.h system
-set prot.h i_prot
-eval $inhdr
-
 echo " "
 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
 $cat <<'EOSH' > Cppsym.know
index 2681a11..b21da7d 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -1190,6 +1190,7 @@ pod/perltoot.pod  Tom's object-oriented tutorial
 pod/perltootc.pod      Tom's object-oriented tutorial (more on class data)
 pod/perltrap.pod       Trap info
 pod/perlunicode.pod    Unicode support info
+pod/perlutil.pod       Accompanying utilities explained
 pod/perlvar.pod                Variable info
 pod/perlxs.pod         XS api info
 pod/perlxstut.pod      XS tutorial
index eb6c289..2a95ab9 100644 (file)
@@ -31,7 +31,7 @@ about this project can be found at:
 
 A recent net or commercial release of Cygwin is required.
 
-At the time this document was written, Cygwin 1.1.1 was current.
+At the time this document was last updated, Cygwin 1.1.2 was current.
 
 B<NOTE:> At this point, minimal effort has been made to provide
 compatibility with old (beta) Cygwin releases.  The focus has been to
@@ -138,6 +138,11 @@ The MD5 port was done by Andy Piper:
 
   ftp://ftp.franken.de/pub/win32/develop/gnuwin32/cygwin/porters/Okhapkin_Sergey/libcrypt.tgz
 
+There is also a Linux compatible 56 bit DES crypt port by Corinna
+Vinschen:
+
+  ftp://ftp.franken.de/pub/win32/develop/gnuwin32/cygwin/porters/Vinschen_Corinna/V1.1.1/crypt-1.0.tar.gz
+
 =item * C<-lgdbm> (C<use GDBM_File>)
 
 GDBM is available for Cygwin.  GDBM's ndbm/dbm compatibility feature
@@ -353,7 +358,10 @@ these options, these tests will fail:
 =head2 Hard Links
 
 FAT partitions do not support hard links (whereas NTFS does), in which
-case Cygwin implements link() by copying the file.  These tests will fail:
+case Cygwin implements link() by copying the file.  On remote (network)
+drives Cygwin's stat() always sets C<st_nlink> to 1, so the link count
+for remote directories and files is not available.  In both cases,
+these tests will fail:
 
   Failed Test           List of failed
   ------------------------------------
@@ -431,7 +439,9 @@ printable characters except these:
 
   : * ? " < > |
 
-File names are case insensitive, but case preserving.
+File names are case insensitive, but case preserving.  A pathname
+that contains a backslash is a Win32 pathname (and not subject to the
+translations applied to POSIX style pathnames).
 
 =item * Text/Binary
 
@@ -450,13 +460,13 @@ The text/binary issue is covered at length in the Cygwin documentation.
 
 =item * F<.exe>
 
-The Cygwin stat() makes the F<.exe> extension transparent by looking for
-F<foo.exe> when you ask for F<foo> (unless a F<foo> also exists).  Cygwin
-does not require a F<.exe> extension, but I<gcc> adds it automatically
-when building a program.  However, when accessing an executable as a
-normal file (e.g., I<cp> in a makefile) the F<.exe> is not transparent.
-The I<install> included with Cygwin automatically appends a F<.exe>
-when necessary.
+The Cygwin stat(), lstat() and readlink() functions make the F<.exe>
+extension transparent by looking for F<foo.exe> when you ask for F<foo>
+(unless a F<foo> also exists).  Cygwin does not require a F<.exe>
+extension, but I<gcc> adds it automatically when building a program.
+However, when accessing an executable as a normal file (e.g., I<cp>
+in a makefile) the F<.exe> is not transparent.  The I<install> included
+with Cygwin automatically appends a F<.exe> when necessary.
 
 =item * chown()
 
@@ -558,6 +568,7 @@ be kept as clean as possible.
                         - require MM_Cygwin.pm
   lib/ExtUtils/MM_Cygwin.pm
                         - canonpath, cflags, manifypods, perl_archive
+  lib/File/Find.pm      - on remote drives stat() always sets st_nlink to 1
   lib/File/Spec/Unix.pm - preserve //unc
   lib/perl5db.pl        - use stdin not /dev/tty
   utils/perlcc.PL       - DynaLoader.a in compile, -DUSEIMPORTLIB
@@ -586,4 +597,4 @@ Teun Burgers <burgers@ecn.nl>.
 
 =head1 HISTORY
 
-Last updated: 5 May 2000
+Last updated: 20 June 2000
index a94df37..d438969 100644 (file)
--- a/Todo-5.6
+++ b/Todo-5.6
@@ -43,9 +43,6 @@ Namespace cleanup
     API-space:    complete the list of things that constitute public api
 
 Configure
-    fix the vicious cyclic multidependency of cc <-> libpth <-> loclibpth
-       libswanted <-> usethreads <-> use64bitint <-> use64bitall <->
-       uselargefiles <-> ...  
     make configuring+building away from source directory work (VPATH et al)
        this is related to: cross-compilation configuring (see Todo)
     _r support (see Todo for mode detailed description)
@@ -57,7 +54,7 @@ Configure
        PREFERABLY AS AN EXTENSION
     IPv6 support: see RFC2292, RFC2553
        PREFERABLY AS AN EXTENSION
-       there already is Socket6
+       there already is Socket6 in CPAN
 
 Long doubles
     figure out where the PV->NV->PV conversion gets it wrong at least
@@ -170,3 +167,5 @@ Documentation
     spot-check all new modules for completeness
     better docs for pack()/unpack()
     reorg tutorials vs. reference sections
+    make roffitall to be dynamical about its pods and libs
+
index 122cabe..21eb607 100644 (file)
@@ -1204,18 +1204,18 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
  *     This macro surrounds its token with double quotes.
  */
 #if $cpp_stuff == 1
-#  define CAT2(a,b)    a/**/b
-#  define STRINGIFY(a) "a"
+#define CAT2(a,b)      a/**/b
+#define STRINGIFY(a)   "a"
                /* If you can get stringification with catify, tell me how! */
 #endif
 #if $cpp_stuff == 42
-#  define PeRl_CaTiFy(a, b)    a ## b  
-#  define PeRl_StGiFy(a)       #a
+#define PeRl_CaTiFy(a, b)      a ## b  
+#define PeRl_StGiFy(a) #a
 /* the additional level of indirection enables these macros to be
  * used as arguments to other macros.  See K&R 2nd ed., page 231. */
-#  define CAT2(a,b)    PeRl_CaTiFy(a,b)
-#  define StGiFy(a)    PeRl_StGiFy(a)
-#  define STRINGIFY(a) PeRl_StGiFy(a)
+#define CAT2(a,b)      PeRl_CaTiFy(a,b)
+#define StGiFy(a)      PeRl_StGiFy(a)
+#define STRINGIFY(a)   PeRl_StGiFy(a)
 #endif
 #if $cpp_stuff != 1 && $cpp_stuff != 42
 #   include "Bletch: How does this C preprocessor catenate tokens?"
diff --git a/embed.h b/embed.h
index ad2e738..15a5020 100644 (file)
--- a/embed.h
+++ b/embed.h
 #define utf16_to_utf8_reversed Perl_utf16_to_utf8_reversed
 #define utf8_distance          Perl_utf8_distance
 #define utf8_hop               Perl_utf8_hop
+#define utf8_to_bytes          Perl_utf8_to_bytes
+#define bytes_to_utf8          Perl_bytes_to_utf8
 #define utf8_to_uv             Perl_utf8_to_uv
 #define uv_to_utf8             Perl_uv_to_utf8
 #define vivify_defelem         Perl_vivify_defelem
 #define do_trans_UU_simple     S_do_trans_UU_simple
 #define do_trans_UU_count      S_do_trans_UU_count
 #define do_trans_UU_complex    S_do_trans_UU_complex
-#define do_trans_UC_simple     S_do_trans_UC_simple
-#define do_trans_CU_simple     S_do_trans_CU_simple
 #define do_trans_UC_trivial    S_do_trans_UC_trivial
 #define do_trans_CU_trivial    S_do_trans_CU_trivial
 #endif
 #define utf16_to_utf8_reversed(a,b,c)  Perl_utf16_to_utf8_reversed(aTHX_ a,b,c)
 #define utf8_distance(a,b)     Perl_utf8_distance(aTHX_ a,b)
 #define utf8_hop(a,b)          Perl_utf8_hop(aTHX_ a,b)
+#define utf8_to_bytes(a,b)     Perl_utf8_to_bytes(aTHX_ a,b)
+#define bytes_to_utf8(a,b)     Perl_bytes_to_utf8(aTHX_ a,b)
 #define utf8_to_uv(a,b)                Perl_utf8_to_uv(aTHX_ a,b)
 #define uv_to_utf8(a,b)                Perl_uv_to_utf8(aTHX_ a,b)
 #define vivify_defelem(a)      Perl_vivify_defelem(aTHX_ a)
 #define do_trans_UU_simple(a)  S_do_trans_UU_simple(aTHX_ a)
 #define do_trans_UU_count(a)   S_do_trans_UU_count(aTHX_ a)
 #define do_trans_UU_complex(a) S_do_trans_UU_complex(aTHX_ a)
-#define do_trans_UC_simple(a)  S_do_trans_UC_simple(aTHX_ a)
-#define do_trans_CU_simple(a)  S_do_trans_CU_simple(aTHX_ a)
 #define do_trans_UC_trivial(a) S_do_trans_UC_trivial(aTHX_ a)
 #define do_trans_CU_trivial(a) S_do_trans_CU_trivial(aTHX_ a)
 #endif
 #define utf8_distance          Perl_utf8_distance
 #define Perl_utf8_hop          CPerlObj::Perl_utf8_hop
 #define utf8_hop               Perl_utf8_hop
+#define Perl_utf8_to_bytes     CPerlObj::Perl_utf8_to_bytes
+#define utf8_to_bytes          Perl_utf8_to_bytes
+#define Perl_bytes_to_utf8     CPerlObj::Perl_bytes_to_utf8
+#define bytes_to_utf8          Perl_bytes_to_utf8
 #define Perl_utf8_to_uv                CPerlObj::Perl_utf8_to_uv
 #define utf8_to_uv             Perl_utf8_to_uv
 #define Perl_uv_to_utf8                CPerlObj::Perl_uv_to_utf8
 #define do_trans_UU_count      S_do_trans_UU_count
 #define S_do_trans_UU_complex  CPerlObj::S_do_trans_UU_complex
 #define do_trans_UU_complex    S_do_trans_UU_complex
-#define S_do_trans_UC_simple   CPerlObj::S_do_trans_UC_simple
-#define do_trans_UC_simple     S_do_trans_UC_simple
-#define S_do_trans_CU_simple   CPerlObj::S_do_trans_CU_simple
-#define do_trans_CU_simple     S_do_trans_CU_simple
 #define S_do_trans_UC_trivial  CPerlObj::S_do_trans_UC_trivial
 #define do_trans_UC_trivial    S_do_trans_UC_trivial
 #define S_do_trans_CU_trivial  CPerlObj::S_do_trans_CU_trivial
index 33ed679..21a21a1 100755 (executable)
--- a/embed.pl
+++ b/embed.pl
@@ -1083,10 +1083,10 @@ my %docfuncs;
 
 sub autodoc ($$) { # parse a file and extract documentation info
     my($fh,$file) = @_;
-    my($in, $doc);
-
+    my($in, $doc, $line);
 FUNC:
     while (defined($in = <$fh>)) {
+       $line++;
        if ($in =~ /^=for\s+apidoc\s+(.*)\n/) {
            my $proto = $1;
            $proto = "||$proto" unless $proto =~ /\|/;
@@ -1094,7 +1094,12 @@ FUNC:
            my $docs = "";
 DOC:
            while (defined($doc = <$fh>)) {
+               $line++;
                last DOC if $doc =~ /^=\w+/;
+               if ($doc =~ m:^\*/$:) {
+                   warn "=cut missing? $file:$line:$doc";;
+                   last DOC;
+               }
                $docs .= $doc;
            }
            $docs = "\n$docs" if $docs and $docs !~ /^\n/;
@@ -1109,9 +1114,13 @@ DOC:
            else {
                $docfuncs{$name} = [$flags, $docs, $ret, $file, @args];
            }
-           if ($doc =~ /^=for/) {
-               $in = $doc;
-               redo FUNC;
+           if (defined $doc) {
+               if ($doc =~ /^=for/) {
+                   $in = $doc;
+                   redo FUNC;
+               }
+           } else {
+               warn "$file:$line:$in";
            }
        }
     }
@@ -1172,6 +1181,8 @@ walk_table {      # load documented functions into approriate hash
 } \*DOC;
 
 for (sort keys %docfuncs) {
+    # Have you used a full for apidoc or just a func name?  
+    # Have you used Ap instead of Am in the for apidoc?
     warn "Unable to place $_!\n";
 }
 
index 8aee6d4..6e84bac 100644 (file)
@@ -387,10 +387,10 @@ cat > UU/use64bitint.cbu <<'EOCBU'
 case "$use64bitint" in
 "$define"|true|[yY]*)
            case "`uname -r`" in
-           2.[1-6])
+           5.[1-6])
                cat >&4 <<EOM
-Solaris `uname -r` does not support 64-bit integers.
-You should upgrade to at least Solaris 2.7.
+Solaris `uname -r|sed -e 's/^5\.\([789]\)$/\1/'` does not support 64-bit integers.
+You should upgrade to at least Solaris 7.
 EOM
                exit 1
                ;;
index 1e6c61a..d21a56a 100644 (file)
@@ -626,7 +626,7 @@ INST_ARCHAUTODIR = $self->{INST_ARCHAUTODIR}
     if ($self->has_link_code()) {
        push @m,'
 INST_STATIC = $(INST_ARCHAUTODIR)$(BASEEXT)$(LIB_EXT)
-INST_DYNAMIC = $(INST_ARCHAUTODIR)$(BASEEXT).$(DLEXT)
+INST_DYNAMIC = $(INST_ARCHAUTODIR)$(DLBASE).$(DLEXT)
 INST_BOOT = $(INST_ARCHAUTODIR)$(BASEEXT).bs
 ';
     } else {
index ef10e9d..f803c15 100644 (file)
@@ -734,7 +734,8 @@ if ($^O eq 'VMS') {
 }
 
 $File::Find::dont_use_nlink = 1
-    if $^O eq 'os2' || $^O eq 'dos' || $^O eq 'amigaos' || $^O eq 'MSWin32';
+    if $^O eq 'os2' || $^O eq 'dos' || $^O eq 'amigaos' || $^O eq 'MSWin32' ||
+       $^O eq 'cygwin';
 
 # Set dont_use_nlink in your hint file if your system's stat doesn't
 # report the number of links in a directory as an indication
index 88ea89c..d0a4588 100644 (file)
--- a/objXSUB.h
+++ b/objXSUB.h
 #define Perl_utf8_hop          pPerl->Perl_utf8_hop
 #undef  utf8_hop
 #define utf8_hop               Perl_utf8_hop
+#undef  Perl_utf8_to_bytes
+#define Perl_utf8_to_bytes     pPerl->Perl_utf8_to_bytes
+#undef  utf8_to_bytes
+#define utf8_to_bytes          Perl_utf8_to_bytes
+#undef  Perl_bytes_to_utf8
+#define Perl_bytes_to_utf8     pPerl->Perl_bytes_to_utf8
+#undef  bytes_to_utf8
+#define bytes_to_utf8          Perl_bytes_to_utf8
 #undef  Perl_utf8_to_uv
 #define Perl_utf8_to_uv                pPerl->Perl_utf8_to_uv
 #undef  utf8_to_uv
diff --git a/op.h b/op.h
index 081d10c..86f2a0b 100644 (file)
--- a/op.h
+++ b/op.h
@@ -94,7 +94,8 @@ Deprecated.  Use C<GIMME_V> instead.
                                /*  On OP_EXISTS, treat av as av, not avhv.  */
                                /*  On OP_(ENTER|LEAVE)EVAL, don't clear $@ */
                                /*  On OP_ENTERITER, loop var is per-thread */
-                                /*  On pushre, re is /\s+/ imp. by split " " */
+                               /*  On pushre, re is /\s+/ imp. by split " " */
+                               /*  On regcomp, "use re 'eval'" was in scope */
 
 /* old names; don't use in new code, but don't break them, either */
 #define OPf_LIST       OPf_WANT_LIST
index 43feea8..4086f64 100644 (file)
--- a/perlapi.c
+++ b/perlapi.c
@@ -3343,6 +3343,20 @@ Perl_utf8_hop(pTHXo_ U8 *s, I32 off)
     return ((CPerlObj*)pPerl)->Perl_utf8_hop(s, off);
 }
 
+#undef  Perl_utf8_to_bytes
+U8*
+Perl_utf8_to_bytes(pTHXo_ U8 *s, STRLEN len)
+{
+    return ((CPerlObj*)pPerl)->Perl_utf8_to_bytes(s, len);
+}
+
+#undef  Perl_bytes_to_utf8
+U8*
+Perl_bytes_to_utf8(pTHXo_ U8 *s, STRLEN len)
+{
+    return ((CPerlObj*)pPerl)->Perl_bytes_to_utf8(s, len);
+}
+
 #undef  Perl_utf8_to_uv
 UV
 Perl_utf8_to_uv(pTHXo_ U8 *s, I32* retlen)
index 5f6c40c..a6f4efb 100644 (file)
@@ -16,60 +16,24 @@ REALPERL = ../perl
 
 POD = \
        perl.pod        \
-       perldelta.pod   \
        perl5004delta.pod       \
        perl5005delta.pod       \
-       perldata.pod    \
-       perlsyn.pod     \
-       perlop.pod      \
-       perlre.pod      \
-       perlrun.pod     \
-       perlfunc.pod    \
-       perlopentut.pod \
-       perlvar.pod     \
-       perlsub.pod     \
-       perlmod.pod     \
-       perlmodlib.pod  \
-       perlmodinstall.pod      \
-       perlnewmod.pod  \
-       perlfork.pod    \
-       perlform.pod    \
-       perllocale.pod  \
-       perlref.pod     \
-       perlreftut.pod  \
-       perldsc.pod     \
-       perllol.pod     \
+       perl56delta.pod \
+       perlapi.pod     \
+       perlapio.pod    \
+       perlbook.pod    \
        perlboot.pod    \
-       perltoot.pod    \
-       perltootc.pod   \
-       perlobj.pod     \
-       perltie.pod     \
        perlbot.pod     \
-       perlipc.pod     \
-       perlthrtut.pod  \
+       perlcall.pod    \
+       perlcompile.pod \
+       perldata.pod    \
        perldbmfilter.pod       \
        perldebguts.pod \
        perldebug.pod   \
-       perlnumber.pod  \
+       perldelta.pod   \
        perldiag.pod    \
-       perlsec.pod     \
-       perltrap.pod    \
-       perlport.pod    \
-       perlstyle.pod   \
-       perlpod.pod     \
-       perlbook.pod    \
+       perldsc.pod     \
        perlembed.pod   \
-       perlapio.pod    \
-       perlxs.pod      \
-       perlxstut.pod   \
-       perlguts.pod    \
-       perlcall.pod    \
-       perlcompile.pod \
-       perltodo.pod    \
-       perlapi.pod     \
-       perlintern.pod  \
-       perlhack.pod    \
-       perlhist.pod    \
        perlfaq.pod     \
        perlfaq1.pod    \
        perlfaq2.pod    \
@@ -80,64 +44,71 @@ POD = \
        perlfaq7.pod    \
        perlfaq8.pod    \
        perlfaq9.pod    \
-       perltoc.pod
+       perlfilter.pod  \
+       perlfork.pod    \
+       perlform.pod    \
+       perlfunc.pod    \
+       perlguts.pod    \
+       perlhack.pod    \
+       perlhist.pod    \
+       perlintern.pod  \
+       perlipc.pod     \
+       perllexwarn.pod \
+       perllocale.pod  \
+       perllol.pod     \
+       perlmod.pod     \
+       perlmodinstall.pod      \
+       perlmodlib.pod  \
+       perlnewmod.pod  \
+       perlnumber.pod  \
+       perlobj.pod     \
+       perlop.pod      \
+       perlopentut.pod \
+       perlpod.pod     \
+       perlport.pod    \
+       perlre.pod      \
+       perlref.pod     \
+       perlreftut.pod  \
+       perlrequick.pod \
+       perlretut.pod   \
+       perlrun.pod     \
+       perlsec.pod     \
+       perlstyle.pod   \
+       perlsub.pod     \
+       perlsyn.pod     \
+       perlthrtut.pod  \
+       perltie.pod     \
+       perltoc.pod     \
+       perltodo.pod    \
+       perltoot.pod    \
+       perltootc.pod   \
+       perltrap.pod    \
+       perlunicode.pod \
+       perlutil.pod    \
+       perlvar.pod     \
+       perlxs.pod      \
+       perlxstut.pod
 
 MAN = \
        perl.man        \
-       perldelta.man   \
        perl5004delta.man       \
        perl5005delta.man       \
-       perldata.man    \
-       perlsyn.man     \
-       perlop.man      \
-       perlre.man      \
-       perlrun.man     \
-       perlfunc.man    \
-       perlopentut.man \
-       perlvar.man     \
-       perlsub.man     \
-       perlmod.man     \
-       perlmodlib.man  \
-       perlmodinstall.man      \
-       perlnewmod.man  \
-       perlfork.man    \
-       perlform.man    \
-       perllocale.man  \
-       perlref.man     \
-       perlreftut.man  \
-       perldsc.man     \
-       perllol.man     \
+       perl56delta.man \
+       perlapi.man     \
+       perlapio.man    \
+       perlbook.man    \
        perlboot.man    \
-       perltoot.man    \
-       perltootc.man   \
-       perlobj.man     \
-       perltie.man     \
        perlbot.man     \
-       perlipc.man     \
-       perlthrtut.man  \
+       perlcall.man    \
+       perlcompile.man \
+       perldata.man    \
        perldbmfilter.man       \
        perldebguts.man \
        perldebug.man   \
-       perlnumber.man  \
+       perldelta.man   \
        perldiag.man    \
-       perlsec.man     \
-       perltrap.man    \
-       perlport.man    \
-       perlstyle.man   \
-       perlpod.man     \
-       perlbook.man    \
+       perldsc.man     \
        perlembed.man   \
-       perlapio.man    \
-       perlxs.man      \
-       perlxstut.man   \
-       perlguts.man    \
-       perlcall.man    \
-       perlcompile.man \
-       perltodo.man    \
-       perlapi.man     \
-       perlintern.man  \
-       perlhack.man    \
-       perlhist.man    \
        perlfaq.man     \
        perlfaq1.man    \
        perlfaq2.man    \
@@ -148,64 +119,71 @@ MAN = \
        perlfaq7.man    \
        perlfaq8.man    \
        perlfaq9.man    \
-       perltoc.man
+       perlfilter.man  \
+       perlfork.man    \
+       perlform.man    \
+       perlfunc.man    \
+       perlguts.man    \
+       perlhack.man    \
+       perlhist.man    \
+       perlintern.man  \
+       perlipc.man     \
+       perllexwarn.man \
+       perllocale.man  \
+       perllol.man     \
+       perlmod.man     \
+       perlmodinstall.man      \
+       perlmodlib.man  \
+       perlnewmod.man  \
+       perlnumber.man  \
+       perlobj.man     \
+       perlop.man      \
+       perlopentut.man \
+       perlpod.man     \
+       perlport.man    \
+       perlre.man      \
+       perlref.man     \
+       perlreftut.man  \
+       perlrequick.man \
+       perlretut.man   \
+       perlrun.man     \
+       perlsec.man     \
+       perlstyle.man   \
+       perlsub.man     \
+       perlsyn.man     \
+       perlthrtut.man  \
+       perltie.man     \
+       perltoc.man     \
+       perltodo.man    \
+       perltoot.man    \
+       perltootc.man   \
+       perltrap.man    \
+       perlunicode.man \
+       perlutil.man    \
+       perlvar.man     \
+       perlxs.man      \
+       perlxstut.man
 
 HTML = \
        perl.html       \
-       perldelta.html  \
        perl5004delta.html      \
        perl5005delta.html      \
-       perldata.html   \
-       perlsyn.html    \
-       perlop.html     \
-       perlre.html     \
-       perlrun.html    \
-       perlfunc.html   \
-       perlopentut.html        \
-       perlvar.html    \
-       perlsub.html    \
-       perlmod.html    \
-       perlmodlib.html \
-       perlmodinstall.html     \
-       perlnewmod.html \
-       perlfork.html   \
-       perlform.html   \
-       perllocale.html \
-       perlref.html    \
-       perlreftut.html \
-       perldsc.html    \
-       perllol.html    \
+       perl56delta.html        \
+       perlapi.html    \
+       perlapio.html   \
+       perlbook.html   \
        perlboot.html   \
-       perltoot.html   \
-       perltootc.html  \
-       perlobj.html    \
-       perltie.html    \
        perlbot.html    \
-       perlipc.html    \
-       perlthrtut.html \
+       perlcall.html   \
+       perlcompile.html        \
+       perldata.html   \
        perldbmfilter.html      \
        perldebguts.html        \
        perldebug.html  \
-       perlnumber.html \
+       perldelta.html  \
        perldiag.html   \
-       perlsec.html    \
-       perltrap.html   \
-       perlport.html   \
-       perlstyle.html  \
-       perlpod.html    \
-       perlbook.html   \
+       perldsc.html    \
        perlembed.html  \
-       perlapio.html   \
-       perlxs.html     \
-       perlxstut.html  \
-       perlguts.html   \
-       perlcall.html   \
-       perlcompile.html        \
-       perltodo.html   \
-       perlapi.html    \
-       perlintern.html \
-       perlhack.html   \
-       perlhist.html   \
        perlfaq.html    \
        perlfaq1.html   \
        perlfaq2.html   \
@@ -215,65 +193,73 @@ HTML = \
        perlfaq6.html   \
        perlfaq7.html   \
        perlfaq8.html   \
-       perlfaq9.html
+       perlfaq9.html   \
+       perlfilter.html \
+       perlfork.html   \
+       perlform.html   \
+       perlfunc.html   \
+       perlguts.html   \
+       perlhack.html   \
+       perlhist.html   \
+       perlintern.html \
+       perlipc.html    \
+       perllexwarn.html        \
+       perllocale.html \
+       perllol.html    \
+       perlmod.html    \
+       perlmodinstall.html     \
+       perlmodlib.html \
+       perlnewmod.html \
+       perlnumber.html \
+       perlobj.html    \
+       perlop.html     \
+       perlopentut.html        \
+       perlpod.html    \
+       perlport.html   \
+       perlre.html     \
+       perlref.html    \
+       perlreftut.html \
+       perlrequick.html        \
+       perlretut.html  \
+       perlrun.html    \
+       perlsec.html    \
+       perlstyle.html  \
+       perlsub.html    \
+       perlsyn.html    \
+       perlthrtut.html \
+       perltie.html    \
+       perltodo.html   \
+       perltoot.html   \
+       perltootc.html  \
+       perltrap.html   \
+       perlunicode.html        \
+       perlutil.html   \
+       perlvar.html    \
+       perlxs.html     \
+       perlxstut.html
+
 # not perltoc.html
 
 TEX = \
        perl.tex        \
-       perldelta.tex   \
        perl5004delta.tex       \
        perl5005delta.tex       \
-       perldata.tex    \
-       perlsyn.tex     \
-       perlop.tex      \
-       perlre.tex      \
-       perlrun.tex     \
-       perlfunc.tex    \
-       perlopentut.tex \
-       perlvar.tex     \
-       perlsub.tex     \
-       perlmod.tex     \
-       perlmodlib.tex  \
-       perlmodinstall.tex      \
-       perlnewmod.tex  \
-       perlfork.tex    \
-       perlform.tex    \
-       perllocale.tex  \
-       perlref.tex     \
-       perlreftut.tex  \
-       perldsc.tex     \
-       perllol.tex     \
+       perl56delta.tex \
+       perlapi.tex     \
+       perlapio.tex    \
+       perlbook.tex    \
        perlboot.tex    \
-       perltoot.tex    \
-       perltootc.tex   \
-       perlobj.tex     \
-       perltie.tex     \
        perlbot.tex     \
-       perlipc.tex     \
-       perlthrtut.tex  \
+       perlcall.tex    \
+       perlcompile.tex \
+       perldata.tex    \
        perldbmfilter.tex       \
        perldebguts.tex \
        perldebug.tex   \
-       perlnumber.tex  \
+       perldelta.tex   \
        perldiag.tex    \
-       perlsec.tex     \
-       perltrap.tex    \
-       perlport.tex    \
-       perlstyle.tex   \
-       perlpod.tex     \
-       perlbook.tex    \
+       perldsc.tex     \
        perlembed.tex   \
-       perlapio.tex    \
-       perlxs.tex      \
-       perlxstut.tex   \
-       perlguts.tex    \
-       perlcall.tex    \
-       perlcompile.tex \
-       perltodo.tex    \
-       perlapi.tex     \
-       perlintern.tex  \
-       perlhack.tex    \
-       perlhist.tex    \
        perlfaq.tex     \
        perlfaq1.tex    \
        perlfaq2.tex    \
@@ -284,7 +270,50 @@ TEX = \
        perlfaq7.tex    \
        perlfaq8.tex    \
        perlfaq9.tex    \
-       perltoc.tex
+       perlfilter.tex  \
+       perlfork.tex    \
+       perlform.tex    \
+       perlfunc.tex    \
+       perlguts.tex    \
+       perlhack.tex    \
+       perlhist.tex    \
+       perlintern.tex  \
+       perlipc.tex     \
+       perllexwarn.tex \
+       perllocale.tex  \
+       perllol.tex     \
+       perlmod.tex     \
+       perlmodinstall.tex      \
+       perlmodlib.tex  \
+       perlnewmod.tex  \
+       perlnumber.tex  \
+       perlobj.tex     \
+       perlop.tex      \
+       perlopentut.tex \
+       perlpod.tex     \
+       perlport.tex    \
+       perlre.tex      \
+       perlref.tex     \
+       perlreftut.tex  \
+       perlrequick.tex \
+       perlretut.tex   \
+       perlrun.tex     \
+       perlsec.tex     \
+       perlstyle.tex   \
+       perlsub.tex     \
+       perlsyn.tex     \
+       perlthrtut.tex  \
+       perltie.tex     \
+       perltoc.tex     \
+       perltodo.tex    \
+       perltoot.tex    \
+       perltootc.tex   \
+       perltrap.tex    \
+       perlunicode.tex \
+       perlutil.tex    \
+       perlvar.tex     \
+       perlxs.tex      \
+       perlxstut.tex
 
 man:   pod2man $(MAN)
 
index 19ab71f..f274641 100644 (file)
@@ -25,6 +25,9 @@ Same as C<av_len()>.  Deprecated, use C<av_len()> instead.
 
        int     AvFILL(AV* av)
 
+=for hackers
+Found in file av.h
+
 =item av_clear
 
 Clears an array, making it empty.  Does not free the memory used by the
@@ -32,6 +35,9 @@ array itself.
 
        void    av_clear(AV* ar)
 
+=for hackers
+Found in file av.c
+
 =item av_extend
 
 Pre-extend an array.  The C<key> is the index to which the array should be
@@ -39,6 +45,9 @@ extended.
 
        void    av_extend(AV* ar, I32 key)
 
+=for hackers
+Found in file av.c
+
 =item av_fetch
 
 Returns the SV at the specified index in the array.  The C<key> is the
@@ -50,6 +59,9 @@ more information on how to use this function on tied arrays.
 
        SV**    av_fetch(AV* ar, I32 key, I32 lval)
 
+=for hackers
+Found in file av.c
+
 =item av_len
 
 Returns the highest index in the array.  Returns -1 if the array is
@@ -57,6 +69,9 @@ empty.
 
        I32     av_len(AV* ar)
 
+=for hackers
+Found in file av.c
+
 =item av_make
 
 Creates a new AV and populates it with a list of SVs.  The SVs are copied
@@ -65,6 +80,9 @@ will have a reference count of 1.
 
        AV*     av_make(I32 size, SV** svp)
 
+=for hackers
+Found in file av.c
+
 =item av_pop
 
 Pops an SV off the end of the array.  Returns C<&PL_sv_undef> if the array
@@ -72,6 +90,9 @@ is empty.
 
        SV*     av_pop(AV* ar)
 
+=for hackers
+Found in file av.c
+
 =item av_push
 
 Pushes an SV onto the end of the array.  The array will grow automatically
@@ -79,12 +100,18 @@ to accommodate the addition.
 
        void    av_push(AV* ar, SV* val)
 
+=for hackers
+Found in file av.c
+
 =item av_shift
 
 Shifts an SV off the beginning of the array.
 
        SV*     av_shift(AV* ar)
 
+=for hackers
+Found in file av.c
+
 =item av_store
 
 Stores an SV in an array.  The array index is specified as C<key>.  The
@@ -100,12 +127,18 @@ more information on how to use this function on tied arrays.
 
        SV**    av_store(AV* ar, I32 key, SV* val)
 
+=for hackers
+Found in file av.c
+
 =item av_undef
 
 Undefines the array.  Frees the memory used by the array itself.
 
        void    av_undef(AV* ar)
 
+=for hackers
+Found in file av.c
+
 =item av_unshift
 
 Unshift the given number of C<undef> values onto the beginning of the
@@ -114,6 +147,19 @@ must then use C<av_store> to assign values to these new elements.
 
        void    av_unshift(AV* ar, I32 num)
 
+=for hackers
+Found in file av.c
+
+=item bytes_to_utf8
+
+Converts a string C<s> of length C<len> from ASCII into UTF8 encoding.
+Returns a pointer to the newly-created string.
+
+       U8 *    bytes_to_utf8(U8 *s, STRLEN len)
+
+=for hackers
+Found in file utf8.c
+
 =item call_argv
 
 Performs a callback to the specified Perl sub.  See L<perlcall>.
@@ -122,6 +168,9 @@ NOTE: the perl_ form of this function is deprecated.
 
        I32     call_argv(const char* sub_name, I32 flags, char** argv)
 
+=for hackers
+Found in file perl.c
+
 =item call_method
 
 Performs a callback to the specified Perl method.  The blessed object must
@@ -131,6 +180,9 @@ NOTE: the perl_ form of this function is deprecated.
 
        I32     call_method(const char* methname, I32 flags)
 
+=for hackers
+Found in file perl.c
+
 =item call_pv
 
 Performs a callback to the specified Perl sub.  See L<perlcall>.
@@ -139,6 +191,9 @@ NOTE: the perl_ form of this function is deprecated.
 
        I32     call_pv(const char* sub_name, I32 flags)
 
+=for hackers
+Found in file perl.c
+
 =item call_sv
 
 Performs a callback to the Perl sub whose name is in the SV.  See
@@ -148,6 +203,9 @@ NOTE: the perl_ form of this function is deprecated.
 
        I32     call_sv(SV* sv, I32 flags)
 
+=for hackers
+Found in file perl.c
+
 =item CLASS
 
 Variable which is setup by C<xsubpp> to indicate the 
@@ -155,6 +213,9 @@ class name for a C++ XS constructor.  This is always a C<char*>.  See C<THIS>.
 
        char*   CLASS
 
+=for hackers
+Found in file XSUB.h
+
 =item Copy
 
 The XSUB-writer's interface to the C C<memcpy> function.  The C<src> is the
@@ -163,6 +224,9 @@ the type.  May fail on overlapping copies.  See also C<Move>.
 
        void    Copy(void* src, void* dest, int nitems, type)
 
+=for hackers
+Found in file handy.h
+
 =item croak
 
 This is the XSUB-writer's interface to Perl's C<die> function.
@@ -178,12 +242,18 @@ C<$@> and then pass C<Nullch> to croak():
 
        void    croak(const char* pat, ...)
 
+=for hackers
+Found in file util.c
+
 =item CvSTASH
 
 Returns the stash of the CV.
 
        HV*     CvSTASH(CV* cv)
 
+=for hackers
+Found in file cv.h
+
 =item dMARK
 
 Declare a stack marker variable, C<mark>, for the XSUB.  See C<MARK> and
@@ -191,12 +261,18 @@ C<dORIGMARK>.
 
                dMARK;
 
+=for hackers
+Found in file pp.h
+
 =item dORIGMARK
 
 Saves the original stack mark for the XSUB.  See C<ORIGMARK>.
 
                dORIGMARK;
 
+=for hackers
+Found in file pp.h
+
 =item dSP
 
 Declares a local copy of perl's stack pointer for the XSUB, available via
@@ -204,6 +280,9 @@ the C<SP> macro.  See C<SP>.
 
                dSP;
 
+=for hackers
+Found in file pp.h
+
 =item dXSARGS
 
 Sets up stack and mark pointers for an XSUB, calling dSP and dMARK.  This
@@ -212,6 +291,9 @@ variable to indicate the number of items on the stack.
 
                dXSARGS;
 
+=for hackers
+Found in file XSUB.h
+
 =item dXSI32
 
 Sets up the C<ix> variable for an XSUB which has aliases.  This is usually
@@ -219,12 +301,18 @@ handled automatically by C<xsubpp>.
 
                dXSI32;
 
+=for hackers
+Found in file XSUB.h
+
 =item ENTER
 
 Opening bracket on a callback.  See C<LEAVE> and L<perlcall>.
 
                ENTER;
 
+=for hackers
+Found in file scope.h
+
 =item eval_pv
 
 Tells Perl to C<eval> the given string and return an SV* result.
@@ -233,6 +321,9 @@ NOTE: the perl_ form of this function is deprecated.
 
        SV*     eval_pv(const char* p, I32 croak_on_error)
 
+=for hackers
+Found in file perl.c
+
 =item eval_sv
 
 Tells Perl to C<eval> the string in the SV.
@@ -241,6 +332,9 @@ NOTE: the perl_ form of this function is deprecated.
 
        I32     eval_sv(SV* sv, I32 flags)
 
+=for hackers
+Found in file perl.c
+
 =item EXTEND
 
 Used to extend the argument stack for an XSUB's return values. Once
@@ -249,6 +343,9 @@ onto the stack.
 
        void    EXTEND(SP, int nitems)
 
+=for hackers
+Found in file pp.h
+
 =item fbm_compile
 
 Analyses the string in order to make fast searches on it using fbm_instr()
@@ -256,6 +353,9 @@ Analyses the string in order to make fast searches on it using fbm_instr()
 
        void    fbm_compile(SV* sv, U32 flags)
 
+=for hackers
+Found in file util.c
+
 =item fbm_instr
 
 Returns the location of the SV in the string delimited by C<str> and
@@ -265,6 +365,9 @@ then.
 
        char*   fbm_instr(unsigned char* big, unsigned char* bigend, SV* littlesv, U32 flags)
 
+=for hackers
+Found in file util.c
+
 =item FREETMPS
 
 Closing bracket for temporaries on a callback.  See C<SAVETMPS> and
@@ -272,6 +375,9 @@ L<perlcall>.
 
                FREETMPS;
 
+=for hackers
+Found in file scope.h
+
 =item get_av
 
 Returns the AV of the specified Perl array.  If C<create> is set and the
@@ -282,6 +388,9 @@ NOTE: the perl_ form of this function is deprecated.
 
        AV*     get_av(const char* name, I32 create)
 
+=for hackers
+Found in file perl.c
+
 =item get_cv
 
 Returns the CV of the specified Perl subroutine.  If C<create> is set and
@@ -293,6 +402,9 @@ NOTE: the perl_ form of this function is deprecated.
 
        CV*     get_cv(const char* name, I32 create)
 
+=for hackers
+Found in file perl.c
+
 =item get_hv
 
 Returns the HV of the specified Perl hash.  If C<create> is set and the
@@ -303,6 +415,9 @@ NOTE: the perl_ form of this function is deprecated.
 
        HV*     get_hv(const char* name, I32 create)
 
+=for hackers
+Found in file perl.c
+
 =item get_sv
 
 Returns the SV of the specified Perl scalar.  If C<create> is set and the
@@ -313,6 +428,9 @@ NOTE: the perl_ form of this function is deprecated.
 
        SV*     get_sv(const char* name, I32 create)
 
+=for hackers
+Found in file perl.c
+
 =item GIMME
 
 A backward-compatible version of C<GIMME_V> which can only return
@@ -321,6 +439,9 @@ Deprecated.  Use C<GIMME_V> instead.
 
        U32     GIMME
 
+=for hackers
+Found in file op.h
+
 =item GIMME_V
 
 The XSUB-writer's equivalent to Perl's C<wantarray>.  Returns C<G_VOID>,
@@ -329,12 +450,18 @@ respectively.
 
        U32     GIMME_V
 
+=for hackers
+Found in file op.h
+
 =item GvSV
 
 Return the SV from the GV.
 
        SV*     GvSV(GV* gv)
 
+=for hackers
+Found in file gv.h
+
 =item gv_fetchmeth
 
 Returns the glob with the given C<name> and a defined subroutine or
@@ -354,12 +481,18 @@ obtained from the GV with the C<GvCV> macro.
 
        GV*     gv_fetchmeth(HV* stash, const char* name, STRLEN len, I32 level)
 
+=for hackers
+Found in file gv.c
+
 =item gv_fetchmethod
 
 See L<gv_fetchmethod_autoload>.
 
        GV*     gv_fetchmethod(HV* stash, const char* name)
 
+=for hackers
+Found in file gv.c
+
 =item gv_fetchmethod_autoload
 
 Returns the glob which contains the subroutine to call to invoke the method
@@ -386,6 +519,9 @@ C<call_sv> apply equally to these functions.
 
        GV*     gv_fetchmethod_autoload(HV* stash, const char* name, I32 autoload)
 
+=for hackers
+Found in file gv.c
+
 =item gv_stashpv
 
 Returns a pointer to the stash for a specified package.  C<name> should
@@ -395,6 +531,9 @@ package does not exist then NULL is returned.
 
        HV*     gv_stashpv(const char* name, I32 create)
 
+=for hackers
+Found in file gv.c
+
 =item gv_stashsv
 
 Returns a pointer to the stash for a specified package, which must be a
@@ -402,47 +541,74 @@ valid UTF-8 string.  See C<gv_stashpv>.
 
        HV*     gv_stashsv(SV* sv, I32 create)
 
+=for hackers
+Found in file gv.c
+
 =item G_ARRAY
 
 Used to indicate array context.  See C<GIMME_V>, C<GIMME> and
 L<perlcall>.
 
+=for hackers
+Found in file cop.h
+
 =item G_DISCARD
 
 Indicates that arguments returned from a callback should be discarded.  See
 L<perlcall>.
 
+=for hackers
+Found in file cop.h
+
 =item G_EVAL
 
 Used to force a Perl C<eval> wrapper around a callback.  See
 L<perlcall>.
 
+=for hackers
+Found in file cop.h
+
 =item G_NOARGS
 
 Indicates that no arguments are being sent to a callback.  See
 L<perlcall>.
 
+=for hackers
+Found in file cop.h
+
 =item G_SCALAR
 
 Used to indicate scalar context.  See C<GIMME_V>, C<GIMME>, and
 L<perlcall>.
 
+=for hackers
+Found in file cop.h
+
 =item G_VOID
 
 Used to indicate void context.  See C<GIMME_V> and L<perlcall>.
 
+=for hackers
+Found in file cop.h
+
 =item HEf_SVKEY
 
 This flag, used in the length slot of hash entries and magic structures,
 specifies the structure contains a C<SV*> pointer where a C<char*> pointer
 is to be expected. (For information only--not to be used).
 
+=for hackers
+Found in file hv.h
+
 =item HeHASH
 
 Returns the computed hash stored in the hash entry.
 
        U32     HeHASH(HE* he)
 
+=for hackers
+Found in file hv.h
+
 =item HeKEY
 
 Returns the actual pointer stored in the key slot of the hash entry. The
@@ -452,6 +618,9 @@ usually preferable for finding the value of a key.
 
        void*   HeKEY(HE* he)
 
+=for hackers
+Found in file hv.h
+
 =item HeKLEN
 
 If this is negative, and amounts to C<HEf_SVKEY>, it indicates the entry
@@ -461,6 +630,9 @@ lengths.
 
        STRLEN  HeKLEN(HE* he)
 
+=for hackers
+Found in file hv.h
+
 =item HePV
 
 Returns the key slot of the hash entry as a C<char*> value, doing any
@@ -475,6 +647,9 @@ described elsewhere in this document.
 
        char*   HePV(HE* he, STRLEN len)
 
+=for hackers
+Found in file hv.h
+
 =item HeSVKEY
 
 Returns the key as an C<SV*>, or C<Nullsv> if the hash entry does not
@@ -482,6 +657,9 @@ contain an C<SV*> key.
 
        SV*     HeSVKEY(HE* he)
 
+=for hackers
+Found in file hv.h
+
 =item HeSVKEY_force
 
 Returns the key as an C<SV*>.  Will create and return a temporary mortal
@@ -489,6 +667,9 @@ C<SV*> if the hash entry contains only a C<char*> key.
 
        SV*     HeSVKEY_force(HE* he)
 
+=for hackers
+Found in file hv.h
+
 =item HeSVKEY_set
 
 Sets the key to a given C<SV*>, taking care to set the appropriate flags to
@@ -497,24 +678,36 @@ C<SV*>.
 
        SV*     HeSVKEY_set(HE* he, SV* sv)
 
+=for hackers
+Found in file hv.h
+
 =item HeVAL
 
 Returns the value slot (type C<SV*>) stored in the hash entry.
 
        SV*     HeVAL(HE* he)
 
+=for hackers
+Found in file hv.h
+
 =item HvNAME
 
 Returns the package name of a stash.  See C<SvSTASH>, C<CvSTASH>.
 
        char*   HvNAME(HV* stash)
 
+=for hackers
+Found in file hv.h
+
 =item hv_clear
 
 Clears a hash, making it empty.
 
        void    hv_clear(HV* tb)
 
+=for hackers
+Found in file hv.c
+
 =item hv_delete
 
 Deletes a key/value pair in the hash.  The value SV is removed from the
@@ -524,6 +717,9 @@ will be returned.
 
        SV*     hv_delete(HV* tb, const char* key, U32 klen, I32 flags)
 
+=for hackers
+Found in file hv.c
+
 =item hv_delete_ent
 
 Deletes a key/value pair in the hash.  The value SV is removed from the
@@ -533,6 +729,9 @@ precomputed hash value, or 0 to ask for it to be computed.
 
        SV*     hv_delete_ent(HV* tb, SV* key, I32 flags, U32 hash)
 
+=for hackers
+Found in file hv.c
+
 =item hv_exists
 
 Returns a boolean indicating whether the specified hash key exists.  The
@@ -540,6 +739,9 @@ C<klen> is the length of the key.
 
        bool    hv_exists(HV* tb, const char* key, U32 klen)
 
+=for hackers
+Found in file hv.c
+
 =item hv_exists_ent
 
 Returns a boolean indicating whether the specified hash key exists. C<hash>
@@ -548,6 +750,9 @@ computed.
 
        bool    hv_exists_ent(HV* tb, SV* key, U32 hash)
 
+=for hackers
+Found in file hv.c
+
 =item hv_fetch
 
 Returns the SV which corresponds to the specified key in the hash.  The
@@ -560,6 +765,9 @@ information on how to use this function on tied hashes.
 
        SV**    hv_fetch(HV* tb, const char* key, U32 klen, I32 lval)
 
+=for hackers
+Found in file hv.c
+
 =item hv_fetch_ent
 
 Returns the hash entry which corresponds to the specified key in the hash.
@@ -575,6 +783,9 @@ information on how to use this function on tied hashes.
 
        HE*     hv_fetch_ent(HV* tb, SV* key, I32 lval, U32 hash)
 
+=for hackers
+Found in file hv.c
+
 =item hv_iterinit
 
 Prepares a starting point to traverse a hash table.  Returns the number of
@@ -587,6 +798,9 @@ value, you can get it through the macro C<HvFILL(tb)>.
 
        I32     hv_iterinit(HV* tb)
 
+=for hackers
+Found in file hv.c
+
 =item hv_iterkey
 
 Returns the key from the current position of the hash iterator.  See
@@ -594,6 +808,9 @@ C<hv_iterinit>.
 
        char*   hv_iterkey(HE* entry, I32* retlen)
 
+=for hackers
+Found in file hv.c
+
 =item hv_iterkeysv
 
 Returns the key as an C<SV*> from the current position of the hash
@@ -602,12 +819,18 @@ see C<hv_iterinit>.
 
        SV*     hv_iterkeysv(HE* entry)
 
+=for hackers
+Found in file hv.c
+
 =item hv_iternext
 
 Returns entries from a hash iterator.  See C<hv_iterinit>.
 
        HE*     hv_iternext(HV* tb)
 
+=for hackers
+Found in file hv.c
+
 =item hv_iternextsv
 
 Performs an C<hv_iternext>, C<hv_iterkey>, and C<hv_iterval> in one
@@ -615,6 +838,9 @@ operation.
 
        SV*     hv_iternextsv(HV* hv, char** key, I32* retlen)
 
+=for hackers
+Found in file hv.c
+
 =item hv_iterval
 
 Returns the value from the current position of the hash iterator.  See
@@ -622,12 +848,18 @@ C<hv_iterkey>.
 
        SV*     hv_iterval(HV* tb, HE* entry)
 
+=for hackers
+Found in file hv.c
+
 =item hv_magic
 
 Adds magic to a hash.  See C<sv_magic>.
 
        void    hv_magic(HV* hv, GV* gv, int how)
 
+=for hackers
+Found in file hv.c
+
 =item hv_store
 
 Stores an SV in a hash.  The hash key is specified as C<key> and C<klen> is
@@ -644,6 +876,9 @@ information on how to use this function on tied hashes.
 
        SV**    hv_store(HV* tb, const char* key, U32 klen, SV* val, U32 hash)
 
+=for hackers
+Found in file hv.c
+
 =item hv_store_ent
 
 Stores C<val> in a hash.  The hash key is specified as C<key>.  The C<hash>
@@ -661,12 +896,18 @@ information on how to use this function on tied hashes.
 
        HE*     hv_store_ent(HV* tb, SV* key, SV* val, U32 hash)
 
+=for hackers
+Found in file hv.c
+
 =item hv_undef
 
 Undefines the hash.
 
        void    hv_undef(HV* tb)
 
+=for hackers
+Found in file hv.c
+
 =item isALNUM
 
 Returns a boolean indicating whether the C C<char> is an ASCII alphanumeric
@@ -674,6 +915,9 @@ character (including underscore) or digit.
 
        bool    isALNUM(char ch)
 
+=for hackers
+Found in file handy.h
+
 =item isALPHA
 
 Returns a boolean indicating whether the C C<char> is an ASCII alphabetic
@@ -681,6 +925,9 @@ character.
 
        bool    isALPHA(char ch)
 
+=for hackers
+Found in file handy.h
+
 =item isDIGIT
 
 Returns a boolean indicating whether the C C<char> is an ASCII
@@ -688,6 +935,9 @@ digit.
 
        bool    isDIGIT(char ch)
 
+=for hackers
+Found in file handy.h
+
 =item isLOWER
 
 Returns a boolean indicating whether the C C<char> is a lowercase
@@ -695,12 +945,18 @@ character.
 
        bool    isLOWER(char ch)
 
+=for hackers
+Found in file handy.h
+
 =item isSPACE
 
 Returns a boolean indicating whether the C C<char> is whitespace.
 
        bool    isSPACE(char ch)
 
+=for hackers
+Found in file handy.h
+
 =item isUPPER
 
 Returns a boolean indicating whether the C C<char> is an uppercase
@@ -708,6 +964,9 @@ character.
 
        bool    isUPPER(char ch)
 
+=for hackers
+Found in file handy.h
+
 =item items
 
 Variable which is setup by C<xsubpp> to indicate the number of 
@@ -715,6 +974,9 @@ items on the stack.  See L<perlxs/"Variable-length Parameter Lists">.
 
        I32     items
 
+=for hackers
+Found in file XSUB.h
+
 =item ix
 
 Variable which is setup by C<xsubpp> to indicate which of an 
@@ -722,12 +984,18 @@ XSUB's aliases was used to invoke it.  See L<perlxs/"The ALIAS: Keyword">.
 
        I32     ix
 
+=for hackers
+Found in file XSUB.h
+
 =item LEAVE
 
 Closing bracket on a callback.  See C<ENTER> and L<perlcall>.
 
                LEAVE;
 
+=for hackers
+Found in file scope.h
+
 =item looks_like_number
 
 Test if an the content of an SV looks like a number (or is a
@@ -735,58 +1003,88 @@ number).
 
        I32     looks_like_number(SV* sv)
 
+=for hackers
+Found in file sv.c
+
 =item MARK
 
 Stack marker variable for the XSUB.  See C<dMARK>.
 
+=for hackers
+Found in file pp.h
+
 =item mg_clear
 
 Clear something magical that the SV represents.  See C<sv_magic>.
 
        int     mg_clear(SV* sv)
 
+=for hackers
+Found in file mg.c
+
 =item mg_copy
 
 Copies the magic from one SV to another.  See C<sv_magic>.
 
        int     mg_copy(SV* sv, SV* nsv, const char* key, I32 klen)
 
+=for hackers
+Found in file mg.c
+
 =item mg_find
 
 Finds the magic pointer for type matching the SV.  See C<sv_magic>.
 
        MAGIC*  mg_find(SV* sv, int type)
 
+=for hackers
+Found in file mg.c
+
 =item mg_free
 
 Free any magic storage used by the SV.  See C<sv_magic>.
 
        int     mg_free(SV* sv)
 
+=for hackers
+Found in file mg.c
+
 =item mg_get
 
 Do magic after a value is retrieved from the SV.  See C<sv_magic>.
 
        int     mg_get(SV* sv)
 
+=for hackers
+Found in file mg.c
+
 =item mg_length
 
 Report on the SV's length.  See C<sv_magic>.
 
        U32     mg_length(SV* sv)
 
+=for hackers
+Found in file mg.c
+
 =item mg_magical
 
 Turns on the magical status of an SV.  See C<sv_magic>.
 
        void    mg_magical(SV* sv)
 
+=for hackers
+Found in file mg.c
+
 =item mg_set
 
 Do magic after a value is assigned to the SV.  See C<sv_magic>.
 
        int     mg_set(SV* sv)
 
+=for hackers
+Found in file mg.c
+
 =item Move
 
 The XSUB-writer's interface to the C C<memmove> function.  The C<src> is the
@@ -795,18 +1093,27 @@ the type.  Can do overlapping moves.  See also C<Copy>.
 
        void    Move(void* src, void* dest, int nitems, type)
 
+=for hackers
+Found in file handy.h
+
 =item New
 
 The XSUB-writer's interface to the C C<malloc> function.
 
        void    New(int id, void* ptr, int nitems, type)
 
+=for hackers
+Found in file handy.h
+
 =item newAV
 
 Creates a new AV.  The reference count is set to 1.
 
        AV*     newAV()
 
+=for hackers
+Found in file av.c
+
 =item Newc
 
 The XSUB-writer's interface to the C C<malloc> function, with
@@ -814,6 +1121,9 @@ cast.
 
        void    Newc(int id, void* ptr, int nitems, type, cast)
 
+=for hackers
+Found in file handy.h
+
 =item newCONSTSUB
 
 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
@@ -821,12 +1131,18 @@ eligible for inlining at compile-time.
 
        void    newCONSTSUB(HV* stash, char* name, SV* sv)
 
+=for hackers
+Found in file op.c
+
 =item newHV
 
 Creates a new HV.  The reference count is set to 1.
 
        HV*     newHV()
 
+=for hackers
+Found in file hv.c
+
 =item newRV_inc
 
 Creates an RV wrapper for an SV.  The reference count for the original SV is
@@ -834,6 +1150,9 @@ incremented.
 
        SV*     newRV_inc(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item newRV_noinc
 
 Creates an RV wrapper for an SV.  The reference count for the original
@@ -841,6 +1160,9 @@ SV is B<not> incremented.
 
        SV*     newRV_noinc(SV *sv)
 
+=for hackers
+Found in file sv.c
+
 =item NEWSV
 
 Creates a new SV.  A non-zero C<len> parameter indicates the number of
@@ -851,6 +1173,9 @@ C<id> is an integer id between 0 and 1299 (used to identify leaks).
 
        SV*     NEWSV(int id, STRLEN len)
 
+=for hackers
+Found in file handy.h
+
 =item newSViv
 
 Creates a new SV and copies an integer into it.  The reference count for the
@@ -858,6 +1183,9 @@ SV is set to 1.
 
        SV*     newSViv(IV i)
 
+=for hackers
+Found in file sv.c
+
 =item newSVnv
 
 Creates a new SV and copies a floating point value into it.
@@ -865,6 +1193,9 @@ The reference count for the SV is set to 1.
 
        SV*     newSVnv(NV n)
 
+=for hackers
+Found in file sv.c
+
 =item newSVpv
 
 Creates a new SV and copies a string into it.  The reference count for the
@@ -873,6 +1204,9 @@ strlen().  For efficiency, consider using C<newSVpvn> instead.
 
        SV*     newSVpv(const char* s, STRLEN len)
 
+=for hackers
+Found in file sv.c
+
 =item newSVpvf
 
 Creates a new SV an initialize it with the string formatted like
@@ -880,6 +1214,9 @@ C<sprintf>.
 
        SV*     newSVpvf(const char* pat, ...)
 
+=for hackers
+Found in file sv.c
+
 =item newSVpvn
 
 Creates a new SV and copies a string into it.  The reference count for the
@@ -889,6 +1226,9 @@ C<len> bytes long.
 
        SV*     newSVpvn(const char* s, STRLEN len)
 
+=for hackers
+Found in file sv.c
+
 =item newSVrv
 
 Creates a new SV for the RV, C<rv>, to point to.  If C<rv> is not an RV then
@@ -898,12 +1238,18 @@ reference count is 1.
 
        SV*     newSVrv(SV* rv, const char* classname)
 
+=for hackers
+Found in file sv.c
+
 =item newSVsv
 
 Creates a new SV which is an exact duplicate of the original SV.
 
        SV*     newSVsv(SV* old)
 
+=for hackers
+Found in file sv.c
+
 =item newSVuv
 
 Creates a new SV and copies an unsigned integer into it.
@@ -911,15 +1257,24 @@ The reference count for the SV is set to 1.
 
        SV*     newSVuv(UV u)
 
+=for hackers
+Found in file sv.c
+
 =item newXS
 
 Used by C<xsubpp> to hook up XSUBs as Perl subs.
 
+=for hackers
+Found in file op.c
+
 =item newXSproto
 
 Used by C<xsubpp> to hook up XSUBs as Perl subs.  Adds Perl prototypes to
 the subs.
 
+=for hackers
+Found in file XSUB.h
+
 =item Newz
 
 The XSUB-writer's interface to the C C<malloc> function.  The allocated
@@ -927,66 +1282,105 @@ memory is zeroed with C<memzero>.
 
        void    Newz(int id, void* ptr, int nitems, type)
 
+=for hackers
+Found in file handy.h
+
 =item Nullav
 
 Null AV pointer.
 
+=for hackers
+Found in file av.h
+
 =item Nullch
 
 Null character pointer.
 
+=for hackers
+Found in file handy.h
+
 =item Nullcv
 
 Null CV pointer.
 
+=for hackers
+Found in file cv.h
+
 =item Nullhv
 
 Null HV pointer.
 
+=for hackers
+Found in file hv.h
+
 =item Nullsv
 
 Null SV pointer.
 
+=for hackers
+Found in file handy.h
+
 =item ORIGMARK
 
 The original stack mark for the XSUB.  See C<dORIGMARK>.
 
+=for hackers
+Found in file pp.h
+
 =item perl_alloc
 
 Allocates a new Perl interpreter.  See L<perlembed>.
 
        PerlInterpreter*        perl_alloc()
 
+=for hackers
+Found in file perl.c
+
 =item perl_construct
 
 Initializes a new Perl interpreter.  See L<perlembed>.
 
        void    perl_construct(PerlInterpreter* interp)
 
+=for hackers
+Found in file perl.c
+
 =item perl_destruct
 
 Shuts down a Perl interpreter.  See L<perlembed>.
 
        void    perl_destruct(PerlInterpreter* interp)
 
+=for hackers
+Found in file perl.c
+
 =item perl_free
 
 Releases a Perl interpreter.  See L<perlembed>.
 
        void    perl_free(PerlInterpreter* interp)
 
+=for hackers
+Found in file perl.c
+
 =item perl_parse
 
 Tells a Perl interpreter to parse a Perl script.  See L<perlembed>.
 
        int     perl_parse(PerlInterpreter* interp, XSINIT_t xsinit, int argc, char** argv, char** env)
 
+=for hackers
+Found in file perl.c
+
 =item perl_run
 
 Tells a Perl interpreter to run.  See L<perlembed>.
 
        int     perl_run(PerlInterpreter* interp)
 
+=for hackers
+Found in file perl.c
+
 =item PL_DBsingle
 
 When Perl is run in debugging mode, with the B<-d> switch, this SV is a
@@ -997,6 +1391,9 @@ C<PL_DBsub>.
 
        SV *    PL_DBsingle
 
+=for hackers
+Found in file intrpvar.h
+
 =item PL_DBsub
 
 When Perl is run in debugging mode, with the B<-d> switch, this GV contains
@@ -1006,6 +1403,9 @@ C<PL_DBsingle>.
 
        GV *    PL_DBsub
 
+=for hackers
+Found in file intrpvar.h
+
 =item PL_DBtrace
 
 Trace variable used when Perl is run in debugging mode, with the B<-d>
@@ -1014,12 +1414,18 @@ variable.  See C<PL_DBsingle>.
 
        SV *    PL_DBtrace
 
+=for hackers
+Found in file intrpvar.h
+
 =item PL_dowarn
 
 The C variable which corresponds to Perl's $^W warning variable.
 
        bool    PL_dowarn
 
+=for hackers
+Found in file intrpvar.h
+
 =item PL_modglobal
 
 C<PL_modglobal> is a general purpose, interpreter global HV for use by 
@@ -1030,6 +1436,9 @@ prefixed by the package name of the extension that owns the data.
 
        HV*     PL_modglobal
 
+=for hackers
+Found in file intrpvar.h
+
 =item PL_na
 
 A convenience variable which is typically used with C<SvPV> when one
@@ -1039,6 +1448,9 @@ C<SvPV_nolen> macro.
 
        STRLEN  PL_na
 
+=for hackers
+Found in file thrdvar.h
+
 =item PL_sv_no
 
 This is the C<false> SV.  See C<PL_sv_yes>.  Always refer to this as
@@ -1046,12 +1458,18 @@ C<&PL_sv_no>.
 
        SV      PL_sv_no
 
+=for hackers
+Found in file intrpvar.h
+
 =item PL_sv_undef
 
 This is the C<undef> SV.  Always refer to this as C<&PL_sv_undef>.
 
        SV      PL_sv_undef
 
+=for hackers
+Found in file intrpvar.h
+
 =item PL_sv_yes
 
 This is the C<true> SV.  See C<PL_sv_no>.  Always refer to this as
@@ -1059,36 +1477,54 @@ C<&PL_sv_yes>.
 
        SV      PL_sv_yes
 
+=for hackers
+Found in file intrpvar.h
+
 =item POPi
 
 Pops an integer off the stack.
 
        IV      POPi
 
+=for hackers
+Found in file pp.h
+
 =item POPl
 
 Pops a long off the stack.
 
        long    POPl
 
+=for hackers
+Found in file pp.h
+
 =item POPn
 
 Pops a double off the stack.
 
        NV      POPn
 
+=for hackers
+Found in file pp.h
+
 =item POPp
 
 Pops a string off the stack.
 
        char*   POPp
 
+=for hackers
+Found in file pp.h
+
 =item POPs
 
 Pops an SV off the stack.
 
        SV*     POPs
 
+=for hackers
+Found in file pp.h
+
 =item PUSHi
 
 Push an integer onto the stack.  The stack must have room for this element.
@@ -1096,6 +1532,9 @@ Handles 'set' magic.  See C<XPUSHi>.
 
        void    PUSHi(IV iv)
 
+=for hackers
+Found in file pp.h
+
 =item PUSHMARK
 
 Opening bracket for arguments on a callback.  See C<PUTBACK> and
@@ -1103,6 +1542,9 @@ L<perlcall>.
 
                PUSHMARK;
 
+=for hackers
+Found in file pp.h
+
 =item PUSHn
 
 Push a double onto the stack.  The stack must have room for this element.
@@ -1110,6 +1552,9 @@ Handles 'set' magic.  See C<XPUSHn>.
 
        void    PUSHn(NV nv)
 
+=for hackers
+Found in file pp.h
+
 =item PUSHp
 
 Push a string onto the stack.  The stack must have room for this element.
@@ -1118,6 +1563,9 @@ C<XPUSHp>.
 
        void    PUSHp(char* str, STRLEN len)
 
+=for hackers
+Found in file pp.h
+
 =item PUSHs
 
 Push an SV onto the stack.  The stack must have room for this element. 
@@ -1125,6 +1573,9 @@ Does not handle 'set' magic.  See C<XPUSHs>.
 
        void    PUSHs(SV* sv)
 
+=for hackers
+Found in file pp.h
+
 =item PUSHu
 
 Push an unsigned integer onto the stack.  The stack must have room for this
@@ -1132,6 +1583,9 @@ element.  See C<XPUSHu>.
 
        void    PUSHu(UV uv)
 
+=for hackers
+Found in file pp.h
+
 =item PUTBACK
 
 Closing bracket for XSUB arguments.  This is usually handled by C<xsubpp>.
@@ -1139,12 +1593,18 @@ See C<PUSHMARK> and L<perlcall> for other uses.
 
                PUTBACK;
 
+=for hackers
+Found in file pp.h
+
 =item Renew
 
 The XSUB-writer's interface to the C C<realloc> function.
 
        void    Renew(void* ptr, int nitems, type)
 
+=for hackers
+Found in file handy.h
+
 =item Renewc
 
 The XSUB-writer's interface to the C C<realloc> function, with
@@ -1152,6 +1612,9 @@ cast.
 
        void    Renewc(void* ptr, int nitems, type, cast)
 
+=for hackers
+Found in file handy.h
+
 =item require_pv
 
 Tells Perl to C<require> a module.
@@ -1160,6 +1623,9 @@ NOTE: the perl_ form of this function is deprecated.
 
        void    require_pv(const char* pv)
 
+=for hackers
+Found in file perl.c
+
 =item RETVAL
 
 Variable which is setup by C<xsubpp> to hold the return value for an 
@@ -1168,18 +1634,27 @@ L<perlxs/"The RETVAL Variable">.
 
        (whatever)      RETVAL
 
+=for hackers
+Found in file XSUB.h
+
 =item Safefree
 
 The XSUB-writer's interface to the C C<free> function.
 
        void    Safefree(void* src, void* dest, int nitems, type)
 
+=for hackers
+Found in file handy.h
+
 =item savepv
 
 Copy a string to a safe spot.  This does not use an SV.
 
        char*   savepv(const char* sv)
 
+=for hackers
+Found in file util.c
+
 =item savepvn
 
 Copy a string to a safe spot.  The C<len> indicates number of bytes to
@@ -1187,6 +1662,9 @@ copy.  This does not use an SV.
 
        char*   savepvn(const char* sv, I32 len)
 
+=for hackers
+Found in file util.c
+
 =item SAVETMPS
 
 Opening bracket for temporaries on a callback.  See C<FREETMPS> and
@@ -1194,29 +1672,44 @@ L<perlcall>.
 
                SAVETMPS;
 
+=for hackers
+Found in file scope.h
+
 =item SP
 
 Stack pointer.  This is usually handled by C<xsubpp>.  See C<dSP> and
 C<SPAGAIN>.
 
+=for hackers
+Found in file pp.h
+
 =item SPAGAIN
 
 Refetch the stack pointer.  Used after a callback.  See L<perlcall>.
 
                SPAGAIN;
 
+=for hackers
+Found in file pp.h
+
 =item ST
 
 Used to access elements on the XSUB's stack.
 
        SV*     ST(int ix)
 
+=for hackers
+Found in file XSUB.h
+
 =item strEQ
 
 Test two strings to see if they are equal.  Returns true or false.
 
        bool    strEQ(char* s1, char* s2)
 
+=for hackers
+Found in file handy.h
+
 =item strGE
 
 Test two strings to see if the first, C<s1>, is greater than or equal to
@@ -1224,6 +1717,9 @@ the second, C<s2>.  Returns true or false.
 
        bool    strGE(char* s1, char* s2)
 
+=for hackers
+Found in file handy.h
+
 =item strGT
 
 Test two strings to see if the first, C<s1>, is greater than the second,
@@ -1231,6 +1727,9 @@ C<s2>.  Returns true or false.
 
        bool    strGT(char* s1, char* s2)
 
+=for hackers
+Found in file handy.h
+
 =item strLE
 
 Test two strings to see if the first, C<s1>, is less than or equal to the
@@ -1238,6 +1737,9 @@ second, C<s2>.  Returns true or false.
 
        bool    strLE(char* s1, char* s2)
 
+=for hackers
+Found in file handy.h
+
 =item strLT
 
 Test two strings to see if the first, C<s1>, is less than the second,
@@ -1245,6 +1747,9 @@ C<s2>.  Returns true or false.
 
        bool    strLT(char* s1, char* s2)
 
+=for hackers
+Found in file handy.h
+
 =item strNE
 
 Test two strings to see if they are different.  Returns true or
@@ -1252,6 +1757,9 @@ false.
 
        bool    strNE(char* s1, char* s2)
 
+=for hackers
+Found in file handy.h
+
 =item strnEQ
 
 Test two strings to see if they are equal.  The C<len> parameter indicates
@@ -1260,6 +1768,9 @@ C<strncmp>).
 
        bool    strnEQ(char* s1, char* s2, STRLEN len)
 
+=for hackers
+Found in file handy.h
+
 =item strnNE
 
 Test two strings to see if they are different.  The C<len> parameter
@@ -1268,24 +1779,36 @@ wrapper for C<strncmp>).
 
        bool    strnNE(char* s1, char* s2, STRLEN len)
 
+=for hackers
+Found in file handy.h
+
 =item StructCopy
 
 This is an architecture-independent macro to copy one structure to another.
 
        void    StructCopy(type src, type dest, type)
 
+=for hackers
+Found in file handy.h
+
 =item SvCUR
 
 Returns the length of the string which is in the SV.  See C<SvLEN>.
 
        STRLEN  SvCUR(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvCUR_set
 
 Set the length of the string which is in the SV.  See C<SvCUR>.
 
        void    SvCUR_set(SV* sv, STRLEN len)
 
+=for hackers
+Found in file sv.h
+
 =item SvEND
 
 Returns a pointer to the last character in the string which is in the SV.
@@ -1293,6 +1816,9 @@ See C<SvCUR>.  Access the character as *(SvEND(sv)).
 
        char*   SvEND(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvGETMAGIC
 
 Invokes C<mg_get> on an SV if it has 'get' magic.  This macro evaluates its
@@ -1300,6 +1826,9 @@ argument more than once.
 
        void    SvGETMAGIC(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvGROW
 
 Expands the character buffer in the SV so that it has room for the
@@ -1309,12 +1838,18 @@ Returns a pointer to the character buffer.
 
        void    SvGROW(SV* sv, STRLEN len)
 
+=for hackers
+Found in file sv.h
+
 =item SvIOK
 
 Returns a boolean indicating whether the SV contains an integer.
 
        bool    SvIOK(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvIOKp
 
 Returns a boolean indicating whether the SV contains an integer.  Checks
@@ -1322,30 +1857,45 @@ the B<private> setting.  Use C<SvIOK>.
 
        bool    SvIOKp(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvIOK_off
 
 Unsets the IV status of an SV.
 
        void    SvIOK_off(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvIOK_on
 
 Tells an SV that it is an integer.
 
        void    SvIOK_on(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvIOK_only
 
 Tells an SV that it is an integer and disables all other OK bits.
 
        void    SvIOK_only(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvIV
 
 Coerces the given SV to an integer and returns it.
 
        IV      SvIV(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvIVX
 
 Returns the integer which is stored in the SV, assuming SvIOK is
@@ -1353,12 +1903,28 @@ true.
 
        IV      SvIVX(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvLEN
 
 Returns the size of the string buffer in the SV.  See C<SvCUR>.
 
        STRLEN  SvLEN(SV* sv)
 
+=for hackers
+Found in file sv.h
+
+=item SvLOCK
+
+Aquires an internal mutex for a SV. Used to make sure multiple threads
+don't stomp on the guts of an SV at the same time
+
+       void    SvLOCK(SV* sv)
+
+=for hackers
+Found in file sv.h
+
 =item SvNIOK
 
 Returns a boolean indicating whether the SV contains a number, integer or
@@ -1366,6 +1932,9 @@ double.
 
        bool    SvNIOK(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvNIOKp
 
 Returns a boolean indicating whether the SV contains a number, integer or
@@ -1373,18 +1942,27 @@ double.  Checks the B<private> setting.  Use C<SvNIOK>.
 
        bool    SvNIOKp(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvNIOK_off
 
 Unsets the NV/IV status of an SV.
 
        void    SvNIOK_off(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvNOK
 
 Returns a boolean indicating whether the SV contains a double.
 
        bool    SvNOK(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvNOKp
 
 Returns a boolean indicating whether the SV contains a double.  Checks the
@@ -1392,30 +1970,45 @@ B<private> setting.  Use C<SvNOK>.
 
        bool    SvNOKp(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvNOK_off
 
 Unsets the NV status of an SV.
 
        void    SvNOK_off(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvNOK_on
 
 Tells an SV that it is a double.
 
        void    SvNOK_on(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvNOK_only
 
 Tells an SV that it is a double and disables all other OK bits.
 
        void    SvNOK_only(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvNV
 
 Coerce the given SV to a double and return it.
 
        NV      SvNV(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvNVX
 
 Returns the double which is stored in the SV, assuming SvNOK is
@@ -1423,12 +2016,18 @@ true.
 
        NV      SvNVX(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvOK
 
 Returns a boolean indicating whether the value is an SV.
 
        bool    SvOK(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvOOK
 
 Returns a boolean indicating whether the SvIVX is a valid offset value for
@@ -1438,6 +2037,9 @@ allocated string buffer is really (SvPVX - SvIVX).
 
        bool    SvOOK(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvPOK
 
 Returns a boolean indicating whether the SV contains a character
@@ -1445,6 +2047,9 @@ string.
 
        bool    SvPOK(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvPOKp
 
 Returns a boolean indicating whether the SV contains a character string.
@@ -1452,24 +2057,36 @@ Checks the B<private> setting.  Use C<SvPOK>.
 
        bool    SvPOKp(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvPOK_off
 
 Unsets the PV status of an SV.
 
        void    SvPOK_off(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvPOK_on
 
 Tells an SV that it is a string.
 
        void    SvPOK_on(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvPOK_only
 
 Tells an SV that it is a string and disables all other OK bits.
 
        void    SvPOK_only(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvPV
 
 Returns a pointer to the string in the SV, or a stringified form of the SV
@@ -1477,6 +2094,9 @@ if the SV does not contain a string.  Handles 'get' magic.
 
        char*   SvPV(SV* sv, STRLEN len)
 
+=for hackers
+Found in file sv.h
+
 =item SvPVX
 
 Returns a pointer to the string in the SV.  The SV must contain a
@@ -1484,6 +2104,9 @@ string.
 
        char*   SvPVX(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvPV_force
 
 Like <SvPV> but will force the SV into becoming a string (SvPOK).  You want
@@ -1491,6 +2114,9 @@ force if you are going to update the SvPVX directly.
 
        char*   SvPV_force(SV* sv, STRLEN len)
 
+=for hackers
+Found in file sv.h
+
 =item SvPV_nolen
 
 Returns a pointer to the string in the SV, or a stringified form of the SV
@@ -1498,48 +2124,72 @@ if the SV does not contain a string.  Handles 'get' magic.
 
        char*   SvPV_nolen(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvREFCNT
 
 Returns the value of the object's reference count.
 
        U32     SvREFCNT(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvREFCNT_dec
 
 Decrements the reference count of the given SV.
 
        void    SvREFCNT_dec(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvREFCNT_inc
 
 Increments the reference count of the given SV.
 
        SV*     SvREFCNT_inc(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvROK
 
 Tests if the SV is an RV.
 
        bool    SvROK(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvROK_off
 
 Unsets the RV status of an SV.
 
        void    SvROK_off(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvROK_on
 
 Tells an SV that it is an RV.
 
        void    SvROK_on(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvRV
 
 Dereferences an RV to return the SV.
 
        SV*     SvRV(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvSETMAGIC
 
 Invokes C<mg_set> on an SV if it has 'set' magic.  This macro evaluates its
@@ -1547,6 +2197,9 @@ argument more than once.
 
        void    SvSETMAGIC(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvSetSV
 
 Calls C<sv_setsv> if dsv is not the same as ssv.  May evaluate arguments
@@ -1554,6 +2207,9 @@ more than once.
 
        void    SvSetSV(SV* dsb, SV* ssv)
 
+=for hackers
+Found in file sv.h
+
 =item SvSetSV_nosteal
 
 Calls a non-destructive version of C<sv_setsv> if dsv is not the same as
@@ -1561,18 +2217,27 @@ ssv. May evaluate arguments more than once.
 
        void    SvSetSV_nosteal(SV* dsv, SV* ssv)
 
+=for hackers
+Found in file sv.h
+
 =item SvSTASH
 
 Returns the stash of the SV.
 
        HV*     SvSTASH(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvTAINT
 
 Taints an SV if tainting is enabled
 
        void    SvTAINT(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvTAINTED
 
 Checks to see if an SV is tainted. Returns TRUE if it is, FALSE if
@@ -1580,6 +2245,9 @@ not.
 
        bool    SvTAINTED(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvTAINTED_off
 
 Untaints an SV. Be I<very> careful with this routine, as it short-circuits
@@ -1591,12 +2259,18 @@ untainting variables.
 
        void    SvTAINTED_off(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvTAINTED_on
 
 Marks an SV as tainted.
 
        void    SvTAINTED_on(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvTRUE
 
 Returns a boolean indicating whether Perl would evaluate the SV as true or
@@ -1604,45 +2278,84 @@ false, defined or undefined.  Does not handle 'get' magic.
 
        bool    SvTRUE(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item svtype
 
 An enum of flags for Perl types.  These are found in the file B<sv.h> 
 in the C<svtype> enum.  Test these flags with the C<SvTYPE> macro.
 
+=for hackers
+Found in file sv.h
+
 =item SvTYPE
 
 Returns the type of the SV.  See C<svtype>.
 
        svtype  SvTYPE(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SVt_IV
 
 Integer type flag for scalars.  See C<svtype>.
 
+=for hackers
+Found in file sv.h
+
 =item SVt_NV
 
 Double type flag for scalars.  See C<svtype>.
 
+=for hackers
+Found in file sv.h
+
 =item SVt_PV
 
 Pointer type flag for scalars.  See C<svtype>.
 
+=for hackers
+Found in file sv.h
+
 =item SVt_PVAV
 
 Type flag for arrays.  See C<svtype>.
 
+=for hackers
+Found in file sv.h
+
 =item SVt_PVCV
 
 Type flag for code refs.  See C<svtype>.
 
+=for hackers
+Found in file sv.h
+
 =item SVt_PVHV
 
 Type flag for hashes.  See C<svtype>.
 
+=for hackers
+Found in file sv.h
+
 =item SVt_PVMG
 
 Type flag for blessed scalars.  See C<svtype>.
 
+=for hackers
+Found in file sv.h
+
+=item SvUNLOCK
+
+Release the internal mutex for an SV.
+
+       void    SvUNLOCK(SV* sv)
+
+=for hackers
+Found in file sv.h
+
 =item SvUPGRADE
 
 Used to upgrade an SV to a more complex form.  Uses C<sv_upgrade> to
@@ -1650,12 +2363,18 @@ perform the upgrade if necessary.  See C<svtype>.
 
        void    SvUPGRADE(SV* sv, svtype type)
 
+=for hackers
+Found in file sv.h
+
 =item SvUV
 
 Coerces the given SV to an unsigned integer and returns it.
 
        UV      SvUV(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item SvUVX
 
 Returns the unsigned integer which is stored in the SV, assuming SvIOK is
@@ -1663,6 +2382,9 @@ true.
 
        UV      SvUVX(SV* sv)
 
+=for hackers
+Found in file sv.h
+
 =item sv_2mortal
 
 Marks an SV as mortal.  The SV will be destroyed when the current context
@@ -1670,6 +2392,9 @@ ends.
 
        SV*     sv_2mortal(SV* sv)
 
+=for hackers
+Found in file sv.c
+
 =item sv_bless
 
 Blesses an SV into a specified package.  The SV must be an RV.  The package
@@ -1678,6 +2403,9 @@ of the SV is unaffected.
 
        SV*     sv_bless(SV* sv, HV* stash)
 
+=for hackers
+Found in file sv.c
+
 =item sv_catpv
 
 Concatenates the string onto the end of the string which is in the SV.
@@ -1685,6 +2413,9 @@ Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
 
        void    sv_catpv(SV* sv, const char* ptr)
 
+=for hackers
+Found in file sv.c
+
 =item sv_catpvf
 
 Processes its arguments like C<sprintf> and appends the formatted output
@@ -1693,12 +2424,18 @@ typically be called after calling this function to handle 'set' magic.
 
        void    sv_catpvf(SV* sv, const char* pat, ...)
 
+=for hackers
+Found in file sv.c
+
 =item sv_catpvf_mg
 
 Like C<sv_catpvf>, but also handles 'set' magic.
 
        void    sv_catpvf_mg(SV *sv, const char* pat, ...)
 
+=for hackers
+Found in file sv.c
+
 =item sv_catpvn
 
 Concatenates the string onto the end of the string which is in the SV.  The
@@ -1707,18 +2444,27 @@ C<len> indicates number of bytes to copy.  Handles 'get' magic, but not
 
        void    sv_catpvn(SV* sv, const char* ptr, STRLEN len)
 
+=for hackers
+Found in file sv.c
+
 =item sv_catpvn_mg
 
 Like C<sv_catpvn>, but also handles 'set' magic.
 
        void    sv_catpvn_mg(SV *sv, const char *ptr, STRLEN len)
 
+=for hackers
+Found in file sv.c
+
 =item sv_catpv_mg
 
 Like C<sv_catpv>, but also handles 'set' magic.
 
        void    sv_catpv_mg(SV *sv, const char *ptr)
 
+=for hackers
+Found in file sv.c
+
 =item sv_catsv
 
 Concatenates the string from SV C<ssv> onto the end of the string in SV
@@ -1726,12 +2472,18 @@ C<dsv>.  Handles 'get' magic, but not 'set' magic.  See C<sv_catsv_mg>.
 
        void    sv_catsv(SV* dsv, SV* ssv)
 
+=for hackers
+Found in file sv.c
+
 =item sv_catsv_mg
 
 Like C<sv_catsv>, but also handles 'set' magic.
 
        void    sv_catsv_mg(SV *dstr, SV *sstr)
 
+=for hackers
+Found in file sv.c
+
 =item sv_chop
 
 Efficient removal of characters from the beginning of the string buffer. 
@@ -1741,6 +2493,9 @@ string.
 
        void    sv_chop(SV* sv, char* ptr)
 
+=for hackers
+Found in file sv.c
+
 =item sv_cmp
 
 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
@@ -1749,12 +2504,18 @@ C<sv2>.
 
        I32     sv_cmp(SV* sv1, SV* sv2)
 
+=for hackers
+Found in file sv.c
+
 =item sv_dec
 
 Auto-decrement of the value in the SV.
 
        void    sv_dec(SV* sv)
 
+=for hackers
+Found in file sv.c
+
 =item sv_derived_from
 
 Returns a boolean indicating whether the SV is derived from the specified
@@ -1763,6 +2524,9 @@ for class names as well as for objects.
 
        bool    sv_derived_from(SV* sv, const char* name)
 
+=for hackers
+Found in file universal.c
+
 =item sv_eq
 
 Returns a boolean indicating whether the strings in the two SVs are
@@ -1770,6 +2534,9 @@ identical.
 
        I32     sv_eq(SV* sv1, SV* sv2)
 
+=for hackers
+Found in file sv.c
+
 =item sv_grow
 
 Expands the character buffer in the SV.  This will use C<sv_unref> and will
@@ -1778,12 +2545,18 @@ Use C<SvGROW>.
 
        char*   sv_grow(SV* sv, STRLEN newlen)
 
+=for hackers
+Found in file sv.c
+
 =item sv_inc
 
 Auto-increment of the value in the SV.
 
        void    sv_inc(SV* sv)
 
+=for hackers
+Found in file sv.c
+
 =item sv_insert
 
 Inserts a string at the specified offset/length within the SV. Similar to
@@ -1791,6 +2564,9 @@ the Perl substr() function.
 
        void    sv_insert(SV* bigsv, STRLEN offset, STRLEN len, char* little, STRLEN littlelen)
 
+=for hackers
+Found in file sv.c
+
 =item sv_isa
 
 Returns a boolean indicating whether the SV is blessed into the specified
@@ -1799,6 +2575,9 @@ an inheritance relationship.
 
        int     sv_isa(SV* sv, const char* name)
 
+=for hackers
+Found in file sv.c
+
 =item sv_isobject
 
 Returns a boolean indicating whether the SV is an RV pointing to a blessed
@@ -1807,18 +2586,27 @@ will return false.
 
        int     sv_isobject(SV* sv)
 
+=for hackers
+Found in file sv.c
+
 =item sv_len
 
 Returns the length of the string in the SV.  See also C<SvCUR>.
 
        STRLEN  sv_len(SV* sv)
 
+=for hackers
+Found in file sv.c
+
 =item sv_magic
 
 Adds magic to an SV.
 
        void    sv_magic(SV* sv, SV* obj, int how, const char* name, I32 namlen)
 
+=for hackers
+Found in file sv.c
+
 =item sv_mortalcopy
 
 Creates a new SV which is a copy of the original SV.  The new SV is marked
@@ -1826,12 +2614,18 @@ as mortal.
 
        SV*     sv_mortalcopy(SV* oldsv)
 
+=for hackers
+Found in file sv.c
+
 =item sv_newmortal
 
 Creates a new SV which is mortal.  The reference count of the SV is set to 1.
 
        SV*     sv_newmortal()
 
+=for hackers
+Found in file sv.c
+
 =item sv_setiv
 
 Copies an integer into the given SV.  Does not handle 'set' magic.  See
@@ -1839,12 +2633,18 @@ C<sv_setiv_mg>.
 
        void    sv_setiv(SV* sv, IV num)
 
+=for hackers
+Found in file sv.c
+
 =item sv_setiv_mg
 
 Like C<sv_setiv>, but also handles 'set' magic.
 
        void    sv_setiv_mg(SV *sv, IV i)
 
+=for hackers
+Found in file sv.c
+
 =item sv_setnv
 
 Copies a double into the given SV.  Does not handle 'set' magic.  See
@@ -1852,12 +2652,18 @@ C<sv_setnv_mg>.
 
        void    sv_setnv(SV* sv, NV num)
 
+=for hackers
+Found in file sv.c
+
 =item sv_setnv_mg
 
 Like C<sv_setnv>, but also handles 'set' magic.
 
        void    sv_setnv_mg(SV *sv, NV num)
 
+=for hackers
+Found in file sv.c
+
 =item sv_setpv
 
 Copies a string into an SV.  The string must be null-terminated.  Does not
@@ -1865,6 +2671,9 @@ handle 'set' magic.  See C<sv_setpv_mg>.
 
        void    sv_setpv(SV* sv, const char* ptr)
 
+=for hackers
+Found in file sv.c
+
 =item sv_setpvf
 
 Processes its arguments like C<sprintf> and sets an SV to the formatted
@@ -1872,12 +2681,18 @@ output.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
 
        void    sv_setpvf(SV* sv, const char* pat, ...)
 
+=for hackers
+Found in file sv.c
+
 =item sv_setpvf_mg
 
 Like C<sv_setpvf>, but also handles 'set' magic.
 
        void    sv_setpvf_mg(SV *sv, const char* pat, ...)
 
+=for hackers
+Found in file sv.c
+
 =item sv_setpviv
 
 Copies an integer into the given SV, also updating its string value.
@@ -1885,12 +2700,18 @@ Does not handle 'set' magic.  See C<sv_setpviv_mg>.
 
        void    sv_setpviv(SV* sv, IV num)
 
+=for hackers
+Found in file sv.c
+
 =item sv_setpviv_mg
 
 Like C<sv_setpviv>, but also handles 'set' magic.
 
        void    sv_setpviv_mg(SV *sv, IV iv)
 
+=for hackers
+Found in file sv.c
+
 =item sv_setpvn
 
 Copies a string into an SV.  The C<len> parameter indicates the number of
@@ -1898,18 +2719,27 @@ bytes to be copied.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
 
        void    sv_setpvn(SV* sv, const char* ptr, STRLEN len)
 
+=for hackers
+Found in file sv.c
+
 =item sv_setpvn_mg
 
 Like C<sv_setpvn>, but also handles 'set' magic.
 
        void    sv_setpvn_mg(SV *sv, const char *ptr, STRLEN len)
 
+=for hackers
+Found in file sv.c
+
 =item sv_setpv_mg
 
 Like C<sv_setpv>, but also handles 'set' magic.
 
        void    sv_setpv_mg(SV *sv, const char *ptr)
 
+=for hackers
+Found in file sv.c
+
 =item sv_setref_iv
 
 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
@@ -1920,6 +2750,9 @@ will be returned and will have a reference count of 1.
 
        SV*     sv_setref_iv(SV* rv, const char* classname, IV iv)
 
+=for hackers
+Found in file sv.c
+
 =item sv_setref_nv
 
 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
@@ -1930,6 +2763,9 @@ will be returned and will have a reference count of 1.
 
        SV*     sv_setref_nv(SV* rv, const char* classname, NV nv)
 
+=for hackers
+Found in file sv.c
+
 =item sv_setref_pv
 
 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
@@ -1946,6 +2782,9 @@ Note that C<sv_setref_pvn> copies the string while this copies the pointer.
 
        SV*     sv_setref_pv(SV* rv, const char* classname, void* pv)
 
+=for hackers
+Found in file sv.c
+
 =item sv_setref_pvn
 
 Copies a string into a new SV, optionally blessing the SV.  The length of the
@@ -1959,6 +2798,9 @@ Note that C<sv_setref_pv> copies the pointer while this copies the string.
 
        SV*     sv_setref_pvn(SV* rv, const char* classname, char* pv, STRLEN n)
 
+=for hackers
+Found in file sv.c
+
 =item sv_setsv
 
 Copies the contents of the source SV C<ssv> into the destination SV C<dsv>.
@@ -1968,12 +2810,18 @@ C<sv_setsv_mg>.
 
        void    sv_setsv(SV* dsv, SV* ssv)
 
+=for hackers
+Found in file sv.c
+
 =item sv_setsv_mg
 
 Like C<sv_setsv>, but also handles 'set' magic.
 
        void    sv_setsv_mg(SV *dstr, SV *sstr)
 
+=for hackers
+Found in file sv.c
+
 =item sv_setuv
 
 Copies an unsigned integer into the given SV.  Does not handle 'set' magic.
@@ -1981,12 +2829,18 @@ See C<sv_setuv_mg>.
 
        void    sv_setuv(SV* sv, UV num)
 
+=for hackers
+Found in file sv.c
+
 =item sv_setuv_mg
 
 Like C<sv_setuv>, but also handles 'set' magic.
 
        void    sv_setuv_mg(SV *sv, UV u)
 
+=for hackers
+Found in file sv.c
+
 =item sv_unref
 
 Unsets the RV status of the SV, and decrements the reference count of
@@ -1995,6 +2849,9 @@ as a reversal of C<newSVrv>.  See C<SvROK_off>.
 
        void    sv_unref(SV* sv)
 
+=for hackers
+Found in file sv.c
+
 =item sv_upgrade
 
 Upgrade an SV to a more complex form.  Use C<SvUPGRADE>.  See
@@ -2002,6 +2859,9 @@ C<svtype>.
 
        bool    sv_upgrade(SV* sv, U32 mt)
 
+=for hackers
+Found in file sv.c
+
 =item sv_usepvn
 
 Tells an SV to use C<ptr> to find its string value.  Normally the string is
@@ -2014,12 +2874,18 @@ See C<sv_usepvn_mg>.
 
        void    sv_usepvn(SV* sv, char* ptr, STRLEN len)
 
+=for hackers
+Found in file sv.c
+
 =item sv_usepvn_mg
 
 Like C<sv_usepvn>, but also handles 'set' magic.
 
        void    sv_usepvn_mg(SV *sv, char *ptr, STRLEN len)
 
+=for hackers
+Found in file sv.c
+
 =item sv_vcatpvfn
 
 Processes its arguments like C<vsprintf> and appends the formatted output
@@ -2030,6 +2896,9 @@ locales).
 
        void    sv_vcatpvfn(SV* sv, const char* pat, STRLEN patlen, va_list* args, SV** svargs, I32 svmax, bool *maybe_tainted)
 
+=for hackers
+Found in file sv.c
+
 =item sv_vsetpvfn
 
 Works like C<vcatpvfn> but copies the text into the SV instead of
@@ -2037,6 +2906,9 @@ appending it.
 
        void    sv_vsetpvfn(SV* sv, const char* pat, STRLEN patlen, va_list* args, SV** svargs, I32 svmax, bool *maybe_tainted)
 
+=for hackers
+Found in file sv.c
+
 =item THIS
 
 Variable which is setup by C<xsubpp> to designate the object in a C++ 
@@ -2045,18 +2917,37 @@ L<perlxs/"Using XS With C++">.
 
        (whatever)      THIS
 
+=for hackers
+Found in file XSUB.h
+
 =item toLOWER
 
 Converts the specified character to lowercase.
 
        char    toLOWER(char ch)
 
+=for hackers
+Found in file handy.h
+
 =item toUPPER
 
 Converts the specified character to uppercase.
 
        char    toUPPER(char ch)
 
+=for hackers
+Found in file handy.h
+
+=item utf8_to_bytes
+
+Converts a string C<s> of length C<len> from UTF8 into ASCII encoding.
+Unlike C<bytes_to_utf8>, this over-writes the original string.
+
+       U8 *    utf8_to_bytes(U8 *s, STRLEN len)
+
+=for hackers
+Found in file utf8.c
+
 =item warn
 
 This is the XSUB-writer's interface to Perl's C<warn> function.  Use this
@@ -2065,6 +2956,9 @@ C<croak>.
 
        void    warn(const char* pat, ...)
 
+=for hackers
+Found in file util.c
+
 =item XPUSHi
 
 Push an integer onto the stack, extending the stack if necessary.  Handles
@@ -2072,6 +2966,9 @@ Push an integer onto the stack, extending the stack if necessary.  Handles
 
        void    XPUSHi(IV iv)
 
+=for hackers
+Found in file pp.h
+
 =item XPUSHn
 
 Push a double onto the stack, extending the stack if necessary.  Handles
@@ -2079,6 +2976,9 @@ Push a double onto the stack, extending the stack if necessary.  Handles
 
        void    XPUSHn(NV nv)
 
+=for hackers
+Found in file pp.h
+
 =item XPUSHp
 
 Push a string onto the stack, extending the stack if necessary.  The C<len>
@@ -2087,6 +2987,9 @@ C<PUSHp>.
 
        void    XPUSHp(char* str, STRLEN len)
 
+=for hackers
+Found in file pp.h
+
 =item XPUSHs
 
 Push an SV onto the stack, extending the stack if necessary.  Does not
@@ -2094,6 +2997,9 @@ handle 'set' magic.  See C<PUSHs>.
 
        void    XPUSHs(SV* sv)
 
+=for hackers
+Found in file pp.h
+
 =item XPUSHu
 
 Push an unsigned integer onto the stack, extending the stack if necessary. 
@@ -2101,11 +3007,17 @@ See C<PUSHu>.
 
        void    XPUSHu(UV uv)
 
+=for hackers
+Found in file pp.h
+
 =item XS
 
 Macro to declare an XSUB and its C parameter list.  This is handled by
 C<xsubpp>.
 
+=for hackers
+Found in file XSUB.h
+
 =item XSRETURN
 
 Return from XSUB, indicating number of items on the stack.  This is usually
@@ -2113,48 +3025,72 @@ handled by C<xsubpp>.
 
        void    XSRETURN(int nitems)
 
+=for hackers
+Found in file XSUB.h
+
 =item XSRETURN_EMPTY
 
 Return an empty list from an XSUB immediately.
 
                XSRETURN_EMPTY;
 
+=for hackers
+Found in file XSUB.h
+
 =item XSRETURN_IV
 
 Return an integer from an XSUB immediately.  Uses C<XST_mIV>.
 
        void    XSRETURN_IV(IV iv)
 
+=for hackers
+Found in file XSUB.h
+
 =item XSRETURN_NO
 
 Return C<&PL_sv_no> from an XSUB immediately.  Uses C<XST_mNO>.
 
                XSRETURN_NO;
 
+=for hackers
+Found in file XSUB.h
+
 =item XSRETURN_NV
 
 Return an double from an XSUB immediately.  Uses C<XST_mNV>.
 
        void    XSRETURN_NV(NV nv)
 
+=for hackers
+Found in file XSUB.h
+
 =item XSRETURN_PV
 
 Return a copy of a string from an XSUB immediately.  Uses C<XST_mPV>.
 
        void    XSRETURN_PV(char* str)
 
+=for hackers
+Found in file XSUB.h
+
 =item XSRETURN_UNDEF
 
 Return C<&PL_sv_undef> from an XSUB immediately.  Uses C<XST_mUNDEF>.
 
                XSRETURN_UNDEF;
 
+=for hackers
+Found in file XSUB.h
+
 =item XSRETURN_YES
 
 Return C<&PL_sv_yes> from an XSUB immediately.  Uses C<XST_mYES>.
 
                XSRETURN_YES;
 
+=for hackers
+Found in file XSUB.h
+
 =item XST_mIV
 
 Place an integer into the specified position C<pos> on the stack.  The
@@ -2162,6 +3098,9 @@ value is stored in a new mortal SV.
 
        void    XST_mIV(int pos, IV iv)
 
+=for hackers
+Found in file XSUB.h
+
 =item XST_mNO
 
 Place C<&PL_sv_no> into the specified position C<pos> on the
@@ -2169,6 +3108,9 @@ stack.
 
        void    XST_mNO(int pos)
 
+=for hackers
+Found in file XSUB.h
+
 =item XST_mNV
 
 Place a double into the specified position C<pos> on the stack.  The value
@@ -2176,6 +3118,9 @@ is stored in a new mortal SV.
 
        void    XST_mNV(int pos, NV nv)
 
+=for hackers
+Found in file XSUB.h
+
 =item XST_mPV
 
 Place a copy of a string into the specified position C<pos> on the stack. 
@@ -2183,6 +3128,9 @@ The value is stored in a new mortal SV.
 
        void    XST_mPV(int pos, char* str)
 
+=for hackers
+Found in file XSUB.h
+
 =item XST_mUNDEF
 
 Place C<&PL_sv_undef> into the specified position C<pos> on the
@@ -2190,6 +3138,9 @@ stack.
 
        void    XST_mUNDEF(int pos)
 
+=for hackers
+Found in file XSUB.h
+
 =item XST_mYES
 
 Place C<&PL_sv_yes> into the specified position C<pos> on the
@@ -2197,11 +3148,17 @@ stack.
 
        void    XST_mYES(int pos)
 
+=for hackers
+Found in file XSUB.h
+
 =item XS_VERSION
 
 The version identifier for an XS module.  This is usually
 handled automatically by C<ExtUtils::MakeMaker>.  See C<XS_VERSION_BOOTCHECK>.
 
+=for hackers
+Found in file XSUB.h
+
 =item XS_VERSION_BOOTCHECK
 
 Macro to verify that a PM module's $VERSION variable matches the XS
@@ -2210,6 +3167,9 @@ C<xsubpp>.  See L<perlxs/"The VERSIONCHECK: Keyword">.
 
                XS_VERSION_BOOTCHECK;
 
+=for hackers
+Found in file XSUB.h
+
 =item Zero
 
 The XSUB-writer's interface to the C C<memzero> function.  The C<dest> is the
@@ -2217,6 +3177,9 @@ destination, C<nitems> is the number of items, and C<type> is the type.
 
        void    Zero(void* dest, int nitems, type)
 
+=for hackers
+Found in file handy.h
+
 =back
 
 =head1 AUTHORS
index 6d8d67d..8afabd9 100644 (file)
@@ -24,6 +24,9 @@ allow selecting particular classes of magical variable.
 
        bool    is_gv_magical(char *name, STRLEN len, U32 flags)
 
+=for hackers
+Found in file gv.c
+
 =back
 
 =head1 AUTHORS
index 1b111cb..5768081 100644 (file)
@@ -1647,8 +1647,8 @@ unary &, unary *, (TYPE)
 
 ?PATTERN?, m/PATTERN/cgimosx, /PATTERN/cgimosx, q/STRING/, C<'STRING'>,
 qq/STRING/, "STRING", qr/STRING/imosx, qx/STRING/, `STRING`, qw/STRING/,
-s/PATTERN/REPLACEMENT/egimosx, tr/SEARCHLIST/REPLACEMENTLIST/cdsUC,
-y/SEARCHLIST/REPLACEMENTLIST/cdsUC
+s/PATTERN/REPLACEMENT/egimosx, tr/SEARCHLIST/REPLACEMENTLIST/cds,
+y/SEARCHLIST/REPLACEMENTLIST/cds
 
 =item Gory details of parsing quoted constructs
 
@@ -2746,8 +2746,6 @@ LIST, READ this, LIST, READLINE this, GETC this, CLOSE this, DESTROY this
 
 =item INSTANCE VARIABLES
 
-=item SCALAR INSTANCE VARIABLES
-
 =item INSTANCE VARIABLE INHERITANCE
 
 =item OBJECT RELATIONSHIPS
@@ -3075,7 +3073,7 @@ Subroutine, Signal, Sorting Traps, OS Traps, DBM Traps, Unclassified Traps
 
 Discontinuance, Deprecation, BugFix, Discontinuance, Discontinuance,
 Discontinuance, BugFix, Discontinuance, Discontinuance, BugFix,
-Discontinuance, Deprecation, Discontinuance
+Discontinuance, Deprecation, Discontinuance, Discontinuance
 
 =item Parsing Traps
 
@@ -3837,26 +3835,26 @@ PUSHi, PUSHMARK, PUSHn, PUSHp, PUSHs, PUSHu, PUTBACK, Renew, Renewc,
 require_pv, RETVAL, Safefree, savepv, savepvn, SAVETMPS, SP, SPAGAIN, ST,
 strEQ, strGE, strGT, strLE, strLT, strNE, strnEQ, strnNE, StructCopy,
 SvCUR, SvCUR_set, SvEND, SvGETMAGIC, SvGROW, SvIOK, SvIOKp, SvIOK_off,
-SvIOK_on, SvIOK_only, SvIV, SvIVX, SvLEN, SvNIOK, SvNIOKp, SvNIOK_off,
-SvNOK, SvNOKp, SvNOK_off, SvNOK_on, SvNOK_only, SvNV, SvNVX, SvOK, SvOOK,
-SvPOK, SvPOKp, SvPOK_off, SvPOK_on, SvPOK_only, SvPV, SvPVX, SvPV_force,
-SvPV_nolen, SvREFCNT, SvREFCNT_dec, SvREFCNT_inc, SvROK, SvROK_off,
-SvROK_on, SvRV, SvSETMAGIC, SvSetSV, SvSetSV_nosteal, SvSTASH, SvTAINT,
-SvTAINTED, SvTAINTED_off, SvTAINTED_on, SvTRUE, SvTYPE, svtype, SVt_IV,
-SVt_NV, SVt_PV, SVt_PVAV, SVt_PVCV, SVt_PVHV, SVt_PVMG, SvUPGRADE, SvUV,
-SvUVX, sv_2mortal, sv_bless, sv_catpv, sv_catpvf, sv_catpvf_mg, sv_catpvn,
-sv_catpvn_mg, sv_catpv_mg, sv_catsv, sv_catsv_mg, sv_chop, sv_cmp, sv_dec,
-sv_derived_from, sv_eq, sv_grow, sv_inc, sv_insert, sv_isa, sv_isobject,
-sv_len, sv_magic, sv_mortalcopy, sv_newmortal, sv_setiv, sv_setiv_mg,
-sv_setnv, sv_setnv_mg, sv_setpv, sv_setpvf, sv_setpvf_mg, sv_setpviv,
-sv_setpviv_mg, sv_setpvn, sv_setpvn_mg, sv_setpv_mg, sv_setref_iv,
-sv_setref_nv, sv_setref_pv, sv_setref_pvn, sv_setsv, sv_setsv_mg, sv_setuv,
-sv_setuv_mg, sv_unref, sv_upgrade, sv_usepvn, sv_usepvn_mg, sv_vcatpvfn,
-sv_vsetpvfn, THIS, toLOWER, toUPPER, warn, XPUSHi, XPUSHn, XPUSHp, XPUSHs,
-XPUSHu, XS, XSRETURN, XSRETURN_EMPTY, XSRETURN_IV, XSRETURN_NO,
-XSRETURN_NV, XSRETURN_PV, XSRETURN_UNDEF, XSRETURN_YES, XST_mIV, XST_mNO,
-XST_mNV, XST_mPV, XST_mUNDEF, XST_mYES, XS_VERSION, XS_VERSION_BOOTCHECK,
-Zero
+SvIOK_on, SvIOK_only, SvIV, SvIVX, SvLEN, SvLOCK, SvNIOK, SvNIOKp,
+SvNIOK_off, SvNOK, SvNOKp, SvNOK_off, SvNOK_on, SvNOK_only, SvNV, SvNVX,
+SvOK, SvOOK, SvPOK, SvPOKp, SvPOK_off, SvPOK_on, SvPOK_only, SvPV, SvPVX,
+SvPV_force, SvPV_nolen, SvREFCNT, SvREFCNT_dec, SvREFCNT_inc, SvROK,
+SvROK_off, SvROK_on, SvRV, SvSETMAGIC, SvSetSV, SvSetSV_nosteal, SvSTASH,
+SvTAINT, SvTAINTED, SvTAINTED_off, SvTAINTED_on, SvTRUE, SvTYPE, svtype,
+SVt_IV, SVt_NV, SVt_PV, SVt_PVAV, SVt_PVCV, SVt_PVHV, SVt_PVMG, SvUNLOCK,
+SvUPGRADE, SvUV, SvUVX, sv_2mortal, sv_bless, sv_catpv, sv_catpvf,
+sv_catpvf_mg, sv_catpvn, sv_catpvn_mg, sv_catpv_mg, sv_catsv, sv_catsv_mg,
+sv_chop, sv_cmp, sv_dec, sv_derived_from, sv_eq, sv_grow, sv_inc,
+sv_insert, sv_isa, sv_isobject, sv_len, sv_magic, sv_mortalcopy,
+sv_newmortal, sv_setiv, sv_setiv_mg, sv_setnv, sv_setnv_mg, sv_setpv,
+sv_setpvf, sv_setpvf_mg, sv_setpviv, sv_setpviv_mg, sv_setpvn,
+sv_setpvn_mg, sv_setpv_mg, sv_setref_iv, sv_setref_nv, sv_setref_pv,
+sv_setref_pvn, sv_setsv, sv_setsv_mg, sv_setuv, sv_setuv_mg, sv_unref,
+sv_upgrade, sv_usepvn, sv_usepvn_mg, sv_vcatpvfn, sv_vsetpvfn, THIS,
+toLOWER, toUPPER, warn, XPUSHi, XPUSHn, XPUSHp, XPUSHs, XPUSHu, XS,
+XSRETURN, XSRETURN_EMPTY, XSRETURN_IV, XSRETURN_NO, XSRETURN_NV,
+XSRETURN_PV, XSRETURN_UNDEF, XSRETURN_YES, XST_mIV, XST_mNO, XST_mNV,
+XST_mPV, XST_mUNDEF, XST_mYES, XS_VERSION, XS_VERSION_BOOTCHECK, Zero
 
 =item AUTHORS
 
@@ -3977,18 +3975,6 @@ FETCH_I<type>_ATTRIBUTES, MODIFY_I<type>_ATTRIBUTES
 
 =back
 
-=head2 attrs - set/get attributes of a subroutine (deprecated)
-
-=over
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-method, locked
-
-=back
-
 =head2 autouse - postpone load of modules until a function is used
 
 =over
@@ -4208,18 +4194,6 @@ operations
 
 =back
 
-=head2 ops - Perl pragma to restrict unsafe operations when compiling
-
-=over
-
-=item SYNOPSIS 
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=back
-
 =head2 overload - Package for overloading perl operations
 
 =over
@@ -4316,6 +4290,22 @@ integer, float, binary, q, qr
 
 =back
 
+=head2 pwent - Perl pragma to control the pwent functions
+
+=over
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=over
+
+=item subpragma shadow_password
+
+=back
+
+=back
+
 =head2 re - Perl pragma to alter regular expression behaviour
 
 =over
@@ -4636,7 +4626,7 @@ bytecode
 
 =item DESCRIPTION
 
-=item AUTHOR
+=item AUTHORS
 
 =back
 
@@ -4663,14 +4653,15 @@ bytecode
 =item OPTIONS
 
 B<-ofilename>, B<-afilename>, B<-->, B<-f>, B<-fcompress-nullops>,
-B<-fomit-sequence-numbers>, B<-fbypass-nullops>, B<-fstrip-syntax-tree>,
-B<-On>, B<-D>, B<-Do>, B<-Db>, B<-Da>, B<-DC>, B<-S>, B<-m>
+B<-fomit-sequence-numbers>, B<-fbypass-nullops>, B<-On>, B<-D>, B<-Do>,
+B<-Db>, B<-Da>, B<-DC>, B<-S>, B<-Ppackage>    Stores package in the
+output.    =back
 
 =item EXAMPLES
 
 =item BUGS
 
-=item AUTHOR
+=item AUTHORS
 
 =back
 
@@ -4962,14 +4953,15 @@ STYLE ] ), cmpthese ( RESULTSHASHREF ), countit(TIME, CODE), disablecache (
 =item OPTIONS
 
 B<-ofilename>, B<-afilename>, B<-->, B<-f>, B<-fcompress-nullops>,
-B<-fomit-sequence-numbers>, B<-fbypass-nullops>, B<-fstrip-syntax-tree>,
-B<-On>, B<-D>, B<-Do>, B<-Db>, B<-Da>, B<-DC>, B<-S>, B<-m>
+B<-fomit-sequence-numbers>, B<-fbypass-nullops>, B<-On>, B<-D>, B<-Do>,
+B<-Db>, B<-Da>, B<-DC>, B<-S>, B<-Ppackage>    Stores package in the
+output.    =back
 
 =item EXAMPLES
 
 =item BUGS
 
-=item AUTHOR
+=item AUTHORS
 
 =back
 
@@ -5611,58 +5603,58 @@ C<d_fcntl>, C<d_fd_macros>, C<d_fd_set>, C<d_fds_bits>, C<d_fgetpos>,
 C<d_flexfnam>, C<d_flock>, C<d_fork>, C<d_fpathconf>, C<d_fpos64_t>,
 C<d_frexpl>, C<d_fs_data_s>, C<d_fseeko>, C<d_fsetpos>, C<d_fstatfs>,
 C<d_fstatvfs>, C<d_ftello>, C<d_ftime>, C<d_Gconvert>, C<d_getcwd>,
-C<d_getfsstat>, C<d_getgrent>, C<d_getgrps>, C<d_gethbyaddr>,
-C<d_gethbyname>, C<d_gethent>, C<d_gethname>, C<d_gethostprotos>,
-C<d_getlogin>, C<d_getmnt>, C<d_getmntent>, C<d_getnbyaddr>,
-C<d_getnbyname>, C<d_getnent>, C<d_getnetprotos>, C<d_getpbyname>,
-C<d_getpbynumber>, C<d_getpent>, C<d_getpgid>, C<d_getpgrp2>, C<d_getpgrp>,
-C<d_getppid>, C<d_getprior>, C<d_getprotoprotos>, C<d_getpwent>,
-C<d_getsbyname>, C<d_getsbyport>, C<d_getsent>, C<d_getservprotos>,
-C<d_getspnam>, C<d_gettimeod>, C<d_gnulibc>, C<d_grpasswd>, C<d_hasmntopt>,
-C<d_htonl>, C<d_iconv>, C<d_index>, C<d_inetaton>, C<d_int64_t>,
-C<d_isascii>, C<d_isnan>, C<d_isnanl>, C<d_killpg>, C<d_lchown>,
-C<d_ldbl_dig>, C<d_link>, C<d_locconv>, C<d_lockf>, C<d_longdbl>,
-C<d_longlong>, C<d_lseekproto>, C<d_lstat>, C<d_madvise>, C<d_mblen>,
-C<d_mbstowcs>, C<d_mbtowc>, C<d_memchr>, C<d_memcmp>, C<d_memcpy>,
-C<d_memmove>, C<d_memset>, C<d_mkdir>, C<d_mkdtemp>, C<d_mkfifo>,
-C<d_mkstemp>, C<d_mkstemps>, C<d_mktime>, C<d_mmap>, C<d_modfl>,
-C<d_mprotect>, C<d_msg>, C<d_msg_ctrunc>, C<d_msg_dontroute>, C<d_msg_oob>,
-C<d_msg_peek>, C<d_msg_proxy>, C<d_msgctl>, C<d_msgget>, C<d_msgrcv>,
-C<d_msgsnd>, C<d_msync>, C<d_munmap>, C<d_mymalloc>, C<d_nice>,
-C<d_nv_preserved_bits>, C<d_nv_preserves_uv>, C<d_off64_t>,
-C<d_old_pthread_create_joinable>, C<d_oldpthreads>, C<d_oldsock>,
-C<d_open3>, C<d_pathconf>, C<d_pause>, C<d_perl_otherlibdirs>,
-C<d_phostname>, C<d_pipe>, C<d_poll>, C<d_portable>, C<d_PRId64>,
-C<d_PRIeldbl>, C<d_PRIEldbl>, C<d_PRIfldbl>, C<d_PRIFldbl>, C<d_PRIgldbl>,
-C<d_PRIGldbl>, C<d_PRIi64>, C<d_PRIo64>, C<d_PRIu64>, C<d_PRIx64>,
-C<d_PRIX64>, C<d_pthread_yield>, C<d_pwage>, C<d_pwchange>, C<d_pwclass>,
-C<d_pwcomment>, C<d_pwexpire>, C<d_pwgecos>, C<d_pwpasswd>, C<d_pwquota>,
-C<d_qgcvt>, C<d_quad>, C<d_readdir>, C<d_readlink>, C<d_rename>,
-C<d_rewinddir>, C<d_rmdir>, C<d_safebcpy>, C<d_safemcpy>, C<d_sanemcmp>,
-C<d_sched_yield>, C<d_scm_rights>, C<d_seekdir>, C<d_select>, C<d_sem>,
-C<d_semctl>, C<d_semctl_semid_ds>, C<d_semctl_semun>, C<d_semget>,
-C<d_semop>, C<d_setegid>, C<d_seteuid>, C<d_setgrent>, C<d_setgrps>,
-C<d_sethent>, C<d_setlinebuf>, C<d_setlocale>, C<d_setnent>, C<d_setpent>,
-C<d_setpgid>, C<d_setpgrp2>, C<d_setpgrp>, C<d_setprior>, C<d_setpwent>,
-C<d_setregid>, C<d_setresgid>, C<d_setresuid>, C<d_setreuid>, C<d_setrgid>,
-C<d_setruid>, C<d_setsent>, C<d_setsid>, C<d_setvbuf>, C<d_sfio>, C<d_shm>,
-C<d_shmat>, C<d_shmatprototype>, C<d_shmctl>, C<d_shmdt>, C<d_shmget>,
-C<d_sigaction>, C<d_sigsetjmp>, C<d_socket>, C<d_socklen_t>, C<d_sockpair>,
-C<d_sqrtl>, C<d_statblks>, C<d_statfs_f_flags>, C<d_statfs_s>,
-C<d_statvfs>, C<d_stdio_cnt_lval>, C<d_stdio_ptr_lval>,
-C<d_stdio_stream_array>, C<d_stdiobase>, C<d_stdstdio>, C<d_strchr>,
-C<d_strcoll>, C<d_strctcpy>, C<d_strerrm>, C<d_strerror>, C<d_strtod>,
-C<d_strtol>, C<d_strtold>, C<d_strtoll>, C<d_strtoul>, C<d_strtoull>,
-C<d_strtouq>, C<d_strxfrm>, C<d_suidsafe>, C<d_symlink>, C<d_syscall>,
-C<d_sysconf>, C<d_sysernlst>, C<d_syserrlst>, C<d_system>, C<d_tcgetpgrp>,
-C<d_tcsetpgrp>, C<d_telldir>, C<d_telldirproto>, C<d_time>, C<d_times>,
-C<d_truncate>, C<d_tzname>, C<d_umask>, C<d_uname>, C<d_union_semun>,
-C<d_ustat>, C<d_vendorarch>, C<d_vendorbin>, C<d_vendorlib>, C<d_vfork>,
-C<d_void_closedir>, C<d_voidsig>, C<d_voidtty>, C<d_volatile>,
-C<d_vprintf>, C<d_wait4>, C<d_waitpid>, C<d_wcstombs>, C<d_wctomb>,
-C<d_xenix>, C<date>, C<db_hashtype>, C<db_prefixtype>, C<defvoidused>,
-C<direntrytype>, C<dlext>, C<dlsrc>, C<doublesize>, C<drand01>,
-C<dynamic_ext>
+C<d_getespwnam>, C<d_getfsstat>, C<d_getgrent>, C<d_getgrps>,
+C<d_gethbyaddr>, C<d_gethbyname>, C<d_gethent>, C<d_gethname>,
+C<d_gethostprotos>, C<d_getlogin>, C<d_getmnt>, C<d_getmntent>,
+C<d_getnbyaddr>, C<d_getnbyname>, C<d_getnent>, C<d_getnetprotos>,
+C<d_getpbyname>, C<d_getpbynumber>, C<d_getpent>, C<d_getpgid>,
+C<d_getpgrp2>, C<d_getpgrp>, C<d_getppid>, C<d_getprior>,
+C<d_getprotoprotos>, C<d_getprpwnam>, C<d_getpwent>, C<d_getsbyname>,
+C<d_getsbyport>, C<d_getsent>, C<d_getservprotos>, C<d_getspnam>,
+C<d_gettimeod>, C<d_gnulibc>, C<d_grpasswd>, C<d_hasmntopt>, C<d_htonl>,
+C<d_iconv>, C<d_index>, C<d_inetaton>, C<d_int64_t>, C<d_isascii>,
+C<d_isnan>, C<d_isnanl>, C<d_killpg>, C<d_lchown>, C<d_ldbl_dig>,
+C<d_link>, C<d_locconv>, C<d_lockf>, C<d_longdbl>, C<d_longlong>,
+C<d_lseekproto>, C<d_lstat>, C<d_madvise>, C<d_mblen>, C<d_mbstowcs>,
+C<d_mbtowc>, C<d_memchr>, C<d_memcmp>, C<d_memcpy>, C<d_memmove>,
+C<d_memset>, C<d_mkdir>, C<d_mkdtemp>, C<d_mkfifo>, C<d_mkstemp>,
+C<d_mkstemps>, C<d_mktime>, C<d_mmap>, C<d_modfl>, C<d_mprotect>, C<d_msg>,
+C<d_msg_ctrunc>, C<d_msg_dontroute>, C<d_msg_oob>, C<d_msg_peek>,
+C<d_msg_proxy>, C<d_msgctl>, C<d_msgget>, C<d_msgrcv>, C<d_msgsnd>,
+C<d_msync>, C<d_munmap>, C<d_mymalloc>, C<d_nice>, C<d_nv_preserves_uv>,
+C<d_nv_preserves_uv_bits>, C<d_off64_t>, C<d_old_pthread_create_joinable>,
+C<d_oldpthreads>, C<d_oldsock>, C<d_open3>, C<d_pathconf>, C<d_pause>,
+C<d_perl_otherlibdirs>, C<d_phostname>, C<d_pipe>, C<d_poll>,
+C<d_portable>, C<d_PRId64>, C<d_PRIeldbl>, C<d_PRIEldbl>, C<d_PRIfldbl>,
+C<d_PRIFldbl>, C<d_PRIgldbl>, C<d_PRIGldbl>, C<d_PRIi64>, C<d_PRIo64>,
+C<d_PRIu64>, C<d_PRIx64>, C<d_PRIX64>, C<d_pthread_yield>, C<d_pwage>,
+C<d_pwchange>, C<d_pwclass>, C<d_pwcomment>, C<d_pwexpire>, C<d_pwgecos>,
+C<d_pwpasswd>, C<d_pwquota>, C<d_qgcvt>, C<d_quad>, C<d_readdir>,
+C<d_readlink>, C<d_rename>, C<d_rewinddir>, C<d_rmdir>, C<d_safebcpy>,
+C<d_safemcpy>, C<d_sanemcmp>, C<d_sched_yield>, C<d_scm_rights>,
+C<d_seekdir>, C<d_select>, C<d_sem>, C<d_semctl>, C<d_semctl_semid_ds>,
+C<d_semctl_semun>, C<d_semget>, C<d_semop>, C<d_setegid>, C<d_seteuid>,
+C<d_setgrent>, C<d_setgrps>, C<d_sethent>, C<d_setlinebuf>, C<d_setlocale>,
+C<d_setnent>, C<d_setpent>, C<d_setpgid>, C<d_setpgrp2>, C<d_setpgrp>,
+C<d_setprior>, C<d_setpwent>, C<d_setregid>, C<d_setresgid>,
+C<d_setresuid>, C<d_setreuid>, C<d_setrgid>, C<d_setruid>, C<d_setsent>,
+C<d_setsid>, C<d_setvbuf>, C<d_sfio>, C<d_shm>, C<d_shmat>,
+C<d_shmatprototype>, C<d_shmctl>, C<d_shmdt>, C<d_shmget>, C<d_sigaction>,
+C<d_sigsetjmp>, C<d_socket>, C<d_socklen_t>, C<d_sockpair>, C<d_sqrtl>,
+C<d_statblks>, C<d_statfs_f_flags>, C<d_statfs_s>, C<d_statvfs>,
+C<d_stdio_cnt_lval>, C<d_stdio_ptr_lval>, C<d_stdio_stream_array>,
+C<d_stdiobase>, C<d_stdstdio>, C<d_strchr>, C<d_strcoll>, C<d_strctcpy>,
+C<d_strerrm>, C<d_strerror>, C<d_strtod>, C<d_strtol>, C<d_strtold>,
+C<d_strtoll>, C<d_strtoul>, C<d_strtoull>, C<d_strtouq>, C<d_strxfrm>,
+C<d_suidsafe>, C<d_symlink>, C<d_syscall>, C<d_sysconf>, C<d_sysernlst>,
+C<d_syserrlst>, C<d_system>, C<d_tcgetpgrp>, C<d_tcsetpgrp>, C<d_telldir>,
+C<d_telldirproto>, C<d_time>, C<d_times>, C<d_truncate>, C<d_tzname>,
+C<d_umask>, C<d_uname>, C<d_union_semun>, C<d_ustat>, C<d_vendorarch>,
+C<d_vendorbin>, C<d_vendorlib>, C<d_vfork>, C<d_void_closedir>,
+C<d_voidsig>, C<d_voidtty>, C<d_volatile>, C<d_vprintf>, C<d_wait4>,
+C<d_waitpid>, C<d_wcstombs>, C<d_wctomb>, C<d_xenix>, C<date>,
+C<db_hashtype>, C<db_prefixtype>, C<defvoidused>, C<direntrytype>,
+C<dlext>, C<dlsrc>, C<doublesize>, C<drand01>, C<dynamic_ext>
 
 =item e
 
@@ -5691,12 +5683,12 @@ C<i_dirent>, C<i_dld>, C<i_dlfcn>, C<i_fcntl>, C<i_float>, C<i_gdbm>,
 C<i_grp>, C<i_iconv>, C<i_ieeefp>, C<i_inttypes>, C<i_limits>, C<i_locale>,
 C<i_machcthr>, C<i_malloc>, C<i_math>, C<i_memory>, C<i_mntent>, C<i_ndbm>,
 C<i_netdb>, C<i_neterrno>, C<i_netinettcp>, C<i_niin>, C<i_poll>,
-C<i_pthread>, C<i_pwd>, C<i_rpcsvcdbm>, C<i_sfio>, C<i_sgtty>, C<i_shadow>,
-C<i_socks>, C<i_stdarg>, C<i_stddef>, C<i_stdlib>, C<i_string>,
-C<i_sunmath>, C<i_sysaccess>, C<i_sysdir>, C<i_sysfile>, C<i_sysfilio>,
-C<i_sysin>, C<i_sysioctl>, C<i_syslog>, C<i_sysmman>, C<i_sysmode>,
-C<i_sysmount>, C<i_sysndir>, C<i_sysparam>, C<i_sysresrc>, C<i_syssecrt>,
-C<i_sysselct>, C<i_syssockio>, C<i_sysstat>, C<i_sysstatfs>,
+C<i_prot>, C<i_pthread>, C<i_pwd>, C<i_rpcsvcdbm>, C<i_sfio>, C<i_sgtty>,
+C<i_shadow>, C<i_socks>, C<i_stdarg>, C<i_stddef>, C<i_stdlib>,
+C<i_string>, C<i_sunmath>, C<i_sysaccess>, C<i_sysdir>, C<i_sysfile>,
+C<i_sysfilio>, C<i_sysin>, C<i_sysioctl>, C<i_syslog>, C<i_sysmman>,
+C<i_sysmode>, C<i_sysmount>, C<i_sysndir>, C<i_sysparam>, C<i_sysresrc>,
+C<i_syssecrt>, C<i_sysselct>, C<i_syssockio>, C<i_sysstat>, C<i_sysstatfs>,
 C<i_sysstatvfs>, C<i_systime>, C<i_systimek>, C<i_systimes>, C<i_systypes>,
 C<i_sysuio>, C<i_sysun>, C<i_sysutsname>, C<i_sysvfs>, C<i_syswait>,
 C<i_termio>, C<i_termios>, C<i_time>, C<i_unistd>, C<i_ustat>, C<i_utime>,
@@ -6205,7 +6197,7 @@ variables
 
 =item DESCRIPTION
 
-=item BUGS
+=item PERFORMANCE
 
 =back
 
@@ -6224,22 +6216,6 @@ arrays
 
 =back
 
-=head2 Errno - System errno constants
-
-=over
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CAVEATS
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
 =head2 Exporter - Implements default import method for modules
 
 =over
@@ -7631,239 +7607,6 @@ locale
 
 =back
 
-=head2 IO::Dir - supply object methods for directory handles
-
-=over
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-new ( [ DIRNAME ] ), open ( DIRNAME ), read (), seek ( POS ), tell (),
-rewind (), close (), tie %hash, IO::Dir, DIRNAME [, OPTIONS ]
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::File - supply object methods for filehandles
-
-=over
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( FILENAME [,MODE [,PERMS]] ), new_tmpfile
-
-=item METHODS
-
-open( FILENAME [,MODE [,PERMS]] )
-
-=item SEE ALSO
-
-=item HISTORY
-
-=back
-
-=head2 IO::Handle - supply object methods for I/O handles
-
-=over
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new (), new_from_fd ( FD, MODE )
-
-=item METHODS
-
-$io->fdopen ( FD, MODE ), $io->opened, $io->getline, $io->getlines,
-$io->ungetc ( ORD ), $io->write ( BUF, LEN [, OFFSET ] ), $io->error,
-$io->clearerr, $io->sync, $io->flush, $io->printflush ( ARGS ),
-$io->blocking ( [ BOOL ] ), $io->untaint
-
-=item NOTE
-
-=item SEE ALSO
-
-=item BUGS
-
-=item HISTORY
-
-=back
-
-=head2 IO::Pipe - supply object methods for pipes
-
-=over
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [READER, WRITER] )
-
-=item METHODS
-
-reader ([ARGS]), writer ([ARGS]), handles ()
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::Poll - Object interface to system poll call
-
-=over
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-mask ( IO [, EVENT_MASK ] ), poll ( [ TIMEOUT ] ), events ( IO ), remove (
-IO ), handles( [ EVENT_MASK ] )
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::Seekable - supply seek based methods for I/O objects
-
-=over
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=item HISTORY
-
-=back
-
-=head2 IO::Select - OO interface to the select system call
-
-=over
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [ HANDLES ] )
-
-=item METHODS
-
-add ( HANDLES ), remove ( HANDLES ), exists ( HANDLE ), handles, can_read (
-[ TIMEOUT ] ), can_write ( [ TIMEOUT ] ), has_exception ( [ TIMEOUT ] ),
-count (), bits(), select ( READ, WRITE, ERROR [, TIMEOUT ] )
-
-=item EXAMPLE
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::Socket - Object interface to socket communications
-
-=over
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [ARGS] )
-
-=item METHODS
-
-accept([PKG]), socketpair(DOMAIN, TYPE, PROTOCOL), timeout([VAL]),
-sockopt(OPT [, VAL]), sockdomain, socktype, protocol, connected
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::Socket::INET - Object interface for AF_INET domain sockets
-
-=over
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [ARGS] )
-
-=over
-
-=item METHODS
-
-sockaddr (), sockport (), sockhost (), peeraddr (), peerport (), peerhost
-()
-
-=back
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::Socket::UNIX - Object interface for AF_UNIX domain sockets
-
-=over
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [ARGS] )
-
-=item METHODS
-
-hostpath(), peerpath()
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
 =head2 IO::lib::IO::Dir, IO::Dir - supply object methods for directory
 handles
 
@@ -8104,28 +7847,6 @@ hostpath(), peerpath()
 
 =back
 
-=head2 IPC::Msg - SysV Msg IPC object class
-
-=over
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-new ( KEY , FLAGS ), id, rcv ( BUF, LEN [, TYPE [, FLAGS ]] ), remove, set
-( STAT ), set ( NAME => VALUE [, NAME => VALUE ...] ), snd ( TYPE, MSG [,
-FLAGS ] ), stat
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
 =head2 IPC::Open2, open2 - open a process for both reading and writing
 
 =over
@@ -8153,29 +7874,6 @@ handling
 
 =back
 
-=head2 IPC::Semaphore - SysV Semaphore IPC object class
-
-=over
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-new ( KEY , NSEMS , FLAGS ), getall, getncnt ( SEM ), getpid ( SEM ),
-getval ( SEM ), getzcnt ( SEM ), id, op ( OPLIST ), remove, set ( STAT ),
-set ( NAME => VALUE [, NAME => VALUE ...] ), setall ( VALUES ), setval ( N
-, VALUE ), stat
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
 =head2 IPC::SysV - SysV IPC constants
 
 =over
@@ -9050,6 +8748,124 @@ B<Pod::ParseTree>
 
 =back
 
+=head2 Pod::LaTeX - Convert Pod data to formatted Latex
+
+=over
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=back
+
+=over
+
+=item OBJECT METHODS
+
+C<initialize>
+
+=back
+
+=over
+
+=item Data Accessors
+
+B<AddPreamble>
+
+=back
+
+B<AddPostamble>
+
+B<Head1Level>
+
+B<Label>
+
+B<LevelNoNum>
+
+B<MakeIndex>
+
+B<ReplaceNAMEwithSection>
+
+B<StartWithNewPage>
+
+B<TableOfContents>
+
+B<UniqueLabels>
+
+B<UserPreamble>
+
+B<UserPostamble>
+
+B<Lists>
+
+=over
+
+=item Subclassed methods
+
+=back
+
+B<begin_pod>
+
+B<end_pod>
+
+B<command>
+
+B<verbatim>
+
+B<textblock>
+
+B<interior_sequence>
+
+=over
+
+=item List Methods
+
+B<begin_list>
+
+=back
+
+B<end_list>
+
+B<add_item>
+
+=over
+
+=item Methods for headings
+
+B<head>
+
+=back
+
+=over
+
+=item Internal methods
+
+B<_output>
+
+=back
+
+B<_replace_special_chars>
+
+B<_create_label>
+
+B<_create_index>
+
+B<_clean_latex_commands>
+
+=over
+
+=item NOTES
+
+=item SEE ALSO
+
+=item AUTHORS
+
+=item COPYRIGHT
+
+=item REVISION
+
+=back
+
 =head2 Pod::Man - Convert POD data to formatted *roff input
 
 =over
@@ -9640,39 +9456,6 @@ C<-pathlist>
 
 =back
 
-=head2 Safe - Compile and execute code in restricted compartments
-
-=over
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-a new namespace, an operator mask
-
-=item WARNING
-
-=over
-
-=item RECENT CHANGES
-
-=item Methods in class Safe
-
-permit (OP, ...), permit_only (OP, ...), deny (OP, ...), deny_only (OP,
-...), trap (OP, ...), untrap (OP, ...), share (NAME, ...), share_from
-(PACKAGE, ARRAYREF), varglob (VARNAME), reval (STRING), rdo (FILENAME),
-root (NAMESPACE), mask (MASK)
-
-=item Some Safety Issues
-
-Memory, CPU, Snooping, Signals, State Changes
-
-=item AUTHOR
-
-=back
-
-=back
-
 =head2 Search::Dict, look - search for key in dictionary file
 
 =over
@@ -9772,27 +9555,6 @@ pack_sockaddr_un PATH, unpack_sockaddr_un SOCKADDR_UN
 
 =back
 
-=head2 Syslog, Sys::Syslog, openlog, closelog, setlogmask, syslog - Perl
-interface to the UNIX syslog(3) calls
-
-=over
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-openlog $ident, $logopt, $facility, syslog $priority, $format, @args,
-setlogmask $mask_priority, setlogsock $sock_type (added in 5.004_02),
-closelog
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
 =head2 Syslog::Syslog, Sys::Syslog, openlog, closelog, setlogmask, syslog -
 Perl interface to the UNIX syslog(3) calls
 
diff --git a/pod/perlutil.pod b/pod/perlutil.pod
new file mode 100644 (file)
index 0000000..1b2c178
--- /dev/null
@@ -0,0 +1,185 @@
+=head1 NAME
+
+perlutil - utilities packaged with the Perl distribution
+
+=head1 DESCRIPTION
+
+Along with the Perl interpreter itself, the Perl distribution installs a
+range of utilities on your system. There are also several utilities
+which are used by the Perl distribution itself as part of the install
+process. This document exists to list all of these utilities, explain
+what they are for and provide pointers to each module's documentation,
+if appropriate.
+
+=head2 DOCUMENTATION
+
+=over 3
+
+=item L<perldoc|perldoc>
+
+The main interface to Perl's documentation is C<perldoc>, although
+if you're reading this, it's more than likely that you've already found
+it. F<perldoc> will extract and format the documentation from any file
+in the current directory, any Perl module installed on the system, or
+any of the standard documentation pages, such as this one. Use 
+C<perldoc E<lt>nameE<gt>> to get information on any of the utilities
+described in this document.
+
+=item L<pod2man|pod2man> and L<pod2text|pod2text>
+
+If it's run from a terminal, F<perldoc> will usually call F<pod2man> to
+translate POD (Plain Old Documentation - see L<perlpod> for an
+explanation) into a man page, and then run F<man> to display it; if
+F<man> isn't available, F<pod2text> will be used instead and the output
+piped through your favourite pager.
+
+=item L<pod2html|pod2html> and L<pod2latex|pod2latex>
+
+As well as these two, there are two other convertors: F<pod2html> will
+produce HTML pages from POD, and F<pod2latex>, which produces LaTeX
+files.
+
+=item L<pod2usage|pod2usage>
+
+If you just want to know how to use the utilities described here,
+F<pod2usage> will just extract the "USAGE" section; some of
+the utilities will automatically call F<pod2usage> on themselves when
+you call them with C<-help>.
+
+=item L<podselect|podselect>
+
+F<pod2usage> is a special case of F<podselect>, a utility to extract
+named sections from documents written in POD. For instance, while
+utilities have "USAGE" sections, Perl modules usually have "SYNOPSIS"
+sections: C<podselect -s "SYNOPSIS" ...> will extract this section for
+a given file.
+
+=item L<podchecker|podchecker>
+
+If you're writing your own documentation in POD, the F<podchecker>
+utility will look for errors in your markup.
+
+=item L<splain|splain>
+
+F<splain> is an interface to L<perldiag> - paste in your error message
+to it, and it'll explain it for you.
+
+=item L<roffitall|roffitall>
+
+The C<roffitall> utility is not installed on your system but lives in
+the F<pod/> directory of your Perl source kit; it converts all the
+documentation from the distribution to F<*roff> format, and produces a
+typeset PostScript or text file of the whole lot.
+
+=back
+
+=head2 CONVERTORS
+
+To help you convert legacy programs to Perl, we've included three
+conversion filters:
+
+=over 3
+
+=item L<a2p|a2p>
+
+F<a2p> converts F<awk> scripts to Perl programs; for example, C<a2p -F:>
+on the simple F<awk> script C<{print $2}> will produce a Perl program
+based around this code:
+
+    while (<>) {
+        ($Fld1,$Fld2) = split(/[:\n]/, $_, 9999);
+        print $Fld2;
+    }
+
+=item L<s2p|s2p>
+
+Similarly, F<s2p> converts F<sed> scripts to Perl programs. F<s2p> run
+on C<s/foo/bar> will produce a Perl program based around this:
+
+    while (<>) {
+        chop;
+        s/foo/bar/g;
+        print if $printit;
+    }
+
+=item L<find2perl|find2perl>
+
+Finally, F<find2perl> translates C<find> commands to Perl equivalents which 
+use the L<File::Find|File::Find> module. As an example, 
+C<find2perl . -user root -perm 4000 -print> produces the following callback
+subroutine for C<File::Find>:
+
+    sub wanted {
+        my ($dev,$ino,$mode,$nlink,$uid,$gid);
+        (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
+        $uid == $uid{'root'}) &&
+        (($mode & 0777) == 04000);
+        print("$name\n");
+    }
+
+=back
+
+As well as these filters for converting other languages, the
+L<pl2pm|pl2pm> utility will help you convert old-style Perl 4 libraries to 
+new-style Perl5 modules.
+
+=head2 Development
+
+There are a set of utilities which help you in developing Perl programs, 
+and in particular, extending Perl with C.
+
+=over 3
+
+=item L<perlbug|perlbug>
+
+F<perlbug> is the recommended way to report bugs in the perl interpreter
+itself or any of the standard library modules back to the developers;
+please read through the documentation for F<perlbug> thoroughly before
+using it to submit a bug report.
+
+=item L<h2ph|h2ph>
+
+Back before Perl had the XS system for connecting with C libraries,
+programmers used to get library constants by reading through the C
+header files. You may still see C<require 'syscall.ph'> or similar
+around - the F<.ph> file should be created by running F<h2ph> on the
+corresponding F<.h> file. See the F<h2ph> documentation for more on how
+to convert a whole bunch of header files at ones.
+
+=item L<c2ph|c2ph> and L<pstruct|pstruct>
+
+F<c2ph> and F<pstruct>, which are actually the same program but behave
+differently depending on how they are called, provide another way of
+getting at C with Perl - they'll convert C structures and union declarations
+to Perl code. This is deprecated in favour of F<h2xs> these days.
+
+=item L<h2xs|h2xs>
+
+F<h2xs> converts C header files into XS modules, and will try and write
+as much glue between C libraries and Perl modules as it can. It's also
+very useful for creating skeletons of pure Perl modules.
+
+=item L<dprofpp|dprofpp>
+
+Perl comes with a profiler, the F<Devel::Dprof> module. The
+F<dprofpp> utility analyzes the output of this profiler and tells you
+which subroutines are taking up the most run time. See L<Devel::Dprof>
+for more information.
+
+=item L<perlcc|perlcc>
+
+F<perlcc> is the interface to the experimental Perl compiler suite.
+
+=back
+
+=head2 SEE ALSO
+
+L<perldoc|perldoc>, L<pod2man|pod2man>, L<perlpod>,
+L<pod2html|pod2html>, L<pod2usage|pod2usage>, L<podselect|podselect>,
+L<podchecker|podchecker>, L<splain|splain>, L<perldiag>,
+L<roffitall|roffitall>, L<a2p|a2p>, L<s2p|s2p>, L<find2perl|find2perl>,
+L<File::Find|File::Find>, L<pl2pm|pl2pm>, L<perlbug|perlbug>,
+L<h2ph|h2ph>, L<c2ph|c2ph>, L<h2xs|h2xs>, L<dprofpp|dprofpp>,
+L<Devel::Dprof>, L<perlcc|perlcc>
+
+=cut
index 018c0b3..396da6f 100644 (file)
@@ -27,70 +27,82 @@ case "$1" in
        ;;
 esac
 
+# NEEDS TO BE BUILT BASED ON Makefile (or Makefile.SH, should such happen)
 toroff=`
        echo            \
-    $mandir/perl.1     \
-    $mandir/perldata.1 \
-    $mandir/perlsyn.1  \
-    $mandir/perlop.1   \
-    $mandir/perlre.1   \
-    $mandir/perlrun.1  \
-    $mandir/perlfunc.1 \
-    $mandir/perlvar.1  \
-    $mandir/perlsub.1  \
-    $mandir/perlopentut.1      \
-    $mandir/perlmod.1  \
-    $mandir/perlmodlib.1       \
-    $mandir/perlmodinstall.1   \
-    $mandir/perlfork.1 \
-    $mandir/perlform.1 \
-    $mandir/perllocale.1       \
-    $mandir/perlref.1  \
-    $mandir/perlreftut.1       \
-    $mandir/perldsc.1  \
-    $mandir/perllol.1  \
-    $mandir/perlboot.1 \
-    $mandir/perltoot.1 \
-    $mandir/perlobj.1  \
-    $mandir/perltie.1  \
-    $mandir/perlbot.1  \
-    $mandir/perlipc.1  \
-    $mandir/perlthrtut.1       \
-    $mandir/perldebguts.1      \
-    $mandir/perldebug.1        \
-    $mandir/perlnumber.1       \
-    $mandir/perldiag.1 \
-    $mandir/perlsec.1  \
-    $mandir/perltrap.1 \
-    $mandir/perlport.1 \
-    $mandir/perlstyle.1        \
-    $mandir/perlpod.1  \
-    $mandir/perlbook.1 \
-    $mandir/perlembed.1        \
-    $mandir/perlapio.1 \
-    $mandir/perlxs.1   \
-    $mandir/perlxstut.1        \
-    $mandir/perlguts.1 \
-    $mandir/perlcall.1 \
-    $mandir/perlcompile.1      \
-    $mandir/perltodo.1 \
-    $mandir/perlapi.1  \
-    $mandir/perlintern.1       \
-    $mandir/perlhack.1 \
-    $mandir/perlhist.1 \
-    $mandir/perldelta.1        \
-    $mandir/perl5004delta.1    \
-    $mandir/perl5005delta.1    \
-    $mandir/perlfaq.1  \
-    $mandir/perlfaq1.1 \
-    $mandir/perlfaq2.1 \
-    $mandir/perlfaq3.1 \
-    $mandir/perlfaq4.1 \
-    $mandir/perlfaq5.1 \
-    $mandir/perlfaq6.1 \
-    $mandir/perlfaq7.1 \
-    $mandir/perlfaq8.1 \
-    $mandir/perlfaq9.1 \
+       $mandir/perl.1  \
+       $mandir/perl5004delta.1 \
+       $mandir/perl5005delta.1 \
+       $mandir/perl56delta.1   \
+       $mandir/perlapi.1       \
+       $mandir/perlapio.1      \
+       $mandir/perlbook.1      \
+       $mandir/perlboot.1      \
+       $mandir/perlbot.1       \
+       $mandir/perlcall.1      \
+       $mandir/perlcompile.1   \
+       $mandir/perldata.1      \
+       $mandir/perldbmfilter.1 \
+       $mandir/perldebguts.1   \
+       $mandir/perldebug.1     \
+       $mandir/perldelta.1     \
+       $mandir/perldiag.1      \
+       $mandir/perldsc.1       \
+       $mandir/perlembed.1     \
+       $mandir/perlfaq.1       \
+       $mandir/perlfaq1.1      \
+       $mandir/perlfaq2.1      \
+       $mandir/perlfaq3.1      \
+       $mandir/perlfaq4.1      \
+       $mandir/perlfaq5.1      \
+       $mandir/perlfaq6.1      \
+       $mandir/perlfaq7.1      \
+       $mandir/perlfaq8.1      \
+       $mandir/perlfaq9.1      \
+       $mandir/perlfilter.1    \
+       $mandir/perlfork.1      \
+       $mandir/perlform.1      \
+       $mandir/perlfunc.1      \
+       $mandir/perlguts.1      \
+       $mandir/perlhack.1      \
+       $mandir/perlhist.1      \
+       $mandir/perlintern.1    \
+       $mandir/perlipc.1       \
+       $mandir/perllexwarn.1   \
+       $mandir/perllocale.1    \
+       $mandir/perllol.1       \
+       $mandir/perlmod.1       \
+       $mandir/perlmodinstall.1        \
+       $mandir/perlmodlib.1    \
+       $mandir/perlnewmod.1    \
+       $mandir/perlnumber.1    \
+       $mandir/perlobj.1       \
+       $mandir/perlop.1        \
+       $mandir/perlopentut.1   \
+       $mandir/perlpod.1       \
+       $mandir/perlport.1      \
+       $mandir/perlre.1        \
+       $mandir/perlref.1       \
+       $mandir/perlreftut.1    \
+       $mandir/perlrequick.1   \
+       $mandir/perlretut.1     \
+       $mandir/perlrun.1       \
+       $mandir/perlsec.1       \
+       $mandir/perlstyle.1     \
+       $mandir/perlsub.1       \
+       $mandir/perlsyn.1       \
+       $mandir/perlthrtut.1    \
+       $mandir/perltie.1       \
+       $mandir/perltoc.1       \
+       $mandir/perltodo.1      \
+       $mandir/perltoot.1      \
+       $mandir/perltootc.1     \
+       $mandir/perltrap.1      \
+       $mandir/perlunicode.1   \
+       $mandir/perlutil.1      \
+       $mandir/perlvar.1       \
+       $mandir/perlxs.1        \
+       $mandir/perlxstut.1     \
        \
     $mandir/a2p.1      \
     $mandir/c2ph.1     \
diff --git a/proto.h b/proto.h
index b3888d5..db2ae9c 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -809,6 +809,8 @@ PERL_CALLCONV U8*   Perl_utf16_to_utf8(pTHX_ U16* p, U8 *d, I32 bytelen);
 PERL_CALLCONV U8*      Perl_utf16_to_utf8_reversed(pTHX_ U16* p, U8 *d, I32 bytelen);
 PERL_CALLCONV I32      Perl_utf8_distance(pTHX_ U8 *a, U8 *b);
 PERL_CALLCONV U8*      Perl_utf8_hop(pTHX_ U8 *s, I32 off);
+PERL_CALLCONV U8*      Perl_utf8_to_bytes(pTHX_ U8 *s, STRLEN len);
+PERL_CALLCONV U8*      Perl_bytes_to_utf8(pTHX_ U8 *s, STRLEN len);
 PERL_CALLCONV UV       Perl_utf8_to_uv(pTHX_ U8 *s, I32* retlen);
 PERL_CALLCONV U8*      Perl_uv_to_utf8(pTHX_ U8 *d, UV uv);
 PERL_CALLCONV void     Perl_vivify_defelem(pTHX_ SV* sv);
@@ -963,8 +965,6 @@ STATIC I32  S_do_trans_CC_complex(pTHX_ SV *sv);
 STATIC I32     S_do_trans_UU_simple(pTHX_ SV *sv);
 STATIC I32     S_do_trans_UU_count(pTHX_ SV *sv);
 STATIC I32     S_do_trans_UU_complex(pTHX_ SV *sv);
-STATIC I32     S_do_trans_UC_simple(pTHX_ SV *sv);
-STATIC I32     S_do_trans_CU_simple(pTHX_ SV *sv);
 STATIC I32     S_do_trans_UC_trivial(pTHX_ SV *sv);
 STATIC I32     S_do_trans_CU_trivial(pTHX_ SV *sv);
 #endif
diff --git a/utf8.c b/utf8.c
index b570b12..b77cfdc 100644 (file)
--- a/utf8.c
+++ b/utf8.c
@@ -223,7 +223,7 @@ Perl_utf8_hop(pTHX_ U8 *s, I32 off)
 }
 
 /*
-=for apidoc utf8_to_bytes
+=for apidoc Am|U8 *|utf8_to_bytes|U8 *s|STRLEN len
 
 Converts a string C<s> of length C<len> from UTF8 into ASCII encoding.
 Unlike C<bytes_to_utf8>, this over-writes the original string.
@@ -256,11 +256,12 @@ Perl_utf8_to_bytes(pTHX_ U8* s, STRLEN len)
 }
 
 /*
-=for apidoc bytes_to_utf8
+=for apidoc Am|U8 *|bytes_to_utf8|U8 *s|STRLEN len
 
 Converts a string C<s> of length C<len> from ASCII into UTF8 encoding.
 Returns a pointer to the newly-created string.
 
+=cut
 */
 
 U8*
index 8ebe8b3..84c6923 100644 (file)
@@ -834,48 +834,48 @@ my $email = 'a.u.thor@a.galaxy.far.far.away';
 
 my $revhist = '';
 $revhist = <<EOT if $opt_C;
-
-=head1 HISTORY
-
-=over 8
-
-=item $TEMPLATE_VERSION
-
-Original version; created by h2xs $H2XS_VERSION with options
-
-  @ARGS
-
-=back
-
+#
+#=head1 HISTORY
+#
+#=over 8
+#
+#=item $TEMPLATE_VERSION
+#
+#Original version; created by h2xs $H2XS_VERSION with options
+#
+#  @ARGS
+#
+#=back
+#
 EOT
 
 my $exp_doc = <<EOD;
-
-=head2 EXPORT
-
-None by default.
-
+#
+#=head2 EXPORT
+#
+#None by default.
+#
 EOD
 if (@const_names and not $opt_P) {
   $exp_doc .= <<EOD;
-=head2 Exportable constants
-
-  @{[join "\n  ", @const_names]}
-
+#=head2 Exportable constants
+#
+#  @{[join "\n  ", @const_names]}
+#
 EOD
 }
 if (defined $fdecls and @$fdecls and not $opt_P) {
   $exp_doc .= <<EOD;
-=head2 Exportable functions
-
+#=head2 Exportable functions
+#
 EOD
-  $exp_doc .= <<EOD if $opt_p;
-When accessing these functions from Perl, prefix C<$opt_p> should be removed.
-
+#  $exp_doc .= <<EOD if $opt_p;
+#When accessing these functions from Perl, prefix C<$opt_p> should be removed.
+#
 EOD
   $exp_doc .= <<EOD;
-  @{[join "\n  ", @known_fnames{@fnames}]}
-
+#  @{[join "\n  ", @known_fnames{@fnames}]}
+#
 EOD
 }
 
@@ -898,7 +898,7 @@ my $pod = <<"END" unless $opt_P;
 #unedited.
 #
 #Blah blah blah.
-#$exp_doc$revhist
+$exp_doc$revhist
 #=head1 AUTHOR
 #
 #$author, $email
index 8a85d61..dd65271 100644 (file)
--- a/vms/vms.c
+++ b/vms/vms.c
@@ -5230,6 +5230,82 @@ rmscopy_fromperl(pTHX_ CV *cv)
   XSRETURN(1);
 }
 
+
+void
+mod2fname(CV *cv)
+{
+  dXSARGS;
+  char ultimate_name[NAM$C_MAXRSS+1], work_name[NAM$C_MAXRSS*8 + 1],
+       workbuff[NAM$C_MAXRSS*1 + 1];
+  int total_namelen = 3, counter, num_entries;
+  /* ODS-5 ups this, but we want to be consistent, so... */
+  int max_name_len = 39;
+  AV *in_array = (AV *)SvRV(ST(0));
+
+  num_entries = av_len(in_array);
+
+  /* All the names start with PL_. */
+  strcpy(ultimate_name, "PL_");
+
+  /* Clean up our working buffer */
+  Zero(work_name, sizeof(work_name), char);
+
+  /* Run through the entries and build up a working name */
+  for(counter = 0; counter <= num_entries; counter++) {
+    /* If it's not the first name then tack on a __ */
+    if (counter) {
+      strcat(work_name, "__");
+    }
+    strcat(work_name, SvPV(*av_fetch(in_array, counter, FALSE),
+                          PL_na));
+  }
+
+  /* Check to see if we actually have to bother...*/
+  if (strlen(work_name) + 3 <= max_name_len) {
+    strcat(ultimate_name, work_name);
+  } else {
+    /* It's too darned big, so we need to go strip. We use the same */
+    /* algorithm as xsubpp does. First, strip out doubled __ */
+    char *source, *dest, last;
+    dest = workbuff;
+    last = 0;
+    for (source = work_name; *source; source++) {
+      if (last == *source && last == '_') {
+       continue;
+      }
+      *dest++ = *source;
+      last = *source;
+    }
+    /* Go put it back */
+    strcpy(work_name, workbuff);
+    /* Is it still too big? */
+    if (strlen(work_name) + 3 > max_name_len) {
+      /* Strip duplicate letters */
+      last = 0;
+      dest = workbuff;
+      for (source = work_name; *source; source++) {
+       if (last == toupper(*source)) {
+       continue;
+       }
+       *dest++ = *source;
+       last = toupper(*source);
+      }
+      strcpy(work_name, workbuff);
+    }
+
+    /* Is it *still* too big? */
+    if (strlen(work_name) + 3 > max_name_len) {
+      /* Too bad, we truncate */
+      work_name[max_name_len - 2] = 0;
+    }
+    strcat(ultimate_name, work_name);
+  }
+
+  /* Okay, return it */
+  ST(0) = sv_2mortal(newSVpv(ultimate_name, 0));
+  XSRETURN(1);
+}
+
 void
 init_os_extras()
 {
@@ -5250,6 +5326,7 @@ init_os_extras()
   newXSproto("VMS::Filespec::vmspath",vmspath_fromperl,file,"$");
   newXSproto("VMS::Filespec::unixpath",unixpath_fromperl,file,"$");
   newXSproto("VMS::Filespec::candelete",candelete_fromperl,file,"$");
+  newXSproto("DynaLoader::mod2fname", mod2fname, file, "$");
   newXS("File::Copy::rmscopy",rmscopy_fromperl,file);
 
   return;