X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/83a46a6345f3963d6be04b9113be147a41e2d5bd..57d341ff6c3e402a11df37bde1bd84dfbb3bef99:/pod/perlport.pod diff --git a/pod/perlport.pod b/pod/perlport.pod index 3b71765..4b6224e 100644 --- a/pod/perlport.pod +++ b/pod/perlport.pod @@ -436,7 +436,7 @@ too). The portable idiom to remove all the versions of a file is 1 while unlink "file"; -This will terminate if the file is undeleteable for some reason +This will terminate if the file is undeletable for some reason (protected, not there, and so on). Don't count on a specific environment variable existing in @@ -670,7 +670,7 @@ When calculating specific times, such as for tests in time or date modules, it may be appropriate to calculate an offset for the epoch. use Time::Local qw(timegm); - my $offset = timegm(0, 0, 0, 1, 0, 70); + my $offset = timegm(0, 0, 0, 1, 0, 1970); The value for C<$offset> in Unix will be C<0>, but in Mac OS Classic will be some large number. C<$offset> can then be added to a Unix time @@ -827,7 +827,7 @@ Mailing list: cpan-testers-discuss@perl.org =item * -Testing results: L +Testing results: L =back @@ -984,6 +984,29 @@ The very portable L|POSIX/C> will work too: c:\> perl -MPOSIX -we "print join '|', uname" Windows NT|moonru|5.0|Build 2195 (Service Pack 2)|x86 +Errors set by Winsock functions are now put directly into C<$^E>, +and the relevant C error codes are now exported from the +L and L modules for testing this against. + +The previous behavior of putting the errors (converted to POSIX-style +C error codes since Perl 5.20.0) into C<$!> was buggy due to +the non-equivalence of like-named Winsock and POSIX error constants, +a relationship between which has unfortunately been established +in one way or another since Perl 5.8.0. + +The new behavior provides a much more robust solution for checking +Winsock errors in portable software without accidentally matching +POSIX tests that were intended for other OSes and may have different +meanings for Winsock. + +The old behavior is currently retained, warts and all, for backwards +compatibility, but users are encouraged to change any code that +tests C<$!> against C constants for Winsock errors to instead +test C<$^E> against C constants. After a suitable deprecation +period, which started with Perl 5.24, the old behavior may be +removed, leaving C<$!> unchanged after Winsock function calls, to +avoid any possible confusion over which error variable to check. + Also see: =over 4 @@ -1009,12 +1032,12 @@ The C modules in L. =item * -The ActiveState Pages, L +The ActiveState Pages, L =item * The Cygwin environment for Win32; F (installed -as L), L +as L), L =item * @@ -1211,8 +1234,8 @@ character sets internally (usually Character Code Set ID 0037 for OS/400 and either 1047 or POSIX-BC for S/390 systems). The rest of this section may need updating, but we don't know what it -should say. Please email comments to -L. +should say. Please submit comments to +L. On the mainframe Perl currently works under the "Unix system services for OS/390" (formerly known as OpenEdition), VM/ESA OpenEdition, or @@ -1339,7 +1362,7 @@ where Directory and File =~ m|[^\0- "\.\$\%\&:\@\\^\|\177]+| The default filename translation is roughly C, swapping dots -and slahes. +and slashes. Note that C<"ADFS::HardDisk.$.File" ne 'ADFS::HardDisk.$.File'> and that the second stage of C<$> interpolation in regular expressions will fall @@ -1459,7 +1482,7 @@ S, F Listed below are functions that are either completely unimplemented or else have been implemented differently on various platforms. -Following each description will be, in parentheses, a list of +Preceding each description will be, in parentheses, a list of platforms that the description applies to. The list may well be incomplete, or even wrong in some places. When @@ -1481,125 +1504,163 @@ full description of available variables. =item -X +(Win32) C<-w> only inspects the read-only file attribute (FILE_ATTRIBUTE_READONLY), which determines whether the directory can be deleted, not whether it can be written to. Directories always have read and write access unless denied -by discretionary access control lists (DACLs). (Win32) +by discretionary access control lists (DACLs). +(VMS) C<-r>, C<-w>, C<-x>, and C<-o> tell whether the file is accessible, -which may not reflect UIC-based file protections. (VMS) +which may not reflect UIC-based file protections. +(S) C<-s> by name on an open file will return the space reserved on disk, rather than the current extent. C<-s> on an open filehandle returns the -current size. (S) +current size. +(Win32, VMS, S) C<-R>, C<-W>, C<-X>, C<-O> are indistinguishable from C<-r>, C<-w>, -C<-x>, C<-o>. (Win32, VMS, S) +C<-x>, C<-o>. -C<-g>, C<-k>, C<-l>, C<-u>, C<-A> are not particularly meaningful. (Win32, VMS, S) +C<-g>, C<-k>, C<-l>, C<-u>, C<-A> are not particularly meaningful. -C<-p> is not particularly meaningful. (VMS, S) +(VMS, S) +C<-p> is not particularly meaningful. -C<-d> is true if passed a device spec without an explicit directory. (VMS) +C<-d> is true if passed a device spec without an explicit directory. +(Win32) C<-x> (or C<-X>) determine if a file ends in one of the executable -suffixes. C<-S> is meaningless. (Win32) +suffixes. C<-S> is meaningless. -C<-x> (or C<-X>) determine if a file has an executable file type. (S) +C<-x> (or C<-X>) determine if a file has an executable file type. =item alarm +(Win32) Emulated using timers that must be explicitly polled whenever Perl wants to dispatch "safe signals" and therefore cannot interrupt -blocking system calls. (Win32) +blocking system calls. =item atan2 +(Tru64, HP-UX 10.20) Due to issues with various CPUs, math libraries, compilers, and standards, results for C may vary depending on any combination of the above. Perl attempts to conform to the Open Group/IEEE standards for the results returned from C, but cannot force the issue if the system Perl is -run on does not allow it. (Tru64, HP-UX 10.20) +run on does not allow it. The current version of the standards for C is available at L. =item binmode -Meaningless. (S) +(S) +Meaningless. +(VMS) Reopens file and restores pointer; if function fails, underlying filehandle may be closed, or pointer may be in a different position. -(VMS) +(Win32) The value returned by L|perlfunc/tell FILEHANDLE> may be affected -after the call, and the filehandle may be flushed. (Win32) +after the call, and the filehandle may be flushed. =item chmod +(Win32) Only good for changing "owner" read-write access; "group" and "other" -bits are meaningless. (Win32) +bits are meaningless. -Only good for changing "owner" and "other" read-write access. (S) +(S) +Only good for changing "owner" and "other" read-write access. -Access permissions are mapped onto VOS access-control list changes. (VOS) +(VOS) +Access permissions are mapped onto VOS access-control list changes. +(Cygwin) The actual permissions set depend on the value of the C variable -in the SYSTEM environment settings. (Cygwin) +in the SYSTEM environment settings. +(Android) Setting the exec bit on some locations (generally F) will return true -but not actually set the bit. (Android) +but not actually set the bit. + +(VMS) +A mode argument of zero sets permissions to the user's default permission mask +rather than disabling all permissions. =item chown -Not implemented. (S, S) +(S, S) +Not implemented. -Does nothing, but won't fail. (Win32) +(Win32) +Does nothing, but won't fail. -A little funky, because VOS's notion of ownership is a little funky. (VOS) +(VOS) +A little funky, because VOS's notion of ownership is a little funky. =item chroot -Not implemented. (Win32, VMS, S, S, VOS) +(Win32, VMS, S, S, VOS) +Not implemented. =item crypt +(Win32) May not be available if library or source was not provided when building -perl. (Win32) +perl. -Not implemented. (Android) +(Android) +Not implemented. =item dbmclose -Not implemented. (VMS, S, VOS) +(VMS, S, VOS) +Not implemented. =item dbmopen -Not implemented. (VMS, S, VOS) +(VMS, S, VOS) +Not implemented. =item dump -Not useful. (S) +(S) +Not useful. -Not supported. (Cygwin, Win32) +(Cygwin, Win32) +Not supported. -Invokes VMS debugger. (VMS) +(VMS) +Invokes VMS debugger. =item exec +(Win32) C without the use of indirect object syntax (C) -may fall back to trying the shell if the first C fails. (Win32) +may fall back to trying the shell if the first C fails. + +Note that the list form of exec() is emulated since the Win32 API +CreateProcess() accepts a simple string rather than an array of +command-line arguments. This may have security implications for your +code. -Does not automatically flush output handles on some platforms. (SunOS, Solaris, HP-UX) +Does not automatically flush output handles on some platforms. -Not supported. (Symbian OS) +(Symbian OS) +Not supported. =item exit +(VMS) Emulates Unix C (which considers C to indicate an error) by mapping the C<1> to C (C<44>). This behavior may be overridden with the pragma L|vmsish/C>. As with @@ -1611,12 +1672,13 @@ POSIX_EXIT mode is enabled, the exit code should always be a valid VMS exit code and not a generic number. When the POSIX_EXIT mode is enabled, a generic number will be encoded in a method compatible with the C library _POSIX_EXIT macro so that it can be decoded by other -programs, particularly ones written in C, like the GNV package. (VMS) +programs, particularly ones written in C, like the GNV package. +(Solaris) C resets file pointers, which is a problem when called from a child process (created by L|perlfunc/fork>) in L|perlmod/BEGIN, UNITCHECK, CHECK, INIT and END>. -A workaround is to use L|POSIX/C<_exit>>. (Solaris) +A workaround is to use L|POSIX/C<_exit>>. exit unless $Config{archname} =~ /\bsolaris\b/; require POSIX; @@ -1624,151 +1686,187 @@ A workaround is to use L|POSIX/C<_exit>>. (Solaris) =item fcntl -Not implemented. (Win32) +(Win32) +Not implemented. -Some functions available based on the version of VMS. (VMS) +(VMS) +Some functions available based on the version of VMS. =item flock -Not implemented (VMS, S, VOS). +(VMS, S, VOS) +Not implemented. =item fork -Not implemented. (AmigaOS, S, VMS) +(AmigaOS, S, VMS) +Not implemented. -Emulated using multiple interpreters. See L. (Win32) +(Win32) +Emulated using multiple interpreters. See L. -Does not automatically flush output handles on some platforms. (SunOS, Solaris, HP-UX) +Does not automatically flush output handles on some platforms. =item getlogin -Not implemented. (S) +(S) +Not implemented. =item getpgrp -Not implemented. (Win32, VMS, S) +(Win32, VMS, S) +Not implemented. =item getppid -Not implemented. (Win32, S) +(Win32, S) +Not implemented. =item getpriority -Not implemented. (Win32, VMS, S, VOS) +(Win32, VMS, S, VOS) +Not implemented. =item getpwnam -Not implemented. (Win32) +(Win32) +Not implemented. -Not useful. (S) +(S) +Not useful. =item getgrnam -Not implemented. (Win32, VMS, S) +(Win32, VMS, S) +Not implemented. =item getnetbyname -Not implemented. (Android, Win32, S) +(Android, Win32, S) +Not implemented. =item getpwuid -Not implemented. (Win32) +(Win32) +Not implemented. -Not useful. (S) +(S) +Not useful. =item getgrgid -Not implemented. (Win32, VMS, S) +(Win32, VMS, S) +Not implemented. =item getnetbyaddr -Not implemented. (Android, Win32, S) +(Android, Win32, S) +Not implemented. =item getprotobynumber -Not implemented. (Android) - -=item getservbyport +(Android) +Not implemented. =item getpwent -Not implemented. (Android, Win32) +(Android, Win32) +Not implemented. =item getgrent -Not implemented. (Android, Win32, VMS) +(Android, Win32, VMS) +Not implemented. =item gethostbyname +(S) C does not work everywhere: you may have -to use C. (S) +to use C. =item gethostent -Not implemented. (Win32) +(Win32) +Not implemented. =item getnetent -Not implemented. (Android, Win32, S) +(Android, Win32, S) +Not implemented. =item getprotoent -Not implemented. (Android, Win32, S) +(Android, Win32, S) +Not implemented. =item getservent -Not implemented. (Win32, S) +(Win32, S) +Not implemented. =item seekdir -Not implemented. (Android) +(Android) +Not implemented. =item sethostent -Not implemented. (Android, Win32, S, S) +(Android, Win32, S, S) +Not implemented. =item setnetent -Not implemented. (Win32, S, S) +(Win32, S, S) +Not implemented. =item setprotoent -Not implemented. (Android, Win32, S, S) +(Android, Win32, S, S) +Not implemented. =item setservent -Not implemented. (S, Win32, S) +(S, Win32, S) +Not implemented. =item endpwent -Not implemented. (Win32) +(Win32) +Not implemented. -Either not implemented or a no-op. (Android) +(Android) +Either not implemented or a no-op. =item endgrent -Not implemented. (Android, S, VMS, Win32) +(Android, S, VMS, Win32) +Not implemented. =item endhostent -Not implemented. (Android, Win32) +(Android, Win32) +Not implemented. =item endnetent -Not implemented. (Android, Win32, S) +(Android, Win32, S) +Not implemented. =item endprotoent -Not implemented. (Android, Win32, S) +(Android, Win32, S) +Not implemented. =item endservent -Not implemented. (S, Win32) +(S, Win32) +Not implemented. -=item getsockopt SOCKET,LEVEL,OPTNAME +=item getsockopt -Not implemented. (S) +(S) +Not implemented. =item glob @@ -1782,50 +1880,62 @@ because work-arounds in the implementation use floating point numbers, it will become inaccurate as the time gets larger. This is a bug and will be fixed in the future. -Time values are 32-bit quantities. (VOS) +(VOS) +Time values are 32-bit quantities. -=item ioctl FILEHANDLE,FUNCTION,SCALAR +=item ioctl -Not implemented. (VMS) +(VMS) +Not implemented. +(Win32) Available only for socket handles, and it does what the C call -in the Winsock API does. (Win32) +in the Winsock API does. -Available only for socket handles. (S) +(S) +Available only for socket handles. =item kill -Not implemented, hence not useful for taint checking. (S) +(S) +Not implemented, hence not useful for taint checking. +(Win32) C doesn't send a signal to the identified process like it does on Unix platforms. Instead C terminates the process identified by C<$pid>, and makes it exit immediately with exit status C<$sig>. As in Unix, if C<$sig> is 0 and the specified process exists, it -returns true without actually terminating it. (Win32) +returns true without actually terminating it. +(Win32) C will terminate the process specified by C<$pid> and recursively all child processes owned by it. This is different from the Unix semantics, where the signal will be delivered to all processes in the same process group as the process specified by -C<$pid>. (Win32) +C<$pid>. +(VMS) A pid of -1 indicating all processes on the system is not currently -supported. (VMS) +supported. =item link -Not implemented. (S, VOS) +(S, VOS) +Not implemented. +(AmigaOS) Link count not updated because hard links are not quite that hard -(They are sort of half-way between hard and soft links). (AmigaOS) +(They are sort of half-way between hard and soft links). +(Win32) Hard links are implemented on Win32 under NTFS only. They are natively supported on Windows 2000 and later. On Windows NT they are implemented using the Windows POSIX subsystem support and the Perl process will need Administrator or Backup Operator privileges -to create hard links. (Win32) +to create hard links. -Available on 64 bit OpenVMS 8.2 and later. (VMS) +(VMS) +Available on 64 bit OpenVMS 8.2 and later. =item localtime @@ -1835,9 +1945,11 @@ but usually by no more than an hour. =item lstat -Not implemented. (S) +(S) +Not implemented. -Return values (especially for device and inode) may be bogus. (Win32) +(Win32) +Return values (especially for device and inode) may be bogus. =item msgctl @@ -1847,34 +1959,48 @@ Return values (especially for device and inode) may be bogus. (Win32) =item msgrcv -Not implemented. (Android, Win32, VMS, S, S, VOS) +(Android, Win32, VMS, S, S, VOS) +Not implemented. =item open -Open modes C<|-> and C<-|> are unsupported. (Win32, S) +(S) +Open modes C<|-> and C<-|> are unsupported. +(SunOS, Solaris, HP-UX) Opening a process does not automatically flush output handles on some -platforms. (SunOS, Solaris, HP-UX) +platforms. + +(Win32) +Both of modes C<|-> and C<-|> are supported, but the list form is +emulated since the Win32 API CreateProcess() accepts a simple string +rather than an array of arguments. This may have security +implications for your code. =item readlink -Not implemented. (Win32, VMS, S) +(Win32, VMS, S) +Not implemented. =item rename -Can't move directories between directories on different logical volumes. (Win32) +(Win32) +Can't move directories between directories on different logical volumes. =item rewinddir +(Win32) Will not cause L|perlfunc/readdir DIRHANDLE> to re-read the directory stream. The entries already read before the C call -will just be returned again from a cache buffer. (Win32) +will just be returned again from a cache buffer. =item select -Only implemented on sockets. (Win32, VMS) +(Win32, VMS) +Only implemented on sockets. -Only reliable on sockets. (S) +(S) +Only reliable on sockets. Note that the L|perlfunc/select FILEHANDLE> form is generally portable. @@ -1885,27 +2011,33 @@ generally portable. =item semop -Not implemented. (Android, Win32, VMS, S) +(Android, Win32, VMS, S) +Not implemented. =item setgrent -Not implemented. (Android, VMS, Win32, S) +(Android, VMS, Win32, S) +Not implemented. =item setpgrp -Not implemented. (Win32, VMS, S, VOS) +(Win32, VMS, S, VOS) +Not implemented. =item setpriority -Not implemented. (Win32, VMS, S, VOS) +(Win32, VMS, S, VOS) +Not implemented. =item setpwent -Not implemented. (Android, Win32, S) +(Android, Win32, S) +Not implemented. =item setsockopt -Not implemented. (S) +(S) +Not implemented. =item shmctl @@ -1915,19 +2047,23 @@ Not implemented. (S) =item shmwrite -Not implemented. (Android, Win32, VMS, S) +(Android, Win32, VMS, S) +Not implemented. =item sleep +(Win32) Emulated using synchronization functions such that it can be interrupted by L|perlfunc/alarm SECONDS>, and limited to a -maximum of 4294967 seconds, approximately 49 days. (Win32) +maximum of 4294967 seconds, approximately 49 days. =item socketpair -Not implemented. (S) +(S) +Not implemented. -Available on 64 bit OpenVMS 8.2 and later. (VMS) +(VMS) +Available on 64 bit OpenVMS 8.2 and later. =item stat @@ -1935,48 +2071,60 @@ Platforms that do not have C, C, or C will return these as C<''>, so numeric comparison or manipulation of these fields may cause 'not numeric' warnings. -C not supported on UFS. (S) +(S) +C not supported on UFS. -C is creation time instead of inode change time. (Win32) +(Win32) +C is creation time instead of inode change time. -C and C are not meaningful. (Win32) +(Win32) +C and C are not meaningful. -C and C are not necessarily reliable. (VMS) +(VMS) +C and C are not necessarily reliable. +(S) C, C and C all return the last modification time. -C and C are not necessarily reliable. (S) +C and C are not necessarily reliable. +(OS/2) C, C, C, and C are not available. C is not -meaningful and will differ between stat calls on the same file. (OS/2) +meaningful and will differ between stat calls on the same file. +(Cygwin) Some versions of cygwin when doing a C and not finding it -may then attempt to C. (Cygwin) +may then attempt to C. +(Win32) C needs to open the file to determine the link count and update attributes that may have been changed through hard links. Setting L|perlvar/${^WIN32_SLOPPY_STAT}> to a -true value speeds up C by not performing this operation. (Win32) +true value speeds up C by not performing this operation. =item symlink -Not implemented. (Win32, S) +(Win32, S) +Not implemented. +(VMS) Implemented on 64 bit VMS 8.3. VMS requires the symbolic link to be in Unix -syntax if it is intended to resolve to a valid path. (VMS) +syntax if it is intended to resolve to a valid path. =item syscall -Not implemented. (Win32, VMS, S, VOS) +(Win32, VMS, S, VOS) +Not implemented. =item sysopen +(S, OS/390) The traditional C<0>, C<1>, and C<2> MODEs are implemented with different numeric values on some systems. The flags exported by L|Fcntl> (C, C, C) should work everywhere though. -(S, OS/390) =item system +(Win32) As an optimization, may not call the command shell specified in C<$ENV{PERL5SHELL}>. C spawns an external process and immediately returns its process designator, without @@ -1985,8 +2133,14 @@ in L|perlfunc/wait> or L|perlfunc/waitpid PID,FLAGS>. Failure to C a subprocess is indicated by setting L|perlvar/$?> to C<<< 255 << 8 >>>. L|perlvar/$?> is set in a way compatible with Unix (i.e. the exit status of the subprocess is -obtained by C<<< $? >> 8 >>>, as described in the documentation). (Win32) +obtained by C<<< $? >> 8 >>>, as described in the documentation). + +Note that the list form of system() is emulated since the Win32 API +CreateProcess() accepts a simple string rather than an array of +command-line arguments. This may have security implications for your +code. +(S) There is no shell to process metacharacters, and the native standard is to pass a command line terminated by "\n" "\r" or "\0" to the spawned program. Redirection such as C<< > foo >> is performed (if at all) by @@ -1996,72 +2150,88 @@ which attempts to provide emulation of the stdin, stdout, stderr in force in the parent, provided the child program uses a compatible version of the emulation library. C will call the native command line directly and no such emulation of a child Unix program will occur. -Mileage B vary. (S) +Mileage B vary. +(Win32) C without the use of indirect object syntax (C) -may fall back to trying the shell if the first C fails. (Win32) +may fall back to trying the shell if the first C fails. -Does not automatically flush output handles on some platforms. (SunOS, Solaris, HP-UX) +Does not automatically flush output handles on some platforms. -The return value is POSIX-like (shifted up by 8 bits), which only allows -room for a made-up value derived from the severity bits of the native +(VMS) +As with Win32, C spawns an external process and +immediately returns its process designator without waiting for the +process to terminate. In this case the return value may be used subsequently +in L|perlfunc/wait> or L|perlfunc/waitpid PID,FLAGS>. +Otherwise the return value is POSIX-like (shifted up by 8 bits), which only +allows room for a made-up value derived from the severity bits of the native 32-bit condition code (unless overridden by L|vmsish/C>). If the native condition code is one that has a POSIX value encoded, the POSIX value will be decoded to extract the expected exit value. For more details see -L. (VMS) +L. =item telldir -Not implemented. (Android) +(Android) +Not implemented. =item times +(Win32) "Cumulative" times will be bogus. On anything other than Windows NT or Windows 2000, "system" time will be bogus, and "user" time is actually the time returned by the L|clock(3)> function in the C -runtime library. (Win32) +runtime library. -Not useful. (S) +(S) +Not useful. =item truncate -Not implemented. (Older versions of VMS) +(Older versions of VMS) +Not implemented. -Truncation to same-or-shorter lengths only. (VOS) +(VOS) +Truncation to same-or-shorter lengths only. +(Win32) If a FILEHANDLE is supplied, it must be writable and opened in append mode (i.e., use C<<< open(my $fh, '>>', 'filename') >>> or C. If a filename is supplied, it -should not be held open elsewhere. (Win32) +should not be held open elsewhere. =item umask Returns C where unavailable. +(AmigaOS) C works but the correct permissions are set only when the file -is finally closed. (AmigaOS) +is finally closed. =item utime -Only the modification time is updated. (VMS, S) +(VMS, S) +Only the modification time is updated. +(Win32) May not behave as expected. Behavior depends on the C runtime library's implementation of L|utime(2)>, and the filesystem being used. The FAT filesystem typically does not support an "access time" field, and it may limit timestamps to a granularity of two seconds. -(Win32) =item wait =item waitpid +(Win32) Can only be applied to process handles returned for processes spawned using C or pseudo processes created with -L|perlfunc/fork>. (Win32) +L|perlfunc/fork>. -Not useful. (S) +(S) +Not useful. =back @@ -2107,7 +2277,7 @@ Some tests are known to fail: =item * F - see -L +L =item * @@ -2262,7 +2432,6 @@ available at L Open UNIX (Unixware) (since Perl 5.8.1/5.9.0) OS/2 OS/400 (using the PASE) (since Perl 5.8.1/5.9.0) - PowerUX POSIX-BC (formerly BS2000) QNX Solaris @@ -2306,7 +2475,8 @@ the past (5.005_03 and earlier), but we haven't been able to verify their status for the current release, either because the hardware/software platforms are rare or because we don't have an active champion on these platforms--or both. They used to work, -though, so go ahead and try compiling them, and let perlbug@perl.org +though, so go ahead and try compiling them, and let +L know of any trouble. 3b1 @@ -2364,7 +2534,7 @@ L for binary distributions. =head1 SEE ALSO L, L, L, -L, L, L, +L, L, L, L, L, L, L, L, L, L, L, L, L, @@ -2373,7 +2543,7 @@ L, L, L, L, and L. =head1 AUTHORS / CONTRIBUTORS -Abigail , +Abigail , Charles Bailey , Graham Barr , Tom Christiansen ,