SCM

SCM Repository

[ihelp] View of /src/manual/R-exts-ko.po
ViewVC logotype

View of /src/manual/R-exts-ko.po

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2642 - (download) (annotate)
Tue Sep 29 23:39:30 2015 UTC (20 months, 3 weeks ago) by gnustats
File size: 734497 byte(s)
 is teaked.
# Korean translation for translation.ko package
# doc/manual/R-exts.texi
#
# Copyright (C) 2008-2015 Chel Hee Lee, and R Translation Teams
#
# This file is distributed under the same license as the R distribution.
# Chel Hee Lee <chl948@mail.usask.ca>, 2008-2015.
#
# Note that every single contributor listed on the Acknowledgement 
# assigns his or her contribution to Chel Hee Lee.
#
# Note also that your name may not be found because of incomplete 
# record keeping.  If you were overlooked, please let the maintainer 
# know and the list will be updated.  Please also contact the mainter 
# of this document in order to voluntarily participate in 
# or offer your help with this work. 
#
msgid ""
msgstr ""
"Project-Id-Version: translation.ko_0.0.1.4\n"
"Report-Msgid-Bugs-To: chl948@mail.usask.ca\n"
"POT-Creation-Date: 2015-09-29 17:38-0600\n"
"PO-Revision-Date: 2015-09-29 17:38-0600\n"
"Last-Translator: Chel Hee Lee  <chl948@mail.usask.ca>\n"
"Language-Team: Chel Hee Lee  <chl948@mail.usask.ca>\n"
"Language: ko\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#
#. type: top
#: R-exts.texi:4
#: R-exts.texi:34
#: R-exts.texi:52
#, no-wrap
msgid "Writing R Extensions"
msgstr ""

#
#. type: dircategory
#: R-exts.texi:13
#, no-wrap
msgid "Programming"
msgstr ""

#
#. type: menuentry
#: R-exts.texi:16
msgid "R Extensions: (R-exts)"
msgstr ""

#
#. type: menuentry
#: R-exts.texi:16
msgid "Writing R Extensions."
msgstr ""

#
#. type: include
#: R-exts.texi:20
#, no-wrap
msgid "R-defs.texi"
msgstr ""

#
#. type: include
#: R-exts.texi:21
#, no-wrap
msgid "version.texi"
msgstr ""

#
#. type: copying
#: R-exts.texi:25
msgid "This manual is for R, version @value{VERSION}."
msgstr ""

#
#. type: copying
#: R-exts.texi:27
msgid "@Rcopyright{1999}"
msgstr ""

#
#. type: quotation
#: R-exts.texi:30
msgid "@permission{}"
msgstr ""

#
#. type: subtitle
#: R-exts.texi:35
#, no-wrap
msgid "Version @value{VERSION}"
msgstr ""

#
#. type: author
#: R-exts.texi:36
#, no-wrap
msgid "R Core Team"
msgstr ""

#
#. type: node
#: R-exts.texi:51
#: R-exts.texi:76
#: R-exts.texi:85
#: R-exts.texi:4976
#: R-exts.texi:6498
#: R-exts.texi:7093
#: R-exts.texi:8349
#: R-exts.texi:11306
#: R-exts.texi:12888
#: R-exts.texi:13062
#: R-exts.texi:13984
#: R-exts.texi:13989
#, no-wrap
msgid "Top"
msgstr ""

#
#. type: node
#: R-exts.texi:51
#: R-exts.texi:74
#: R-exts.texi:76
#: R-exts.texi:77
#: R-exts.texi:85
#, no-wrap
msgid "Acknowledgements"
msgstr ""

#
#. type: node
#: R-exts.texi:51
#, no-wrap
msgid "(dir)"
msgstr ""

#
#. type: ifnottex
#: R-exts.texi:57
msgid ""
"This is a guide to extending @R{}, describing the process of creating @R{} "
"add-on packages, writing @R{} documentation, @R{}'s system and foreign "
"language interfaces, and the @R{} @acronym{API}."
msgstr ""

#
#. type: node
#: R-exts.texi:74
#: R-exts.texi:76
#: R-exts.texi:85
#: R-exts.texi:86
#: R-exts.texi:237
#: R-exts.texi:1483
#: R-exts.texi:2496
#: R-exts.texi:3042
#: R-exts.texi:3330
#: R-exts.texi:3931
#: R-exts.texi:4592
#: R-exts.texi:4691
#: R-exts.texi:4856
#: R-exts.texi:4924
#: R-exts.texi:4953
#: R-exts.texi:4976
#, no-wrap
msgid "Creating R packages"
msgstr ""

#
#. type: node
#: R-exts.texi:74
#: R-exts.texi:85
#: R-exts.texi:4976
#: R-exts.texi:4977
#: R-exts.texi:4999
#: R-exts.texi:5626
#: R-exts.texi:5667
#: R-exts.texi:5815
#: R-exts.texi:5875
#: R-exts.texi:5927
#: R-exts.texi:5991
#: R-exts.texi:6033
#: R-exts.texi:6079
#: R-exts.texi:6115
#: R-exts.texi:6152
#: R-exts.texi:6186
#: R-exts.texi:6286
#: R-exts.texi:6371
#: R-exts.texi:6437
#: R-exts.texi:6474
#: R-exts.texi:6498
#, no-wrap
msgid "Writing R documentation files"
msgstr ""

#
#. type: node
#: R-exts.texi:74
#: R-exts.texi:4976
#: R-exts.texi:6498
#: R-exts.texi:6499
#: R-exts.texi:6513
#: R-exts.texi:6579
#: R-exts.texi:6693
#: R-exts.texi:6851
#: R-exts.texi:7093
#, no-wrap
msgid "Tidying and profiling R code"
msgstr ""

#
#. type: node
#: R-exts.texi:74
#: R-exts.texi:6498
#: R-exts.texi:7093
#: R-exts.texi:7094
#: R-exts.texi:7114
#: R-exts.texi:7193
#: R-exts.texi:7509
#: R-exts.texi:8049
#: R-exts.texi:8051
#: R-exts.texi:8349
#, no-wrap
msgid "Debugging"
msgstr ""

#
#. type: node
#: R-exts.texi:74
#: R-exts.texi:7093
#: R-exts.texi:8349
#: R-exts.texi:8350
#: R-exts.texi:8370
#: R-exts.texi:8394
#: R-exts.texi:8563
#: R-exts.texi:8693
#: R-exts.texi:8991
#: R-exts.texi:9108
#: R-exts.texi:9236
#: R-exts.texi:9254
#: R-exts.texi:9427
#: R-exts.texi:10257
#: R-exts.texi:10502
#: R-exts.texi:10939
#: R-exts.texi:11038
#: R-exts.texi:11213
#: R-exts.texi:11234
#: R-exts.texi:11306
#, no-wrap
msgid "System and foreign language interfaces"
msgstr ""

#
#. type: node
#: R-exts.texi:74
#: R-exts.texi:8349
#: R-exts.texi:11306
#: R-exts.texi:11398
#: R-exts.texi:11548
#: R-exts.texi:11607
#: R-exts.texi:11664
#: R-exts.texi:11709
#: R-exts.texi:11772
#: R-exts.texi:11845
#: R-exts.texi:12237
#: R-exts.texi:12324
#: R-exts.texi:12411
#: R-exts.texi:12549
#: R-exts.texi:12582
#: R-exts.texi:12611
#: R-exts.texi:12674
#: R-exts.texi:12702
#: R-exts.texi:12760
#: R-exts.texi:12811
#: R-exts.texi:12888
#, no-wrap
msgid "The R API"
msgstr ""

#
#. type: node
#: R-exts.texi:74
#: R-exts.texi:11306
#: R-exts.texi:12888
#: R-exts.texi:12889
#: R-exts.texi:13022
#: R-exts.texi:13062
#, no-wrap
msgid "Generic functions and methods"
msgstr ""

#
#. type: node
#: R-exts.texi:74
#: R-exts.texi:12888
#: R-exts.texi:13062
#: R-exts.texi:13063
#: R-exts.texi:13086
#: R-exts.texi:13669
#: R-exts.texi:13984
#, no-wrap
msgid "Linking GUIs and other front-ends to R"
msgstr ""

#
#. type: node
#: R-exts.texi:74
#: R-exts.texi:13062
#: R-exts.texi:13984
#: R-exts.texi:13985
#: R-exts.texi:13989
#, no-wrap
msgid "Function and variable index"
msgstr ""

#
#. type: unnumbered
#: R-exts.texi:74
#: R-exts.texi:13984
#: R-exts.texi:13989
#: R-exts.texi:13990
#, no-wrap
msgid "Concept index"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:84
msgid ""
"The contributions to early versions of this manual by Saikat DebRoy (who "
"wrote the first draft of a guide to using @code{.Call} and @code{.External}) "
"and Adrian Trapletti (who provided information on the C++ interface) are "
"gratefully acknowledged."
msgstr ""

#
#. type: cindex
#: R-exts.texi:87
#, no-wrap
msgid "Packages"
msgstr ""

#
#. type: cindex
#: R-exts.texi:88
#, no-wrap
msgid "Creating packages"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:93
msgid ""
"Packages provide a mechanism for loading optional code, data and "
"documentation as needed.  The @R{} distribution itself includes about 30 "
"packages."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:98
msgid ""
"In the following, we assume that you know the @code{library()} command, "
"including its @code{lib.loc} argument, and we also assume basic knowledge of "
"the @command{R CMD INSTALL} utility.  Otherwise, please look at @R{}'s help "
"pages on"
msgstr ""

#
#. type: example
#: R-exts.texi:102
#, no-wrap
msgid ""
"?library\n"
"?INSTALL\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:106
msgid "before reading on."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:110
msgid ""
"For packages which contain code to be compiled, a computing environment "
"including a number of tools is assumed; the ``R Installation and "
"Administration'' manual describes what is needed for each OS."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:113
msgid ""
"Once a source package is created, it must be installed by the command "
"@code{R CMD INSTALL}."
msgstr ""

#
#. type: ifset
#: R-exts.texi:116
msgid ""
"@xref{Add-on packages, , Add-on-packages, R-admin, R Installation and "
"Administration}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:119
msgid ""
"Other types of extensions are supported (but rare): @xref{Package types}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:123
msgid ""
"Some notes on terminology complete this introduction.  These will help with "
"the reading of this manual, and also in describing concepts accurately when "
"asking for help."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:132
msgid ""
"A @emph{package} is a directory of files which extend @R{}, a @emph{source "
"package} (the master files of a package), or a tarball containing the files "
"of a source package, or an @emph{installed} package, the result of running "
"@command{R CMD INSTALL} on a source package.  On some platforms (notably OS "
"X and Windows) there are also @emph{binary packages}, a zip file or tarball "
"containing the files of an installed package which can be unpacked rather "
"than installing from sources."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:138
msgid ""
"A package is @strong{not}@footnote{although this is a persistent mis-usage.  "
"It seems to stem from S, whose analogues of @R{}'s packages were officially "
"known as @emph{library sections} and later as @emph{chapters}, but almost "
"always referred to as @emph{libraries}.} a @emph{library}.  The latter is "
"used in two senses in @R{} documentation."
msgstr ""

#
#. type: itemize
#: R-exts.texi:147
msgid ""
"A directory into which packages are installed, e.g.@: @file{/usr/lib/R/"
"library}: in that sense it is sometimes referred to as a @emph{library "
"directory} or @emph{library tree} (since the library is a directory which "
"contains packages as directories, which themselves contain directories)."
msgstr ""

#
#. type: itemize
#: R-exts.texi:160
msgid ""
"That used by the operating system, as a shared, dynamic or static library or "
"(especially on Windows) a DLL, where the second L stands for `library'.  "
"Installed packages may contain compiled code in what is known on Unix-alikes "
"as a @emph{shared object} and on Windows as a DLL.  The concept of a "
"@emph{shared library} (@emph{dynamic library} on OS X)  as a collection of "
"compiled code to which a package might link is also used, especially for "
"@R{} itself on some platforms. On most platforms these concepts are "
"interchangeable (shared objects and DLLs can both be loaded into the @R{} "
"process and be linked against), but OS X distinguishes between shared "
"objects (extension @file{.so}) and dynamic libraries (extension @file{."
"dylib})."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:164
msgid "There are a number of well-defined operations on source packages."
msgstr ""

#
#. type: itemize
#: R-exts.texi:171
msgid ""
"The most common is @emph{installation} which takes a source package and "
"installs it in a library using @command{R CMD INSTALL} or @code{install."
"packages}."
msgstr ""

#
#. type: itemize
#: R-exts.texi:180
msgid ""
"Source packages can be @emph{built}.  This involves taking a source "
"directory and creating a tarball ready for distribution, including cleaning "
"it up and creating PDF documentation from any @emph{vignettes} it may "
"contain.  Source packages (and most often tarballs) can be @emph{checked}, "
"when a test installation is done and tested (including running its "
"examples); also, the contents of the package are tested in various ways for "
"consistency and portability."
msgstr ""

#
#. type: itemize
#: R-exts.texi:190
msgid ""
"@emph{Compilation} is not a correct term for a package.  Installing a source "
"package which contains C, C++ or Fortran code will involve compiling that "
"code.  There is also the possibility of `byte' compiling the @R{} code in a "
"package (using the facilities of package @pkg{compiler}): already base and "
"recommended packages are normally byte-compiled and this can be specified "
"for other packages.  So @emph{compiling} a package may come to mean byte-"
"compiling its @R{} code."
msgstr ""

#
#. type: itemize
#: R-exts.texi:200
msgid ""
"It used to be unambiguous to talk about @emph{loading} an installed package "
"using @code{library()}, but since the advent of package namespaces this has "
"been less clear: people now often talk about @emph{loading} the package's "
"namespace and then @emph{attaching} the package so it becomes visible on the "
"search path.  Function @code{library} performs both steps, but a package's "
"namespace can be loaded without the package being attached (for example by "
"calls like @code{splines::ns})."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:210
msgid ""
"The concept of @emph{lazy loading} of code or data is mentioned at several "
"points.  This is part of the installation, always selected for @R{} code but "
"optional for data.  When used the @R{} objects of the package are created at "
"installation time and stored in a database in the @file{R} directory of the "
"installed package, being loaded into the session at first use.  This makes "
"the @R{} session start up faster and use less (virtual) memory."
msgstr ""

#
#. type: ifset
#: R-exts.texi:213
msgid ""
"(For technical details, @pxref{Lazy loading, , Lazy loading, R-ints, R "
"Internals}.)"
msgstr ""

#
#. type: cindex
#: R-exts.texi:215
#, no-wrap
msgid "CRAN"
msgstr ""

#. type: Plain text
#: R-exts.texi:221
msgid ""
"@acronym{CRAN} is a network of WWW sites holding the @R{} distributions and "
"contributed code, especially @R{} packages.  Users of @R{} are encouraged to "
"join in the collaborative project and to submit their own packages to "
"@acronym{CRAN}: current instructions are linked from @uref{https://CRAN.R-"
"project.org/@/banner.shtml#submitting}."
msgstr ""

#
#. type: node
#: R-exts.texi:235
#: R-exts.texi:237
#: R-exts.texi:238
#: R-exts.texi:239
#: R-exts.texi:335
#: R-exts.texi:680
#: R-exts.texi:798
#: R-exts.texi:1015
#: R-exts.texi:1034
#: R-exts.texi:1319
#: R-exts.texi:1398
#: R-exts.texi:1456
#: R-exts.texi:1483
#, no-wrap
msgid "Package structure"
msgstr ""

#
#. type: node
#: R-exts.texi:235
#: R-exts.texi:237
#: R-exts.texi:1483
#: R-exts.texi:1484
#: R-exts.texi:1730
#: R-exts.texi:2204
#: R-exts.texi:2339
#: R-exts.texi:2392
#: R-exts.texi:2496
#, no-wrap
msgid "Configure and cleanup"
msgstr ""

#
#. type: node
#: R-exts.texi:235
#: R-exts.texi:1483
#: R-exts.texi:2496
#: R-exts.texi:2497
#: R-exts.texi:2544
#: R-exts.texi:2851
#: R-exts.texi:2975
#: R-exts.texi:3042
#, no-wrap
msgid "Checking and building packages"
msgstr ""

#
#. type: node
#: R-exts.texi:235
#: R-exts.texi:2496
#: R-exts.texi:3042
#: R-exts.texi:3043
#: R-exts.texi:3199
#: R-exts.texi:3272
#: R-exts.texi:3330
#, no-wrap
msgid "Writing package vignettes"
msgstr ""

#
#. type: node
#: R-exts.texi:235
#: R-exts.texi:3042
#: R-exts.texi:3330
#: R-exts.texi:3331
#: R-exts.texi:3388
#: R-exts.texi:3470
#: R-exts.texi:3509
#: R-exts.texi:3554
#: R-exts.texi:3737
#: R-exts.texi:3809
#: R-exts.texi:3931
#, no-wrap
msgid "Package namespaces"
msgstr ""

#
#. type: node
#: R-exts.texi:235
#: R-exts.texi:3330
#: R-exts.texi:3931
#: R-exts.texi:3932
#: R-exts.texi:4276
#: R-exts.texi:4334
#: R-exts.texi:4362
#: R-exts.texi:4429
#: R-exts.texi:4539
#: R-exts.texi:4592
#, no-wrap
msgid "Writing portable packages"
msgstr ""

#
#. type: node
#: R-exts.texi:235
#: R-exts.texi:3931
#: R-exts.texi:4592
#: R-exts.texi:4593
#: R-exts.texi:4691
#, no-wrap
msgid "Diagnostic messages"
msgstr ""

#
#. type: node
#: R-exts.texi:235
#: R-exts.texi:4592
#: R-exts.texi:4691
#: R-exts.texi:4692
#: R-exts.texi:4710
#: R-exts.texi:4768
#: R-exts.texi:4795
#: R-exts.texi:4856
#, no-wrap
msgid "Internationalization"
msgstr ""

#
#. type: node
#: R-exts.texi:235
#: R-exts.texi:4691
#: R-exts.texi:4856
#: R-exts.texi:4857
#: R-exts.texi:4924
#, no-wrap
msgid "CITATION files"
msgstr ""

#
#. type: node
#: R-exts.texi:235
#: R-exts.texi:4856
#: R-exts.texi:4924
#: R-exts.texi:4925
#: R-exts.texi:4936
#: R-exts.texi:4953
#, no-wrap
msgid "Package types"
msgstr ""

#
#. type: section
#: R-exts.texi:235
#: R-exts.texi:4924
#: R-exts.texi:4953
#: R-exts.texi:4954
#, no-wrap
msgid "Services"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:259
msgid ""
"The sources of an @R{} package consists of a subdirectory containing a files "
"@file{DESCRIPTION} and @file{NAMESPACE}, and the subdirectories @file{R}, "
"@file{data}, @file{demo}, @file{exec}, @file{inst}, @file{man}, @file{po}, "
"@file{src}, @file{tests}, @file{tools} and @file{vignettes} (some of which "
"can be missing, but which should not be empty).  The package subdirectory "
"may also contain files @file{INDEX}, @file{configure}, @file{cleanup}, "
"@file{LICENSE}, @file{LICENCE} and @file{NEWS}.  Other files such as "
"@file{INSTALL} (for non-standard installation instructions), @file{README}/"
"@file{README.md}@footnote{This seems to be commonly used for a file in "
"`markdown' format.  Be aware that most users of @R{} will not know that, nor "
"know how to view such a file: platforms such as OS X and Windows do not have "
"a default viewer set in their file associations.  The @acronym{CRAN} package "
"web pages render such files in @HTML{}: the converter used expects the file "
"to be encoded in UTF-8.}, or @file{ChangeLog} will be ignored by @R{}, but "
"may be useful to end users.  The utility @command{R CMD build} may add files "
"in a @file{build} directory (but this should not be used for other purposes)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:265
msgid ""
"Except where specifically mentioned,@footnote{currently, top-level files "
"@file{.Rbuildignore} and @file{.Rinstignore}, and @file{vignettes/."
"install_extras}.} packages should not contain Unix-style `hidden' files/"
"directories (that is, those whose name starts with a dot)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:269
msgid ""
"The @file{DESCRIPTION} and @file{INDEX} files are described in the "
"subsections below.  The @file{NAMESPACE} file is described in the section on "
"@ref{Package namespaces}."
msgstr ""

#
#. type: cindex
#: R-exts.texi:270
#, no-wrap
msgid "configure file"
msgstr ""

#
#. type: cindex
#: R-exts.texi:271
#, no-wrap
msgid "cleanup file"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:278
msgid ""
"The optional files @file{configure} and @file{cleanup} are (Bourne shell) "
"script files which are, respectively, executed before and (provided that "
"option @option{--clean} was given) after installation on Unix-alikes, see "
"@ref{Configure and cleanup}.  The analogues on Windows are @file{configure."
"win} and @file{cleanup.win}."
msgstr ""

#. type: Plain text
#: R-exts.texi:282
msgid ""
"For the conventions for files @file{NEWS} and @file{ChangeLog} in the "
"@acronym{GNU} project see @uref{https://www.gnu.org/@/prep/@/standards/@/"
"standards.html#Documentation}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:289
msgid ""
"The package subdirectory should be given the same name as the package.  "
"Because some file systems (e.g., those on Windows and by default on OS X) "
"are not case-sensitive, to maintain portability it is strongly recommended "
"that case distinctions not be used to distinguish different packages.  For "
"example, if you have a package named @file{foo}, do not also create a "
"package named @file{Foo}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:311
msgid ""
"To ensure that file names are valid across file systems and supported "
"operating systems, the @acronym{ASCII} control characters as well as the "
"characters @samp{\"}, @samp{*}, @samp{:}, @samp{/}, @samp{<}, @samp{>}, "
"@samp{?}, @samp{\\}, and @samp{|} are not allowed in file names.  In "
"addition, files with names @samp{con}, @samp{prn}, @samp{aux}, @samp{clock"
"$}, @samp{nul}, @samp{com1} to @samp{com9}, and @samp{lpt1} to @samp{lpt9} "
"after conversion to lower case and stripping possible ``extensions'' (e.g., "
"@samp{lpt5.foo.bar}), are disallowed.  Also, file names in the same "
"directory must not differ only by case (see the previous paragraph).  In "
"addition, the basenames of @samp{.Rd} files may be used in URLs and so must "
"be @acronym{ASCII} and not contain @code{%}.  For maximal portability "
"filenames should only contain only @acronym{ASCII} characters not excluded "
"already (that is @code{A-Za-z0-9._!#$%&+,;=@@^()@{@}'[]} --- we exclude "
"space as many utilities do not accept spaces in file paths): non-English "
"alphabetic characters cannot be guaranteed to be supported in all locales.  "
"It would be good practice to avoid the shell metacharacters "
"@code{()@{@}'[]$~}: @code{~} is also used as part of `8.3' filenames on "
"Windows.  In addition, packages are normally distributed as tarballs, and "
"these have a limit on path lengths: for maximal portability 100 bytes."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:320
msgid ""
"A source package if possible should not contain binary executable files: "
"they are not portable, and a security risk if they are of the appropriate "
"architecture.  @command{R CMD check} will warn about them@footnote{false "
"positives are possible, but only a handful have been seen so far.} unless "
"they are listed (one filepath per line) in a file @file{BinaryFiles} at the "
"top level of the package.  Note that @acronym{CRAN} will not accept "
"submissions containing binary files even if they are listed."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:323
msgid ""
"The @R{} function @code{package.skeleton} can help to create the structure "
"for a new package: see its help page for details."
msgstr ""

#
#. type: node
#: R-exts.texi:333
#: R-exts.texi:335
#: R-exts.texi:680
#, no-wrap
msgid "The DESCRIPTION file"
msgstr ""

#
#. type: node
#: R-exts.texi:333
#: R-exts.texi:335
#: R-exts.texi:680
#: R-exts.texi:681
#: R-exts.texi:798
#, no-wrap
msgid "Licensing"
msgstr ""

#
#. type: node
#: R-exts.texi:333
#: R-exts.texi:680
#: R-exts.texi:798
#: R-exts.texi:799
#: R-exts.texi:983
#: R-exts.texi:1015
#, no-wrap
msgid "Package Dependencies"
msgstr ""

#
#. type: node
#: R-exts.texi:333
#: R-exts.texi:798
#: R-exts.texi:1015
#: R-exts.texi:1034
#, no-wrap
msgid "The INDEX file"
msgstr ""

#
#. type: node
#: R-exts.texi:333
#: R-exts.texi:1015
#: R-exts.texi:1034
#: R-exts.texi:1035
#: R-exts.texi:1036
#: R-exts.texi:1319
#, no-wrap
msgid "Package subdirectories"
msgstr ""

#
#. type: node
#: R-exts.texi:333
#: R-exts.texi:1034
#: R-exts.texi:1319
#: R-exts.texi:1320
#: R-exts.texi:1398
#, no-wrap
msgid "Data in packages"
msgstr ""

#
#. type: node
#: R-exts.texi:333
#: R-exts.texi:1319
#: R-exts.texi:1398
#: R-exts.texi:1399
#: R-exts.texi:1456
#, no-wrap
msgid "Non-R scripts in packages"
msgstr ""

#. type: subsection
#: R-exts.texi:333
#: R-exts.texi:1398
#: R-exts.texi:1456
#: R-exts.texi:1457
#, no-wrap
msgid "Specifying URLs"
msgstr ""

#
#. type: subsection
#: R-exts.texi:336
#, no-wrap
msgid "The @file{DESCRIPTION} file"
msgstr ""

#
#. type: cindex
#: R-exts.texi:337
#, no-wrap
msgid "DESCRIPTION file"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:341
msgid ""
"The @file{DESCRIPTION} file contains basic information about the package in "
"the following format:"
msgstr ""

#. type: smallexample
#: R-exts.texi:365
#, no-wrap
msgid ""
"Package: pkgname\n"
"Version: 0.5-1\n"
"Date: 2015-01-01\n"
"Title: My First Collection of Functions\n"
"Authors@@R: c(person(\"Joe\", \"Developer\", role = c(\"aut\", \"cre\"),\n"
"\t\t     email = \"Joe.Developer@@some.domain.net\"),\n"
"\t      person(\"Pat\", \"Developer\", role = \"aut\"),\n"
"\t      person(\"A.\", \"User\", role = \"ctb\",\n"
"\t\t     email = \"A.User@@whereever.net\"))\n"
"Author: Joe Developer [aut, cre],\n"
"  Pat Developer [aut],\n"
"  A. User [ctb]\n"
"Maintainer: Joe Developer <Joe.Developer@@some.domain.net>\n"
"Depends: R (>= 3.1.0), nlme\n"
"Suggests: MASS\n"
"Description: A (one paragraph) description of what\n"
"  the package does and why it may be useful.\n"
"License: GPL (>= 2)\n"
"URL: https://www.r-project.org, http://www.another.url\n"
"BugReports: https://pkgname.bugtracker.url\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:379
msgid ""
"The format is that of a version of a `Debian Control File' (see the help for "
"@samp{read.dcf} and @uref{https://www.debian.org/@/doc/@/debian-policy/@/ch-"
"controlfields.html}: @R{} does not require encoding in UTF-8 and does not "
"support comments starting with @samp{#}).  Fields start with an "
"@acronym{ASCII} name immediately followed by a colon: the value starts after "
"the colon and a space.  Continuation lines (for example, for descriptions "
"longer than one line) start with a space or tab.  Field names are case-"
"sensitive: all those used by @R{} are capitalized."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:383
msgid ""
"For maximal portability, the @file{DESCRIPTION} file should be written "
"entirely in @acronym{ASCII} --- if this is not possible it must contain an "
"@samp{Encoding} field (see below)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:387
msgid ""
"Several optional fields take @emph{logical values}: these can be specified "
"as @samp{yes}, @samp{true}, @samp{no} or @samp{false}: capitalized values "
"are also accepted."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:394
msgid ""
"The @samp{Package}, @samp{Version}, @samp{License}, @samp{Description}, "
"@samp{Title}, @samp{Author}, and @samp{Maintainer} fields are mandatory, all "
"other fields are optional.  Fields @samp{Author} and @samp{Maintainer} can "
"be auto-generated from @samp{Authors@@R}, and may be omitted if the latter "
"is provided: however if they are not @acronym{ASCII} we recommend that they "
"are provided."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:401
msgid ""
"The mandatory @samp{Package} field gives the name of the package.  This "
"should contain only (@acronym{ASCII}) letters, numbers and dot, have at "
"least two characters and start with a letter and not end in a dot.  If it "
"needs explaining, this should be done in the @samp{Description} field (and "
"not the @samp{Title} field)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:410
msgid ""
"The mandatory @samp{Version} field gives the version of the package.  This "
"is a sequence of at least @emph{two} (and usually three)  non-negative "
"integers separated by single @samp{.} or @samp{-} characters.  The canonical "
"form is as shown in the example, and a version such as @samp{0.01} or "
"@samp{0.01.0} will be handled as if it were @samp{0.1-0}.  It is "
"@strong{not} a decimal number, so for example @code{0.9 < 0.75} since "
"@code{9 < 75}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:412
msgid "The mandatory @samp{License} field is discussed in the next subsection."
msgstr ""

#. type: Plain text
#: R-exts.texi:423
msgid ""
"The mandatory @samp{Title} field should give a @emph{short} description of "
"the package.  Some package listings may truncate the title to 65 "
"characters.  It should use @emph{title case} (that is, use capitals for the "
"principal words: @code{tools::toTitleCase} can help you with this), not use "
"any markup, not have any continuation lines, and not end in a period (unless "
"part of @dots{}).  Do not repeat the package name: it is often used prefixed "
"by the name.  Refer to other packages and external software in single "
"quotes, and to book titles (and similar) in double quotes."
msgstr ""

#. type: Plain text
#: R-exts.texi:437
msgid ""
"The mandatory @samp{Description} field should give a @emph{comprehensive} "
"description of what the package does.  One can use several (complete) "
"sentences, but only one paragraph. It should be intelligible to all the "
"intended readership (e.g.@: for a @acronym{CRAN} package to all "
"@acronym{CRAN} users).  It is good practice not to start with the package "
"name, `This package' or similar.  As with the @samp{Title} field, double "
"quotes should be used for quotations (including titles of books and "
"articles), and single quotes for non-English usage, including names of other "
"packages and external software.  This field should also be used for "
"explaining the package name if necessary.  URLs should be enclosed in angle "
"brackets, e.g.@: @samp{<https://www.r-project.org>}: see also "
"@ref{Specifying URLs}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:447
msgid ""
"The mandatory @samp{Author} field describes who wrote @emph{the package}.  "
"It is a plain text field intended for human readers, but not for automatic "
"processing (such as extracting the email addresses of all listed "
"contributors: for that use @samp{Authors@@R}).  Note that all significant "
"contributors must be included: if you wrote an @R{} wrapper for the work of "
"others included in the @file{src} directory, you are not the sole (and maybe "
"not even the main) author."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:456
msgid ""
"The mandatory @samp{Maintainer} field should give a @emph{single} name "
"followed by a @emph{valid} (RFC 2822) email address in angle brackets.  It "
"should not end in a period or comma.  This field is what is reported by the "
"@code{maintainer} function and used by @code{bug.report}.  For a "
"@acronym{CRAN} package it should be a @emph{person}, not a mailing list and "
"not a corporate entity: do ensure that it is valid and will remain valid for "
"the lifetime of the package."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:461
msgid ""
"Note that the @emph{display name} (the part before the address in angle "
"brackets) should be enclosed in double quotes if it contains non-"
"alphanumeric characters such as comma or period.  (The current standard, RFC "
"5322, allows periods but RFC 2822 did not.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:478
msgid ""
"Both @samp{Author} and @samp{Maintainer} fields can be omitted if a suitable "
"@samp{Authors@@R} field is given.  This field can be used to provide a "
"refined and machine-readable description of the package ``authors'' (in "
"particular specifying their precise @emph{roles}), via suitable @R{} code. "
"It should create an object of class @code{\"person'}, by either a call to "
"@code{person} or a series of calls (one per ``author'') concatenated by "
"@code{c()}): see the example @file{DESCRIPTION} file above.  The roles can "
"include @samp{\"aut\"} (author) for full authors, @samp{\"cre\"} (creator) "
"for the package maintainer, and @samp{\"ctb\"} (contributor) for other "
"contributors, @samp{\"cph\"} (copyright holder), among others.  See @code{?"
"person} for more information.  Note that no role is assumed by default.  "
"Auto-generated package citation information takes advantage of this "
"specification. The @samp{Author} and @samp{Maintainer} fields are auto-"
"generated from it if needed when building@footnote{at least if this is done "
"in a locale which matches the package encoding.} or installing."
msgstr ""

#
#. type: findex
#: R-exts.texi:479
#: R-exts.texi:1266
#, no-wrap
msgid "COPYRIGHTS"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:484
msgid ""
"An optional @samp{Copyright} field can be used where the copyright holder(s) "
"are not the authors.  If necessary, this can refer to an installed file: the "
"convention is to use file @file{inst/COPYRIGHTS}."
msgstr ""

#. type: Plain text
#: R-exts.texi:491
msgid ""
"The optional @samp{Date} field gives the @emph{release date} of the current "
"version of the package.  It is strongly recommended@footnote{and required by "
"@acronym{CRAN}, so checked by @command{R CMD check --as-cran}.} to use the "
"@samp{yyyy-mm-dd} format conforming to the ISO 8601 standard."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:495
msgid ""
"The @samp{Depends}, @samp{Imports}, @samp{Suggests}, @samp{Enhances}, "
"@samp{LinkingTo} and @samp{Additional_repositories} fields are discussed in "
"a later subsection."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:500
msgid ""
"Dependencies external to the @R{} system should be listed in the "
"@samp{SystemRequirements} field, possibly amplified in a separate "
"@file{README} file."
msgstr ""

#. type: Plain text
#: R-exts.texi:507
msgid ""
"The @samp{URL} field may give a list of @acronym{URL}s separated by commas "
"or whitespace, for example the homepage of the author or a page where "
"additional material describing the software can be found.  These "
"@acronym{URL}s are converted to active hyperlinks in @acronym{CRAN} package "
"listings.  @xref{Specifying URLs}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:513
msgid ""
"The @samp{BugReports} field may contain a single @acronym{URL} to which bug "
"reports about the package should be submitted.  This @acronym{URL} will be "
"used by @code{bug.report} instead of sending an email to the maintainer."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:520
msgid ""
"Base and recommended packages (i.e., packages contained in the @R{} source "
"distribution or available from @acronym{CRAN} and recommended to be included "
"in every binary distribution of @R{}) have a @samp{Priority} field with "
"value @samp{base} or @samp{recommended}, respectively.  These priorities "
"must not be used by other packages."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:536
msgid ""
"A @samp{Collate} field can be used for controlling the collation order for "
"the @R{} code files in a package when these are processed for package "
"installation.  The default is to collate according to the @samp{C} locale.  "
"If present, the collate specification must list @emph{all} @R{} code files "
"in the package (taking possible OS-specific subdirectories into account, see "
"@ref{Package subdirectories}) as a whitespace separated list of file paths "
"relative to the @file{R} subdirectory.  Paths containing white space or "
"quotes need to be quoted.  An OS-specific collation field (@samp{Collate."
"unix} or @samp{Collate.windows}) will be used in preference to "
"@samp{Collate}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:542
msgid ""
"The @samp{LazyData} logical field controls whether the @R{} datasets use "
"lazy-loading.  A @samp{LazyLoad} field was used in versions prior to 2.14.0, "
"but now is ignored."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:548
msgid ""
"The @samp{KeepSource} logical field controls if the package code is sourced "
"using @code{keep.source = TRUE} or @code{FALSE}: it might be needed "
"exceptionally for a package designed to always be used with @code{keep."
"source = TRUE}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:558
msgid ""
"The @samp{ByteCompile} logical field controls if the package code is to be "
"byte-compiled on installation: the default is currently not to, so this may "
"be useful for a package known to benefit particularly from byte-compilation "
"(which can take quite a long time and increases the installed size of the "
"package).  It is used for the recommended packages, as they are byte-"
"compiled when @R{} is installed and for consistency should be byte-compiled "
"when updated. This can be overridden by installing with flag @option{--no-"
"byte-compile}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:563
msgid ""
"The @samp{ZipData} logical field was used to control whether the automatic "
"Windows build would zip up the data directory or not prior to @R{} 2.13.0: "
"it is now ignored."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:568
msgid ""
"The @samp{Biarch} logical field is used on Windows to select the "
"@command{INSTALL} option @option{--force-biarch} for this package.  "
"(Introduced in @R{} 3.0.0.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:577
msgid ""
"The @samp{BuildVignettes} logical field can be set to a false value to stop "
"@command{R CMD build} from attempting to build the vignettes, as well as "
"preventing@footnote{But it is checked for Open Source packages by @command{R "
"CMD check --as-cran}.} @command{R CMD check} from testing this.  This should "
"only be used exceptionally, for example if the PDFs include large figures "
"which are not part of the package sources (and hence only in packages which "
"do not have an Open Source license)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:585
msgid ""
"The @samp{VignetteBuilder} field names (in a comma-separated list)  packages "
"that provide an engine for building vignettes.  These may include the "
"current package, or ones listed in @samp{Depends}, @samp{Suggests} or "
"@samp{Imports}. The @pkg{utils} package is always implicitly appended.  See "
"@ref{Non-Sweave vignettes} for details."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:598
msgid ""
"If the @file{DESCRIPTION} file is not entirely in @acronym{ASCII} it should "
"contain an @samp{Encoding} field specifying an encoding.  This is used as "
"the encoding of the @file{DESCRIPTION} file itself and of the @file{R} and "
"@file{NAMESPACE} files, and as the default encoding of @file{.Rd} files.  "
"The examples are assumed to be in this encoding when running @command{R CMD "
"check}, and it is used for the encoding of the @code{CITATION} file.  Only "
"encoding names @code{latin1}, @code{latin2} and @code{UTF-8} are known to be "
"portable.  (Do not specify an encoding unless one is actually needed: doing "
"so makes the package @emph{less} portable.  If a package has a specified "
"encoding, you should run @command{R CMD build} etc in a locale using that "
"encoding.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:608
msgid ""
"The @samp{NeedsCompilation} field should be set to @code{\"yes\"} if the "
"package contains code which to be compiled, otherwise @code{\"no\"} (when "
"the package could be installed from source on any platform without "
"additional tools).  This is used by @code{install.packages(type = \"both\")} "
"in @R{} >= 2.15.2 on platforms where binary packages are the norm: it is "
"normally set by @command{R CMD build} or the repository assuming compilation "
"is required if and only if the package has a @file{src} directory."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:614
msgid ""
"The @samp{OS_type} field specifies the OS(es) for which the package is "
"intended.  If present, it should be one of @code{unix} or @code{windows}, "
"and indicates that the package can only be installed on a platform with "
"@samp{.Platform$OS.type} having that value."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:618
msgid ""
"The @samp{Type} field specifies the type of the package: @pxref{Package "
"types}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:637
msgid ""
"One can add subject classifications for the content of the package using the "
"fields @samp{Classification/ACM} or @samp{Classification/ACM-2012} (using "
"the Computing Classification System of the Association for Computing "
"Machinery, @uref{http://www.acm.org/class/}; the former refers to the 1998 "
"version), @samp{Classification/JEL} (the Journal of Economic Literature "
"Classification System, @uref{https://www.aeaweb.org/@/econlit/@/jelCodes."
"php}, or @samp{Classification/MSC} or @samp{Classification/MSC-2010} (the "
"Mathematics Subject Classification of the American Mathematical Society, "
"@uref{http://www.ams.org/msc/}; the former refers to the 2000 version).  The "
"subject classifications should be comma-separated lists of the respective "
"classification codes, e.g., @samp{Classification/ACM: G.4, H.2.8, I.5.1}."
msgstr ""

#. type: Plain text
#: R-exts.texi:649
msgid ""
"A @samp{Language} field can be used to indicate if the package documentation "
"is not in English: this should be a comma-separated list of standard (not "
"private use or grandfathered) IETF language tags as currently defined by RFC "
"5646 (@uref{https://tools.ietf.org/@/html/@/rfc5646}, see also @uref{https://"
"en.wikipedia.org/@/wiki/@/IETF_language_tag}), i.e., use language subtags "
"which in essence are 2-letter ISO 639-1 (@uref{https://en.wikipedia.@/org/@/"
"wiki/@/ISO_639-1}) or 3-letter ISO 639-3 (@uref{https://en.wikipedia.@/org/@/"
"wiki/@/ISO_639-3}) language codes."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:660
msgid ""
"As of @R{} 3.2.0, an @samp{RdMacros} field can be used to hold a comma-"
"separated list of packages from which the current package will import Rd "
"macro definitions.  These will be imported after the system macros, in the "
"order listed in the @samp{RdMacros} field, before any macro definitions in "
"the current package are loaded.  Macro definitions in individual @file{.Rd} "
"files in the @file{man} directory are loaded last, and are local to later "
"parts of that file.  In case of any duplicates, the last loaded definition "
"will be used@footnote{Duplicate definitions may trigger a warning: see "
"@ref{User-defined macros}.}"
msgstr ""

#
#. type: quotation
#: R-exts.texi:663
#: R-exts.texi:2515
#: R-exts.texi:11361
#, no-wrap
msgid "Note"
msgstr ""

#
#. type: quotation
#: R-exts.texi:666
msgid ""
"There should be no @samp{Built} or @samp{Packaged} fields, as these are "
"added by the package management tools."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:677
msgid ""
"There is no restriction on the use of other fields not mentioned here (but "
"using other capitalizations of these field names would cause confusion).  "
"Fields @code{Note}, @code{Contact} (for contacting the authors/developers) "
"and @code{MailingList} are in common use. Some repositories (including "
"@acronym{CRAN} and R-forge) add their own fields."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:685
msgid ""
"Licensing for a package which might be distributed is an important but "
"potentially complex subject."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:689
msgid ""
"It is very important that you include license information! Otherwise, it may "
"not even be legally correct for others to distribute copies of the package, "
"let alone use it."
msgstr ""

#. type: Plain text
#: R-exts.texi:698
msgid ""
"The package management tools use the concept of `free or open source "
"software' (FOSS, e.g., @uref{https://en.wikipedia.org/@/wiki/@/FOSS})  "
"licenses: the idea being that some users of @R{} and its packages want to "
"restrict themselves to such software.  Others need to ensure that there are "
"no restrictions stopping them using a package, e.g.@: forbidding commercial "
"or military use.  It is a central tenet of FOSS software that there are no "
"restrictions on users nor usage."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:701
msgid ""
"Do not use the @samp{License} field for information on copyright holders: if "
"needed, use a @samp{Copyright} field."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:709
msgid ""
"The mandatory @samp{License} field in the @file{DESCRIPTION} file should "
"specify the license of the package in a standardized form.  Alternatives are "
"indicated @emph{via} vertical bars.  Individual specifications must be one of"
msgstr ""

#
#. type: itemize
#: R-exts.texi:712
msgid "One of the ``standard'' short specifications"
msgstr ""

#
#. type: example
#: R-exts.texi:715
#, no-wrap
msgid ""
"GPL-2 GPL-3 LGPL-2 LGPL-2.1 LGPL-3 AGPL-3 Artistic-2.0\n"
"BSD_2_clause BSD_3_clause MIT\n"
msgstr ""

#. type: itemize
#: R-exts.texi:719
msgid ""
"as made available @emph{via} @uref{https://www.R-project.org/@/Licenses/} "
"and contained in subdirectory @file{share/licenses} of the @R{} source or "
"home directory."
msgstr ""

#
#. type: itemize
#: R-exts.texi:730
msgid ""
"The names or abbreviations of other licenses contained in the license data "
"base in file @file{share/licenses/license.db} in the @R{} source or home "
"directory, possibly (for versioned licenses) followed by a version "
"restriction of the form @samp{(@var{op} @var{v})} with @samp{@var{op}} one "
"of the comparison operators @samp{<}, @samp{<=}, @samp{>}, @samp{>=}, "
"@samp{==}, or @samp{!=} and @samp{@var{v}} a numeric version specification "
"(strings of non-negative integers separated by @samp{.}), possibly combined "
"@emph{via} @samp{,} (see below for an example).  For versioned licenses, one "
"can also specify the name followed by the version, or combine an existing "
"abbreviation and the version with a @samp{-}."
msgstr ""

#
#. type: itemize
#: R-exts.texi:733
msgid ""
"Abbreviations @code{GPL} and @code{LGPL} are ambiguous and usually taken to "
"mean any version of the license: but it is better not to use them."
msgstr ""

#
#. type: itemize
#: R-exts.texi:737
msgid ""
"One of the strings @samp{file LICENSE} or @samp{file LICENCE} referring to a "
"file named @file{LICENSE} or @file{LICENCE} in the package (source and "
"installation) top-level directory."
msgstr ""

#
#. type: itemize
#: R-exts.texi:741
msgid ""
"The string @samp{Unlimited}, meaning that there are no restrictions on "
"distribution or use other than those imposed by relevant laws (including "
"copyright laws)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:751
msgid ""
"If a package license @emph{restricts} a base license (where permitted, e.g., "
"using GPL-3 or AGPL-3 with an attribution clause), the additional terms "
"should be placed in file @file{LICENSE} (or @file{LICENCE}), and the string "
"@samp{+ file LICENSE} (or @samp{+ file LICENCE}, respectively) should be "
"appended to the corresponding individual license specification.  Note that "
"several commonly used licenses do not permit restrictions: this includes "
"GPL-2 and hence any specification which includes it."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:753
msgid "Examples of standardized specifications include"
msgstr ""

#
#. type: example
#: R-exts.texi:759
#, no-wrap
msgid ""
"License: GPL-2\n"
"License: LGPL (>= 2.0, < 3) | Mozilla Public License\n"
"License: GPL-2 | file LICENCE\n"
"License: GPL (>= 2) | BSD_3_clause + file LICENSE\n"
"License: Artistic-2.0 | AGPL-3 + file LICENSE\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:762
msgid ""
"Please note in particular that ``Public domain'' is not a valid license, "
"since it is not recognized in some jurisdictions."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:767
msgid ""
"Please ensure that the license you choose also covers any dependencies "
"(including system dependencies) of your package: it is particularly "
"important that any restrictions on the use of such dependencies are evident "
"to people reading your @file{DESCRIPTION} file."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:775
msgid ""
"Fields @samp{License_is_FOSS} and @samp{License_restricts_use} may be added "
"by repositories where information cannot be computed from the name of the "
"license.  @samp{License_is_FOSS: yes} is used for licenses which are known "
"to be FOSS, and @samp{License_restricts_use} can have values @samp{yes} or "
"@samp{no} if the @file{LICENSE} file is known to restrict users or usage, or "
"known not to.  These are used by, e.g.@:, the @code{available.packages} "
"filters."
msgstr ""

#
#. type: cindex
#: R-exts.texi:777
#, no-wrap
msgid "LICENSE file"
msgstr ""

#
#. type: cindex
#: R-exts.texi:778
#, no-wrap
msgid "LICENCE file"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:783
msgid ""
"The optional file @file{LICENSE}/@file{LICENCE} contains a copy of the "
"license of the package.  To avoid any confusion only include such a file if "
"it is referred to in the @samp{License} field of the @file{DESCRIPTION} file."
msgstr ""

#. type: Plain text
#: R-exts.texi:794
msgid ""
"Whereas you should feel free to include a license file in your @emph{source} "
"distribution, please do not arrange to @emph{install} yet another copy of "
"the @acronym{GNU} @file{COPYING} or @file{COPYING.LIB} files but refer to "
"the copies on @uref{https://www.R-project.org/@/Licenses/} and included in "
"the @R{} distribution (in directory @file{share/licenses}).  Since files "
"named @file{LICENSE} or @file{LICENCE} @emph{will} be installed, do not use "
"these names for standard license files.  To include comments about the "
"licensing rather than the body of a license, use a file named something like "
"@file{LICENSE.note}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:797
msgid ""
"A few ``standard'' licenses are rather license templates which need "
"additional information to be completed @emph{via} @samp{+ file LICENSE}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:809
msgid ""
"The @samp{Depends} field gives a comma-separated list of package names which "
"this package depends on.  Those packages will be attached before the current "
"package when @code{library} or @code{require} is called.  Each package name "
"may be optionally followed by a comment in parentheses specifying a version "
"requirement.  The comment should contain a comparison operator, whitespace "
"and a valid version number, e.g. @samp{MASS (>= 3.1-20)}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:817
msgid ""
"The @samp{Depends} field can also specify a dependence on a certain version "
"of @R{} --- e.g., if the package works only with @R{} version 3.0.0 or "
"later, include @samp{R (>= 3.0.0)} in the @samp{Depends} field.  You can "
"also require a certain SVN revision for R-devel or R-patched, e.g.@: @samp{R "
"(>= 2.14.0), R (>= r56550)} requires a version later than R-devel of late "
"July 2011 (including released versions of 2.14.0)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:821
msgid ""
"It makes no sense to declare a dependence on @code{R} without a version "
"specification, nor on the package @pkg{base}: this is an @R{} package and "
"package @pkg{base} is always available."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:824
msgid ""
"A package or @samp{R} can appear more than once in the @samp{Depends} field, "
"for example to give upper and lower bounds on acceptable versions."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:832
msgid ""
"Both @code{library} and the @R{} package checking facilities use this field: "
"hence it is an error to use improper syntax or misuse the @samp{Depends} "
"field for comments on other software that might be needed.  The @R{} "
"@command{INSTALL} facilities check if the version of @R{} used is recent "
"enough for the package being installed, and the list of packages which is "
"specified will be attached (after checking version requirements) before the "
"current package."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:845
msgid ""
"The @samp{Imports} field lists packages whose namespaces are imported from "
"(as specified in the @file{NAMESPACE} file) but which do not need to be "
"attached.  Namespaces accessed by the @samp{::} and @samp{:::} operators "
"must be listed here, or in @samp{Suggests} or @samp{Enhances} (see below).  "
"Ideally this field will include all the standard packages that are used, and "
"it is important to include S4-using packages (as their class definitions can "
"change and the @file{DESCRIPTION} file is used to decide which packages to "
"re-install when this happens).  Packages declared in the @samp{Depends} "
"field should not also be in the @samp{Imports} field.  Version requirements "
"can be specified and are checked when the namespace is loaded (since @R{} >= "
"3.0.0)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:857
msgid ""
"The @samp{Suggests} field uses the same syntax as @samp{Depends} and lists "
"packages that are not necessarily needed.  This includes packages used only "
"in examples, tests or vignettes (@pxref{Writing package vignettes}), and "
"packages loaded in the body of functions.  E.g., suppose an "
"example@footnote{even one wrapped in @code{\\donttest}.} from package "
"@pkg{foo} uses a dataset from package @pkg{bar}. Then it is not necessary to "
"have @pkg{bar} use @pkg{foo} unless one wants to execute all the examples/"
"tests/vignettes: it is useful to have @pkg{bar}, but not necessary.  Version "
"requirements can be specified, and will be used by @command{R CMD check}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:869
msgid ""
"Finally, the @samp{Enhances} field lists packages ``enhanced'' by the "
"package at hand, e.g., by providing methods for classes from these packages, "
"or ways to handle objects from these packages (so several packages have "
"@samp{Enhances: chron} because they can handle datetime objects from "
"@CRANpkg{chron} even though they prefer @R{}'s native datetime functions).  "
"Version requirements can be specified, but are currently not used.  Such "
"packages cannot be required to check the package: any tests which use them "
"must be conditional on the presence of the package.  (If your tests use e.g."
"@: a dataset from another package it should be in @samp{Suggests} and not "
"@samp{Enhances}.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:871
msgid "The general rules are"
msgstr ""

#
#. type: itemize
#: R-exts.texi:875
msgid "A package should be listed in only one of these fields."
msgstr ""

#
#. type: itemize
#: R-exts.texi:881
msgid ""
"Packages whose namespace only is needed to load the package using "
"@code{library(@var{pkgname})} should be listed in the @samp{Imports} field "
"and not in the @samp{Depends} field.  Packages listed in @code{imports} or "
"@code{importFrom} directives in the @file{NAMESPACE} file should almost "
"always be in @samp{Imports} and not @samp{Depends}."
msgstr ""

#
#. type: itemize
#: R-exts.texi:885
msgid ""
"Packages that need to be attached to successfully load the package using "
"@code{library(@var{pkgname})} must be listed in the @samp{Depends} field."
msgstr ""

#
#. type: itemize
#: R-exts.texi:901
msgid ""
"All packages that are needed@footnote{This includes all packages directly "
"called by @code{library} and @code{require} calls, as well as data obtained "
"@emph{via} @code{data(theirdata, package = \"somepkg\")} calls: @command{R "
"CMD check} will warn about all of these.  But there are subtler uses which "
"it will not detect: e.g.@: if package A uses package B and makes use of "
"functionality in package B which uses package C which package B suggests or "
"enhances, then package C needs to be in the @samp{Suggests} list for package "
"A.  Nor will undeclared uses in included files be reported, nor "
"unconditional uses of packages listed under @samp{Enhances}.} to "
"successfully run @code{R CMD check} on the package must be listed in one of "
"@samp{Depends} or @samp{Suggests} or @samp{Imports}.  Packages used to run "
"examples or tests conditionally (e.g.@: @emph{via} "
"@code{if(require(@var{pkgname}))}) should be listed in @samp{Suggests} or "
"@samp{Enhances}.  (This allows checkers to ensure that all the packages "
"needed for a complete check are installed.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:907
msgid ""
"In particular, packages providing ``only'' data for examples or vignettes "
"should be listed in @samp{Suggests} rather than @samp{Depends} in order to "
"make lean installations possible."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:913
msgid ""
"Version dependencies in the @samp{Depends} and @samp{Imports} fields are "
"used by @code{library} when it loads the package, and @code{install."
"packages} checks versions for the @samp{Depends}, @samp{Imports} and (for "
"@code{dependencies = TRUE}) @samp{Suggests} fields."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:918
msgid ""
"It is increasingly important that the information in these fields is "
"complete and accurate: it is for example used to compute which packages "
"depend on an updated package and which packages can safely be installed in "
"parallel."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:922
msgid ""
"This scheme was developed before all packages had namespaces (@R{} 2.14.0 in "
"October 2011), and good practice changed once that was in place."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:928
msgid ""
"Field @samp{Depends} should nowadays be used rarely, only for packages which "
"are intended to be put on the search path to make their facilities available "
"to the end user (and not to the package itself): for example it makes sense "
"that a user of package @CRANpkg{latticeExtra} would want the functions of "
"package @CRANpkg{lattice} made available."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:933
msgid ""
"Almost always packages mentioned in @samp{Depends} should also be imported "
"from in the @file{NAMESPACE} file: this ensures that any needed parts of "
"those packages are available when some other package imports the current "
"package."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:939
msgid ""
"The @samp{Imports} field should not contain packages which are not imported "
"from (@emph{via} the @file{NAMESPACE} file or @code{::} or @code{:::} "
"operators), as all the packages listed in that field need to be installed "
"for the current package to be installed.  (This is checked by @command{R CMD "
"check}.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:947
msgid ""
"@R{} code in the package should call @code{library} or @code{require} only "
"exceptionally.  Such calls are never needed for packages listed in "
"@samp{Depends} as they will already be on the search path.  It used to be "
"common practice to use @code{require} calls for packages listed in "
"@samp{Suggests} in functions which used their functionality, but nowadays it "
"is better to access such functionality @emph{via} @code{::} calls."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:952
msgid ""
"A package that wishes to make use of header files in other packages needs to "
"declare them as a comma-separated list in the field @samp{LinkingTo} in the "
"@file{DESCRIPTION} file.  For example"
msgstr ""

#
#. type: example
#: R-exts.texi:955
#, no-wrap
msgid "LinkingTo: link1, link2\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:961
msgid ""
"As from @R{} 3.0.2 the @samp{LinkingTo} field can have a version requirement "
"which is checked at installation.  (In earlier versions of @R{} it would "
"cause the specification to be ignored.)"
msgstr ""

#. type: Plain text
#: R-exts.texi:968
msgid ""
"Specifying a package in @samp{LinkingTo} suffices if these are C++ headers "
"containing source code or static linking is done at installation: the "
"packages do not need to be (and usually should not be)  listed in the "
"@samp{Depends} or @samp{Imports} fields.  This includes @acronym{CRAN} "
"package @CRANpkg{BH} and almost all users of @CRANpkg{RcppArmadillo} and "
"@CRANpkg{RcppEigen}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:971
msgid ""
"For another use of @samp{LinkingTo} see @ref{Linking to native routines in "
"other packages}."
msgstr ""

#. type: Plain text
#: R-exts.texi:978
msgid ""
"The @samp{Additional_repositories} field is a comma-separated list of "
"repository URLs where the packages named in the other fields may be found.  "
"It is currently used by @command{R CMD check} to check that the packages can "
"be found, at least as source packages (which can be installed on any "
"platform)."
msgstr ""

#
#. type: subsubsection
#: R-exts.texi:981
#: R-exts.texi:983
#: R-exts.texi:984
#, no-wrap
msgid "Suggested packages"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:991
msgid ""
"Note that someone wanting to run the examples/tests/vignettes may not have a "
"suggested package available (and it may not even be possible to install it "
"for that platform).  The recommendation used to be to make their use "
"conditional @emph{via} @code{if(require(\"@var{pkgname}\"))}): this is fine "
"if that conditioning is done in examples/tests/vignettes."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:997
msgid ""
"However, using @code{require} for conditioning @emph{in package code} is not "
"good practice as it alters the search path for the rest of the session and "
"relies on functions in that package not being masked by other @code{require} "
"or @code{library} calls.  It is better practice to use code like"
msgstr ""

#
#. type: example
#: R-exts.texi:1003
#, no-wrap
msgid ""
"   if (requireNamespace(\"rgl\", quietly = TRUE)) @{\n"
"      rgl::plot3d(...)\n"
"   @} else @{\n"
"      ## do something else not involving rgl.\n"
"   @}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1010
msgid ""
"Note the use of @code{rgl::} as that object would not necessarily be visible "
"(and if it is, it need not be the one from that namespace: @code{plot3d} "
"occurs in several other packages).  If the intention is to give an error if "
"the suggested package is not available, simply use e.g.@: @code{rgl::plot3d}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1014
msgid ""
"As noted above, packages in @samp{Enhances} @emph{must} be used "
"conditionally and hence objects within them should always be accessed "
"@emph{via} @code{::}."
msgstr ""

#
#. type: subsection
#: R-exts.texi:1016
#, no-wrap
msgid "The @file{INDEX} file"
msgstr ""

#
#. type: cindex
#: R-exts.texi:1017
#, no-wrap
msgid "INDEX file"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1025
msgid ""
"The optional file @file{INDEX} contains a line for each sufficiently "
"interesting object in the package, giving its name and a description "
"(functions such as print methods not usually called explicitly might not be "
"included).  Normally this file is missing and the corresponding information "
"is automatically generated from the documentation sources (using "
"@code{tools::Rdindex()}) when installing from source."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1028
msgid ""
"The file is part of the information given by @code{library(help = "
"@var{pkgname})}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1033
msgid ""
"Rather than editing this file, it is preferable to put customized "
"information about the package into an overview help page (@pxref{Documenting "
"packages}) and/or a vignette (@pxref{Writing package vignettes})."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1056
msgid ""
"The @file{R} subdirectory contains @R{} code files, only.  The code files to "
"be installed must start with an @acronym{ASCII} (lower or upper case) letter "
"or digit and have one of the extensions@footnote{Extensions @file{.S} and "
"@file{.s} arise from code originally written for S(-PLUS), but are commonly "
"used for assembler code.  Extension @file{.q} was used for S, which at one "
"time was tentatively called QPE.} @file{.R}, @file{.S}, @file{.q}, @file{."
"r}, or @file{.s}.  We recommend using @file{.R}, as this extension seems to "
"be not used by any other software.  It should be possible to read in the "
"files using @code{source()}, so @R{} objects must be created by "
"assignments.  Note that there need be no connection between the name of the "
"file and the @R{} objects created by it.  Ideally, the @R{} code files "
"should only directly assign @R{} objects and definitely should not call "
"functions with side effects such as @code{require} and @code{options}.  If "
"computations are required to create objects these can use code `earlier' in "
"the package (see the @samp{Collate} field) plus functions in the "
"@samp{Depends} packages provided that the objects created do not depend on "
"those packages except @emph{via} namespace imports."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1066
msgid ""
"Two exceptions are allowed: if the @file{R} subdirectory contains a file "
"@file{sysdata.rda} (a saved image of one or more @R{} objects: please use "
"suitable compression as suggested by @code{tools::resaveRdaFiles}, and see "
"also the @samp{SysDataCompression} @file{DESCRIPTION} field.)  this will be "
"lazy-loaded into the namespace environment -- this is intended for system "
"datasets that are not intended to be user-accessible @emph{via} "
"@code{data}.  Also, files ending in @samp{.in} will be allowed in the "
"@file{R} directory to allow a @file{configure} script to generate suitable "
"files."
msgstr ""

#. type: Plain text
#: R-exts.texi:1079
msgid ""
"Only @acronym{ASCII} characters (and the control characters tab, formfeed, "
"LF and CR) should be used in code files.  Other characters are accepted in "
"comments@footnote{but they should be in the encoding declared in the "
"@file{DESCRIPTION} file.}, but then the comments may not be readable in e.g."
"@: a UTF-8 locale.  Non-@acronym{ASCII} characters in object names will "
"normally@footnote{This is true for OSes which implement the @samp{C} locale: "
"Windows' idea of the @samp{C} locale uses the WinAnsi charset.} fail when "
"the package is installed.  Any byte will be allowed in a quoted character "
"string but @code{\\uxxxx} escapes should be used for non-@acronym{ASCII} "
"characters.  However, non-@acronym{ASCII} character strings may not be "
"usable in some locales and may display incorrectly in others."
msgstr ""

#
#. type: findex
#: R-exts.texi:1081
#: R-exts.texi:8597
#, no-wrap
msgid "library.dynam"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1084
msgid ""
"Various @R{} functions in a package can be used to initialize and clean up.  "
"@xref{Load hooks}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1103
msgid ""
"The @file{man} subdirectory should contain (only) documentation files for "
"the objects in the package in @dfn{R documentation} (Rd) format.  The "
"documentation filenames must start with an @acronym{ASCII} (lower or upper "
"case) letter or digit and have the extension @file{.Rd} (the default) or "
"@file{.rd}.  Further, the names must be valid in @samp{file://} URLs, which "
"means@footnote{More precisely, they can contain the English alphanumeric "
"characters and the symbols @samp{$ - _ . + ! ' ( ) , ; @ = &}.} they must be "
"entirely @acronym{ASCII} and not contain @samp{%}.  @xref{Writing R "
"documentation files}, for more information.  Note that all user-level "
"objects in a package should be documented; if a package @var{pkg} contains "
"user-level objects which are for ``internal'' use only, it should provide a "
"file @file{@var{pkg}-internal.Rd} which documents all such objects, and "
"clearly states that these are not meant to be called by the user.  See e.g."
"@: the sources for package @pkg{grid} in the @R{} distribution.  Note that "
"packages which use internal objects extensively should not export those "
"objects from their namespace, when they do not need to be documented "
"(@pxref{Package namespaces})."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1106
msgid ""
"Having a @file{man} directory containing no documentation files may give an "
"installation error."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1111
msgid ""
"The @file{man} subdirectory may contain a subdirectory named @file{macros}; "
"this will contain source for user-defined Rd macros.  (See @ref{User-defined "
"macros}.)  These use the Rd format, but may not contain anything but macro "
"definitions, comments and whitespace."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1114
msgid ""
"The @file{R} and @file{man} subdirectories may contain OS-specific "
"subdirectories named @file{unix} or @file{windows}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1137
msgid ""
"The sources and headers for the compiled code are in @file{src}, plus "
"optionally a file @file{Makevars} or @file{Makefile}.  When a package is "
"installed using @code{R CMD INSTALL}, @command{make} is used to control "
"compilation and linking into a shared object for loading into @R{}.  There "
"are default @command{make} variables and rules for this (determined when "
"@R{} is configured and recorded in @file{@var{R_HOME}/etc@var{R_ARCH}/"
"Makeconf}), providing support for C, C++, FORTRAN 77, Fortran "
"9x@footnote{Note that Ratfor is not supported.  If you have Ratfor source "
"code, you need to convert it to FORTRAN.  Only FORTRAN 77 (which we write in "
"upper case) is supported on all platforms, but most also support Fortran-95 "
"(for which we use title case).  If you want to ship Ratfor source files, "
"please do so in a subdirectory of @file{src} and not in the main "
"subdirectory.}, Objective C and Objective C++@footnote{either or both of "
"which may not be supported on particular platforms} with associated "
"extensions @file{.c}, @file{.cc} or @file{.cpp}, @file{.f}, @file{.f90} or "
"@file{.f95}, @file{.m}, and @file{.mm}, respectively.  We recommend using "
"@file{.h} for headers, also for C++@footnote{Using @file{.hpp} is not "
"guaranteed to be portable.} or Fortran 9x include files.  (Use of extension "
"@file{.C} for C++ is no longer supported.)  Files in the @file{src} "
"directory should not be hidden (start with a dot), and hidden files will "
"under some versions of @R{} be ignored."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1142
msgid ""
"It is not portable (and may not be possible at all) to mix all these "
"languages in a single package, and we do not support using both C++ and "
"Fortran 9x. Because @R{} itself uses it, we know that C and FORTRAN 77 can "
"be used together and mixing C and C++ seems to be widely successful."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1150
msgid ""
"If your code needs to depend on the platform there are certain defines which "
"can used in C or C++.  On all Windows builds (even 64-bit ones)  "
"@samp{_WIN32} will be defined: on 64-bit Windows builds also @samp{_WIN64}, "
"and on OS X @samp{__APPLE__} is defined.@footnote{There is also "
"@samp{__APPLE_CC__}, but that indicates a compiler with Apple-specific "
"features, not the OS.  It is used in @file{Rinlinedfuns.h}.}"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1165
msgid ""
"The default rules can be tweaked by setting macros@footnote{the POSIX "
"terminology, called `make variables' by GNU make.} in a file @file{src/"
"Makevars} (@pxref{Using Makevars}).  Note that this mechanism should be "
"general enough to eliminate the need for a package-specific @file{src/"
"Makefile}.  If such a file is to be distributed, considerable care is needed "
"to make it general enough to work on all @R{} platforms.  If it has any "
"targets at all, it should have an appropriate first target named @samp{all} "
"and a (possibly empty) target @samp{clean} which removes all files generated "
"by running @command{make} (to be used by @samp{R CMD INSTALL --clean} and "
"@samp{R CMD INSTALL --preclean}).  There are platform-specific file names on "
"Windows: @file{src/Makevars.win} takes precedence over @file{src/Makevars} "
"and @file{src/Makefile.win} must be used.  Some @command{make} programs "
"require makefiles to have a complete final line, including a newline."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1170
msgid ""
"A few packages use the @file{src} directory for purposes other than making a "
"shared object (e.g.@: to create executables).  Such packages should have "
"files @file{src/Makefile} and @file{src/Makefile.win} (unless intended for "
"only Unix-alikes or only Windows)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1188
msgid ""
"In very special cases packages may create binary files other than the shared "
"objects/DLLs in the @file{src} directory.  Such files will not be installed "
"in a multi-architecture setting since @code{R CMD INSTALL --libs-only} is "
"used to merge multiple sub-architectures and it only copies shared objects/"
"DLLs.  If a package wants to install other binaries (for example executable "
"programs), it should provide an @R{} script @file{src/install.libs.R} which "
"will be run as part of the installation in the @code{src} build directory "
"@emph{instead of} copying the shared objects/DLLs. The script is run in a "
"separate @R{} environment containing the following variables: "
"@code{R_PACKAGE_NAME} (the name of the package), @code{R_PACKAGE_SOURCE} "
"(the path to the source directory of the package), @code{R_PACKAGE_DIR} (the "
"path of the target installation directory of the package), @code{R_ARCH} "
"(the arch-dependent part of the path, often empty), @code{SHLIB_EXT} (the "
"extension of shared objects) and @code{WINDOWS} (@code{TRUE} on Windows, "
"@code{FALSE} elsewhere).  Something close to the default behavior could be "
"replicated with the following @file{src/install.libs.R} file:"
msgstr ""

#
#. type: example
#: R-exts.texi:1196
#, no-wrap
msgid ""
"files <- Sys.glob(paste0(\"*\", SHLIB_EXT))\n"
"dest <- file.path(R_PACKAGE_DIR, paste0('libs', R_ARCH))\n"
"dir.create(dest, recursive = TRUE, showWarnings = FALSE)\n"
"file.copy(files, dest, overwrite = TRUE)\n"
"if(file.exists(\"symbols.rds\"))\n"
"    file.copy(\"symbols.rds\", dest, overwrite = TRUE)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1200
msgid ""
"On the other hand, executable programs could be installed along the lines of"
msgstr ""

#
#. type: example
#: R-exts.texi:1208
#, no-wrap
msgid ""
"execs <- c(\"one\", \"two\", \"three\")\n"
"if(WINDOWS) execs <- paste0(execs, \".exe\")\n"
"if ( any(file.exists(execs)) ) @{\n"
"  dest <- file.path(R_PACKAGE_DIR,  paste0('bin', R_ARCH)\n"
"  dir.create(dest, recursive = TRUE, showWarnings = FALSE)\n"
"  file.copy(execs, dest, overwrite = TRUE)\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1213
msgid ""
"Note the use of architecture-specific subdirectories of @file{bin} where "
"needed."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1215
msgid ""
"The @file{data} subdirectory is for data files: @xref{Data in packages}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1229
msgid ""
"The @file{demo} subdirectory is for @R{} scripts (for running @emph{via} "
"@code{demo()}) that demonstrate some of the functionality of the package.  "
"Demos may be interactive and are not checked automatically, so if testing is "
"desired use code in the @file{tests} directory to achieve this.  The script "
"files must start with a (lower or upper case) letter and have one of the "
"extensions @file{.R} or @file{.r}.  If present, the @file{demo} subdirectory "
"should also have a @file{00Index} file with one line for each demo, giving "
"its name and a description separated by a tab or at least three spaces. "
"(This index file is not generated automatically.)  Note that a demo does not "
"have a specified encoding and so should be an @acronym{ASCII} file "
"(@pxref{Encoding issues}).  As from @R{} 3.0.0 @code{demo()} will use the "
"package encoding if there is one, but this is mainly useful for non-"
"@acronym{ASCII} comments."
msgstr ""

#
#. type: cindex
#: R-exts.texi:1230
#, no-wrap
msgid ".Rinstignore file"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1245
msgid ""
"The contents of the @file{inst} subdirectory will be copied recursively to "
"the installation directory.  Subdirectories of @file{inst} should not "
"interfere with those used by @R{} (currently, @file{R}, @file{data}, "
"@file{demo}, @file{exec}, @file{libs}, @file{man}, @file{help}, @file{html} "
"and @file{Meta}, and earlier versions used @file{latex}, @file{R-ex}).  The "
"copying of the @file{inst} happens after @file{src} is built so its "
"@file{Makefile} can create files to be installed.  To exclude files from "
"being installed, one can specify a list of exclude patterns in file @file{."
"Rinstignore} in the top-level source directory.  These patterns should be "
"Perl-like regular expressions (see the help for @code{regexp} in @R{} for "
"the precise details), one per line, to be matched case-"
"insensitively@footnote{on all platforms from @R{} 3.1.0} against the file "
"and directory paths, e.g.@: @file{doc/.*[.]png$} will exclude all PNG files "
"in @file{inst/doc} based on the extension."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1255
msgid ""
"Note that with the exceptions of @file{INDEX}, @file{LICENSE}/@file{LICENCE} "
"and @file{NEWS}, information files at the top level of the package will "
"@emph{not} be installed and so not be known to users of Windows and OS X "
"compiled packages (and not seen by those who use @command{R CMD INSTALL} or "
"@command{install.packages} on the tarball).  So any information files you "
"wish an end user to see should be included in @file{inst}.  Note that if the "
"named exceptions also occur in @file{inst}, the version in @file{inst} will "
"be that seen in the installed package."
msgstr ""

#
#. type: findex
#: R-exts.texi:1256
#: R-exts.texi:4854
#, no-wrap
msgid "CITATION"
msgstr ""

#
#. type: cindex
#: R-exts.texi:1257
#: R-exts.texi:4855
#, no-wrap
msgid "citation"
msgstr ""

#
#. type: findex
#: R-exts.texi:1258
#, no-wrap
msgid "NEWS.Rd"
msgstr ""

#
#. type: cindex
#: R-exts.texi:1259
#, no-wrap
msgid "news"
msgstr ""

#. type: Plain text
#: R-exts.texi:1264
msgid ""
"Things you might like to add to @file{inst} are a @file{CITATION} file for "
"use by the @code{citation} function, and a @file{NEWS.Rd} file for use by "
"the @code{news} function.  See its help page for the specific format "
"restrictions of the @file{NEWS.Rd} file."
msgstr ""

#
#. type: findex
#: R-exts.texi:1265
#, no-wrap
msgid "AUTHORS"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1270
msgid ""
"Another file sometimes needed in @file{inst} is @file{AUTHORS} or "
"@file{COPYRIGHTS} to specify the authors or copyright holders when this is "
"too complex to put in the @file{DESCRIPTION} file."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1294
msgid ""
"Subdirectory @file{tests} is for additional package-specific test code, "
"similar to the specific tests that come with the @R{} distribution.  Test "
"code can either be provided directly in a @file{.R} file, or @emph{via} a "
"@file{.Rin} file containing code which in turn creates the corresponding "
"@file{.R} file (e.g., by collecting all function objects in the package and "
"then calling them with the strangest arguments).  The results of running a "
"@file{.R} file are written to a @file{.Rout} file.  If there is a "
"corresponding@footnote{The best way to generate such a file is to copy the "
"@file{.Rout} from a successful run of @command{R CMD check}.  If you want to "
"generate it separately, do run @R{} with options @option{--vanilla --slave} "
"and with environment variable @env{LANGUAGE=en} set to get messages in "
"English.  Be careful not to use output with the option @option{--timings} "
"(and note that @option{--as-cran} sets it).} @file{.Rout.save} file, these "
"two are compared, with differences being reported but not causing an error.  "
"The directory @file{tests} is copied to the check area, and the tests are "
"run with the copy as the working directory and with @code{R_LIBS} set to "
"ensure that the copy of the package installed during testing will be found "
"by @code{library(@var{pkg_name})}.  Note that the package-specific tests are "
"run in a vanilla @R{} session without setting the random-number seed, so "
"tests which use random numbers will need to set the seed to obtain "
"reproducible results (and it can be helpful to do so in all cases, to avoid "
"occasional failures when tests are run)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1300
msgid ""
"If directory @file{tests} has a subdirectory @file{Examples} containing a "
"file @code{@var{pkg}-Ex.Rout.save}, this is compared to the output file for "
"running the examples when the latter are checked.  Reference output should "
"be produced without having the @option{--timings} option set (and note that "
"@option{--as-cran} sets it)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1310
msgid ""
"Subdirectory @file{exec} could contain additional executable scripts the "
"package needs, typically scripts for interpreters such as the shell, Perl, "
"or Tcl.  NB: only files (and not directories) under @file{exec} are "
"installed (and those with names starting with a dot are ignored), and they "
"are all marked as executable (mode @code{755}, moderated by @samp{umask}) on "
"POSIX platforms.  Note too that this is not suitable for executable "
"@emph{programs} since some platforms (including Windows)  support multiple "
"architectures using the same installed package directory."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1313
msgid ""
"Subdirectory @file{po} is used for files related to @emph{localization}: "
"@pxref{Internationalization}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1317
msgid ""
"Subdirectory @file{tools} is the preferred place for auxiliary files needed "
"during configuration, and also for sources need to re-create scripts (e.g.@: "
"M4 files for @command{autoconf})."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1328
msgid ""
"The @file{data} subdirectory is for data files, either to be made available "
"@emph{via} lazy-loading or for loading using @code{data()}.  (The choice is "
"made by the @samp{LazyData} field in the @file{DESCRIPTION} file: the "
"default is not to do so.)  It should not be used for other data files needed "
"by the package, and the convention has grown up to use directory @file{inst/"
"extdata} for such files."
msgstr ""

#. type: Plain text
#: R-exts.texi:1339
msgid ""
"Data files can have one of three types as indicated by their extension: "
"plain @R{} code (@file{.R} or @file{.r}), tables (@file{.tab}, @file{.txt}, "
"or @file{.csv}, see @code{?data} for the file formats, and note that @file{."
"csv} is @strong{not} the standard@footnote{e.g.@: @uref{https://tools.ietf."
"org/@/html/@/rfc4180}.} CSV format), or @code{save()} images (@file{.RData} "
"or @file{.rda}).  The files should not be hidden (have names starting with a "
"dot).  Note that @R{} code should be ``self-sufficient'' and not make use of "
"extra functionality provided by the package, so that the data file can also "
"be used without having to load the package or its namespace."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1350
msgid ""
"Images (extensions @file{.RData}@footnote{People who have trouble with case "
"are advised to use @file{.rda} as a common error is to refer to @file{abc."
"RData} as @file{abc.Rdata}!} or @file{.rda}) can contain references to the "
"namespaces of packages that were used to create them.  Preferably there "
"should be no such references in data files, and in any case they should only "
"be to packages listed in the @code{Depends} and @code{Imports} fields, as "
"otherwise it may be impossible to install the package.  To check for such "
"references, load all the images into a vanilla @R{} session, and look at the "
"output of @code{loadedNamespaces()}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1359
msgid ""
"If your data files are large and you are not using @samp{LazyData} you can "
"speed up installation by providing a file @file{datalist} in the @file{data} "
"subdirectory.  This should have one line per topic that @code{data()} will "
"find, in the format @samp{foo} if @code{data(foo)} provides @samp{foo}, or "
"@samp{foo: bar bah} if @code{data(foo)} provides @samp{bar} and @samp{bah}.  "
"@command{R CMD build} will automatically add a @file{datalist} file to "
"@file{data} directories of over 1Mb, using the function @code{tools::"
"add_datalist}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1364
msgid ""
"Tables (@file{.tab}, @file{.txt}, or @file{.csv} files) can be compressed by "
"@command{gzip}, @command{bzip2} or @command{xz}, optionally with additional "
"extension @file{.gz}, @file{.bz2} or @file{.xz}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1373
msgid ""
"If your package is to be distributed, do consider the resource implications "
"of large datasets for your users: they can make packages very slow to "
"download and use up unwelcome amounts of storage space, as well as taking "
"many seconds to load.  It is normally best to distribute large datasets as "
"@file{.rda} images prepared by @code{save(, compress = TRUE)} (the "
"default).  Using @command{bzip2} or @command{xz} compression will usually "
"reduce the size of both the package tarball and the installed package, in "
"some cases by a factor of two or more."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1378
msgid ""
"Package @pkg{tools} has a couple of functions to help with data images: "
"@code{checkRdaFiles} reports on the way the image was saved, and "
"@code{resaveRdaFiles} will re-save with a different type of compression, "
"including choosing the best type for that particular image."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1388
msgid ""
"Some packages using @samp{LazyData} will benefit from using a form of "
"compression other than @command{gzip} in the installed lazy-loading "
"database.  This can be selected by the @option{--data-compress} option to "
"@command{R CMD INSTALL} or by using the @samp{LazyDataCompression} field in "
"the @file{DESCRIPTION} file.  Useful values are @code{bzip2}, @code{xz} and "
"the default, @code{gzip}.  The only way to discover which is best is to try "
"them all and look at the size of the @file{@var{pkgname}/data/Rdata.rdb} "
"file."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1392
msgid ""
"Lazy-loading is not supported for very large datasets (those which when "
"serialized exceed 2GB, the limit for the format on 32-bit platforms and all "
"platforms prior to @R{} 3.0.0)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1397
msgid ""
"The analogue for @file{sysdata.rda} is field @samp{SysDataCompression}: the "
"default (since @R{} 2.12.2) is @code{xz} for files bigger than 1MB otherwise "
"@code{gzip}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1404
msgid ""
"Code which needs to be compiled (C, C++, FORTRAN, Fortran 95 @dots{})  is "
"included in the @file{src} subdirectory and discussed elsewhere in this "
"document."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1412
msgid ""
"Subdirectory @file{exec} could be used for scripts for interpreters such as "
"the shell, BUGS, JavaScript, Matlab, Perl, php (@CRANpkg{amap}), Python or "
"Tcl (@CRANpkg{Simile}), or even @R{}.  However, it seems more common to use "
"the @file{inst} directory, for example @file{WriteXLS/inst/Perl}, @file{NMF/"
"inst/m-files}, @file{RnavGraph/inst/tcl}, @file{RProtoBuf/inst/python} and "
"@file{emdbook/inst/BUGS} and @file{gridSVG/inst/js}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1420
msgid ""
"Java code is a special case: except for very small programs, @file{.java} "
"files should be byte-compiled (to a @file{.class} file) and distributed as "
"part of a @file{.jar} file: the conventional location for the @file{.jar} "
"file(s) is @file{inst/java}.  It is desirable (and required under an Open "
"Source license) to make the Java source files available: this is best done "
"in a top-level @file{java} directory in the package---the source files "
"should not be installed."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1425
msgid ""
"If your package requires one of these interpreters or an extension then this "
"should be declared in the @samp{SystemRequirements} field of its "
"@file{DESCRIPTION} file.  (Users of Java most often do so @emph{via} "
"@CRANpkg{rJava}, when depending on/importing that suffices.)"
msgstr ""

#. type: Plain text
#: R-exts.texi:1433
msgid ""
"Windows and Mac users should be aware that the Tcl extensions @samp{BWidget} "
"and @samp{Tktable} which are currently included with the @R{} for Windows "
"and in the OS X installers @emph{are} extensions and do need to be declared "
"for users of other platforms (and that @samp{Tktable} is less widely "
"available than it used to be, including not in the main repositories for "
"major Linux distributions)."
msgstr ""

#. type: Plain text
#: R-exts.texi:1436
msgid ""
"@samp{BWidget} needs to be installed by the user on other OSes.  This is "
"fairly easy to do: first find the Tcl/Tk search path:"
msgstr ""

#
#. type: example
#: R-exts.texi:1440
#, no-wrap
msgid ""
"library(tcltk)\n"
"strsplit(tclvalue('auto_path'), \" \")[[1]]\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:1446
msgid ""
"then download the sources from @uref{http://sourceforge.net/@/projects/@/"
"tcllib/@/files/@/BWidget/} and at the command line run something like"
msgstr ""

#. type: example
#: R-exts.texi:1450
#, no-wrap
msgid ""
"tar xf bwidget-1.9.8.tar.gz\n"
"sudo mv bwidget-1.9.8 /usr/local/lib\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1455
msgid ""
"substituting a location on the Tcl/Tk search path for @file{/usr/local/lib} "
"if needed."
msgstr ""

#. type: Plain text
#: R-exts.texi:1462
msgid ""
"URLs in many places in the package documentation will be converted to "
"clickable hyperlinks in at least some of their renderings.  So care is "
"needed that their forms are correct and portable."
msgstr ""

#. type: Plain text
#: R-exts.texi:1465
msgid ""
"The full URL should be given, including the scheme (often @samp{http://} or "
"@samp{https://}) and a final @samp{/} for references to directories."
msgstr ""

#. type: Plain text
#: R-exts.texi:1470
msgid ""
"Spaces in URLs are not portable and how they are handled does vary by HTTP "
"server and by client.  There should be no space in the host part of an "
"@samp{http://} URL, and spaces in the remainder should be encoded, with each "
"space replaced by @samp{%20}."
msgstr ""

#. type: Plain text
#: R-exts.texi:1473
msgid ""
"Other characters may benefit from being encoded: see the help on "
"@code{URLencode()}."
msgstr ""

#. type: Plain text
#: R-exts.texi:1475
msgid "The canonical URL for a @acronym{CRAN} package is"
msgstr ""

#. type: example
#: R-exts.texi:1477
#, no-wrap
msgid "https://cran.r-project.org/package=@var{pkgname}\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:1482
msgid ""
"and not a version starting @samp{http://cran.r-project.org/web/packages/"
"@var{pkgname}}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1488
msgid ""
"Note that most of this section is specific to Unix-alikes: see the comments "
"later on about the Windows port of @R{}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1500
msgid ""
"If your package needs some system-dependent configuration before "
"installation you can include an executable (Bourne shell) script "
"@file{configure} in your package which (if present) is executed by @code{R "
"CMD INSTALL} before any other action is performed.  This can be a script "
"created by the Autoconf mechanism, but may also be a script written by "
"yourself.  Use this to detect if any nonstandard libraries are present such "
"that corresponding code in the package can be disabled at install time "
"rather than giving error messages when the package is compiled or used.  To "
"summarize, the full power of Autoconf is available for your extension "
"package (including variable substitution, searching for libraries, etc.)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1505
msgid ""
"Under a Unix-alike only, an executable (Bourne shell) script @file{cleanup} "
"is executed as the last thing by @code{R CMD INSTALL} if option @option{--"
"clean} was given, and by @code{R CMD build} when preparing the package for "
"building from its source."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1515
msgid ""
"As an example consider we want to use functionality provided by a (C or "
"FORTRAN) library @code{foo}.  Using Autoconf, we can create a configure "
"script which checks for the library, sets variable @code{HAVE_FOO} to "
"@code{TRUE} if it was found and to @code{FALSE} otherwise, and then "
"substitutes this value into output files (by replacing instances of "
"@samp{@@HAVE_FOO@@} in input files with the value of @code{HAVE_FOO}).  For "
"example, if a function named @code{bar} is to be made available by linking "
"against library @code{foo} (i.e., using @option{-lfoo}), one could use"
msgstr ""

#
#. type: group
#: R-exts.texi:1523
#, no-wrap
msgid ""
"AC_CHECK_LIB(foo, @var{fun}, [HAVE_FOO=TRUE], [HAVE_FOO=FALSE])\n"
"AC_SUBST(HAVE_FOO)\n"
"......\n"
"AC_CONFIG_FILES([foo.R])\n"
"AC_OUTPUT\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1528
msgid "in @file{configure.ac} (assuming Autoconf 2.50 or later)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1530
msgid ""
"The definition of the respective @R{} function in @file{foo.R.in} could be"
msgstr ""

#
#. type: group
#: R-exts.texi:1537
#, no-wrap
msgid ""
"foo <- function(x) @{\n"
"    if(!@@HAVE_FOO@@)\n"
"      stop(\"Sorry, library 'foo' is not available\"))\n"
"    ...\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1543
msgid ""
"From this file @command{configure} creates the actual @R{} source file "
"@file{foo.R} looking like"
msgstr ""

#
#. type: group
#: R-exts.texi:1550
#, no-wrap
msgid ""
"foo <- function(x) @{\n"
"    if(!FALSE)\n"
"      stop(\"Sorry, library 'foo' is not available\"))\n"
"    ...\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1556
msgid ""
"if library @code{foo} was not found (with the desired functionality).  In "
"this case, the above @R{} code effectively disables the function."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1559
msgid ""
"One could also use different file fragments for available and missing "
"functionality, respectively."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1564
msgid ""
"You will very likely need to ensure that the same C compiler and compiler "
"flags are used in the @file{configure} tests as when compiling @R{} or your "
"package.  Under a Unix-alike, you can achieve this by including the "
"following fragment early in @file{configure.ac}"
msgstr ""

#
#. type: group
#: R-exts.texi:1575
#, no-wrap
msgid ""
": $@{R_HOME=`R RHOME`@}\n"
"if test -z \"$@{R_HOME@}\"; then\n"
"  echo \"could not determine R_HOME\"\n"
"  exit 1\n"
"fi\n"
"CC=`\"$@{R_HOME@}/bin/R\" CMD config CC`\n"
"CFLAGS=`\"$@{R_HOME@}/bin/R\" CMD config CFLAGS`\n"
"CPPFLAGS=`\"$@{R_HOME@}/bin/R\" CMD config CPPFLAGS`\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1583
msgid ""
"(Using @samp{$@{R_HOME@}/bin/R} rather than just @samp{R} is necessary in "
"order to use the correct version of @R{} when running the script as part of "
"@code{R CMD INSTALL}, and the quotes since @samp{$@{R_HOME@}} might contain "
"spaces.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1585
msgid "If your code does load checks then you may also need"
msgstr ""

#
#. type: example
#: R-exts.texi:1587
#, no-wrap
msgid "LDFLAGS=`\"$@{R_HOME@}/bin/R\" CMD config LDFLAGS`\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1592
msgid ""
"and packages written with C++ need to pick up the details for the C++ "
"compiler and switch the current language to C++ by"
msgstr ""

#
#. type: example
#: R-exts.texi:1594
#, no-wrap
msgid "AC_LANG(C++)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1599
msgid ""
"The latter is important, as for example C headers may not be available to C+"
"+ programs or may not be written to avoid C++ name-mangling."
msgstr ""

#
#. type: findex
#: R-exts.texi:1600
#, no-wrap
msgid "R CMD config"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1605
msgid ""
"You can use @code{R CMD config} for getting the value of the basic "
"configuration variables, and also the header and library flags necessary for "
"linking a front-end executable program against @R{}, see @kbd{R CMD config --"
"help} for details."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1608
msgid ""
"To check for an external BLAS library using the @code{ACX_BLAS} macro from "
"the official Autoconf Macro Archive, one can simply do"
msgstr ""

#
#. type: group
#: R-exts.texi:1615
#, no-wrap
msgid ""
"F77=`\"$@{R_HOME@}/bin/R\" CMD config F77`\n"
"AC_PROG_F77\n"
"FLIBS=`\"$@{R_HOME@}/bin/R\" CMD config FLIBS`\n"
"ACX_BLAS([], AC_MSG_ERROR([could not find your BLAS library], 1))\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1624
msgid ""
"Note that @code{FLIBS} as determined by @R{} must be used to ensure that "
"FORTRAN 77 code works on all @R{} platforms.  Calls to the Autoconf macro "
"@code{AC_F77_LIBRARY_LDFLAGS}, which would overwrite @code{FLIBS}, must not "
"be used (and hence e.g.@: removed from @code{ACX_BLAS}).  (Recent versions "
"of Autoconf in fact allow an already set @code{FLIBS} to override the test "
"for the FORTRAN linker flags.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1631
msgid ""
"@strong{N.B.}: If the @command{configure} script creates files, e.g.@: "
"@file{src/Makevars}, you do need a @command{cleanup} script to remove them.  "
"Otherwise if the package has vignettes, @command{R CMD build} will ship the "
"files that are created.  For example, package @CRANpkg{RODBC} has"
msgstr ""

#
#. type: example
#: R-exts.texi:1634
#, no-wrap
msgid ""
"#!/bin/sh\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:1636
#, no-wrap
msgid "rm -f config.* src/Makevars src/config.h\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1641
msgid ""
"As this example shows, @command{configure} often creates working files such "
"as @file{config.log}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1644
msgid ""
"If your configure script needs auxiliary files, it is recommended that you "
"ship them in a @file{tools} directory (as @R{} itself does)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1659
msgid ""
"You should bear in mind that the configure script will not be used on "
"Windows systems.  If your package is to be made publicly available, please "
"give enough information for a user on a non-Unix-alike platform to configure "
"it manually, or provide a @file{configure.win} script to be used on that "
"platform.  (Optionally, there can be a @file{cleanup.win} script.  Both "
"should be shell scripts to be executed by @command{ash}, which is a minimal "
"version of Bourne-style @command{sh}.)  When @file{configure.win} is run the "
"environment variables @env{R_HOME} (which uses @samp{/} as the file "
"separator), @env{R_ARCH} and Use @env{R_ARCH_BIN} will be set.  Use "
"@env{R_ARCH} to decide if this is a 64-bit build (its value there is @samp{/"
"x64}) and to install DLLs to the correct place (@file{$@{R_HOME@}/libs"
"$@{R_ARCH@}}).  Use @env{R_ARCH_BIN} to find the correct place under the "
"@file{bin} directory, e.g.@: @file{$@{R_HOME@}/bin$@{R_ARCH_BIN@}/Rscript."
"exe}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1673
msgid ""
"In some rare circumstances, the configuration and cleanup scripts need to "
"know the location into which the package is being installed.  An example of "
"this is a package that uses C code and creates two shared object/DLLs.  "
"Usually, the object that is dynamically loaded by @R{} is linked against the "
"second, dependent, object.  On some systems, we can add the location of this "
"dependent object to the object that is dynamically loaded by @R{}.  This "
"means that each user does not have to set the value of the "
"@env{LD_LIBRARY_PATH} (or equivalent) environment variable, but that the "
"secondary object is automatically resolved.  Another example is when a "
"package installs support files that are required at run time, and their "
"location is substituted into an @R{} data structure at installation time. "
"(This happens with the Java Archive files in the Omegahat @pkg{SJava} "
"package.)"
msgstr ""

#
#. type: vindex
#: R-exts.texi:1673
#, no-wrap
msgid "R_LIBRARY_DIR"
msgstr ""

#
#. type: vindex
#: R-exts.texi:1674
#, no-wrap
msgid "R_PACKAGE_DIR"
msgstr ""

#
#. type: vindex
#: R-exts.texi:1675
#, no-wrap
msgid "R_PACKAGE_NAME"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1689
msgid ""
"The names of the top-level library directory (i.e., specifiable @emph{via} "
"the @samp{-l} argument) and the directory of the package itself are made "
"available to the installation scripts @emph{via} the two shell/environment "
"variables @env{R_LIBRARY_DIR} and @env{R_PACKAGE_DIR}.  Additionally, the "
"name of the package (e.g.@: @samp{survival} or @samp{MASS}) being installed "
"is available from the environment variable @env{R_PACKAGE_NAME}.  (Currently "
"the value of @env{R_PACKAGE_DIR} is always @code{$@{R_LIBRARY_DIR@}/"
"$@{R_PACKAGE_NAME@}}, but this used not to be the case when versioned "
"installs were allowed.  Its main use is in @file{configure.win} scripts for "
"the installation path of external software's DLLs.)  Note that the value of "
"@env{R_PACKAGE_DIR} may contain spaces and other shell-unfriendly "
"characters, and so should be quoted in makefiles and configure scripts."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1698
msgid ""
"One of the more tricky tasks can be to find the headers and libraries of "
"external software.  One tool which is increasingly available on Unix-alikes "
"(but not by default on OS X) to do this is @command{pkg-config}.  The "
"@file{configure} script will need to test for the presence of the command "
"itself (see for example package @CRANpkg{Cairo}), and if present it can be "
"asked if the software is installed, of a suitable version and for "
"compilation/linking flags by e.g.@:"
msgstr ""

#
#. type: example
#: R-exts.texi:1707
#, no-wrap
msgid ""
"$ pkg-config --exists 'QtCore >= 4.0.0'  # check the status\n"
"$ pkg-config --modversion QtCore\n"
"4.7.1\n"
"$ pkg-config --cflags QtCore\n"
"-DQT_SHARED -I/usr/include/QtCore\n"
"$ pkg-config --libs QtCore\n"
"-lQtCore\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1714
msgid ""
"Note that @command{pkg-config --libs} gives the information required to link "
"against the default version of that library (usually the dynamic one), and "
"@command{pkg-config --static} is needed if the static library is to be used."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1718
msgid ""
"Sometimes the name by which the software is known to @command{pkg-config} is "
"not what one might expect (e.g.@: @samp{gtk+-2.0} even for 2.22).  To get a "
"complete list use"
msgstr ""

#
#. type: example
#: R-exts.texi:1721
#, no-wrap
msgid "pkg-config --list-all | sort\n"
msgstr ""

#
#. type: node
#: R-exts.texi:1728
#: R-exts.texi:1730
#: R-exts.texi:1993
#: R-exts.texi:2094
#: R-exts.texi:2146
#: R-exts.texi:2204
#, no-wrap
msgid "Using Makevars"
msgstr ""

#
#. type: node
#: R-exts.texi:1728
#: R-exts.texi:1730
#: R-exts.texi:2204
#: R-exts.texi:2205
#: R-exts.texi:2339
#, no-wrap
msgid "Configure example"
msgstr ""

#
#. type: node
#: R-exts.texi:1728
#: R-exts.texi:2204
#: R-exts.texi:2339
#: R-exts.texi:2340
#: R-exts.texi:2392
#, no-wrap
msgid "Using F95 code"
msgstr ""

#
#. type: subsection
#: R-exts.texi:1728
#: R-exts.texi:2339
#: R-exts.texi:2392
#: R-exts.texi:2393
#, no-wrap
msgid "Using C++11 code"
msgstr ""

#
#. type: subsection
#: R-exts.texi:1731
#, no-wrap
msgid "Using @file{Makevars}"
msgstr ""

#
#. type: node
#: R-exts.texi:1737
#: R-exts.texi:1993
#: R-exts.texi:1994
#: R-exts.texi:2094
#, no-wrap
msgid "OpenMP support"
msgstr ""

#
#. type: node
#: R-exts.texi:1737
#: R-exts.texi:1993
#: R-exts.texi:2094
#: R-exts.texi:2095
#: R-exts.texi:2146
#, no-wrap
msgid "Using pthreads"
msgstr ""

#
#. type: subsubsection
#: R-exts.texi:1737
#: R-exts.texi:2094
#: R-exts.texi:2146
#: R-exts.texi:2147
#, no-wrap
msgid "Compiling in sub-directories"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1743
msgid ""
"Sometimes writing your own @file{configure} script can be avoided by "
"supplying a file @file{Makevars}: also one of the most common uses of a "
"@file{configure} script is to make @file{Makevars} from @file{Makevars.in}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1749
msgid ""
"A @file{Makevars} file is a makefile and is used as one of several makefiles "
"by @command{R CMD SHLIB} (which is called by @command{R CMD INSTALL} to "
"compile code in the @file{src} directory).  It should be written if at all "
"possible in a portable style, in particular (except for @file{Makevars.win}) "
"without the use of GNU extensions."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1756
msgid ""
"The most common use of a @file{Makevars} file is to set additional "
"preprocessor options (for example include paths) for C/C++ files @emph{via} "
"@code{PKG_CPPFLAGS}, and additional compiler flags by setting "
"@code{PKG_CFLAGS}, @code{PKG_CXXFLAGS}, @code{PKG_FFLAGS} or "
"@code{PKG_FCFLAGS}, for C, C++, FORTRAN or Fortran 9x respectively "
"(@pxref{Creating shared objects})."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1761
msgid ""
"@strong{N.B.}: Include paths are preprocessor options, not compiler options, "
"and @strong{must} be set in @code{PKG_CPPFLAGS} as otherwise platform-"
"specific paths (e.g.@: @samp{-I/usr/local/include}) will take precedence."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1764
msgid ""
"@file{Makevars} can also be used to set flags for the linker, for example "
"@samp{-L} and @samp{-l} options, @emph{via} @code{PKG_LIBS}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1770
msgid ""
"When writing a @file{Makevars} file for a package you intend to distribute, "
"take care to ensure that it is not specific to your compiler: flags such as "
"@option{-O2 -Wall -pedantic} (and all other @option{-W} flags: for the "
"Solaris compiler these are used to pass arguments to compiler phases) are "
"all specific to GCC."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1774
msgid ""
"Also, do not set variables such as @code{CPPFLAGS}, @code{CFLAGS} etc.: "
"these should be settable by users (sites) through appropriate personal (site-"
"wide) @file{Makevars} files."
msgstr ""

#
#. type: ifset
#: R-exts.texi:1777
#: R-exts.texi:4054
#: R-exts.texi:9048
msgid ""
"@xref{Customizing package compilation, , Customizing package compilation, R-"
"admin, R Installation and Administration},"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1786
msgid ""
"There are some macros@footnote{in POSIX parlance: GNU @command{make} calls "
"these `make variables'.} which are set whilst configuring the building of "
"@R{} itself and are stored in @file{@var{R_HOME}/etc@var{R_ARCH}/Makeconf}.  "
"That makefile is included as a @file{Makefile} @emph{after} @file{Makevars[."
"win]}, and the macros it defines can be used in macro assignments and make "
"command lines in the latter.  These include"
msgstr ""

#
#. type: vindex
#: R-exts.texi:1788
#: R-exts.texi:1789
#, no-wrap
msgid "FLIBS"
msgstr ""

#
#. type: table
#: R-exts.texi:1793
msgid ""
"A macro containing the set of libraries need to link FORTRAN code.  This may "
"need to be included in @code{PKG_LIBS}: it will normally be included "
"automatically if the package contains FORTRAN source files."
msgstr ""

#
#. type: vindex
#: R-exts.texi:1794
#: R-exts.texi:1795
#, no-wrap
msgid "BLAS_LIBS"
msgstr ""

#
#. type: table
#: R-exts.texi:1805
msgid ""
"A macro containing the BLAS libraries used when building @R{}.  This may "
"need to be included in @code{PKG_LIBS}.  Beware that if it is empty then the "
"@R{} executable will contain all the double-precision and double-complex "
"BLAS routines, but no single-precision nor complex routines.  If "
"@code{BLAS_LIBS} is included, then @code{FLIBS} also needs to be@footnote{at "
"least on Unix-alikes: the Windows build currently resolves such dependencies "
"to a static FORTRAN library when @file{Rblas.dll} is built.} included "
"following it, as most BLAS libraries are written at least partially in "
"FORTRAN."
msgstr ""

#
#. type: vindex
#: R-exts.texi:1806
#: R-exts.texi:1807
#, no-wrap
msgid "LAPACK_LIBS"
msgstr ""

#
#. type: table
#: R-exts.texi:1815
msgid ""
"A macro containing the LAPACK libraries (and paths where appropriate)  used "
"when building @R{}.  This may need to be included in @code{PKG_LIBS}.  It "
"may point to a dynamic library @code{libRlapack} which contains the main "
"double-precision LAPACK routines as well as those double-complex LAPACK "
"routines needed to build @R{}, or it may point to an external LAPACK "
"library, or may be empty if an external BLAS library also contains LAPACK."
msgstr ""

#
#. type: table
#: R-exts.texi:1819
msgid ""
"[@code{libRlapack} includes all the double-precision LAPACK routines current "
"in 2003: a list of which routines are included is in file @file{src/modules/"
"lapack/README}.]"
msgstr ""

#
#. type: table
#: R-exts.texi:1822
msgid ""
"For portability, the macros @code{BLAS_LIBS} and @code{FLIBS} should always "
"be included @emph{after} @code{LAPACK_LIBS} (and in that order)."
msgstr ""

#
#. type: vindex
#: R-exts.texi:1823
#: R-exts.texi:1824
#, no-wrap
msgid "SAFE_FFLAGS"
msgstr ""

#
#. type: table
#: R-exts.texi:1833
msgid ""
"A macro containing flags which are needed to circumvent over-optimization of "
"FORTRAN code: it is typically @samp{-g -O2 -ffloat-store} on @cputype{ix86} "
"platforms using @command{gfortran}.  Note that this is @strong{not} an "
"additional flag to be used as part of @code{PKG_FFLAGS}, but a replacement "
"for @code{FFLAGS}, and that it is intended for the FORTRAN 77 compiler "
"@samp{F77} and not necessarily for the Fortran 90/95 compiler @samp{FC}.  "
"See the example later in this section."
msgstr ""

#
#. type: vindex
#: R-exts.texi:1835
#: R-exts.texi:9028
#, no-wrap
msgid "OBJECTS"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1844
msgid ""
"Setting certain macros in @file{Makevars} will prevent @command{R CMD SHLIB} "
"setting them: in particular if @file{Makevars} sets @samp{OBJECTS} it will "
"not be set on the @command{make} command line.  This can be useful in "
"conjunction with implicit rules to allow other types of source code to be "
"compiled and included in the shared object.  It can also be used to control "
"the set of files which are compiled, either by excluding some files in "
"@file{src} or including some files in subdirectories.  For example"
msgstr ""

#
#. type: example
#: R-exts.texi:1847
#, no-wrap
msgid "OBJECTS = 4dfp/endianio.o 4dfp/Getifh.o R4dfp-object.o\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1856
msgid ""
"Note that @file{Makevars} should not normally contain targets, as it is "
"included before the default makefile and @command{make} will call the first "
"target, intended to be @code{all} in the default makefile.  If you really "
"need to circumvent that, use a suitable (phony) target @code{all} before any "
"actual targets in @file{Makevars.[win]}: for example package "
"@CRANpkg{fastICA} used to have"
msgstr ""

#
#. type: example
#: R-exts.texi:1859
#, no-wrap
msgid ""
"PKG_LIBS = @@BLAS_LIBS@@\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:1861
#, no-wrap
msgid ""
"SLAMC_FFLAGS=$(R_XTRA_FFLAGS) $(FPICFLAGS) $(SHLIB_FFLAGS) $(SAFE_FFLAGS)\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:1863
#: R-exts.texi:1874
#, no-wrap
msgid ""
"all: $(SHLIB)\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:1866
#, no-wrap
msgid ""
"slamc.o: slamc.f\n"
"\t$(F77) $(SLAMC_FFLAGS) -c -o slamc.o slamc.f\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1871
msgid ""
"needed to ensure that the LAPACK routines find some constants without "
"infinite looping.  The Windows equivalent was"
msgstr ""

#
#. type: example
#: R-exts.texi:1877
#, no-wrap
msgid ""
"slamc.o: slamc.f\n"
"\t$(F77) $(SAFE_FFLAGS) -c -o slamc.o slamc.f\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1884
msgid ""
"(since the other macros are all empty on that platform, and @R{}'s internal "
"BLAS was not used).  Note that the first target in @file{Makevars} will be "
"called, but for back-compatibility it is best named @code{all}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1887
msgid ""
"If you want to create and then link to a library, say using code in a "
"subdirectory, use something like"
msgstr ""

#
#. type: example
#: R-exts.texi:1890
#, no-wrap
msgid ""
".PHONY: all mylibs\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:1893
#, no-wrap
msgid ""
"all: $(SHLIB)\n"
"$(SHLIB): mylibs\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:1896
#, no-wrap
msgid ""
"mylibs:\n"
"\t(cd subdir; make)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1903
msgid ""
"Be careful to create all the necessary dependencies, as there is a no "
"guarantee that the dependencies of @code{all} will be run in a particular "
"order (and some of the @acronym{CRAN} build machines use multiple CPUs and "
"parallel makes)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1909
msgid ""
"Note that on Windows it is required that @file{Makevars[.win]} does create a "
"DLL: this is needed as it is the only reliable way to ensure that building a "
"DLL succeeded.  If you want to use the @file{src} directory for some purpose "
"other than building a DLL, use a @file{Makefile.win} file."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1918
msgid ""
"It is sometimes useful to have a target @samp{clean} in @file{Makevars} or "
"@file{Makevars.win}: this will be used by @command{R CMD build} to clean up "
"(a copy of) the package sources.  When it is run by @command{build} it will "
"have fewer macros set, in particular not @code{$(SHLIB)}, nor "
"@code{$(OBJECTS)} unless set in the file itself.  It would also be possible "
"to add tasks to the target @samp{shlib-clean} which is run by @command{R CMD "
"INSTALL} and @command{R CMD SHLIB} with options @option{--clean} and "
"@option{--preclean}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1924
msgid ""
"If you want to run @R{} code in @file{Makevars}, e.g.@: to find "
"configuration information, please do ensure that you use the correct copy of "
"@code{R} or @code{Rscript}: there might not be one in the path at all, or it "
"might be the wrong version or architecture.  The correct way to do this is "
"@emph{via}"
msgstr ""

#
#. type: example
#: R-exts.texi:1928
#, no-wrap
msgid ""
"\"$(R_HOME)/bin$(R_ARCH_BIN)/Rscript\" @var{filename}\n"
"\"$(R_HOME)/bin$(R_ARCH_BIN)/Rscript\" -e '@var{R expression}'\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1932
msgid "where @code{$(R_ARCH_BIN)} is only needed currently on Windows."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1936
msgid ""
"Environment or make variables can be used to select different macros for 32- "
"and 64-bit code, for example (GNU @command{make} syntax, allowed on Windows)"
msgstr ""

#
#. type: example
#: R-exts.texi:1943
#, no-wrap
msgid ""
"ifeq \"$(WIN)\" \"64\"\n"
"PKG_LIBS = @var{value for 64-bit Windows}\n"
"else\n"
"PKG_LIBS = @var{value for 32-bit Windows}\n"
"endif\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1950
msgid ""
"On Windows there is normally a choice between linking to an import library "
"or directly to a DLL.  Where possible, the latter is much more reliable: "
"import libraries are tied to a specific toolchain, and in particular on 64-"
"bit Windows two different conventions have been commonly used.  So for "
"example instead of"
msgstr ""

#
#. type: example
#: R-exts.texi:1953
#, no-wrap
msgid "PKG_LIBS = -L$(XML_DIR)/lib -lxml2\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1957
msgid "one can use"
msgstr ""

#
#. type: example
#: R-exts.texi:1960
#, no-wrap
msgid "PKG_LIBS = -L$(XML_DIR)/bin -lxml2\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1964
msgid "since on Windows @code{-lxxx} will look in turn for"
msgstr ""

#
#. type: example
#: R-exts.texi:1972
#, no-wrap
msgid ""
"libxxx.dll.a\n"
"xxx.dll.a\n"
"libxxx.a\n"
"xxx.lib\n"
"libxxx.dll\n"
"xxx.dll\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:1979
msgid ""
"where the first and second are conventionally import libraries, the third "
"and fourth often static libraries (with @code{.lib} intended for Visual C+"
"+), but might be import libraries.  See for example @uref{https://sourceware."
"org/@/binutils/@/docs-2.20/@/ld/@/WIN32.html#WIN32}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1985
msgid ""
"The fly in the ointment is that the DLL might not be named @file{libxxx."
"dll}, and in fact on 32-bit Windows there is a @file{libxml2.dll} whereas on "
"one build for 64-bit Windows the DLL is called @file{libxml2-2.dll}.  Using "
"import libraries can cover over these differences but can cause equal "
"difficulties."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:1992
msgid ""
"If static libraries are available they can save a lot of problems with run-"
"time finding of DLLs, especially when binary packages are to be distributed "
"and even more when these support both architectures.  Where using DLLs is "
"unavoidable we normally arrange (@emph{via} @file{configure.win}) to ship "
"them in the same directory as the package DLL."
msgstr ""

#
#. type: cindex
#: R-exts.texi:1996
#: R-exts.texi:12614
#, no-wrap
msgid "OpenMP"
msgstr ""

#. type: Plain text
#: R-exts.texi:2003
msgid ""
"There is some support for packages which wish to use "
"OpenMP@footnote{@uref{http://www.openmp.org/}, @uref{https://en.wikipedia."
"org/@/wiki/@/OpenMP}, @uref{https://computing.llnl.gov/@/tutorials/@/"
"openMP/}}.  The @command{make} macros"
msgstr ""

#. type: example
#: R-exts.texi:2009
#, no-wrap
msgid ""
"SHLIB_OPENMP_CFLAGS\n"
"SHLIB_OPENMP_CXXFLAGS\n"
"SHLIB_OPENMP_FCFLAGS\n"
"SHLIB_OPENMP_FFLAGS\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:2020
msgid ""
"are available for use in @file{src/Makevars} or @file{src/Makevars.win}.  "
"Include the appropriate macro in @code{PKG_CFLAGS}, @code{PKG_CPPFLAGS} and "
"so on, and also in @code{PKG_LIBS}.  C/C++ code that needs to be conditioned "
"on the use of OpenMP can be used inside @code{#ifdef _OPENMP}: note that "
"some toolchains used for @R{} (including most of those using @command{clang}"
"@footnote{Some builds of @command{clang} 3.7 have support for OpenMP 3.1}) "
"have no OpenMP support at all, not even @file{omp.h}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2023
msgid ""
"For example, a package with C code written for OpenMP should have in "
"@file{src/Makevars} the lines"
msgstr ""

#
#. type: example
#: R-exts.texi:2027
#, no-wrap
msgid ""
"PKG_CFLAGS = $(SHLIB_OPENMP_CFLAGS)\n"
"PKG_LIBS = $(SHLIB_OPENMP_CFLAGS)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2032
msgid ""
"Note that the macro @code{SHLIB_OPENMP_CXXFLAGS} applies to the C++98 "
"compiler and not necessarily to the C++11 compiler: users of the latter "
"should do their own @command{configure} checks."
msgstr ""

#. type: Plain text
#: R-exts.texi:2038
msgid ""
"Some care is needed when compilers are from different families which may use "
"different OpenMP runtimes (e.g.@: @command{clang} @emph{vs} GCC including "
"@command{gfortran}, although it is currently possible to use the "
"@command{clang} runtime with GCC but not @emph{vice versa}).  For a package "
"with Fortran 77 code using OpenMP the appropriate lines are"
msgstr ""

#. type: example
#: R-exts.texi:2042
#, no-wrap
msgid ""
"PKG_FFLAGS = $(SHLIB_OPENMP_FFLAGS)\n"
"PKG_LIBS = $(SHLIB_OPENMP_CFLAGS)\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:2047
msgid ""
"as the C compiler will be used to link the package code (and there is no "
"guarantee that this will work everywhere)."
msgstr ""

#. type: Plain text
#: R-exts.texi:2054
msgid ""
"There is nothing to say what version of OpenMP is supported: version 3.0 "
"(May 2008) is supported by recent versions of the Linux, Windows and Solaris "
"platforms, but portable packages cannot assume that end users have recent "
"versions.  OS X currently uses Apple builds of @command{clang} with no "
"OpenMP support."
msgstr ""

#. type: Plain text
#: R-exts.texi:2064
msgid ""
"The performance of OpenMP varies substantially between platforms.  Both the "
"Windows and earlier Apple OS X implementations have substantial overheads "
"and are only beneficial if quite substantial tasks are run in parallel.  "
"Also, on Windows new threads are started with the default@footnote{Windows "
"default, not MinGW-w64 default.} FPU control word, so computations done on "
"OpenMP threads will not make use of extended-precision arithmetic which is "
"the default for the main process."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2069
msgid ""
"Calling any of the @R{} API from threaded code is `for experts only': they "
"will need to read the source code to determine if it is thread-safe.  In "
"particular, code which makes use of the stack-checking mechanism must not be "
"called from threaded code."
msgstr ""

#. type: Plain text
#: R-exts.texi:2088
msgid ""
"Packages are not standard-alone programs, and an @R{} process could contain "
"more than one OpenMP-enabled package as well as other components (for "
"example, an optimized BLAS) making use of OpenMP.  So careful consideration "
"needs to be given to resource usage.  OpenMP works with parallel regions, "
"and for most implementations the default is to use as many threads as `CPUs' "
"for such regions.  Parallel regions can be nested, although it is common to "
"use only a single thread below the first level.  The correctness of the "
"detected number of `CPUs' and the assumption that the @R{} process is "
"entitled to use them all are both dubious assumptions.  The best way to "
"limit resources is to limit the overall number of threads available to "
"OpenMP in the @R{} process: this can be done via environment variable "
"@env{OMP_THREAD_LIMIT}, where implemented.@footnote{Which it was at the time "
"of writing with GCC, Solaris Studio, Intel and Clang 3.7.x compilers.} "
"Alternatively, the number of threads per region can be limited by the "
"environment variable @env{OMP_NUM_THREADS} or API call "
"@code{omp_set_num_threads}, or, better, for the regions in your code as part "
"of their specification. E.g.@: @R{} uses"
msgstr ""

#
#. type: example
#: R-exts.texi:2090
#, no-wrap
msgid "#pragma omp parallel for num_threads(nthreads) @dots{}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2093
msgid ""
"That way you only control your own code and not that of other OpenMP users."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2101
msgid ""
"There is no direct support for the POSIX threads (more commonly known as "
"@code{pthreads}): by the time we considered adding it several packages were "
"using it unconditionally so it seems that nowadays it is universally "
"available on POSIX operating systems (hence not Windows)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2104
msgid ""
"For reasonably recent versions of @command{gcc} and @command{clang} the "
"correct specification is"
msgstr ""

#
#. type: example
#: R-exts.texi:2108
#, no-wrap
msgid ""
"PKG_CPPFLAGS = -pthread\n"
"PKG_LIBS = -pthread\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2113
msgid ""
"(and the plural version is also accepted on some systems/versions).  For "
"other platforms the specification is"
msgstr ""

#
#. type: example
#: R-exts.texi:2117
#, no-wrap
msgid ""
"PKG_CPPFLAGS = -D_REENTRANT\n"
"PKG_LIBS = -lpthread\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2122
msgid ""
"(and note that the library name is singular).  This is what @option{-"
"pthread} does on all known current platforms (although earlier versions of "
"OpenBSD used a different library name)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2125
msgid ""
"For a tutorial see @uref{https://computing.llnl.gov/@/tutorials/@/pthreads/}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2130
msgid ""
"POSIX threads are not normally used on Windows, which has its own native "
"concepts of threads.  However, there are two projects implementing "
"@code{pthreads} on top of Windows, @code{pthreads-w32} and "
"@code{winpthreads} (a recent part of the MinGW-w64 project)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2136
msgid ""
"Whether Windows toolchains implement @code{pthreads} is up to the toolchain "
"provider: the currently recommended toolchain does by default provide it.  A "
"@command{make} variable @code{SHLIB_PTHREAD_FLAGS} is available: this should "
"be included in both @code{PKG_CPPFLAGS} (or the Fortran or F9x equivalents) "
"and @code{PKG_LIBS}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2141
msgid ""
"The presence of a working @code{pthreads} implementation cannot be "
"unambiguously determined without testing for yourself: however, that "
"@samp{_REENTRANT} is defined@footnote{some Windows toolchains have the typo "
"@samp{_REENTRANCE} instead.} in C/C++ code is a good indication."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2145
msgid ""
"See also the comments on thread-safety and performance under OpenMP: on all "
"known @R{} platforms OpenMP is implemented @emph{via} @code{pthreads} and "
"the known performance issues are in the latter."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2152
msgid ""
"Package authors fairly often want to organize code in sub-directories of "
"@file{src}, for example if they are including a separate piece of external "
"software to which this is an @R{} interface."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2156
msgid ""
"One simple way is simply to set @code{OBJECTS} to be all the objects that "
"need to be compiled, including in sub-directories.  For example, "
"@acronym{CRAN} package @CRANpkg{RSiena} has"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:2159
#, no-wrap
msgid ""
"SOURCES = $(wildcard data/*.cpp network/*.cpp utils/*.cpp model/*.cpp model/*/*.cpp model/*/*/*.cpp)\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:2161
#, no-wrap
msgid "OBJECTS = siena07utilities.o siena07internals.o siena07setup.o siena07models.o $(SOURCES:.cpp=.o)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2167
msgid ""
"One problem with that approach is that unless GNU make extensions are used, "
"the source files need to be listed and kept up-to-date.  As in the following "
"from @acronym{CRAN} package @CRANpkg{lossDev}:"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:2176
#, no-wrap
msgid ""
"OBJECTS.samplers = samplers/ExpandableArray.o samplers/Knots.o \\\n"
"  samplers/RJumpSpline.o samplers/RJumpSplineFactory.o \\\n"
"  samplers/RealSlicerOV.o samplers/SliceFactoryOV.o samplers/MNorm.o\n"
"OBJECTS.distributions = distributions/DSpline.o \\\n"
"  distributions/DChisqrOV.o distributions/DTOV.o \\\n"
"  distributions/DNormOV.o distributions/DUnifOV.o distributions/RScalarDist.o\n"
"OBJECTS.root = RJump.o\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:2178
#, no-wrap
msgid "OBJECTS = $(OBJECTS.samplers) $(OBJECTS.distributions) $(OBJECTS.root)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2182
msgid ""
"Where the subdirectory is self-contained code with a suitable makefile, the "
"best approach is something like"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:2185
#, no-wrap
msgid ""
"PKG_LIBS = -LCsdp/lib -lsdp $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:2187
#, no-wrap
msgid ""
"$(SHLIB): Csdp/lib/libsdp.a\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:2191
#, no-wrap
msgid ""
"Csdp/lib/libsdp.a\n"
"\t@@(cd Csdp/lib && $(MAKE) libsdp.a \\\n"
"\t  CC=\"$(CC)\" CFLAGS=\"$(CFLAGS) $(CPICFLAGS)\" AR=\"$(AR)\" RANLIB=\"$(RANLIB)\")\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2199
msgid ""
"Note the quotes: the macros can contain spaces, e.g.@: @code{CC = \"gcc -m64 "
"-std=gnu99\"}.  Several authors have forgotten about parallel makes: the "
"static library in the subdirectory must be made before the shared object "
"(@code{$(SHLIB)}) and so the latter must depend on the former.  Others "
"forget the need for position-independent code."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2203
msgid ""
"We really do not recommend using @file{src/Makefile} instead of @file{src/"
"Makevars}, and as the example above shows, it is not necessary."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2210
msgid ""
"It may be helpful to give an extended example of using a @file{configure} "
"script to create a @file{src/Makevars} file: this is based on that in the "
"@CRANpkg{RODBC} package."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2214
msgid ""
"The @file{configure.ac} file follows: @file{configure} is created from this "
"by running @command{autoconf} in the top-level package directory (containing "
"@file{configure.ac})."
msgstr ""

#
#. type: smallexample
#: R-exts.texi:2219
#, no-wrap
msgid ""
"AC_INIT([RODBC], 1.1.8) dnl package name, version\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:2226
#, no-wrap
msgid ""
"dnl A user-specifiable option\n"
"odbc_mgr=\"\"\n"
"AC_ARG_WITH([odbc-manager],\n"
"\t    AC_HELP_STRING([--with-odbc-manager=MGR],\n"
"\t\t\t   [specify the ODBC manager, e.g. odbc or iodbc]),\n"
"\t    [odbc_mgr=$withval])\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:2230
#, no-wrap
msgid ""
"if test \"$odbc_mgr\" = \"odbc\" ; then\n"
"  AC_PATH_PROGS(ODBC_CONFIG, odbc_config)\n"
"fi\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:2245
#, no-wrap
msgid ""
"dnl Select an optional include path, from a configure option\n"
"dnl or from an environment variable.\n"
"AC_ARG_WITH([odbc-include],\n"
"\t    AC_HELP_STRING([--with-odbc-include=INCLUDE_PATH],\n"
"\t\t\t   [the location of ODBC header files]),\n"
"\t    [odbc_include_path=$withval])\n"
"RODBC_CPPFLAGS=\"-I.\"\n"
"if test [ -n \"$odbc_include_path\" ] ; then\n"
"   RODBC_CPPFLAGS=\"-I. -I$@{odbc_include_path@}\"\n"
"else\n"
"  if test [ -n \"$@{ODBC_INCLUDE@}\" ] ; then\n"
"     RODBC_CPPFLAGS=\"-I. -I$@{ODBC_INCLUDE@}\"\n"
"  fi\n"
"fi\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:2263
#, no-wrap
msgid ""
"dnl ditto for a library path\n"
"AC_ARG_WITH([odbc-lib],\n"
"\t    AC_HELP_STRING([--with-odbc-lib=LIB_PATH],\n"
"\t\t\t   [the location of ODBC libraries]),\n"
"\t    [odbc_lib_path=$withval])\n"
"if test [ -n \"$odbc_lib_path\" ] ; then\n"
"   LIBS=\"-L$odbc_lib_path $@{LIBS@}\"\n"
"else\n"
"  if test [ -n \"$@{ODBC_LIBS@}\" ] ; then\n"
"     LIBS=\"-L$@{ODBC_LIBS@} $@{LIBS@}\"\n"
"  else\n"
"    if test -n \"$@{ODBC_CONFIG@}\"; then\n"
"      odbc_lib_path=`odbc_config --libs | sed s/-lodbc//`\n"
"      LIBS=\"$@{odbc_lib_path@} $@{LIBS@}\"\n"
"    fi\n"
"  fi\n"
"fi\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:2276
#, no-wrap
msgid ""
"dnl Now find the compiler and compiler flags to use\n"
": $@{R_HOME=`R RHOME`@}\n"
"if test -z \"$@{R_HOME@}\"; then\n"
"  echo \"could not determine R_HOME\"\n"
"  exit 1\n"
"fi\n"
"CC=`\"$@{R_HOME@}/bin/R\" CMD config CC`\n"
"CPP=`\"$@{R_HOME@}/bin/R\" CMD config CPP`\n"
"CFLAGS=`\"$@{R_HOME@}/bin/R\" CMD config CFLAGS`\n"
"CPPFLAGS=`\"$@{R_HOME@}/bin/R\" CMD config CPPFLAGS`\n"
"AC_PROG_CC\n"
"AC_PROG_CPP\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:2282
#, no-wrap
msgid ""
"if test -n \"$@{ODBC_CONFIG@}\"; then\n"
"  RODBC_CPPFLAGS=`odbc_config --cflags`\n"
"fi\n"
"CPPFLAGS=\"$@{CPPFLAGS@} $@{RODBC_CPPFLAGS@}\"\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:2289
#, no-wrap
msgid ""
"dnl Check the headers can be found\n"
"AC_CHECK_HEADERS(sql.h sqlext.h)\n"
"if test \"$@{ac_cv_header_sql_h@}\" = no ||\n"
"   test \"$@{ac_cv_header_sqlext_h@}\" = no; then\n"
"   AC_MSG_ERROR(\"ODBC headers sql.h and sqlext.h not found\")\n"
"fi\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:2298
#, no-wrap
msgid ""
"dnl search for a library containing an ODBC function\n"
"if test [ -n \"$@{odbc_mgr@}\" ] ; then\n"
"  AC_SEARCH_LIBS(SQLTables, $@{odbc_mgr@}, ,\n"
"      AC_MSG_ERROR(\"ODBC driver manager $@{odbc_mgr@} not found\"))\n"
"else\n"
"  AC_SEARCH_LIBS(SQLTables, odbc odbc32 iodbc, ,\n"
"      AC_MSG_ERROR(\"no ODBC driver manager found\"))\n"
"fi\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:2303
#, no-wrap
msgid ""
"dnl for 64-bit ODBC need SQL[U]LEN, and it is unclear where they are defined.\n"
"AC_CHECK_TYPES([SQLLEN, SQLULEN], , , [# include <sql.h>])\n"
"dnl for unixODBC header\n"
"AC_CHECK_SIZEOF(long, 4)\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:2311
#, no-wrap
msgid ""
"dnl substitute RODBC_CPPFLAGS and LIBS\n"
"AC_SUBST(RODBC_CPPFLAGS)\n"
"AC_SUBST(LIBS)\n"
"AC_CONFIG_HEADERS([src/config.h])\n"
"dnl and do substitution in the src/Makevars.in and src/config.h\n"
"AC_CONFIG_FILES([src/Makevars])\n"
"AC_OUTPUT\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2317
msgid "where @file{src/Makevars.in} would be simply"
msgstr ""

#
#. type: example
#: R-exts.texi:2322
#, no-wrap
msgid ""
"PKG_CPPFLAGS = @@RODBC_CPPFLAGS@@\n"
"PKG_LIBS = @@LIBS@@\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2327
msgid ""
"A user can then be advised to specify the location of the ODBC driver "
"manager files by options like (lines broken for easier reading)"
msgstr ""

#
#. type: example
#: R-exts.texi:2333
#, no-wrap
msgid ""
"R CMD INSTALL \\\n"
"  --configure-args='--with-odbc-include=/opt/local/include \\\n"
"  --with-odbc-lib=/opt/local/lib --with-odbc-manager=iodbc' \\\n"
"  RODBC\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2338
msgid ""
"or by setting the environment variables @code{ODBC_INCLUDE} and "
"@code{ODBC_LIBS}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2349
msgid ""
"@R{} assumes that source files with extension @file{.f} are FORTRAN 77, and "
"passes them to the compiler specified by @samp{F77}.  On most but not all "
"platforms that compiler will accept Fortran 90/95 code: some platforms have "
"a separate Fortran 90/95 compiler and a few (by now quite "
"rare@footnote{Cygwin used @command{g77} up to 2011, and some pre-built "
"versions of @R{} for Unix OSes still do.}) platforms have no Fortran 90/95 "
"support."
msgstr ""

#. type: Plain text
#: R-exts.texi:2355
msgid ""
"This means that portable packages need to be written in correct FORTRAN 77, "
"which will also be valid Fortran 95.  See @uref{https://developer.R-project."
"org/@/Portability.html} for reference resources.  In particular, @emph{free "
"source form} F95 code is not portable."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2367
msgid ""
"On some systems an alternative F95 compiler is available: from the "
"@code{gcc} family this might be @command{gfortran} or @command{g95}.  "
"Configuring @R{} will try to find a compiler which (from its name)  appears "
"to be a Fortran 90/95 compiler, and set it in macro @samp{FC}.  Note that it "
"does not check that such a compiler is fully (or even partially) compliant "
"with Fortran 90/95.  Packages making use of Fortran 90/95 features should "
"use file extension @file{.f90} or @file{.f95} for the source files: the "
"variable @code{PKG_FCFLAGS} specifies any special flags to be used.  There "
"is no guarantee that compiled Fortran 90/95 code can be mixed with any other "
"type of compiled code, nor that a build of @R{} will have support for such "
"packages."
msgstr ""

#. type: Plain text
#: R-exts.texi:2375
msgid ""
"Some (but not) all compilers specified by the @samp{FC} macro will accept "
"Fortran 2003 or 2008 code: such code should still use file extension @file{."
"f90} or @file{.f95}.  For platforms using @command{gfortran}, you may need "
"to include @option{-std=f2003} or @option{-std=f2008} in @code{PKG_FCFLAGS}: "
"the default is `GNU Fortran', Fortran 95 with non-standard extensions.  The "
"Solaris @command{f95} compiler `accepts some Fortran 2003 features'."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2387
msgid ""
"Modern versions of Fortran support modules, whereby compiling one source "
"file creates a module file which is then included in others. (Module files "
"typically have a @file{.mod} extension: they do depend on the compiler used "
"and so should never be included in a package.)  This creates a dependence "
"which @command{make} will not know about and often causes installation with "
"a parallel make to fail.  Thus it is necessary to add explicit dependencies "
"to @file{src/Makevars} to tell @command{make} the constraints on the order "
"of compilation.  For example, if file @file{iface.f90} creates a module "
"@samp{iface} used by files @file{cmi.f90} and @file{dmi.f90} then @file{src/"
"Makevars} needs to contain something like"
msgstr ""

#
#. type: example
#: R-exts.texi:2390
#, no-wrap
msgid "cmi.o dmi.o: iface.o\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:2407
msgid ""
"@R{} can be built without a C++ compiler although one is available (but not "
"necessarily installed) on all known @R{} platforms.  For full portability "
"across platforms, all that can be assumed is approximate support for the C+"
"+98 standard (the widely used @command{g++} deviates considerably from the "
"standard).  Some compilers have a concept of `C++03' (`essentially a bug "
"fix') or `C++ Technical Report 1' (TR1), an optional addition to the `C++03' "
"revision which was published in 2007.  A revised standard was published in "
"2011 and compilers with fairly complete implementations are becoming "
"available.  C++11 added all of the C99 features which are not otherwise "
"implemented in C++, and C++ compilers commonly accept C99 extensions to C+"
"+98. A minor update to C++11 (sometimes known as C++14) was approved in "
"August 2014."
msgstr ""

#. type: Plain text
#: R-exts.texi:2417
msgid ""
"Since version 3.1.0, @R{} has provided support for C++11 in packages in "
"addition to C++98.  This support is not uniform across platforms as it "
"depends on the capabilities of the compiler (see below).  When @R{} is "
"configured, it will determine whether the C++ compiler supports C++11 and "
"which compiler flags, if any, are required to enable C++11 support.  For "
"example, recent versions of @command{g++} or @command{clang++} accept the "
"compiler flag @option{-std=c++11}, and earlier versions support a flag "
"@option{-std=c++0x}, but the latter only provides partial support for the C+"
"+11 standard."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2420
msgid ""
"In order to use C++11 code in a package, the package's @file{Makevars} file "
"(or @file{Makevars.win} on Windows) should include the line"
msgstr ""

#
#. type: example
#: R-exts.texi:2423
#, no-wrap
msgid "CXX_STD = CXX11\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2429
msgid ""
"Compilation and linking will then be done with the C++11 compiler.  If any "
"other value is given to the @samp{CXX_STD} macro it will be ignored.  "
"(Further options may become available in the future as the C++ standard "
"evolves.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2433
msgid ""
"Packages without a @file{Makevars} file may specify that they require C++11 "
"by including @samp{C++11} in the @samp{SystemRequirements} field of the "
"@file{DESCRIPTION} file, e.g."
msgstr ""

#
#. type: example
#: R-exts.texi:2436
#, no-wrap
msgid "SystemRequirements: C++11\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2441
msgid ""
"If a package does have a @file{Makevars[.win]} file then setting the make "
"variable @samp{CXX_STD} is preferred, as it allows @command{R CMD SHLIB} to "
"work correctly in the package's @file{src} directory."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2447
msgid ""
"The C++11 compiler will be used systematically by R for all C++ code if the "
"environment variable @env{USE_CXX1X} is defined (with any value). Hence this "
"environment variable should be defined when invoking @command{R CMD SHLIB} "
"in the absence of a @file{Makevars} file (or @file{Makevars.win} on Windows) "
"if a C++11 compiler is required."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2453
msgid ""
"Further control over compilation of C++11 code can be obtained by specifying "
"the macros @samp{CXX1X} and @samp{CXX1XSTD} when @R{} is "
"configured@footnote{For details of these and related macros, see file "
"@file{config.site} in the @R{} sources.}, or in a personal or site "
"@file{Makevars} file."
msgstr ""

#
#. type: ifset
#: R-exts.texi:2456
msgid ""
"@xref{Customizing package compilation, , Customizing package compilation, R-"
"admin, R Installation and Administration}."
msgstr ""

#. type: Plain text
#: R-exts.texi:2469
msgid ""
"If C++11 support is not available then these macros are both empty. "
"Otherwise, @samp{CXX1X} defaults to the same value as the C++ compiler "
"@samp{CXX} and the flag @samp{CXX1XSTD} defaults to @option{-std=c++11} or "
"@option{-std=c++0x} (the latter on Windows).  It is possible to specify "
"@samp{CXX1X} to be a distinct compiler just for C++11--using packages, e.g."
"@: @command{g++} on Solaris.  Note however that different C++ compilers (and "
"even different versions of the same compiler) often differ in their ABI so "
"their outputs can rarely be mixed. By setting @samp{CXX1XSTD} it is also "
"possible to choose a different dialect of the standard, such as @option{-"
"std=gnu++11}, or enable support for the 2014 revision using something like "
"@option{-std=c++14} or @option{-std=c++1y}."
msgstr ""

#. type: Plain text
#: R-exts.texi:2476
msgid ""
"As noted above, support for C++11 varies across platforms.  The default "
"compiler on Windows is GCC 4.6.x and supports the @option{-std=c++0x} flag "
"and some C++11 features (see @uref{https://gcc.gnu.org/@/gcc-4.6/@/"
"cxx0x_status.html}).  On some platforms, it may be possible or necessary to "
"select a different compiler for C++11, @emph{via} personal or site "
"@file{Makevars} files."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2481
msgid ""
"There is no guarantee that C++11 can be used in a package in combination "
"with any other compiled language (even C), as the C++11 compiler may be "
"incompatible with the native compilers for the platform.  (There are known "
"problems mixing C++11 with Fortran.)"
msgstr ""

#. type: Plain text
#: R-exts.texi:2484
msgid ""
"If a package using C++11 has a @command{configure} script it is essential "
"that it selects the correct compiler, @emph{via} something like"
msgstr ""

#. type: example
#: R-exts.texi:2491
#, no-wrap
msgid ""
"CXX1X=`\"$@{R_HOME@}/bin/R\" CMD config CXX11X`\n"
"CXX1XSTD=`\"$@{R_HOME@}/bin/R\" CMD config CXX11XSTD`\n"
"CXX=\"$(CXX1X) $(CXX1XSTD)\"\n"
"CXXFLAGS=`\"$@{R_HOME@}/bin/R\" CMD config CXX11XFLAGS`\n"
"AC_LANG(C++)\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:2495
msgid "(paying attention to all the quotes required)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2503
msgid ""
"Before using these tools, please check that your package can be installed "
"(which checked it can be loaded).  @code{R CMD check} will @emph{inter alia} "
"do this, but you may get more detailed error messages doing the install "
"directly."
msgstr ""

#
#. type: node
#: R-exts.texi:2508
#: R-exts.texi:2544
#: R-exts.texi:2545
#: R-exts.texi:2546
#: R-exts.texi:2851
#, no-wrap
msgid "Checking packages"
msgstr ""

#
#. type: node
#: R-exts.texi:2508
#: R-exts.texi:2544
#: R-exts.texi:2851
#: R-exts.texi:2852
#: R-exts.texi:2975
#, no-wrap
msgid "Building package tarballs"
msgstr ""

#
#. type: cindex
#: R-exts.texi:2508
#: R-exts.texi:2851
#: R-exts.texi:2975
#: R-exts.texi:2976
#: R-exts.texi:2977
#, no-wrap
msgid "Building binary packages"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2514
msgid ""
"If your package specifies an encoding in its @file{DESCRIPTION} file, you "
"should run these tools in a locale which makes use of that encoding: they "
"may not work at all or may work incorrectly in other locales (although UTF-8 "
"locales will most likely work)."
msgstr ""

#
#. type: quotation
#: R-exts.texi:2527
msgid ""
"@code{R CMD check} and @code{R CMD build} run @R{} processes with @option{--"
"vanilla} in which none of the user's startup files are read.  If you need "
"@env{R_LIBS} set (to find packages in a non-standard library) you can set it "
"in the environment: also you can use the check and build environment files "
"(as specified by the environment variables @env{R_CHECK_ENVIRON} and "
"@env{R_BUILD_ENVIRON}; if unset, files@footnote{On systems which use sub-"
"architectures, architecture-specific versions such as @file{~/.R/check."
"Renviron.i386} take precedence.} @file{~/.R/check.Renviron} and @file{~/.R/"
"build.Renviron} are used) to set environment variables when using these "
"utilities."
msgstr ""

#
#. type: quotation
#: R-exts.texi:2529
#, no-wrap
msgid "Note to Windows users"
msgstr ""

#
#. type: quotation
#: R-exts.texi:2535
msgid ""
"@code{R CMD build} may make use of the Windows toolset (see the ``R "
"Installation and Administration'' manual) if present and in your path, and "
"it is required for packages which need it to install (including those with "
"@file{configure.win} or @file{cleanup.win} scripts or a @file{src} "
"directory) and e.g.@: need vignettes built."
msgstr ""

#
#. type: quotation
#: R-exts.texi:2541
msgid ""
"You may need to set the environment variable @env{TMPDIR} to point to a "
"suitable writable directory with a path not containing spaces -- use forward "
"slashes for the separators.  Also, the directory needs to be on a case-"
"honouring file system (some network-mounted file systems are not)."
msgstr ""

#
#. type: findex
#: R-exts.texi:2548
#, no-wrap
msgid "R CMD check"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2554
msgid ""
"Using @code{R CMD check}, the @R{} package checker, one can test whether "
"@emph{source} @R{} packages work correctly.  It can be run on one or more "
"directories, or compressed package @command{tar} archives with extension "
"@file{.tar.gz}, @file{.tgz}, @file{.tar.bz2} or @file{.tar.xz}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2557
msgid ""
"It is strongly recommended that the final checks are run on a @command{tar} "
"archive prepared by @command{R CMD build}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2559
msgid "This runs a series of checks, including"
msgstr ""

#
#. type: enumerate
#: R-exts.texi:2564
msgid ""
"The package is installed.  This will warn about missing cross-references and "
"duplicate aliases in help files."
msgstr ""

#
#. type: enumerate
#: R-exts.texi:2568
msgid ""
"The file names are checked to be valid across file systems and supported "
"operating system platforms."
msgstr ""

#
#. type: enumerate
#: R-exts.texi:2572
msgid ""
"The files and directories are checked for sufficient permissions (Unix-"
"alikes only)."
msgstr ""

#
#. type: enumerate
#: R-exts.texi:2581
msgid ""
"The files are checked for binary executables, using a suitable version of "
"@command{file} if available@footnote{A suitable @command{file.exe} is part "
"of the Windows toolset: it checks for @command{gfile} if a suitable "
"@command{file} is not found: the latter is available in the OpenCSW "
"collection for Solaris at @uref{http://www.opencsw.org}.  The source "
"repository is @uref{ftp://ftp.astron.com/pub/file/}.}.  (There may be rare "
"false positives.)"
msgstr ""

#
#. type: enumerate
#: R-exts.texi:2596
msgid ""
"The @file{DESCRIPTION} file is checked for completeness, and some of its "
"entries for correctness.  Unless installation tests are skipped, checking is "
"aborted if the package dependencies cannot be resolved at run time.  (You "
"may need to set @env{R_LIBS} in the environment if dependent packages are in "
"a separate library tree.) One check is that the package name is not that of "
"a standard package, nor one of the defunct standard packages (@samp{ctest}, "
"@samp{eda}, @samp{lqs}, @samp{mle}, @samp{modreg}, @samp{mva}, @samp{nls}, "
"@samp{stepfun} and @samp{ts}).  Another check is that all packages mentioned "
"in @code{library} or @code{require}s or from which the @file{NAMESPACE} file "
"imports or are called @emph{via} @code{::} or @code{:::} are listed (in "
"@samp{Depends}, @samp{Imports}, @samp{Suggests}): this is not an exhaustive "
"check of the actual imports."
msgstr ""

#
#. type: enumerate
#: R-exts.texi:2600
msgid ""
"Available index information (in particular, for demos and vignettes) is "
"checked for completeness."
msgstr ""

#
#. type: enumerate
#: R-exts.texi:2611
msgid ""
"The package subdirectories are checked for suitable file names and for not "
"being empty.  The checks on file names are controlled by the option "
"@option{--check-subdirs=@var{value}}.  This defaults to @samp{default}, "
"which runs the checks only if checking a tarball: the default can be "
"overridden by specifying the value as @samp{yes} or @samp{no}.  Further, the "
"check on the @file{src} directory is only run if the package does not "
"contain a @file{configure} script (which corresponds to the value @samp{yes-"
"maybe}) and there is no @file{src/Makefile} or @file{src/Makefile.in}."
msgstr ""

#
#. type: enumerate
#: R-exts.texi:2614
msgid ""
"To allow a @file{configure} script to generate suitable files, files ending "
"in @samp{.in} will be allowed in the @file{R} directory."
msgstr ""

#
#. type: enumerate
#: R-exts.texi:2618
msgid ""
"A warning is given for directory names that look like @R{} package check "
"directories -- many packages have been submitted to @acronym{CRAN} "
"containing these."
msgstr ""

#
#. type: enumerate
#: R-exts.texi:2624
msgid ""
"The @R{} files are checked for syntax errors.  Bytes which are non-"
"@acronym{ASCII} are reported as warnings, but these should be regarded as "
"errors unless it is known that the package will always be used in the same "
"locale."
msgstr ""

#
#. type: enumerate
#: R-exts.texi:2632
msgid ""
"It is checked that the package can be loaded, first with the usual default "
"packages and then only with package @pkg{base} already loaded. It is checked "
"that the namespace this can be loaded in an empty session with only the "
"@pkg{base} namespace loaded.  (Namespaces and packages can be loaded very "
"early in the session, before the default packages are available, so packages "
"should work then.)"
msgstr ""

#
#. type: enumerate
#: R-exts.texi:2649
msgid ""
"The @R{} files are checked for correct calls to @code{library.dynam}.  "
"Package startup functions are checked for correct argument lists and "
"(incorrect) calls to functions which modify the search path or "
"inappropriately generate messages.  The @R{} code is checked for possible "
"problems using @CRANpkg{codetools}.  In addition, it is checked whether S3 "
"methods have all arguments of the corresponding generic, and whether the "
"final argument of replacement functions is called @samp{value}.  All foreign "
"function calls (@code{.C}, @code{.Fortran}, @code{.Call} and @code{."
"External} calls) are tested to see if they have a @code{PACKAGE} argument, "
"and if not, whether the appropriate DLL might be deduced from the namespace "
"of the package.  Any other calls are reported.  (The check is generous, and "
"users may want to supplement this by examining the output of @code{tools::"
"checkFF(\"mypkg\", verbose=TRUE)}, especially if the intention were to "
"always use a @code{PACKAGE} argument)"
msgstr ""

#
#. type: enumerate
#: R-exts.texi:2656
msgid ""
"The @file{Rd} files are checked for correct syntax and metadata, including "
"the presence of the mandatory fields (@code{\\name}, @code{\\alias}, "
"@code{\\title} and @code{\\description}).  The @file{Rd} name and title are "
"checked for being non-empty, and there is a check for missing cross-"
"references (links)."
msgstr ""

#
#. type: enumerate
#: R-exts.texi:2660
msgid ""
"A check is made for missing documentation entries, such as undocumented user-"
"level objects in the package."
msgstr ""

#
#. type: enumerate
#: R-exts.texi:2664
msgid ""
"Documentation for functions, data sets, and S4 classes is checked for "
"consistency with the corresponding code."
msgstr ""

#
#. type: enumerate
#: R-exts.texi:2669
msgid ""
"It is checked whether all function arguments given in @code{\\usage} "
"sections of @file{Rd} files are documented in the corresponding "
"@code{\\arguments} section."
msgstr ""

#
#. type: enumerate
#: R-exts.texi:2673
msgid ""
"The @file{data} directory is checked for non-@acronym{ASCII} characters and "
"for the use of reasonable levels of compression."
msgstr ""

#
#. type: enumerate
#: R-exts.texi:2682
msgid ""
"C, C++ and FORTRAN source and header files@footnote{An exception is made for "
"subdirectories with names starting @samp{win} or @samp{Win}.} are tested for "
"portable (LF-only) line endings.  If there is a @file{Makefile} or "
"@file{Makefile.in} or @file{Makevars} or @file{Makevars.in} file under the "
"@file{src} directory, it is checked for portable line endings and the "
"correct use of @samp{$(BLAS_LIBS)} and @samp{$(LAPACK_LIBS)}"
msgstr ""

#
#. type: enumerate
#: R-exts.texi:2692
msgid ""
"Compiled code is checked for symbols corresponding to functions which might "
"terminate @R{} or write to @file{stdout}/@file{stderr} instead of the "
"console.  Note that the latter might give false positives in that the "
"symbols might be pulled in with external libraries and could never be "
"called.  Windows@footnote{on most other platforms such runtime libraries are "
"dynamic, but static libraries are currently used on Windows because the "
"toolchain is not a standard part of the OS.} users should note that the "
"Fortran and C++ runtime libraries are examples of such external libraries."
msgstr ""

#
#. type: enumerate
#: R-exts.texi:2698
msgid ""
"Some checks are made of the contents of the @file{inst/doc} directory.  "
"These always include checking for files that look like leftovers, and if "
"suitable tools (such as @command{qpdf}) are available, checking that the PDF "
"documentation is of minimal size."
msgstr ""

#
#. type: enumerate
#: R-exts.texi:2705
msgid ""
"The examples provided by the package's documentation are run.  "
"(@pxref{Writing R documentation files}, for information on using "
"@code{\\examples} to create executable example code.)  If there is a file "
"@file{tests/Examples/@var{pkg}-Ex.Rout.save}, the output of running the "
"examples is compared to that file."
msgstr ""

#
#. type: enumerate
#: R-exts.texi:2712
msgid ""
"Of course, released packages should be able to run at least their own "
"examples.  Each example is run in a `clean' environment (so earlier examples "
"cannot be assumed to have been run), and with the variables @code{T} and "
"@code{F} redefined to generate an error unless they are set in the example: "
"@xref{Logical vectors, , Logical vectors, R-intro, An Introduction to R}."
msgstr ""

#
#. type: enumerate
#: R-exts.texi:2727
msgid ""
"If the package sources contain a @file{tests} directory then the tests "
"specified in that directory are run.  (Typically they will consist of a set "
"of @file{.R} source files and target output files @file{.Rout.save}.)  "
"Please note that the comparison will be done in the end user's locale, so "
"the target output files should be @acronym{ASCII} if at all possible.  (The "
"command line option @code{--test-dir=foo} may be used to specify tests in a "
"non-standard location.  For example, unusually slow tests could be placed in "
"@file{inst/slowTests} and then @code{R CMD check --test-dir=inst/slowTests} "
"would be used to run them.  Other names that have been suggested are, for "
"example, @file{inst/testWithOracle} for tests that require Oracle to be "
"installed, @file{inst/randomTests} for tests which use random values and may "
"occasionally fail by chance, etc.)"
msgstr ""

#
#. type: enumerate
#: R-exts.texi:2739
msgid ""
"The code in package vignettes (@pxref{Writing package vignettes}) is "
"executed, and the vignette PDFs re-made from their sources as a check of "
"completeness of the sources (unless there is a @samp{BuildVignettes} field "
"in the package's @file{DESCRIPTION} file with a false value).  If there is a "
"target output file @file{.Rout.save} in the vignette source directory, the "
"output from running the code in that vignette is compared with the target "
"output file and any differences are reported (but not recorded in the log "
"file).  (If the vignette sources are in the deprecated location @file{inst/"
"doc}, do mark such target output files to not be installed in @file{."
"Rinstignore}.)"
msgstr ""

#
#. type: enumerate
#: R-exts.texi:2751
msgid ""
"If there is an error@footnote{or if option @option{--use-valgrind} is used "
"or environment variable @env{_R_CHECK_ALWAYS_LOG_VIGNETTE_OUTPUT_} is set to "
"a true value or if there are differences from a target output file} in "
"executing the @R{} code in vignette @file{@var{foo.ext}}, a log file "
"@file{@var{foo.ext}.log} is created in the check directory.  The vignette "
"PDFs are re-made in a copy of the package sources in the @file{vign_test} "
"subdirectory of the check directory, so for further information on errors "
"look in directory @file{@var{pkgname}/vign_test/vignettes}.  (It is only "
"retained if there are errors or if environment variable "
"@env{_R_CHECK_CLEAN_VIGN_TEST_} is set to a false value.)"
msgstr ""

#
#. type: enumerate
#: R-exts.texi:2756
msgid ""
"The PDF version of the package's manual is created (to check that the "
"@file{Rd} files can be converted successfully).  This needs @LaTeX{} and "
"suitable fonts and @LaTeX{} packages to be installed."
msgstr ""

#
#. type: ifset
#: R-exts.texi:2759
msgid ""
"@xref{Making the manuals, , Making the manuals, R-admin, R Installation and "
"Administration}."
msgstr ""

#
#. type: ifclear
#: R-exts.texi:2763
msgid ""
"See the section `Making the manuals' in the `R Installation and "
"Administration' manual' for further details."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2770
msgid ""
"All these tests are run with collation set to the @code{C} locale, and for "
"the examples and tests with environment variable @env{LANGUAGE=en}: this is "
"to minimize differences between platforms."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2775
msgid ""
"Use @kbd{R CMD check --help} to obtain more information about the usage of "
"the @R{} package checker.  A subset of the checking steps can be selected by "
"adding command-line options. It also allows customization by setting "
"environment variables @w{@env{_R_CHECK_*_}:}, as described in"
msgstr ""

#
#. type: ifset
#: R-exts.texi:2777
msgid "@ref{Tools, , Tools, R-ints, R Internals}:"
msgstr ""

#
#. type: ifclear
#: R-exts.texi:2780
msgid "`R Internals':"
msgstr ""

#. type: Plain text
#: R-exts.texi:2790
msgid ""
"a set of these customizations similar to those used by @acronym{CRAN} can be "
"selected by the option @option{--as-cran} (which works best if Internet "
"access is available).  Some Windows users may need to set environment "
"variable @env{R_WIN_NO_JUNCTIONS} to a non-empty value.  The test of cyclic "
"declarations@footnote{For example, in early 2014 @CRANpkg{gdata} declared "
"@samp{Imports: gtools} and @CRANpkg{gtools} declared @samp{Imports: gdata}.}"
"in @file{DESCRIPTION} files needs repositories (including @acronym{CRAN}) "
"set: do this in @file{~/.Rprofile}, by e.g.@:"
msgstr ""

#. type: example
#: R-exts.texi:2792
#, no-wrap
msgid "options(repos = c(CRAN=\"https://cran.r-project.org\"))\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2795
msgid "One check customization which can be revealing is"
msgstr ""

#
#. type: example
#: R-exts.texi:2797
#, no-wrap
msgid "_R_CHECK_CODETOOLS_PROFILE_=\"suppressLocalUnused=FALSE\"\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2807
msgid ""
"which reports unused local assignments.  Not only does this point out "
"computations which are unnecessary because their results are unused, it also "
"can show errors.  (Two such are to intend to update an object by assigning a "
"value but mistype its name or assign in the wrong scope, for example using "
"@code{<-} where @code{<<-} was intended.)  This can give false positives, "
"most commonly because of non-standard evaluation for formulae and because "
"the intention is to return objects in the environment of a function for "
"later use."
msgstr ""

#. type: Plain text
#: R-exts.texi:2813
msgid ""
"Complete checking of a package which contains a file @file{README.md} needs "
"@command{pandoc} installed: see @uref{http://johnmacfarlane.net/@/pandoc/@/"
"installing.html}.  This should be reasonably current: @acronym{CRAN} used "
"version 1.12.4.1 to process these files at the time of writing"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2821
msgid ""
"You do need to ensure that the package is checked in a suitable locale if it "
"contains non-@acronym{ASCII} characters.  Such packages are likely to fail "
"some of the checks in a @code{C} locale, and @command{R CMD check} will warn "
"if it spots the problem.  You should be able to check any package in a UTF-8 "
"locale (if one is available).  Beware that although a @code{C} locale is "
"rarely used at a console, it may be the default if logging in remotely or "
"for batch jobs."
msgstr ""

#
#. type: quotation
#: R-exts.texi:2822
#, no-wrap
msgid "Multiple sub-architectures"
msgstr ""

#
#. type: quotation
#: R-exts.texi:2834
msgid ""
"On systems which support multiple sub-architectures (principally Windows), "
"@command{R CMD check} will install and check a package which contains "
"compiled code under all available sub-architectures. (Use option @option{--"
"force-multiarch} to force this for packages without compiled code, which are "
"otherwise only checked under the main sub-architecture.)  This will run the "
"loading tests, examples and @file{tests} directory under each installed sub-"
"architecture in turn, and give an error if any fail.  Where environment "
"variables (including perhaps @env{PATH}) need to be set differently for each "
"sub-architecture, these can be set in architecture-specific files such as "
"@file{@var{R_HOME}/etc/i386/Renviron.site}."
msgstr ""

#
#. type: quotation
#: R-exts.texi:2843
msgid ""
"An alternative approach is to use @command{R CMD check --no-multiarch} to "
"check the primary sub-architecture, and then to use something like "
"@command{R --arch=x86_64 CMD check --extra-arch} or (Windows)  @command{/"
"path/to/R/bin/x64/Rcmd check --extra-arch} to run for each additional sub-"
"architecture just the checks@footnote{loading, examples, tests, running "
"vignette code} which differ by sub-architecture.  (This approach is required "
"for packages which are installed by @command{R CMD INSTALL --merge-"
"multiarch}.)"
msgstr ""

#
#. type: quotation
#: R-exts.texi:2847
msgid ""
"Where packages need additional commands to install all the sub-architectures "
"these can be supplied by e.g.@: @option{--install-args=--force-biarch}."
msgstr ""

#
#. type: cindex
#: R-exts.texi:2853
#, no-wrap
msgid "Building source packages"
msgstr ""

#
#. type: findex
#: R-exts.texi:2855
#, no-wrap
msgid "R CMD build"
msgstr ""

#
#. type: cindex
#: R-exts.texi:2856
#, no-wrap
msgid "Package builder"
msgstr ""

#
#. type: cindex
#: R-exts.texi:2857
#, no-wrap
msgid "tarballs"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2863
msgid ""
"Packages may be distributed in source form as ``tarballs'' (@file{.tar.gz} "
"files) or in binary form. The source form can be installed on all platforms "
"with suitable tools and is the usual form for Unix-like systems; the binary "
"form is platform-specific, and is the more common distribution form for the "
"Windows and OS X platforms."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2866
msgid ""
"Using @command{R CMD build}, the @R{} package builder, one can build @R{} "
"package tarballs from their sources (for example, for subsequent release)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2873
msgid ""
"Prior to actually building the package in the standard gzipped tar file "
"format, a few diagnostic checks and cleanups are performed.  In particular, "
"it is tested whether object indices exist and can be assumed to be up-to-"
"date, and C, C++ and FORTRAN source files and relevant makefiles in a "
"@file{src} directory are tested and converted to LF line-endings if "
"necessary."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2876
msgid ""
"Run-time checks whether the package works correctly should be performed "
"using @command{R CMD check} prior to invoking the final build procedure."
msgstr ""

#
#. type: cindex
#: R-exts.texi:2877
#, no-wrap
msgid ".Rbuildignore file"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2896
msgid ""
"To exclude files from being put into the package, one can specify a list of "
"exclude patterns in file @file{.Rbuildignore} in the top-level source "
"directory.  These patterns should be Perl-like regular expressions (see the "
"help for @code{regexp} in @R{} for the precise details), one per line, to be "
"matched case-insensitively@footnote{on all platforms from @R{} 3.1.0.} "
"against the file and directory names relative to the top-level package "
"source directory.  In addition, directories from source control "
"systems@footnote{called @file{CVS} or @file{.svn} or @file{.arch-ids} or "
"@file{.bzr} or @file{.git} (but not files called @file{.git}) or @file{."
"hg}.} or from @command{eclipse}@footnote{called @file{.metadata}.}, "
"directories with names ending @file{.Rcheck} or @file{Old} or @file{old} and "
"files @file{GNUMakefile}@footnote{which is an error: GNU make uses "
"@file{GNUmakefile}.}, @file{Read-and-delete-me} or with base names starting "
"with @samp{.#}, or starting and ending with @samp{#}, or ending in @samp{~}, "
"@samp{.bak} or @samp{.swp}, are excluded by default.  In addition, those "
"files in the @file{R}, @file{demo} and @file{man} directories which are "
"flagged by @command{R CMD check} as having invalid names will be excluded."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2899
msgid ""
"Use @kbd{R CMD build --help} to obtain more information about the usage of "
"the @R{} package builder."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2909
msgid ""
"Unless @kbd{R CMD build} is invoked with the @option{--no-build-vignettes} "
"option (or the package's @file{DESCRIPTION} contains @samp{BuildVignettes: "
"no} or similar), it will attempt to (re)build the vignettes (@pxref{Writing "
"package vignettes}) in the package.  To do so it installs the current "
"package into a temporary library tree, but any dependent packages need to be "
"installed in an available library tree (see the Note: at the top of this "
"section)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2922
msgid ""
"Similarly, if the @file{.Rd} documentation files contain any @code{\\Sexpr} "
"macros (@pxref{Dynamic pages}), the package will be temporarily installed to "
"execute them.  Post-execution binary copies of those pages containing build-"
"time macros will be saved in @file{build/partial.rdb}.  If there are any "
"install-time or render-time macros, a @file{.pdf} version of the package "
"manual will be built and installed in the @file{build} subdirectory.  (This "
"allows @acronym{CRAN} or other repositories to display the manual even if "
"they are unable to install the package.)  This can be suppressed by the "
"option @option{--no-manual} or if package's @file{DESCRIPTION} contains "
"@samp{BuildManual: no} or similar."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2930
msgid ""
"One of the checks that @command{R CMD build} runs is for empty source "
"directories.  These are in most (but not all) cases unintentional, if they "
"are intentional use the option @option{--keep-empty-dirs} (or set the "
"environment variable @env{_R_BUILD_KEEP_EMPTY_DIRS_} to @samp{TRUE}, or have "
"a @samp{BuildKeepEmpty} field with a true value in the @file{DESCRIPTION} "
"file)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2947
msgid ""
"The @option{--resave-data} option allows saved images (@file{.rda} and "
"@file{.RData} files) in the @file{data} directory to be optimized for size.  "
"It will also compress tabular files and convert @file{.R} files to saved "
"images.  It can take values @code{no}, @code{gzip} (the default if this "
"option is not supplied, which can be changed by setting the environment "
"variable @env{_R_BUILD_RESAVE_DATA_}) and @code{best} (equivalent to giving "
"it without a value), which chooses the most effective compression.  Using "
"@code{best} adds a dependence on @code{R (>= 2.10)} to the "
"@file{DESCRIPTION} file if @command{bzip2} or @command{xz} compression is "
"selected for any of the files.  If this is thought undesirable, @option{--"
"resave-data=gzip} (which is the default if that option is not supplied) will "
"do what compression it can with @command{gzip}.  A package can control how "
"its data is resaved by supplying a @samp{BuildResaveData} field (with one of "
"the values given earlier in this paragraph) in its @file{DESCRIPTION} file."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2954
msgid ""
"The @option{--compact-vignettes} option will run @code{tools::compactPDF} "
"over the PDF files in @file{inst/doc} (and its subdirectories) to losslessly "
"compress them.  This is not enabled by default (it can be selected by "
"environment variable @env{_R_BUILD_COMPACT_VIGNETTES_}) and needs "
"@command{qpdf} (@uref{http://qpdf.sourceforge.net/}) to be available."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2957
msgid ""
"It can be useful to run @command{R CMD check --check-subdirs=yes} on the "
"built tarball as a final check on the contents."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2968
msgid ""
"Where a non-POSIX file system is in use which does not utilize execute "
"permissions, some care is needed with permissions.  This applies on Windows "
"and to e.g.@: FAT-formatted drives and SMB-mounted file systems on other "
"OSes.  The `mode' of the file recorded in the tarball will be whatever "
"@code{file.info()} returns.  On Windows this will record only directories as "
"having execute permission and on other OSes it is likely that all files have "
"reported `mode' @code{0777}.  A particular issue is packages being built on "
"Windows which are intended to contain executable scripts such as "
"@file{configure} and @file{cleanup}: @command{R CMD build} ensures those two "
"are recorded with execute permission."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2974
msgid ""
"Directory @file{build} of the package sources is reserved for use by "
"@command{R CMD build}: it contains information which may not easily be "
"created when the package is installed, including index information on the "
"vignettes and, rarely, information on the help pages and perhaps a copy of "
"the PDF reference manual (see above)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2986
msgid ""
"Binary packages are compressed copies of installed versions of packages.  "
"They contain compiled shared libraries rather than C, C++ or Fortran source "
"code, and the R functions are included in their installed form.  The format "
"and filename are platform-specific; for example, a binary package for "
"Windows is usually supplied as a @file{.zip} file, and for the OS X platform "
"the default binary package file extension is @file{.tgz}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2988
msgid "The recommended method of building binary packages is to use"
msgstr ""

#
#. type: command{#1}
#: R-exts.texi:2990
msgid "R CMD INSTALL --build pkg"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:2996
msgid ""
"where @file{pkg} is either the name of a source tarball (in the usual @file{."
"tar.gz} format) or the location of the directory of the package source to be "
"built.  This operates by first installing the package and then packing the "
"installed binaries into the appropriate binary package file for the "
"particular platform."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3000
msgid ""
"By default, @command{R CMD INSTALL --build} will attempt to install the "
"package into the default library tree for the local installation of @R{}. "
"This has two implications:"
msgstr ""

#
#. type: itemize
#: R-exts.texi:3005
msgid ""
"If the installation is successful, it will overwrite any existing "
"installation of the same package."
msgstr ""

#
#. type: itemize
#: R-exts.texi:3009
msgid ""
"The default library tree must have write permission; if not, the package "
"will not install and the binary will not be created."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3017
msgid ""
"To prevent changes to the present working installation or to provide an "
"install location with write access, create a suitably located directory with "
"write access and use the @command{-l} option to build the package in the "
"chosen location.  The usage is then"
msgstr ""

#
#. type: command{#1}
#: R-exts.texi:3019
msgid "R CMD INSTALL -l location --build pkg"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3024
msgid ""
"where @file{location} is the chosen directory with write access. The package "
"will be installed as a subdirectory of @file{location}, and the package "
"binary will be created in the current directory."
msgstr ""

#. type: Plain text
#: R-exts.texi:3028
msgid ""
"Other options for @command{R CMD INSTALL} can be found using @command{R CMD "
"INSTALL --help}, and platform-specific details for special cases are "
"discussed in the platform-specific FAQs."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3041
msgid ""
"Finally, at least one web-based service is available for building binary "
"packages from (checked) source code: WinBuilder (see @uref{http://win-"
"builder.R-project.org/}) is able to build Windows binaries. Note that this "
"is intended for developers on other platforms who do not have access to "
"Windows but wish to provide binaries for the Windows platform."
msgstr ""

#
#. type: cindex
#: R-exts.texi:3044
#, no-wrap
msgid "vignettes"
msgstr ""

#
#. type: cindex
#: R-exts.texi:3045
#, no-wrap
msgid "Sweave"
msgstr ""

#
#. type: node
#: R-exts.texi:3050
#: R-exts.texi:3199
#: R-exts.texi:3200
#: R-exts.texi:3272
#, no-wrap
msgid "Encodings and vignettes"
msgstr ""

#
#. type: subsection
#: R-exts.texi:3050
#: R-exts.texi:3199
#: R-exts.texi:3272
#: R-exts.texi:3273
#, no-wrap
msgid "Non-Sweave vignettes"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3064
msgid ""
"In addition to the help files in @file{Rd} format, @R{} packages allow the "
"inclusion of documents in arbitrary other formats.  The standard location "
"for these is subdirectory @file{inst/doc} of a source package, the contents "
"will be copied to subdirectory @file{doc} when the package is installed.  "
"Pointers from package help indices to the installed documents are "
"automatically created.  Documents in @file{inst/doc} can be in arbitrary "
"format, however we strongly recommend providing them in PDF format, so users "
"on almost all platforms can easily read them.  To ensure that they can be "
"accessed from a browser (as an @HTML{} index is provided), the file names "
"should start with an @acronym{ASCII} letter and be comprised entirely of "
"@acronym{ASCII} letters or digits or hyphen or underscore."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3073
msgid ""
"A special case is @emph{package vignettes}.  Vignettes are documents in PDF "
"or @HTML{} format obtained from plain text literate source files from which "
"@R{} knows how to extract @R{} code and create output (in PDF/@HTML{} or "
"intermediate (La)@TeX{}).  Vignette engines do this work, using ``tangle'' "
"and ``weave'' functions respectively.  Sweave, provided by the R "
"distribution, is the default engine.  Since @R{} version 3.0.0, other "
"vignette engines besides Sweave are supported; see @ref{Non-Sweave "
"vignettes}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3079
msgid ""
"Package vignettes have their sources in subdirectory @file{vignettes} of the "
"package sources.  Note that the location of the vignette sources only "
"affects @command{R CMD build} and @command{R CMD check}: the tarball built "
"by @command{R CMD build} includes in @file{inst/doc} the components intended "
"to be installed."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3088
msgid ""
"Sweave vignette sources are normally given the file extension @file{.Rnw} or "
"@file{.Rtex}, but for historical reasons extensions@footnote{and to avoid "
"problems with case-insensitive file systems, lower-case versions of all "
"these extensions.} @file{.Snw} and @file{.Stex} are also recognized.  Sweave "
"allows the integration of @LaTeX{} documents: see the @code{Sweave} help "
"page in @R{} and the @code{Sweave} vignette in package @pkg{utils} for "
"details on the source document format."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3100
msgid ""
"Package vignettes are tested by @code{R CMD check} by executing all @R{} "
"code chunks they contain (except those marked for non-evaluation, e.g., with "
"option @code{eval=FALSE} for Sweave).  The @R{} working directory for all "
"vignette tests in @code{R CMD check} is a @emph{copy} of the vignette source "
"directory.  Make sure all files needed to run the @R{} code in the vignette "
"(data sets, @dots{}) are accessible by either placing them in the @file{inst/"
"doc} hierarchy of the source package or by using calls to @code{system."
"file()}.  All other files needed to re-make the vignettes (such as @LaTeX{} "
"style files, Bib@TeX{} input files and files for any figures not created by "
"running the code in the vignette) must be in the vignette source directory."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3112
msgid ""
"@code{R CMD build} will automatically@footnote{unless inhibited by using "
"@samp{BuildVignettes: no} in the @file{DESCRIPTION} file.} create the (PDF "
"or @HTML{} versions of the) vignettes in @file{inst/doc} for distribution "
"with the package sources.  By including the vignette outputs in the package "
"sources it is not necessary that these can be re-built at install time, i."
"e., the package author can use private @R{} packages, screen snapshots and "
"@LaTeX{} extensions which are only available on his machine."
"@footnote{provided the conditions of the package's license are met: many, "
"including @acronym{CRAN}, see the omission of source components as "
"incompatible with an Open Source license.}"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3118
msgid ""
"By default @code{R CMD build} will run @code{Sweave} on all Sweave vignette "
"source files in @file{vignettes}.  If @file{Makefile} is found in the "
"vignette source directory, then @code{R CMD build} will try to run "
"@command{make} after the @code{Sweave} runs, otherwise @code{texi2pdf} is "
"run on each @file{.tex} file produced."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3129
msgid ""
"The first target in the @file{Makefile} should take care of both creation of "
"PDF/@HTML{} files and cleaning up afterwards (including after "
"@code{Sweave}), i.e., delete all files that shall not appear in the final "
"package archive.  Note that if the @code{make} step runs @R{} it needs to be "
"careful to respect the environment values of @env{R_LIBS} and @env{R_HOME}"
"@footnote{@code{R_HOME/bin} is prepended to the @env{PATH} so that "
"references to @command{R} or @command{Rscript} in the @file{Makefile} do "
"make use of the currently running version of @R{}.}.  Finally, if there is a "
"@file{Makefile} and it has a @samp{clean:} target, @command{make clean} is "
"run."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3134
msgid ""
"All the usual @emph{caveats} about including a @file{Makefile} apply.  It "
"must be portable (no @acronym{GNU} extensions), use LF line endings and must "
"work correctly with a parallel @command{make}: too many authors have written "
"things like"
msgstr ""

#
#. type: example
#: R-exts.texi:3138
#, no-wrap
msgid ""
"## BAD EXAMPLE\n"
"all: pdf clean\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:3140
#, no-wrap
msgid ""
"pdf: ABC-intro.pdf ABC-details.pdf\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:3143
#, no-wrap
msgid ""
"%.pdf:  %.tex\n"
"\ttexi2dvi --pdf $*\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:3146
#, no-wrap
msgid ""
"clean:\n"
"\trm *.tex ABC-details-*.pdf\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3151
msgid ""
"which will start removing the source files whilst @command{pdflatex} is "
"working."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3155
msgid ""
"Metadata lines can be placed in the source file, preferably in @LaTeX{} "
"comments in the preamble.  One such is a @code{\\VignetteIndexEntry} of the "
"form"
msgstr ""

#
#. type: example
#: R-exts.texi:3157
#, no-wrap
msgid "%\\VignetteIndexEntry@{Using Animal@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3166
msgid ""
"Others you may see are @code{\\VignettePackage} (currently ignored), "
"@code{\\VignetteDepends} and @code{\\VignetteKeyword} (which replaced "
"@code{\\VignetteKeywords}).  These are processed at package installation "
"time to create the saved data frame @file{Meta/vignette.rds}, but only the "
"@code{\\VignetteIndexEntry} and @code{\\VignetteKeyword} statements are "
"currently used.  The @code{\\VignetteEngine} statement is described in "
"@ref{Non-Sweave vignettes}."
msgstr ""

#. type: Plain text
#: R-exts.texi:3177
msgid ""
"At install time an @HTML{} index for all vignettes in the package is "
"automatically created from the @code{\\VignetteIndexEntry} statements unless "
"a file @file{index.html} exists in directory @file{inst/doc}. This index is "
"linked from the @HTML{} help index for the package.  If you do supply a "
"@file{inst/doc/index.html} file it should contain relative links only to "
"files under the installed @file{doc} directory, or perhaps (not really an "
"index) to @HTML{} help files or to the @file{DESCRIPTION} file, and be valid "
"@HTML{} as confirmed via the @uref{https://validator.w3.org, W3C Markup "
"Validation Service} or @uref{https://validator.nu/, Validator.nu}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3183
msgid ""
"Sweave/Stangle allows the document to specify the @code{split=TRUE} option "
"to create a single @R{} file for each code chunk: this will not work for "
"vignettes where it is assumed that each vignette source generates a single "
"file with the vignette extension replaced by @file{.R}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3189
msgid ""
"Do watch that PDFs are not too large -- one in a @acronym{CRAN} package was "
"72MB! This is usually caused by the inclusion of overly detailed figures, "
"which will not render well in PDF viewers.  Sometimes it is much better to "
"generate fairly high resolution bitmap (PNG, JPEG)  figures and include "
"those in the PDF document."
msgstr ""

#
#. type: cindex
#: R-exts.texi:3190
#, no-wrap
msgid ".install_extras file"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3197
msgid ""
"When @command{R CMD build} builds the vignettes, it copies these and the "
"vignette sources from directory @file{vignettes} to @file{inst/doc}.  To "
"install any other files from the @file{vignettes} directory, include a file "
"@file{vignettes/.install_extras} which specifies these as Perl-like regular "
"expressions on one or more lines.  (See the description of the @file{."
"Rinstignore} file for full details.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3206
msgid ""
"Vignettes will in general include descriptive text, @R{} input, @R{} output "
"and figures, @LaTeX{} include files and bibliographic references.  As any of "
"these may contain non-@acronym{ASCII} characters, the handling of encodings "
"can become very complicated."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3213
msgid ""
"The vignette source file should be written in @acronym{ASCII} or contain a "
"declaration of the encoding (see below).  This applies even to comments "
"within the source file, since vignette engines process comments to look for "
"options and metadata lines.  When an engine's weave and tangle functions are "
"called on the vignette source, it will be converted to the encoding of the "
"current @R{} session."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3217
msgid ""
"@code{Stangle()} will produce an @R{} code file in the current locale's "
"encoding: for a non-@acronym{ASCII} vignette what that is recorded in a "
"comment at the top of the file."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3221
msgid ""
"@code{Sweave()} will produce a @file{.tex} file in the current encoding, or "
"in UTF-8 if that is declared.  Non-@acronym{ASCII} encodings need to be "
"declared to @LaTeX{} via a line like"
msgstr ""

#
#. type: example
#: R-exts.texi:3223
#: R-exts.texi:6423
#, no-wrap
msgid "\\usepackage[utf8]@{inputenc@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3229
msgid ""
"(It is also possible to use the more recent @samp{inputenx} @LaTeX{} "
"package.) For files where this line is not needed (e.g. chapters included "
"within the body of a larger document, or non-Sweave vignettes), the encoding "
"may be declared using a comment like"
msgstr ""

#
#. type: example
#: R-exts.texi:3231
#, no-wrap
msgid "%!\\VignetteEncoding@{UTF-8@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3235
msgid ""
"If the encoding is UTF-8, this can also be declared using the declaration"
msgstr ""

#
#. type: example
#: R-exts.texi:3237
#, no-wrap
msgid "%!\\SweaveUTF8\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3243
msgid ""
"If no declaration is given in the vignette, it will be assumed to be in the "
"encoding declared for the package.  If there is no encoding declared in "
"either place, then it is an error to use non-@acronym{ASCII} characters in "
"the vignette."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3246
msgid ""
"In any case, be aware that @LaTeX{} may require the @samp{usepackage} "
"declaration."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3258
msgid ""
"@code{Sweave()} will also parse and evaluate the @R{} code in each chunk.  "
"The @R{} output will also be in the current locale (or @acronym{UTF-8} if so "
"declared), and should be covered by the @samp{inputenc} declaration.  One "
"thing people often forget is that the @R{} output may not be @acronym{ASCII} "
"even for @acronym{ASCII} @R{} sources, for many possible reasons.  One "
"common one is the use of `fancy' quotes: see the @R{} help on @code{sQuote}: "
"note carefully that it is not portable to declare UTF-8 or CP1252 to cover "
"such quotes, as their encoding will depend on the locale used to run "
"@code{Sweave()}: this can be circumvented by setting "
"@code{options(useFancyQuotes=\"UTF-8\")} in the vignette."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3263
msgid ""
"The final issue is the encoding of figures -- this applies only to PDF "
"figures and not PNG etc.  The PDF figures will contain declarations for "
"their encoding, but the Sweave option @code{pdf.encoding} may need to be set "
"appropriately: see the help for the @code{pdf()} graphics device."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3271
msgid ""
"As a real example of the complexities, consider the @CRANpkg{fortunes} "
"package version @samp{1.4-0}.  That package did not have a declared "
"encoding, and its vignette was in @acronym{ASCII}.  However, the data it "
"displays are read from a UTF-8 CSV file and will be assumed to be in the "
"current encoding, so @file{fortunes.tex} will be in UTF-8 in any locale.  "
"Had @code{read.table} been told the data were UTF-8, @file{fortunes.tex} "
"would have been in the locale's encoding."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3284
msgid ""
"@R{} 3.0.0 and later allow vignettes in formats other than Sweave by means "
"of ``vignette engines''.  For example @CRANpkg{knitr} version 1.1 or later "
"can create @file{.tex} files from a variation on Sweave format, and @file{."
"html} files from a variation on ``markdown'' format. These engines replace "
"the @code{Sweave()} function with other functions to convert vignette source "
"files into @LaTeX{} files for processing into @file{.pdf}, or directly into "
"@file{.pdf} or @file{.html} files. The @code{Stangle()} function is replaced "
"with a function that extracts the @R{} source from a vignette."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3290
msgid ""
"@R{} recognizes non-Sweave vignettes using filename extensions specified by "
"the engine.  For example, the @CRANpkg{knitr} package supports the extension "
"@file{.Rmd} (standing for ``R markdown'').  The user indicates the vignette "
"engine within the vignette source using a @code{\\VignetteEngine} line, for "
"example"
msgstr ""

#
#. type: example
#: R-exts.texi:3292
#, no-wrap
msgid "%\\VignetteEngine@{knitr::knitr@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3305
msgid ""
"This specifies the name of a package and an engine to use in place of Sweave "
"in processing the vignette.  As @code{Sweave} is the only engine supplied "
"with the @R{} distribution, the package providing any other engine must be "
"specified in the @samp{VignetteBuilder} field of the package "
"@file{DESCRIPTION} file, and also specified in the @samp{Suggests}, "
"@samp{Imports} or @samp{Depends} field (since its namespace must be "
"available to build or check your package).  If more than one package is "
"specified as a builder, they will be searched in the order given there.  The "
"@pkg{utils} package is always implicitly appended to the list of builder "
"packages, but may be included earlier to change the search order."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3310
msgid ""
"Note that a package with non-Sweave vignettes should always have a "
"@samp{VignetteBuilder} field in the @file{DESCRIPTION} file, since this is "
"how @command{R CMD check} recognizes that there are vignettes to be checked: "
"packages listed there are required when the package is checked."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3316
msgid ""
"The vignette engine can produce @file{.tex}, @file{.pdf}, or @file{.html} "
"files as output.  If it produces @file{.tex} files, @R{} will call "
"@code{texi2pdf} to convert them to @file{.pdf} for display to the user "
"(unless there is a @file{Makefile} in the @file{vignettes} directory)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3320
msgid ""
"Package writers who would like to supply vignette engines need to register "
"those engines in the package @code{.onLoad} function.  For example, that "
"function could make the call"
msgstr ""

#
#. type: example
#: R-exts.texi:3323
#, no-wrap
msgid ""
"tools::vignetteEngine(\"knitr\", weave = vweave, tangle = vtangle,\n"
"\t\t      pattern = \"[.]Rmd$\", package = \"knitr\")\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3328
msgid ""
"(The actual registration in @CRANpkg{knitr} is more complicated, because it "
"supports other input formats.)  See the @code{?tools::vignetteEngine} help "
"topic for details on engine registration."
msgstr ""

#
#. type: cindex
#: R-exts.texi:3332
#, no-wrap
msgid "namespaces"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3339
msgid ""
"@R{} has a namespace management system for code in packages.  This system "
"allows the package writer to specify which variables in the package should "
"be @emph{exported} to make them available to package users, and which "
"variables should be @emph{imported} from other packages."
msgstr ""

#. type: Plain text
#: R-exts.texi:3348
msgid ""
"The namespace for a package is specified by the @file{NAMESPACE} file in the "
"top level package directory.  This file contains @emph{namespace directives} "
"describing the imports and exports of the namespace.  Additional directives "
"register any shared objects to be loaded and any S3-style methods that are "
"provided.  Note that although the file looks like @R{} code (and often has "
"@R{}-style comments) it is not processed as @R{} code.  Only very simple "
"conditional processing of @code{if} statements is implemented."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3360
msgid ""
"Packages are loaded and attached to the search path by calling "
"@code{library} or @code{require}.  Only the exported variables are placed in "
"the attached frame.  Loading a package that imports variables from other "
"packages will cause these other packages to be loaded as well (unless they "
"have already been loaded), but they will @emph{not} be placed on the search "
"path by these implicit loads.  Thus code in the package can only depend on "
"objects in its own namespace and its imports (including the @pkg{base} "
"namespace) being visible@footnote{Note that lazy-loaded datasets are "
"@emph{not} in the package's namespace so need to be accessed @emph{via} "
"@code{::}, e.g.@: @code{survival::survexp.us}.}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3367
msgid ""
"Namespaces are @emph{sealed} once they are loaded.  Sealing means that "
"imports and exports cannot be changed and that internal variable bindings "
"cannot be changed.  Sealing allows a simpler implementation strategy for the "
"namespace mechanism.  Sealing also allows code analysis and compilation "
"tools to accurately identify the definition corresponding to a global "
"variable reference in a function body."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3372
msgid ""
"The namespace controls the search strategy for variables used by functions "
"in the package.  If not found locally, @R{} searches the package namespace "
"first, then the imports, then the base namespace and then the normal search "
"path."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3376
msgid ""
"Prior to @R{} 2.14.0, namespaces were optional in packages: a default "
"namespace was generated on installation in 2.14.x and 2.15.x.  As from 3.0.0 "
"a namespace is mandatory."
msgstr ""

#
#. type: node
#: R-exts.texi:3385
#: R-exts.texi:3388
#: R-exts.texi:3389
#: R-exts.texi:3470
#, no-wrap
msgid "Specifying imports and exports"
msgstr ""

#
#. type: node
#: R-exts.texi:3385
#: R-exts.texi:3388
#: R-exts.texi:3470
#: R-exts.texi:3471
#: R-exts.texi:3509
#, no-wrap
msgid "Registering S3 methods"
msgstr ""

#
#. type: node
#: R-exts.texi:3385
#: R-exts.texi:3470
#: R-exts.texi:3509
#: R-exts.texi:3510
#: R-exts.texi:3554
#, no-wrap
msgid "Load hooks"
msgstr ""

#
#. type: node
#: R-exts.texi:3385
#: R-exts.texi:3509
#: R-exts.texi:3554
#: R-exts.texi:3555
#: R-exts.texi:3562
#: R-exts.texi:3737
#, no-wrap
msgid "useDynLib"
msgstr ""

#
#. type: subsection
#: R-exts.texi:3385
#: R-exts.texi:3554
#: R-exts.texi:3737
#: R-exts.texi:3738
#: R-exts.texi:3809
#: R-exts.texi:11163
#, no-wrap
msgid "An example"
msgstr ""

#
#. type: subsection
#: R-exts.texi:3385
#: R-exts.texi:3737
#: R-exts.texi:3809
#: R-exts.texi:3810
#, no-wrap
msgid "Namespaces with S4 classes and methods"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3393
msgid ""
"Exports are specified using the @code{export} directive in the "
"@file{NAMESPACE} file.  A directive of the form"
msgstr ""

#
#. type: findex
#: R-exts.texi:3394
#, no-wrap
msgid "export"
msgstr ""

#
#. type: example
#: R-exts.texi:3397
#, no-wrap
msgid "export(f, g)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3403
msgid ""
"specifies that the variables @code{f} and @code{g} are to be exported.  "
"(Note that variable names may be quoted, and reserved words and non-standard "
"names such as @code{[<-.fractions} must be.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3407
msgid ""
"For packages with many variables to export it may be more convenient to "
"specify the names to export with a regular expression using "
"@code{exportPattern}.  The directive"
msgstr ""

#
#. type: findex
#: R-exts.texi:3408
#: R-exts.texi:3840
#, no-wrap
msgid "exportPattern"
msgstr ""

#
#. type: example
#: R-exts.texi:3411
#, no-wrap
msgid "exportPattern(\"^[^\\\\.]\")\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3421
msgid ""
"exports all variables that do not start with a period.  However, such broad "
"patterns are not recommended for production code: it is better to list all "
"exports or use narrowly-defined groups.  (This pattern applies to S4 "
"classes.)  Beware of patterns which include names starting with a period: "
"some of these are internal-only variables and should never be exported, e.g."
"@: @samp{.__S3MethodsTable__.} (and the code nowadays excludes known cases)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3427
msgid ""
"Packages implicitly import the base namespace.  Variables exported from "
"other packages with namespaces need to be imported explicitly using the "
"directives @code{import} and @code{importFrom}.  The @code{import} directive "
"imports all exported variables from the specified package(s).  Thus the "
"directives"
msgstr ""

#
#. type: findex
#: R-exts.texi:3428
#, no-wrap
msgid "import"
msgstr ""

#
#. type: example
#: R-exts.texi:3431
#, no-wrap
msgid "import(foo, bar)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3438
msgid ""
"specifies that all exported variables in the packages @pkg{foo} and "
"@pkg{bar} are to be imported.  If only some of the exported variables from a "
"package are needed, then they can be imported using @code{importFrom}.  The "
"directive"
msgstr ""

#
#. type: findex
#: R-exts.texi:3439
#, no-wrap
msgid "importFrom"
msgstr ""

#
#. type: example
#: R-exts.texi:3442
#, no-wrap
msgid "importFrom(foo, f, g)\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:3449
msgid ""
"specifies that the exported variables @code{f} and @code{g} of the package "
"@pkg{foo} are to be imported.  Using @code{importFrom} selectively rather "
"than @code{import} is good practice and recommended notably when importing "
"from packages with more than a dozen exports."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3453
msgid ""
"It is possible to export variables from a namespace which it has imported "
"from other namespaces: this has to be done explicitly and not @emph{via} "
"@code{exportPattern}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3464
msgid ""
"If a package only needs a few objects from another package it can use a "
"fully qualified variable reference in the code instead of a formal import.  "
"A fully qualified reference to the function @code{f} in package @pkg{foo} is "
"of the form @code{foo::f}.  This is slightly less efficient than a formal "
"import and also loses the advantage of recording all dependencies in the "
"@file{NAMESPACE} file (but they still need to be recorded in the "
"@file{DESCRIPTION} file).  Evaluating @code{foo::f} will cause package "
"@pkg{foo} to be loaded, but not attached, if it was not loaded already---"
"this can be an advantage in delaying the loading of a rarely used package."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3469
msgid ""
"Using @code{foo:::f} instead of @code{foo::f} allows access to unexported "
"objects.  This is generally not recommended, as the semantics of unexported "
"objects may be changed by the package author in routine maintenance."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3480
msgid ""
"The standard method for S3-style @code{UseMethod} dispatching might fail to "
"locate methods defined in a package that is imported but not attached to the "
"search path.  To ensure that these methods are available the packages "
"defining the methods should ensure that the generics are imported and "
"register the methods using @code{S3method} directives.  If a package defines "
"a function @code{print.foo} intended to be used as a @code{print} method for "
"class @code{foo}, then the directive"
msgstr ""

#
#. type: findex
#: R-exts.texi:3481
#, no-wrap
msgid "S3method"
msgstr ""

#
#. type: example
#: R-exts.texi:3484
#, no-wrap
msgid "S3method(print, foo)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3491
msgid ""
"ensures that the method is registered and available for @code{UseMethod} "
"dispatch, and the function @code{print.foo} does not need to be exported.  "
"Since the generic @code{print} is defined in @pkg{base} it does not need to "
"be imported explicitly."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3495
msgid ""
"(Note that function and class names may be quoted, and reserved words and "
"non-standard names such as @code{[<-} and @code{function} must be.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3498
msgid ""
"It is possible to specify a third argument to S3method, the function to be "
"used as the method, for example"
msgstr ""

#
#. type: example
#: R-exts.texi:3501
#, no-wrap
msgid "S3method(print, check_so_symbols, .print.via.format)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3505
msgid "when @code{print.check_so_symbols} is not needed."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3508
msgid ""
"There used to be a limit on the number of @code{S3method} directives: it was "
"@code{500} prior to @R{} 3.0.2."
msgstr ""

#
#. type: findex
#: R-exts.texi:3512
#, no-wrap
msgid ".onLoad"
msgstr ""

#
#. type: findex
#: R-exts.texi:3513
#, no-wrap
msgid ".onAttach"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3516
msgid ""
"There are a number of hooks called as packages are loaded, attached, "
"detached, and unloaded.  See @code{help(\".onLoad\")} for more details."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3523
msgid ""
"Since loading and attaching are distinct operations, separate hooks are "
"provided for each.  These hook functions are called @code{.onLoad} and "
"@code{.onAttach}.  They both take arguments@footnote{they will be called "
"with two unnamed arguments, in that order.} @code{libname} and "
"@code{pkgname}; they should be defined in the namespace but not exported."
msgstr ""

#
#. type: findex
#: R-exts.texi:3524
#, no-wrap
msgid ".onUnload"
msgstr ""

#
#. type: findex
#: R-exts.texi:3525
#, no-wrap
msgid ".onDetach"
msgstr ""

#
#. type: findex
#: R-exts.texi:3526
#, no-wrap
msgid ".Last.lib"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3537
msgid ""
"Packages can use a @code{.onDetach} (as from @R{} 3.0.0) or @code{.Last.lib} "
"function (provided the latter is exported from the namespace) when "
"@code{detach} is called on the package.  It is called with a single "
"argument, the full path to the installed package.  There is also a hook "
"@code{.onUnload} which is called when the namespace is unloaded (@emph{via} "
"a call to @code{unloadNamespace}, perhaps called by @code{detach(unload = "
"TRUE)}) with argument the full path to the installed package's directory.  "
"@code{.onUnload} and @code{.onDetach} should be defined in the namespace and "
"not exported, but @code{.Last.lib} does need to be exported."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3542
msgid ""
"Packages are not likely to need @code{.onAttach} (except perhaps for a start-"
"up banner); code to set options and load shared objects should be placed in "
"a @code{.onLoad} function, or use made of the @code{useDynLib} directive "
"described next."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3545
msgid ""
"User-level hooks are also available: see the help on function @code{setHook}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3553
msgid ""
"These hooks are often used incorrectly.  People forget to export @code{.Last."
"lib}.  Compiled code should be loaded in @code{.onLoad} (or @emph{via} a "
"@code{useDynLb} directive: see below) and unloaded in @code{.onUnload}.  Do "
"remember that a package's namespace can be loaded without the namespace "
"being attached (e.g. by @code{pkgname::fun}) and that a package can be "
"detached and re-attached whilst its namespace remains loaded."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3561
msgid ""
"A @file{NAMESPACE} file can contain one or more @code{useDynLib} directives "
"which allows shared objects that need to be loaded.@footnote{NB: this will "
"only be read in all versions of @R{} if the package contains @R{} code in a "
"@file{R} directory.} The directive"
msgstr ""

#
#. type: example
#: R-exts.texi:3565
#, no-wrap
msgid "useDynLib(foo)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3575
msgid ""
"registers the shared object @code{foo}@footnote{Note that this is the "
"basename of the shared object, and the appropriate extension (@file{.so} or "
"@file{.dll}) will be added.} for loading with @code{library.dynam}.  Loading "
"of registered object(s) occurs after the package code has been loaded and "
"before running the load hook function.  Packages that would only need a load "
"hook function to load a shared object can use the @code{useDynLib} directive "
"instead."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3580
msgid ""
"The @code{useDynLib} directive also accepts the names of the native routines "
"that are to be used in @R{} @emph{via} the @code{.C}, @code{.Call}, @code{."
"Fortran} and @code{.External} interface functions.  These are given as "
"additional arguments to the directive, for example,"
msgstr ""

#
#. type: example
#: R-exts.texi:3583
#, no-wrap
msgid "useDynLib(foo, myRoutine, myOtherRoutine)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3592
msgid ""
"By specifying these names in the @code{useDynLib} directive, the native "
"symbols are resolved when the package is loaded and @R{} variables "
"identifying these symbols are added to the package's namespace with these "
"names.  These can be used in the @code{.C}, @code{.Call}, @code{.Fortran} "
"and @code{.External} calls in place of the name of the routine and the "
"@code{PACKAGE} argument.  For instance, we can call the routine "
"@code{myRoutine} from @R{} with the code"
msgstr ""

#
#. type: example
#: R-exts.texi:3595
#, no-wrap
msgid " .Call(myRoutine, x, y)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3599
msgid "rather than"
msgstr ""

#
#. type: example
#: R-exts.texi:3602
#, no-wrap
msgid " .Call(\"myRoutine\", x, y, PACKAGE = \"foo\")\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3608
msgid ""
"There are at least two benefits to this approach.  Firstly, the symbol "
"lookup is done just once for each symbol rather than each time the routine "
"is invoked.  Secondly, this removes any ambiguity in resolving symbols that "
"might be present in several compiled DLLs."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3616
msgid ""
"In some circumstances, there will already be an @R{} variable in the package "
"with the same name as a native symbol. For example, we may have an @R{} "
"function in the package named @code{myRoutine}.  In this case, it is "
"necessary to map the native symbol to a different @R{} variable name. This "
"can be done in the @code{useDynLib} directive by using named arguments. For "
"instance, to map the native symbol name @code{myRoutine} to the @R{} "
"variable @code{myRoutine_sym}, we would use"
msgstr ""

#
#. type: example
#: R-exts.texi:3619
#, no-wrap
msgid "useDynLib(foo, myRoutine_sym = myRoutine, myOtherRoutine)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3622
msgid "We could then call that routine from @R{} using the command"
msgstr ""

#
#. type: example
#: R-exts.texi:3625
#, no-wrap
msgid " .Call(myRoutine_sym, x, y)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3629
msgid ""
"Symbols without explicit names are assigned to the @R{} variable with that "
"name."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3638
msgid ""
"In some cases, it may be preferable not to create @R{} variables in the "
"package's namespace that identify the native routines.  It may be too costly "
"to compute these for many routines when the package is loaded if many of "
"these routines are not likely to be used.  In this case, one can still "
"perform the symbol resolution correctly using the DLL, but do this each time "
"the routine is called.  Given a reference to the DLL as an @R{} variable, "
"say @code{dll}, we can call the routine @code{myRoutine} using the expression"
msgstr ""

#
#. type: example
#: R-exts.texi:3641
#, no-wrap
msgid " .Call(dll$myRoutine, x, y)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3648
msgid ""
"The @code{$} operator resolves the routine with the given name in the DLL "
"using a call to @code{getNativeSymbol}.  This is the same computation as "
"above where we resolve the symbol when the package is loaded. The only "
"difference is that this is done each time in the case of @code{dll"
"$myRoutine}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3656
msgid ""
"In order to use this dynamic approach (e.g., @code{dll$myRoutine}), one "
"needs the reference to the DLL as an @R{} variable in the package.  The DLL "
"can be assigned to a variable by using the @code{variable = dllName} format "
"used above for mapping symbols to @R{} variables.  For example, if we wanted "
"to assign the DLL reference for the DLL @code{foo} in the example above to "
"the variable @code{myDLL}, we would use the following directive in the "
"@file{NAMESPACE} file:"
msgstr ""

#
#. type: example
#: R-exts.texi:3659
#, no-wrap
msgid "myDLL = useDynLib(foo, myRoutine_sym = myRoutine, myOtherRoutine)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3664
msgid ""
"Then, the @R{} variable @code{myDLL} is in the package's namespace and "
"available for calls such as @code{myDLL$dynRoutine} to access routines that "
"are not explicitly resolved at load time."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3675
msgid ""
"If the package has registration information (see @ref{Registering native "
"routines}), then we can use that directly rather than specifying the list of "
"symbols again in the @code{useDynLib} directive in the @file{NAMESPACE} "
"file.  Each routine in the registration information is specified by giving a "
"name by which the routine is to be specified along with the address of the "
"routine and any information about the number and type of the parameters.  "
"Using the @code{.registration} argument of @code{useDynLib}, we can instruct "
"the namespace mechanism to create @R{} variables for these symbols.  For "
"example, suppose we have the following registration information for a DLL "
"named @code{myDLL}:"
msgstr ""

#
#. type: example
#: R-exts.texi:3680
#, no-wrap
msgid ""
"static R_NativePrimitiveArgType foo_t[] = @{\n"
"    REALSXP, INTSXP, STRSXP, LGLSXP\n"
"@};\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:3686
#, no-wrap
msgid ""
"static R_CMethodDef cMethods[] = @{\n"
"   @{\"foo\", (DL_FUNC) &foo, 4, foo_t@},\n"
"   @{\"bar_sym\", (DL_FUNC) &bar, 0@},\n"
"   @{NULL, NULL, 0@}\n"
"@};\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:3692
#, no-wrap
msgid ""
"static R_CallMethodDef callMethods[] = @{\n"
"   @{\"R_call_sym\", (DL_FUNC) &R_call, 4@},\n"
"   @{\"R_version_sym\", (DL_FUNC) &R_version, 0@},\n"
"   @{NULL, NULL, 0@}\n"
"@};\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3695
msgid "Then, the directive in the @file{NAMESPACE} file"
msgstr ""

#
#. type: example
#: R-exts.texi:3698
#, no-wrap
msgid "useDynLib(myDLL, .registration = TRUE)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3704
msgid ""
"causes the DLL to be loaded and also for the @R{} variables @code{foo}, "
"@code{bar_sym}, @code{R_call_sym} and @code{R_version_sym} to be defined in "
"the package's namespace."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3711
msgid ""
"Note that the names for the @R{} variables are taken from the entry in the "
"registration information and do not need to be the same as the name of the "
"native routine.  This allows the creator of the registration information to "
"map the native symbols to non-conflicting variable names in @R{}, e.g.@: "
"@code{R_version} to @code{R_version_sym} for use in an @R{} function such as"
msgstr ""

#
#. type: example
#: R-exts.texi:3717
#, no-wrap
msgid ""
"R_version <- function()\n"
"@{\n"
"  .Call(R_version_sym)\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3722
msgid ""
"Using argument @code{.fixes} allows an automatic prefix to be added to the "
"registered symbols, which can be useful when working with an existing "
"package.  For example, package @CRANpkg{KernSmooth} has"
msgstr ""

#
#. type: example
#: R-exts.texi:3725
#, no-wrap
msgid "useDynLib(KernSmooth, .registration = TRUE, .fixes = \"F_\")\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3731
msgid ""
"which makes the @R{} variables corresponding to the FORTRAN symbols "
"@code{F_bkde} and so on, and so avoid clashes with @R{} code in the "
"namespace."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3742
msgid ""
"As an example consider two packages named @pkg{foo} and @pkg{bar}.  The @R{} "
"code for package @pkg{foo} in file @file{foo.R} is"
msgstr ""

#
#. type: example
#: R-exts.texi:3750
#, no-wrap
msgid ""
"x <- 1\n"
"f <- function(y) c(x,y)\n"
"foo <- function(x) .Call(\"foo\", x, PACKAGE=\"foo\")\n"
"print.foo <- function(x, ...) cat(\"<a foo>\\n\")\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3757
msgid ""
"Some C code defines a C function compiled into DLL @code{foo} (with an "
"appropriate extension).  The @file{NAMESPACE} file for this package is"
msgstr ""

#
#. type: example
#: R-exts.texi:3764
#, no-wrap
msgid ""
"useDynLib(foo)\n"
"export(f, foo)\n"
"S3method(print, foo)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3770
msgid "The second package @pkg{bar} has code file @file{bar.R}"
msgstr ""

#
#. type: example
#: R-exts.texi:3777
#, no-wrap
msgid ""
"c <- function(...) sum(...)\n"
"g <- function(y) f(c(y, 7))\n"
"h <- function(y) y+9\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3783
msgid "and @file{NAMESPACE} file"
msgstr ""

#
#. type: example
#: R-exts.texi:3789
#, no-wrap
msgid ""
"import(foo)\n"
"export(g, h)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3797
msgid ""
"Calling @code{library(bar)} loads @pkg{bar} and attaches its exports to the "
"search path.  Package @pkg{foo} is also loaded but not attached to the "
"search path.  A call to @code{g} produces"
msgstr ""

#
#. type: example
#: R-exts.texi:3801
#, no-wrap
msgid ""
"> g(6)\n"
"[1]  1 13\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3808
msgid ""
"This is consistent with the definitions of @code{c} in the two settings: in "
"@pkg{bar} the function @code{c} is defined to be equivalent to @code{sum}, "
"but in @pkg{foo} the variable @code{c} refers to the standard function "
"@code{c} in @pkg{base}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3821
msgid ""
"Some additional steps are needed for packages which make use of formal (S4-"
"style) classes and methods (unless these are purely used internally).  The "
"package should have @code{Depends: methods} in its @file{DESCRIPTION} "
"file@footnote{This was necessary at least prior to @R{} 3.0.2 as the "
"@pkg{methods} package looked for its own @R{} code on the search path.} and "
"@code{import(methods)} or @code{importFrom(methods, ...)} plus any classes "
"and methods which are to be exported need to be declared in the "
"@file{NAMESPACE} file.  For example, the @pkg{stats4} package has"
msgstr ""

#
#. type: findex
#: R-exts.texi:3822
#, no-wrap
msgid "exportClasses"
msgstr ""

#
#. type: findex
#: R-exts.texi:3823
#, no-wrap
msgid "exportMethods"
msgstr ""

#
#. type: example
#: R-exts.texi:3838
#, no-wrap
msgid ""
"export(mle) # exporting methods implicitly exports the generic\n"
"importFrom(\"graphics\", plot)\n"
"importFrom(\"stats\", optim, qchisq)\n"
"## For these, we define methods or (AIC, BIC, nobs) an implicit generic:\n"
"importFrom(\"stats\", AIC, BIC, coef, confint, logLik, nobs, profile,\n"
"\t   update, vcov)\n"
"exportClasses(mle, profile.mle, summary.mle)\n"
"## All methods for imported generics:\n"
"exportMethods(coef, confint, logLik, plot, profile, summary,\n"
"\t      show, update, vcov)\n"
"## implicit generics which do not have any methods here\n"
"export(AIC, BIC, nobs)\n"
msgstr ""

#
#. type: findex
#: R-exts.texi:3841
#, no-wrap
msgid "exportClassPattern"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3850
msgid ""
"All S4 classes to be used outside the package need to be listed in an "
"@code{exportClasses} directive. Alternatively, they can be specified using "
"@code{exportClassPattern}@footnote{This defaults to the same pattern as "
"@code{exportPattern}: use something like @code{exportClassPattern(\"^$\")} "
"to override this.} in the same style as for @code{exportPattern}.  To export "
"methods for generics from other packages an @code{exportMethods} directive "
"can be used."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3866
msgid ""
"Note that exporting methods on a generic in the namespace will also export "
"the generic, and exporting a generic in the namespace will also export its "
"methods.  If the generic function is not local to this package, either "
"because it was imported as a generic function or because the non-generic "
"version has been made generic solely to add S4 methods to it (as for "
"functions such as @code{plot} in the example above), it can be declared "
"@emph{via} either or both of @code{export} or @code{exportMethods}, but the "
"latter is clearer (and is used in the @pkg{stats4} example above).  In "
"particular, for primitive functions there is no generic function, so "
"@code{export} would export the primitive, which makes no sense.  On the "
"other hand, if the generic is local to this package, it is more natural to "
"export the function itself using @code{export()}, and this @emph{must} be "
"done if an implicit generic is created without setting any methods for it "
"(as is the case for @code{AIC} in @pkg{stats4})."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3872
msgid ""
"A non-local generic function is only exported to ensure that calls to the "
"function will dispatch the methods from this package (and that is not done "
"or required when the methods are for primitive functions).  For this reason, "
"you do not need to document such implicitly created generic functions, and "
"@code{undoc} in package @pkg{tools} will not report them."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3878
msgid ""
"If a package uses S4 classes and methods exported from another package, but "
"does not import the entire namespace of the other package@footnote{if it "
"does, there will be opaque warnings about replacing imports if the classes/"
"methods are also imported.}, it needs to import the classes and methods "
"explicitly, with directives"
msgstr ""

#
#. type: findex
#: R-exts.texi:3879
#, no-wrap
msgid "importClassesFrom"
msgstr ""

#
#. type: findex
#: R-exts.texi:3880
#, no-wrap
msgid "importMethodsFrom"
msgstr ""

#
#. type: example
#: R-exts.texi:3885
#, no-wrap
msgid ""
"importClassesFrom(package, ...)\n"
"importMethodsFrom(package, ...)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3891
msgid ""
"listing the classes and functions with methods respectively.  Suppose we had "
"two small packages @pkg{A} and @pkg{B} with @pkg{B} using @pkg{A}.  Then "
"they could have @code{NAMESPACE} files"
msgstr ""

#
#. type: example
#: R-exts.texi:3898
#, no-wrap
msgid ""
"export(f1, ng1)\n"
"exportMethods(\"[\")\n"
"exportClasses(c1)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3904
#: R-exts.texi:11448
msgid "and"
msgstr ""

#
#. type: example
#: R-exts.texi:3914
#, no-wrap
msgid ""
"importFrom(A, ng1)\n"
"importClassesFrom(A, c1)\n"
"importMethodsFrom(A, f1)\n"
"export(f4, f5)\n"
"exportMethods(f6, \"[\")\n"
"exportClasses(c1, c2)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3920
msgid "respectively."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3923
msgid ""
"Note that @code{importMethodsFrom} will also import any generics defined in "
"the namespace on those methods."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3930
msgid ""
"It is important if you export S4 methods that the corresponding generics are "
"available.  You may for example need to import @code{plot} from "
"@pkg{graphics} to make visible a function to be converted into its implicit "
"generic.  But it is better practice to make use of the generics exported by "
"@pkg{stats4} as this enables multiple packages to unambiguously set methods "
"on those generics."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3937
msgid ""
"This section contains advice on writing packages to be used on multiple "
"platforms or for distribution (for example to be submitted to a package "
"repository such as @acronym{CRAN})."
msgstr ""

#
#. type: node
#: R-exts.texi:3944
#: R-exts.texi:4276
#: R-exts.texi:4277
#: R-exts.texi:4334
#, no-wrap
msgid "PDF size"
msgstr ""

#
#. type: node
#: R-exts.texi:3944
#: R-exts.texi:4276
#: R-exts.texi:4334
#: R-exts.texi:4335
#: R-exts.texi:4362
#, no-wrap
msgid "Check timing"
msgstr ""

#
#. type: node
#: R-exts.texi:3944
#: R-exts.texi:4334
#: R-exts.texi:4362
#: R-exts.texi:4363
#: R-exts.texi:4429
#, no-wrap
msgid "Encoding issues"
msgstr ""

#
#. type: node
#: R-exts.texi:3944
#: R-exts.texi:4362
#: R-exts.texi:4429
#: R-exts.texi:4430
#: R-exts.texi:4539
#, no-wrap
msgid "Portable C and C++ code"
msgstr ""

#
#. type: subsection
#: R-exts.texi:3944
#: R-exts.texi:4429
#: R-exts.texi:4539
#: R-exts.texi:4540
#, no-wrap
msgid "Binary distribution"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3949
msgid ""
"Portable packages should have simple file names: use only alphanumeric "
"@acronym{ASCII} characters and period (@code{.}), and avoid those names not "
"allowed under Windows which are mentioned above."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3957
msgid ""
"Many of the graphics devices are platform-specific: even @code{X11()} (aka "
"@code{x11()}) which although emulated on Windows may not be available on a "
"Unix-alike (and is not the preferred screen device on OS X).  It is rarely "
"necessary for package code or examples to open a new device, but if "
"essential,@footnote{People use @code{dev.new()} to open a device at a "
"particular size: that is not portable but using @code{dev.new(noRStudioGD = "
"TRUE)} helps.} use @code{dev.new()}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3959
msgid "Use @command{R CMD build} to make the release @file{.tar.gz} file."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:3964
msgid ""
"@command{R CMD check} provides a basic set of checks, but often further "
"problems emerge when people try to install and use packages submitted to "
"@acronym{CRAN} -- many of these involve compiled code.  Here are some "
"further checks that you can do to make your package more portable."
msgstr ""

#
#. type: itemize
#: R-exts.texi:3971
msgid ""
"If your package has a @file{configure} script, provide a @file{configure."
"win} script to be used on Windows (an empty file if no actions are needed)."
msgstr ""

#
#. type: itemize
#: R-exts.texi:3990
msgid ""
"If your package has a @file{Makevars} or @file{Makefile} file, make sure "
"that you use only portable make features.  Such files should be LF-"
"terminated@footnote{Solaris @command{make} does not accept CRLF-terminated "
"Makefiles; Solaris warns about and some other @command{make}s ignore "
"incomplete final lines.} (including the final line of the file) and not make "
"use of GNU extensions.  (The POSIX specification is available at "
"@uref{http://pubs.opengroup.org/@/onlinepubs/@/9699919799/@/utilities/@/make."
"html}; anything not documented there should be regarded as an extension to "
"be avoided.)  Commonly misused GNU extensions are conditional inclusions "
"(@code{ifeq} and the like), @code{$@{shell ...@}} and @code{$@{wildcard ..."
"@}}, and the use of @code{+=}@footnote{This was apparently introduced in "
"SunOS 4, and is available elsewhere @emph{provided} it is surrounded by "
"spaces.} and @code{:=}.  Also, the use of @code{$<} other than in implicit "
"rules is a GNU extension, as is the @code{$^} macro.  Unfortunately "
"makefiles which use GNU extensions often run on other platforms but do not "
"have the intended results."
msgstr ""

#
#. type: itemize
#: R-exts.texi:3992
msgid ""
"The use of @code{$@{shell ...@}} can be avoided by using backticks, e.g.@:"
msgstr ""

#
#. type: example
#: R-exts.texi:3995
#, no-wrap
msgid "PKG_CPPFLAGS = `gsl-config --cflags`\n"
msgstr ""

#
#. type: itemize
#: R-exts.texi:4003
msgid ""
"which works in all versions of @command{make} known@footnote{GNU make, BSD "
"make formerly in FreeBSD and OS X, AT&T make as implemented on Solaris, "
"@command{pmake} in FreeBSD, `Distributed Make' (@code{dmake}), part of "
"Solaris Studio and available in other versions.} to be used with @R{}."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4006
msgid ""
"If you really must require GNU make, declare it in the @file{DESCRIPTION} "
"file by"
msgstr ""

#
#. type: example
#: R-exts.texi:4009
#, no-wrap
msgid "SystemRequirements: GNU make\n"
msgstr ""

#
#. type: itemize
#: R-exts.texi:4016
msgid ""
"If you only need GNU make for parts of the package which are rarely needed "
"(for example to create bibliography files under @file{vignettes}), use a "
"file called @file{GNUmakefile} rather than @file{Makefile} as GNU make "
"(only) will use the former."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4019
msgid ""
"Since the only viable make for Windows is GNU make, it is permissible to use "
"GNU extensions in files @file{Makevars.win} or @file{Makefile.win}."
msgstr ""

#. type: itemize
#: R-exts.texi:4032
msgid ""
"Bash extensions also need to be avoided in shell scripts, including "
"expressions in Makefiles (which are passed to the shell for processing).  "
"Some @R{} platforms use strict@footnote{For example, @command{test} options "
"@option{-a} and @option{-e} are not portable, and not supported in the AT&T "
"Bourne shell used on Solaris, even though they are in the POSIX standard.} "
"Bourne shells: the @R{} toolset on Windows and some Unix-alike OSes use "
"@command{ash} (@uref{https://en.wikipedia.org/@/wiki/@/Almquist_shell}), a "
"rather minimal shell with few builtins.  Beware of assuming that all the "
"POSIX command-line utilities are available, especially on Windows where only "
"a minimal set is provided for use with @R{}."
msgstr ""

#
#. type: ifset
#: R-exts.texi:4035
msgid ""
"(@xref{The command line tools, , The command line tools, R-admin, R "
"Installation and Administration}.)"
msgstr ""

#
#. type: itemize
#: R-exts.texi:4041
msgid ""
"One particular issue is the use of @command{echo}, for which two behaviours "
"are allowed (@uref{http://pubs.opengroup.org/@/onlinepubs/@/9699919799/@/"
"utilities/@/echo.html})  and both occur as defaults on @R{} platforms: "
"portable applications should not use @option{-n} (as the first argument) nor "
"escape sequences."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4051
msgid ""
"Make use of the abilities of your compilers to check the standards-"
"conformance of your code.  For example, @command{gcc} can be used with "
"options @option{-Wall -pedantic} to alert you to potential problems.  This "
"is particularly important for C++, where @code{g++ -Wall -pedantic} will "
"alert you to the use of GNU extensions which fail to compile on most other C+"
"+ compilers. If @R{} was not configured accordingly, one can achieve this "
"@emph{via} personal @file{Makevars} files."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4060
msgid ""
"Although there is a 2011 version of the C++ standard, even partial "
"implementations are not universally available.  Portable C++ code needs to "
"follow the 1998 standard (and not use features from C99).  See also "
"@ref{Using C++11 code} to specify a C++11 compiler."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4064
msgid ""
"If you use FORTRAN 77, @code{ftnchek} (@uref{http://www.dsm.fordham.edu/@/"
"~ftnchek/}) provides thorough testing of conformance to the standard."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4071
msgid ""
"Not all common @R{} platforms conform to the expected standards, e.g.@: C99 "
"for C code.  One common area of problems is the @code{*printf} functions "
"where Windows does not support @code{%lld}, @code{%Lf} and similar formats "
"(and has its own formats such as @code{%I64d} for 64-bit integers).  It is "
"very rare to need to output such types, and 64-bit integers can usually be "
"converted to doubles for output."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4084
msgid ""
"Do be very careful with passing arguments between @R{}, C and "
"@acronym{FORTRAN} code.  In particular, @code{long} in C will be 32-bit on "
"some @R{} platforms (including 64-bit Windows), but 64-bit on most modern "
"Unix and Linux platforms.  It is rather unlikely that the use of @code{long} "
"in C code has been thought through: if you need a longer type than "
"@code{int} you should use a configure test for a C99 type such as "
"@code{int_fast64_t} (and failing that, @code{long long} @footnote{but note "
"that @code{long long} is not a standard C++ type, and C++ compilers set up "
"for strict checking will reject it.}) and typedef your own type to be "
"@code{long} or @code{long long}, or use another suitable type (such as "
"@code{size_t})."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4090
msgid ""
"It is not safe to assume that @code{long} and pointer types are the same "
"size, and they are not on 64-bit Windows.  If you need to convert pointers "
"to and from integers use the C99 integer types @code{intptr_t} and "
"@code{uintptr_t} (which are defined in the header @code{<stdint.h>} and are "
"not required to be implemented by the C99 standard)."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4093
msgid ""
"Note that @code{integer} in @acronym{FORTRAN} corresponds to @code{int} in C "
"on all @R{} platforms."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4106
msgid ""
"Under no circumstances should your compiled code ever call @code{abort} or "
"@code{exit}@footnote{or where supported the variants @code{_Exit} and "
"@code{_exit}.}: these terminate the user's @R{} process, quite possibly "
"including all his unsaved work.  One usage that could call @code{abort} is "
"the @code{assert} macro in C or C++ functions, which should never be active "
"in production code.  The normal way to ensure that is to define the macro "
"@code{NDEBUG}, and @command{R CMD INSTALL} does so as part of the "
"compilation flags.  If you wish to use @code{assert} during development. you "
"can include @code{-UNDEBUG} in @code{PKG_CPPFLAGS}.  Note that your own "
"@file{src/Makefile} or makefiles in sub-directories may also need to define "
"@code{NDEBUG}."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4109
msgid ""
"This applies not only to your own code but to any external software you "
"compile in or link to."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4115
msgid ""
"Compiled code should not write to @file{stdout} or @file{stderr} and C++ and "
"Fortran I/O should not be used.  As with the previous item such calls may "
"come from external software and may never be called, but package authors are "
"often mistaken about that."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4124
msgid ""
"Compiled code should not call the system random number generators such as "
"@code{rand}, @code{drand48} and @code{random}@footnote{This and "
"@code{srandom} are in any case not portable.  They are in POSIX but not in "
"the C99 standard, and not available on Windows.}, but rather use the "
"interfaces to @R{}'s RNGs described in @ref{Random numbers}.  In particular, "
"if more than one package initializes the system RNG (e.g.@: @emph{via} "
"@code{srand}), they will interfere with each other."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4126
msgid "Nor should the C++11 random number library be used."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4131
msgid ""
"Errors in memory allocation and reading/writing outside arrays are very "
"common causes of crashes (e.g., segfaults) on some machines.  See "
"@ref{Checking memory access} for tools which can be used to look for this."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4136
msgid ""
"Many platforms will allow unsatisfied entry points in compiled code, but "
"will crash the application (here @R{}) if they are ever used.  Some (notably "
"Windows) will not.  Looking at the output of"
msgstr ""

#
#. type: example
#: R-exts.texi:4139
#, no-wrap
msgid "nm -pg mypkg.so\n"
msgstr ""

#
#. type: itemize
#: R-exts.texi:4144
msgid ""
"and checking if any of the symbols marked @code{U} is unexpected is a good "
"way to avoid this."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4157
msgid ""
"Linkers have a lot of freedom in how to resolve entry points in dynamically-"
"loaded code, so the results may differ by platform.  One area that has "
"caused grief is packages including copies of standard system software such "
"as @code{libz} (especially those already linked into @R{}).  In the case in "
"point, entry point @code{gzgets} was sometimes resolved against the old "
"version compiled into the package, sometimes against the copy compiled into "
"@R{} and sometimes against the system dynamic library.  The only safe "
"solution is to rename the entry points in the copy in the package.  We have "
"even seen problems with entry point name @code{myprintf}, which is a system "
"entry point@footnote{in @file{libselinux}.} on some Linux systems."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4165
msgid ""
"Conflicts between symbols in DLLs are handled in very platform-specific "
"ways.  Good ways to avoid trouble are to make as many symbols as possible "
"static (check with @code{nm -pg}), and to use names which are clearly tied "
"to your package (which also helps users if anything does go wrong).  Note "
"that symbol names starting with @code{R_} are regarded as part of @R{}'s "
"namespace and should not be used in packages."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4172
msgid ""
"It is not portable to call compiled code in @R{} or other packages "
"@emph{via} @code{.Internal}, @code{.C}, @code{.Fortran}, @code{.Call} or "
"@code{.External}, since such interfaces are subject to change without notice "
"and will probably result in your code terminating the @R{} process."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4176
msgid ""
"Do not use (hard or symbolic) file links in your package sources.  Where "
"possible @command{R CMD build} will replace them by copies."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4181
msgid ""
"If you do not yourself have a Windows system, consider submitting your "
"source package to WinBuilder (@uref{http://win-builder.r-project.org/})  "
"before distribution."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4187
msgid ""
"It is bad practice for package code to alter the search path using "
"@code{library}, @code{require} or @code{attach} and this often does not work "
"as intended.  For alternatives, see @ref{Suggested packages} and @code{with}."
msgstr ""

#. type: itemize
#: R-exts.texi:4197
msgid ""
"Examples can be run interactively @emph{via} @code{example} as well as in "
"batch mode when checking.  So they should behave appropriately in both "
"scenarios, conditioning by @code{interactive()} the parts which need an "
"operator or observer.  For instance, progress bars@footnote{except perhaps "
"the simplest kind as used by @code{download.file()} in non-interactive use.} "
"are only appropriate in interactive use, as is displaying help pages or "
"calling @code{View()} (see below)."
msgstr ""

#. type: itemize
#: R-exts.texi:4207
msgid ""
"Be careful with the order of entries in macros such as @code{PKG_LIBS}.  "
"Some linkers will re-order the entries, and behaviour can differ between "
"dynamic and static libraries.  Generally @option{-L} options should "
"precede@footnote{Whereas the GNU linker reorders so @option{-L} options are "
"processed first, the Solaris one does not.} the libraries (typically "
"specified by @option{-l} options) to be found from those directories, and "
"libraries are searched once in the order they are specified.  Not all "
"linkers allow a space after @option{-L} ."
msgstr ""

#. type: itemize
#: R-exts.texi:4215
msgid ""
"Some people have a need to set a locale.  Locale names are not portable, and "
"e.g.@: @samp{fr_FR.utf8} is common used on Linux but not accepted on either "
"Solaris or OS X.  @samp{fr_FR.UTF-8} is more portable, being accepted on "
"recent Linux, AIX, FreBSD, OS X and Solaris (at least).  However, some Linux "
"distributions micro-package, so locales defined by @pkg{glibc} (including "
"these examples) may not be installed."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4220
msgid ""
"Do be careful in what your tests (and examples) actually test.  Bad practice "
"seen in distributed packages include:"
msgstr ""

#
#. type: itemize
#: R-exts.texi:4228
msgid ""
"It is not reasonable to test the time taken by a command: you cannot know "
"how fast or how heavily loaded an @R{} platform might be.  At best you can "
"test a ratio of times, and even that is fraught with difficulties."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4232
msgid ""
"Do not test the exact format of @R{} error messages: They change, and they "
"can be translated."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4235
msgid ""
"Worse, packages have tested the exact format of system error messages, which "
"are platform-dependent and perhaps locale-dependent."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4239
msgid ""
"If you use functions such as @code{View}, remember that in testing there is "
"no one to look at the output.  It is better to use something like one of"
msgstr ""

#
#. type: example
#: R-exts.texi:4242
#, no-wrap
msgid ""
"if(interactive()) View(obj) else print(head(obj))\n"
"if(interactive()) View(obj) else str(obj)\n"
msgstr ""

#
#. type: itemize
#: R-exts.texi:4262
msgid ""
"Only test the accuracy of results if you have done a formal error analysis.  "
"Things such as checking that probabilities numerically sum to one are silly: "
"numerical tests should always have a tolerance.  That the tests on your "
"platform achieve a particular tolerance says little about other platforms.  "
"@R{} is configured by default to make use of long doubles where available, "
"but they may not be available or be too slow for routine use.  Most @R{} "
"platforms use @cputype{ix86} or @cputype{x86_64} CPUs: these use extended "
"precision registers on some but not all of their FPU instructions.  Thus the "
"achieved precision can depend on the compiler version and optimization "
"flags---our experience is that 32-bit builds tend to be less precise than 64-"
"bit ones.  But not all platforms use those CPUs, and not all@footnote{Not "
"doing so is the default on Windows, overridden for the @R{} executables.  It "
"is also the default on some Solaris compilers.} which use them configure "
"them to allow the use of extended precision.  In particular, ARM CPUs do not "
"(currently) have extended precision nor long doubles, and long double was 64-"
"bit on HP/PA Linux."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4270
msgid ""
"If you must try to establish a tolerance empirically, configure and build "
"@R{} with @option{--disable-long-double} and use appropriate compiler flags "
"(such as @option{-ffloat-store} and @option{-fexcess-precision=standard} for "
"@command{gcc}, depending on the CPU type@footnote{These are not needed for "
"the default compiler settings on @cputype{x86_64} but are likely to be "
"needed on @cputype{ix86}.}) to mitigate the effects of extended-precision "
"calculations."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4273
msgid ""
"Tests which involve random inputs or non-deterministic algorithms should "
"normally set a seed or be tested for many seeds."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4283
msgid ""
"There are a several tools available to reduce the size of PDF files: often "
"the size can be reduced substantially with no or minimal loss in quality. "
"Not only do large files take up space: they can stress the PDF viewer and "
"take many minutes to print (if they can be printed at all)."
msgstr ""

#. type: Plain text
#: R-exts.texi:4297
msgid ""
"@command{qpdf} (@uref{http://qpdf.sourceforge.net/}) can compress "
"losslessly.  It is fairly readily available (e.g.@: it has binaries for "
"Windows and packages in Debian/Ubuntu/Fedora, and is installed as part of "
"the @acronym{CRAN} OS X distribution of @R{}).  @command{R CMD build} has an "
"option to run @command{qpdf} over PDF files under @file{inst/doc} and "
"replace them if at least 10Kb and 10% is saved.  The full path to the "
"@command{qpdf} command can be supplied as environment variable @env{R_QPDF} "
"(and is on the @acronym{CRAN} binary of @R{} for OS X).  It seems MiKTeX "
"does not use PDF object compression and so @command{qpdf} can reduce "
"considerably the files it outputs: MiKTeX can be overridden by code in the "
"preamble of an Sweave or @LaTeX{} file --- see how this is done for the @R{} "
"reference manual at @uref{https://svn.r-project.org/@/R/@/trunk/@/doc/@/"
"manual/@/refman.top}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4306
msgid ""
"Other tools can reduce the size of PDFs containing bitmap images at "
"excessively high resolution.  These are often best re-generated (for example "
"@code{Sweave} defaults to 300 ppi, and 100--150 is more appropriate for a "
"package manual).  These tools include Adobe Acrobat (not Reader), Apple's "
"Preview@footnote{Select `Save as', and select `Reduce file size' from the "
"`Quartz filter' menu': this can be accessed in other ways, for example by "
"Automator.} and Ghostscript (which converts PDF to PDF by"
msgstr ""

#
#. type: example
#: R-exts.texi:4309
#, no-wrap
msgid "ps2pdf @var{options} -dAutoRotatePages=/None @var{in}.pdf @var{out}.pdf\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4313
msgid "and suitable options might be"
msgstr ""

#
#. type: example
#: R-exts.texi:4317
#, no-wrap
msgid ""
"-dPDFSETTINGS=/ebook\n"
"-dPDFSETTINGS=/screen\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:4324
msgid ""
"; see @uref{https://www.ghostscript.com/@/doc/@/current/@/Ps2pdf.htm} for "
"more such and consider all the options for image downsampling).  There have "
"been examples in @acronym{CRAN} packages for which Ghostscript 9.06 and "
"later produced much better reductions than 9.05 or earlier."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4328
msgid ""
"We come across occasionally large PDF files containing excessively "
"complicated figures using PDF vector graphics: such figures are often best "
"redesigned or failing that, output as PNG files."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4333
msgid ""
"Option @option{--compact-vignettes} to @command{R CMD build} defaults to "
"value @samp{qpdf}: use @samp{both} to try harder to reduce the size, "
"provided you have Ghostscript available (see the help for @code{tools::"
"compactPDF})."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4344
msgid ""
"There are several ways to find out where time is being spent in the check "
"process.  Start by setting the environment variable @env{_R_CHECK_TIMINGS_} "
"to @samp{0}.  This will report the total CPU times (not Windows) and elapsed "
"times for installation and running examples, tests and vignettes, under each "
"sub-architecture if appropriate.  For tests and vignettes, it reports the "
"time for each as well as the total."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4347
msgid ""
"Setting @env{_R_CHECK_TIMINGS_} to a positive value sets a threshold (in "
"seconds elapsed time) for reporting timings."
msgstr ""

#. type: Plain text
#: R-exts.texi:4355
msgid ""
"If you need to look in more detail at the timings for examples, use option "
"@option{--timings} to @command{R CMD check} (this is set by @option{--as-"
"cran}).  This adds a summary to the check output for all the examples with "
"CPU or elapsed time of more than 5 seconds.  It produces a file "
"@file{@var{mypkg}.Rcheck/@var{mypkg}-Ex.timings} containing timings for each "
"help file: it is a tab-delimited file which can be read into @R{} for "
"further analysis."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4360
msgid ""
"Timings for the tests and vignette runs are given at the bottom of the "
"corresponding log file: note that log files for successful vignette runs are "
"only retained if environment variable "
"@env{_R_CHECK_ALWAYS_LOG_VIGNETTE_OUTPUT_} is set to a true value."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4369
msgid ""
"Care is needed if your package contains non-@acronym{ASCII} text, and in "
"particular if it is intended to be used in more than one locale.  It is "
"possible to mark the encoding used in the @file{DESCRIPTION} file and in "
"@file{.Rd} files, as discussed elsewhere in this manual."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4384
msgid ""
"First, consider carefully if you really need non-@acronym{ASCII} text.  Many "
"users of @R{} will only be able to view correctly text in their native "
"language group (e.g.@: Western European, Eastern European, Simplified "
"Chinese) and @acronym{ASCII}.@footnote{except perhaps some special "
"characters such as backslash and hash which may be taken over for currency "
"symbols.}.  Other characters may not be rendered at all, rendered "
"incorrectly, or cause your @R{} code to give an error.  For @file{.Rd} "
"documentation, marking the encoding and including @acronym{ASCII} "
"transliterations is likely to do a reasonable job.  The set of characters "
"which is commonly supported is wider than it used to be around 2000, but non-"
"Latin alphabets (Greek, Russian, Georgian, @dots{}) are still often "
"problematic and those with double-width characters (Chinese, Japanese, "
"Korean) often need specialist fonts to render correctly."
msgstr ""

#. type: Plain text
#: R-exts.texi:4388
msgid ""
"Several @acronym{CRAN} packages have messages in their @R{} code in French "
"(and a few in German).  A better way to tackle this is to use the "
"internationalization facilities discussed elsewhere in this manual."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4391
msgid ""
"Function @code{showNonASCIIfile} in package @pkg{tools} can help in finding "
"non-@acronym{ASCII} bytes in files."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4401
msgid ""
"There is a portable way to have arbitrary text in character strings (only) "
"in your @R{} code, which is to supply them in Unicode as @code{\\uxxxx} "
"escapes.  If there are any characters not in the current encoding the parser "
"will encode the character string as UTF-8 and mark it as such.  This applies "
"also to character strings in datasets: they can be prepared using "
"@code{\\uxxxx} escapes or encoded in UTF-8 in a UTF-8 locale, or even "
"converted to UTF-8 via @samp{iconv()}.  If you do this, make sure you have "
"@samp{R (>= 2.10)} (or later) in the @samp{Depends} field of the "
"@file{DESCRIPTION} file."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4412
msgid ""
"@R{} sessions running in non-UTF-8 locales will if possible re-encode such "
"strings for display (and this is done by @command{RGui} on Windows, for "
"example).  Suitable fonts will need to be selected or made "
"available@footnote{Typically on a Unix-alike this is done by telling "
"@command{fontconfig} where to find suitable fonts to select glyphs from.} "
"both for the console/terminal and graphics devices such as @samp{X11()} and "
"@samp{windows()}.  Using @samp{postscript} or @samp{pdf} will choose a "
"default 8-bit encoding depending on the language of the UTF-8 locale, and "
"your users would need to be told how to select the @samp{encoding} argument."
msgstr ""

#. type: Plain text
#: R-exts.texi:4418
msgid ""
"If you want to run @command{R CMD check} on a Unix-alike over a package that "
"sets a package encoding in its @file{DESCRIPTION} file @emph{and do not use "
"a UTF-8 locale} you may need to specify a suitable locale @emph{via} "
"environment variable @env{R_ENCODING_LOCALES}.  The default is equivalent to "
"the value"
msgstr ""

#
#. type: example
#: R-exts.texi:4421
#, no-wrap
msgid "\"latin1=en_US:latin2=pl_PL:UTF-8=en_US.UTF-8:latin9=fr_FR.iso885915@@euro\"\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:4428
msgid ""
"(which is appropriate for a system based on @code{glibc}: OS X requires "
"@code{latin9=fr_FR.ISO8859-15}) except that if the current locale is UTF-8 "
"then the package code is translated to UTF-8 for syntax checking, so it is "
"strongly recommended to check in a UTF-8 locale."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4439
msgid ""
"Writing portable C and C++ code is mainly a matter of observing the "
"standards (C99, C++98 or where declared C++11) and testing that extensions "
"(such as POSIX functions) are supported.  However, some common errors are "
"worth pointing out here.  It can be helpful to look up functions at "
"@uref{http://www.cplusplus.com/reference/} or @uref{http://en.cppreference."
"com/w/} and compare what is defined in the various standards."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4450
msgid ""
"Mathematical functions such as @code{sqrt} are defined in C++ for floating-"
"point arguments.  It is legitimate in C++ to overload these with versions "
"for types @code{float}, @code{double}, @code{long double} and possibly "
"more.  This means that calling @code{sqrt} on an integer type may have "
"`overloading ambiguity' as it could be promoted to any of the supported "
"floating-point types: this is commonly seen on Solaris, but for @code{pow} "
"also seen on OS X.  (C++11 requires additional overloads for integer types.)"
msgstr ""

#
#. type: itemize
#: R-exts.texi:4455
msgid ""
"A not-uncommonly-seen problem is to mistakenly call @code{floor(x/y)} or "
"@code{ceil(x/y)} for @code{int} arguments @code{x} and @code{y}.  Since "
"@code{x/y} does integer division, the result is an @code{int} and "
"`overloading ambiguity' may be reported."
msgstr ""

#. type: itemize
#: R-exts.texi:4465
msgid ""
"Function @code{fabs} is defined only for floating-point types, except in C+"
"+11 which has overloads for @code{std::fabs} in @file{<cmath>} for integer "
"types.  Function @code{abs} is defined in C99's @file{<stdlib.h>} for "
"@code{int} and in C++98's @file{<cstdlib>} for integer types, overloaded in "
"@file{<cmath>} for floating-point types.  C++11 has additional overloads for "
"@code{std::abs} in @file{<cmath>} for integer types.  The effect of calling "
"@code{abs} for a floating-point type is implementation-specific: it may "
"truncate to an integer."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4473
msgid ""
"Functions/macros such as @code{isnan}, @code{isinf} and @code{isfinite} are "
"not required by C++98: where compilers support them they may be only in the "
"@code{std} namespace or only in the main namespace.  There is no way to make "
"use of these functions which works with all C++ compilers currently in use "
"on @R{} platforms: use @R{}'s versions such as @code{ISNAN} and "
"@code{R_FINITE} instead."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4476
msgid ""
"It is an error (and make little sense, although has been seen) to call these "
"functions for integer arguments."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4484
msgid ""
"The GNU compilers have a large number of non-portable extensions.  For "
"example, @code{INFINITY} (which is in C99 but not C++98), for which @R{} "
"provides the portable @code{R_PosInf} (and @code{R_NegInf} for @code{-"
"INFINITY}).  And @code{NAN} is just one NaN value: in @R{} code "
"@code{NA_REAL} is usually what is intended, but @code{R_NaN} is also "
"available."
msgstr ""

#. type: itemize
#: R-exts.texi:4488
msgid ""
"Some (but not all) extensions are listed at @uref{https://gcc.gnu.org/@/"
"onlinedocs/@/gcc/@/C-Extensions.html} and @uref{https://gcc.gnu.org/@/"
"onlinedocs/@/gcc/@/C_002b_002b-Extensions.html}."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4497
msgid ""
"Including C headers in C++ code is not portable.  Including the C header "
"@file{math.h} in C++ code often causes conflicts with @file{cmath} which may "
"be included by other headers.  This is particularly problematic with C++11 "
"compilers, as functions like @code{sqrt} and @code{isnan} are defined for "
"@code{double} arguments in @file{math.h} and for a range of types including "
"@code{double} in @file{cmath}."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4501
msgid ""
"Variable-length arrays are C99, not supported by C++98 nor by the C++ "
"compilers in use with @R{} on some platforms."
msgstr ""

#. type: itemize
#: R-exts.texi:4511
msgid ""
"Be careful to include the headers which define the functions you use.  Some "
"compilers/OSes include other system headers in their headers which are not "
"required by the standards, and so code may compile on such systems and not "
"on others.  (A prominent example is the C++11 header @code{<random>} which "
"is indirectly included by @code{<algorithm>} by @command{g++}.  Another "
"frequent issue is the C header @code{<time.h>} which is included by other "
"headers on Linux and Windows but not OS X nor Solaris.)"
msgstr ""

#
#. type: itemize
#: R-exts.texi:4517
msgid ""
"For C++ code, be careful to specify namespaces where needed.  Many functions "
"are defined by the standards to be in the @code{std} namespace, but "
"@command{g++} puts many such also in the C++ main namespace.  One way to do "
"so is to use declarations such as"
msgstr ""

#
#. type: example
#: R-exts.texi:4519
#, no-wrap
msgid "using std::floor;\n"
msgstr ""

#. type: itemize
#: R-exts.texi:4533
msgid ""
"Macros defined by the compiler/OS can cause problems.  Identifiers starting "
"with an underscore followed by an upper-case letter or another underscore "
"are reserved for system macros and should not be used in portable code "
"(including not as guards in C/C++ headers).  Other macros, typically upper-"
"case, may be defined by the compiler or system headers and can cause "
"problems.  The most common issue involves the names of the Intel CPU "
"registers such as @code{CS}, @code{DS} and @code{SS} defined on i586/x64 "
"Solaris in @file{<sys/regset.h>} and often included indirectly by "
"@file{<stdlib.h>} and other core headers."
msgstr ""

#. type: Plain text
#: R-exts.texi:4538
msgid ""
"Some additional information for C++ is available at @uref{http://journal.r-"
"project.org/@/archive/@/2011-2/@/RJournal_2011-2_Plummer.pdf} by Martyn "
"Plummer."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4546
msgid ""
"If you want to distribute a binary version of a package on Windows or OS X, "
"there are further checks you need to do to check it is portable: it is all "
"too easy to depend on external software on your own machine that other users "
"will not have."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4560
msgid ""
"For Windows, check what other DLLs your package's DLL depends on (`imports' "
"from in the DLL tools' parlance).  A convenient GUI-based tool to do so is "
"`Dependency Walker' (@uref{http://www.dependencywalker.com/}) for both 32-"
"bit and 64-bit DLLs -- note that this will report as missing links to @R{}'s "
"own DLLs such as @file{R.dll} and @file{Rblas.dll}.  For 32-bit DLLs only, "
"the command-line tool @command{pedump.exe -i} (in @file{Rtools*.exe}) can be "
"used, and for the brave, the @command{objdump} tool in the appropriate "
"toolchain will also reveal what DLLs are imported from.  If you use a "
"toolchain other than one provided by the @R{} developers or use your own "
"makefiles, watch out in particular for dependencies on the toolchain's "
"runtime DLLs such as @file{libgfortran}, @file{libstdc++} and "
"@file{libgcc_s}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4566
msgid ""
"For OS X, using @code{R CMD otool -L} on the package's shared object(s)  in "
"the @file{libs} directory will show what they depend on: watch for any "
"dependencies in @file{/usr/local/lib}, notably @file{libgfortran.2.dylib}, "
"@file{libgfortran.3.dylib} or @file{libquadmath.0.dylib}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4571
msgid ""
"Many people (including the @acronym{CRAN} package repository) will not "
"accept source packages containing binary files as the latter are a security "
"risk.  If you want to distribute a source package which needs external "
"software on Windows or OS X, options include"
msgstr ""

#
#. type: itemize
#: R-exts.texi:4575
msgid ""
"To arrange for installation of the package to download the additional "
"software from a URL, as e.g.@: package @CRANpkg{Cairo} does."
msgstr ""

#. type: itemize
#: R-exts.texi:4583
msgid ""
"(For @acronym{CRAN}.)  To negotiate with Uwe Ligges to host the additional "
"components on WinBuilder, and write a @file{configure.win} file to install "
"them.  There used to be many examples, e.g.@: package @CRANpkg{rgdal} "
"(however nowadays @acronym{CRAN} prefers to use a uniform cross-compilation "
"approach for software such as GDAL)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4590
msgid ""
"Be aware that license requirements will need to be met so you may need to "
"supply the sources for the additional components (and will if your package "
"has a GPL-like license)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4600
msgid ""
"Diagnostic messages can be made available for translation, so it is "
"important to write them in a consistent style.  Using the tools described in "
"the next section to extract all the messages can give a useful overview of "
"your consistency (or lack of it).  Some guidelines follow."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4606
msgid ""
"Messages are sentence fragments, and not viewed in isolation.  So it is "
"conventional not to capitalize the first word and not to end with a period "
"(or other punctuation)."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4610
msgid ""
"Try not to split up messages into small pieces.  In C error messages use a "
"single format string containing all English words in the messages."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4614
msgid ""
"In @R{} error messages do not construct a message with @code{paste} (such "
"messages will not be translated) but @emph{via} multiple arguments to "
"@code{stop} or @code{warning}, or @emph{via} @code{gettextf}."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4617
msgid "Do not use colloquialisms such as ``can't'' and ``don't''."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4620
msgid "Conventionally single quotation marks are used for quotations such as"
msgstr ""

#
#. type: example
#: R-exts.texi:4623
#, no-wrap
msgid "'ord' must be a positive integer, at most the number of knots\n"
msgstr ""

#
#. type: itemize
#: R-exts.texi:4628
msgid ""
"and double quotation marks when referring to an @R{} character string or a "
"class, such as"
msgstr ""

#
#. type: example
#: R-exts.texi:4631
#, no-wrap
msgid "'format' must be \"normal\" or \"short\" - using \"normal\"\n"
msgstr ""

#
#. type: itemize
#: R-exts.texi:4641
msgid ""
"Since @acronym{ASCII} does not contain directional quotation marks, it is "
"best to use @samp{'} and let the translator (including automatic "
"translation) use directional quotations where available.  The range of "
"quotation styles is immense: unfortunately we cannot reproduce them in a "
"portable @code{texinfo} document.  But as a taster, some languages use `up' "
"and `down' (comma) quotes rather than left or right quotes, and some use "
"guillemets (and some use what Adobe calls `guillemotleft' to start and "
"others use it to end)."
msgstr ""

#
#. type: itemize
#: R-exts.texi:4643
msgid ""
"In @R{} messages it is also possible to use @code{sQuote} or @code{dQuote} "
"as in"
msgstr ""

#
#. type: example
#: R-exts.texi:4648
#, no-wrap
msgid ""
"\tstop(gettextf(\"object must be of class %s or %s\",\n"
"\t\t      dQuote(\"manova\"), dQuote(\"maov\")),\n"
"\t     domain = NA)\n"
msgstr ""

#
#. type: itemize
#: R-exts.texi:4655
msgid ""
"Occasionally messages need to be singular or plural (and in other languages "
"there may be no such concept or several plural forms -- Slovenian has "
"four).  So avoid constructions such as was once used in @code{library}"
msgstr ""

#
#. type: example
#: R-exts.texi:4666
#, no-wrap
msgid ""
"if((length(nopkgs) > 0) && !missing(lib.loc)) @{\n"
"    if(length(nopkgs) > 1)\n"
"\twarning(\"libraries \",\n"
"\t\tpaste(sQuote(nopkgs), collapse = \", \"),\n"
"\t\t\" contain no packages\")\n"
"    else\n"
"\twarning(\"library \", paste(sQuote(nopkgs)),\n"
"\t\t\" contains no package\")\n"
"@}\n"
msgstr ""

#
#. type: itemize
#: R-exts.texi:4670
msgid "and was replaced by"
msgstr ""

#
#. type: example
#: R-exts.texi:4681
#, no-wrap
msgid ""
"if((length(nopkgs) > 0) && !missing(lib.loc)) @{\n"
"    pkglist <- paste(sQuote(nopkgs), collapse = \", \")\n"
"    msg <- sprintf(ngettext(length(nopkgs),\n"
"\t\t\t    \"library %s contains no packages\",\n"
"\t\t\t    \"libraries %s contain no packages\",\n"
"\t\t\t    domain = \"R-base\"),\n"
"\t\t   pkglist)\n"
"    warning(msg, domain=NA)\n"
"@}\n"
msgstr ""

#
#. type: itemize
#: R-exts.texi:4688
msgid ""
"Note that it is much better to have complete clauses as here, since in "
"another language one might need to say `There is no package in library %s' "
"or `There are no packages in libraries %s'."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4698
msgid ""
"There are mechanisms to translate the @R{}- and C-level error and warning "
"messages.  There are only available if @R{} is compiled with NLS support "
"(which is requested by @command{configure} option @option{--enable-nls}, the "
"default)."
msgstr ""

#. type: Plain text
#: R-exts.texi:4703
msgid ""
"The procedures make use of @code{msgfmt} and @code{xgettext} which are part "
"of @acronym{GNU} @code{gettext} and this will need to be installed: Windows "
"users can find pre-compiled binaries at @uref{https://www.stats.ox.ac.uk/@/"
"pub/@/Rtools/@/goodies/@/gettext-tools.zip}."
msgstr ""

#
#. type: node
#: R-exts.texi:4708
#: R-exts.texi:4710
#: R-exts.texi:4711
#: R-exts.texi:4768
#, no-wrap
msgid "C-level messages"
msgstr ""

#
#. type: node
#: R-exts.texi:4708
#: R-exts.texi:4710
#: R-exts.texi:4768
#: R-exts.texi:4769
#: R-exts.texi:4795
#, no-wrap
msgid "R messages"
msgstr ""

#
#. type: subsection
#: R-exts.texi:4708
#: R-exts.texi:4768
#: R-exts.texi:4795
#: R-exts.texi:4796
#, no-wrap
msgid "Preparing translations"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4714
msgid "The process of enabling translations is"
msgstr ""

#
#. type: itemize
#: R-exts.texi:4719
msgid ""
"In a header file that will be included in all the C (or C++ or Objective C/C+"
"+) files containing messages that should be translated, declare"
msgstr ""

#
#. type: example
#: R-exts.texi:4722
#, no-wrap
msgid ""
"#include <R.h>  /* to include Rconfig.h */\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:4730
#, no-wrap
msgid ""
"#ifdef ENABLE_NLS\n"
"#include <libintl.h>\n"
"#define _(String) dgettext (\"@var{pkg}\", String)\n"
"/* replace @var{pkg} as appropriate */\n"
"#else\n"
"#define _(String) (String)\n"
"#endif\n"
msgstr ""

#
#. type: itemize
#: R-exts.texi:4735
msgid ""
"For each message that should be translated, wrap it in @code{_(...)}, for "
"example"
msgstr ""

#
#. type: example
#: R-exts.texi:4738
#, no-wrap
msgid "error(_(\"'ord' must be a positive integer\"));\n"
msgstr ""

#
#. type: itemize
#: R-exts.texi:4742
msgid ""
"If you want to use different messages for singular and plural forms, you "
"need to add"
msgstr ""

#
#. type: example
#: R-exts.texi:4747
#, no-wrap
msgid ""
"#ifndef ENABLE_NLS\n"
"#define dngettext(pkg, String, StringP, N) (N > 1 ? StringP : String)\n"
"#endif\n"
msgstr ""

#
#. type: itemize
#: R-exts.texi:4751
msgid "and mark strings by"
msgstr ""

#
#. type: example
#: R-exts.texi:4754
#, no-wrap
msgid "dngettext((\"@var{pkg}\", @var{<singular string>}, @var{<plural string>}, n)\n"
msgstr ""

#
#. type: itemize
#: R-exts.texi:4758
msgid "In the package's @file{src} directory run"
msgstr ""

#
#. type: example
#: R-exts.texi:4761
#, no-wrap
msgid "xgettext --keyword=_ -o @var{pkg}.pot *.c\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4767
msgid ""
"The file @file{src/@var{pkg}.pot} is the template file, and conventionally "
"this is shipped as @file{po/@var{pkg}.pot}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4779
msgid ""
"Mechanisms are also available to support the automatic translation of @R{} "
"@code{stop}, @code{warning} and @code{message} messages.  They make use of "
"message catalogs in the same way as C-level messages, but using domain "
"@code{R-@var{pkg}} rather than @code{@var{pkg}}.  Translation of character "
"strings inside @code{stop}, @code{warning} and @code{message} calls is "
"automatically enabled, as well as other messages enclosed in calls to "
"@code{gettext} or @code{gettextf}.  (To suppress this, use argument "
"@code{domain=NA}.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4787
msgid ""
"Tools to prepare the @file{R-@var{pkg}.pot} file are provided in package "
"@pkg{tools}: @code{xgettext2pot} will prepare a file from all strings "
"occurring inside @code{gettext}/@code{gettextf}, @code{stop}, @code{warning} "
"and @code{message} calls.  Some of these are likely to be spurious and so "
"the file is likely to need manual editing.  @code{xgettext} extracts the "
"actual calls and so is more useful when tidying up error messages."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4793
msgid ""
"The @R{} function @code{ngettext} provides an interface to the C function of "
"the same name: see example in the previous section.  It is safest to use "
"@code{domain=\"R-@var{pkg}\"} explicitly in calls to @code{ngettext}, and "
"necessary for earlier versions of @R{} unless they are calls directly from a "
"function in the package."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4803
msgid ""
"Once the template files have been created, translations can be made.  "
"Conventional translations have file extension @file{.po} and are placed in "
"the @file{po} subdirectory of the package with a name that is either "
"@samp{@var{ll}.po} or @samp{R-@var{ll}.po} for translations of the C and "
"@R{} messages respectively to language with code @samp{@var{ll}}."
msgstr ""

#
#. type: ifset
#: R-exts.texi:4807
msgid ""
"@xref{Localization of messages, , Localization of messages, R-admin, R "
"Installation and Administration}, for details of language codes."
msgstr ""

#
#. type: ifclear
#: R-exts.texi:4811
msgid ""
"See `Localization of messages' in `R Installation and Administration', for "
"details of language codes."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4816
msgid ""
"There is an @R{} function, @code{update_pkg_po} in package @pkg{tools}, to "
"automate much of the maintenance of message translations.  See its help for "
"what it does in detail."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4823
msgid ""
"If this is called on a package with no existing translations, it creates the "
"directory @file{@var{pkgdir}/po}, creates a template file of @R{} messages, "
"@file{@var{pkgdir}/po/R-@var{pkg}.pot}, within it, creates the "
"@samp{en@@quot} translation and installs that.  (The @samp{en@@quot} pseudo-"
"language interprets quotes in their directional forms in suitable (e.g.@: "
"UTF-8) locales.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4826
msgid ""
"If the package has C source files in its @file{src} directory that are "
"marked for translation, use"
msgstr ""

#
#. type: example
#: R-exts.texi:4829
#, no-wrap
msgid "touch @var{pkgdir}/po/@var{pkg}.pot\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4834
msgid ""
"to create a dummy template file, then call @code{update_pkg_po} again (this "
"can also be done before it is called for the first time)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4838
msgid ""
"When translations to new languages are added in the @file{@var{pkgdir}/po} "
"directory, running the same command will check and then install the "
"translations."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4845
msgid ""
"If the package sources are updated, the same command will update the "
"template files, merge the changes into the translation @file{.po} files and "
"then installed the updated translations.  You will often see that merging "
"marks translations as `fuzzy' and this is reported in the coverage "
"statistics.  As fuzzy translations are @emph{not} used, this is an "
"indication that the translation files need human attention."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4849
msgid ""
"The merged translations are run through @code{tools::checkPofile} to check "
"that C-style formats are used correctly: if not the mismatches are reported "
"and the broken translations are not installed."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4852
msgid ""
"This function needs the GNU @command{gettext-tools} installed and on the "
"path: see its help page."
msgstr ""

#. type: Plain text
#: R-exts.texi:4862
msgid ""
"An installed file named @file{CITATION} will be used by the "
"@code{citation()} function.  (It should be in the @file{inst} subdirectory "
"of the package sources.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4871
msgid ""
"The @file{CITATION} file is parsed as @R{} code (in the package's declared "
"encoding, or in @acronym{ASCII} if none is declared).  If no such file is "
"present, @code{citation} auto-generates citation information from the "
"package @file{DESCRIPTION} metadata, and an example of what that would look "
"like as a @file{CITATION} file can be seen in recommended package "
"@CRANpkg{nlme} (see below): recommended packages @CRANpkg{boot}, "
"@CRANpkg{cluster} and @CRANpkg{mgcv} have further examples."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4873
msgid "A @file{CITATION} file will contain calls to function @code{bibentry}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4875
msgid "Here is that for @CRANpkg{nlme}:"
msgstr ""

#
#. type: example
#: R-exts.texi:4879
#, no-wrap
msgid ""
"year <- sub(\"-.*\", \"\", meta$Date)\n"
"note <- sprintf(\"R package version %s\", meta$Version)\n"
"\n"
msgstr ""

#. type: example
#: R-exts.texi:4890
#, no-wrap
msgid ""
"bibentry(bibtype = \"Manual\",\n"
"         title = \"@{nlme@}: Linear and Nonlinear Mixed Effects Models\",\n"
"         author = c(person(\"Jose\", \"Pinheiro\"),\n"
"                    person(\"Douglas\", \"Bates\"),\n"
"                    person(\"Saikat\", \"DebRoy\"),\n"
"                    person(\"Deepayan\", \"Sarkar\"),\n"
"                    person(\"R Core Team\")),\n"
"         year = year,\n"
"         note = note,\n"
"         url = \"https://CRAN.R-project.org/package=nlme\")\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:4900
msgid ""
"Note the way that information that may need to be updated is picked up from "
"object @code{meta}, a parsed version of the @file{DESCRIPTION} "
"file@footnote{this object is available since @R{} 2.8.0, so the "
"@samp{Depends} field in the @file{DESCRIPTION} file should contain something "
"at least as restrictive as @samp{R (>= 2.8}.} -- it is tempting to hardcode "
"such information, but it normally then gets outdated.  See @code{?bibentry} "
"for further details of the information which can be provided."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4906
msgid ""
"In case a bibentry contains @LaTeX{} markup (e.g., for accented characters "
"or mathematical symbols), it may be necessary to provide a text "
"representation to be used for printing via the @code{textVersion} argument "
"to @code{bibentry}.  E.g., earlier versions of @CRANpkg{nlme} additionally "
"used"
msgstr ""

#
#. type: example
#: R-exts.texi:4914
#, no-wrap
msgid ""
"         textVersion =\n"
"         paste0(\"Jose Pinheiro, Douglas Bates, Saikat DebRoy,\",\n"
"                \"Deepayan Sarkar and the R Core Team (\",\n"
"                year,\n"
"                \"). nlme: Linear and Nonlinear Mixed Effects Models. \",\n"
"                note, \".\")\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4918
msgid ""
"The @file{CITATION} file should itself produce no output when @code{source}-"
"d."
msgstr ""

#. type: Plain text
#: R-exts.texi:4923
msgid ""
"It is desirable (and essential for @acronym{CRAN}) that the @file{CITATION} "
"file does not contain calls to functions such as @code{packageDescription} "
"which assume the package is installed in a library tree on the package "
"search path."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4931
msgid ""
"The @file{DESCRIPTION} file has an optional field @code{Type} which if "
"missing is assumed to be @samp{Package}, the sort of extension discussed so "
"far in this chapter.  Currently one other type is recognized; there used "
"also to be a @samp{Translation} type."
msgstr ""

#
#. type: subsection
#: R-exts.texi:4934
#: R-exts.texi:4936
#: R-exts.texi:4937
#, no-wrap
msgid "Frontend"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4946
msgid ""
"This is a rather general mechanism, designed for adding new front-ends such "
"as the former @pkg{gnomeGUI} package (see the @file{Archive} area on "
"@acronym{CRAN}).  If a @file{configure} file is found in the top-level "
"directory of the package it is executed, and then if a @file{Makefile} is "
"found (often generated by @file{configure}), @code{make} is called.  If "
"@code{R CMD INSTALL --clean} is used @code{make clean} is called.  No other "
"action is taken."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4949
msgid ""
"@code{R CMD build} can package up this type of extension, but @code{R CMD "
"check} will check the type and skip it."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4952
msgid ""
"Many packages of this type need write permission for the @R{} installation "
"directory."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4959
msgid ""
"Several members of the @R{} project have set up services to assist those "
"writing @R{} packages, particularly those intended for public distribution."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:4963
msgid ""
"@uref{http://win-builder.r-project.org, win-builder.r-project.org} offers "
"the automated preparation of (32/64-bit) Windows binaries from well-tested "
"source packages."
msgstr ""

#. type: Plain text
#: R-exts.texi:4974
msgid ""
"R-Forge (@uref{https://R-Forge.r-project.org, R-Forge.r-project.org}) and "
"RForge (@uref{https://www.rforge.net, www.rforge.net}) are similar services "
"with similar names.  Both provide source-code management through SVN, daily "
"building and checking, mailing lists and a repository that can be accessed "
"@emph{via} @code{install.packages} (they can be selected by "
"@code{setRepositories} and the GUI menus that use it).  Package developers "
"have the opportunity to present their work on the basis of project websites "
"or news announcements.  Mailing lists, forums or wikis provide useRs with "
"convenient instruments for discussions and for exchanging information "
"between developers and/or interested useRs."
msgstr ""

#
#. type: cindex
#: R-exts.texi:4978
#, no-wrap
msgid "Documentation, writing"
msgstr ""

#
#. type: node
#: R-exts.texi:4997
#: R-exts.texi:4999
#: R-exts.texi:5000
#: R-exts.texi:5126
#: R-exts.texi:5472
#: R-exts.texi:5545
#: R-exts.texi:5599
#: R-exts.texi:5626
#, no-wrap
msgid "Rd format"
msgstr ""

#
#. type: node
#: R-exts.texi:4997
#: R-exts.texi:4999
#: R-exts.texi:5626
#: R-exts.texi:5627
#: R-exts.texi:5667
#, no-wrap
msgid "Sectioning"
msgstr ""

#
#. type: node
#: R-exts.texi:4997
#: R-exts.texi:5626
#: R-exts.texi:5667
#: R-exts.texi:5668
#: R-exts.texi:5815
#, no-wrap
msgid "Marking text"
msgstr ""

#
#. type: node
#: R-exts.texi:4997
#: R-exts.texi:5667
#: R-exts.texi:5815
#: R-exts.texi:5816
#: R-exts.texi:5875
#, no-wrap
msgid "Lists and tables"
msgstr ""

#
#. type: node
#: R-exts.texi:4997
#: R-exts.texi:5815
#: R-exts.texi:5875
#: R-exts.texi:5876
#: R-exts.texi:5927
#, no-wrap
msgid "Cross-references"
msgstr ""

#
#. type: node
#: R-exts.texi:4997
#: R-exts.texi:5875
#: R-exts.texi:5927
#: R-exts.texi:5928
#: R-exts.texi:5991
#, no-wrap
msgid "Mathematics"
msgstr ""

#
#. type: node
#: R-exts.texi:4997
#: R-exts.texi:5927
#: R-exts.texi:5991
#: R-exts.texi:5992
#: R-exts.texi:6033
#, no-wrap
msgid "Figures"
msgstr ""

#
#. type: node
#: R-exts.texi:4997
#: R-exts.texi:5991
#: R-exts.texi:6033
#: R-exts.texi:6034
#: R-exts.texi:6079
#, no-wrap
msgid "Insertions"
msgstr ""

#
#. type: node
#: R-exts.texi:4997
#: R-exts.texi:6033
#: R-exts.texi:6079
#: R-exts.texi:6080
#: R-exts.texi:6081
#: R-exts.texi:6115
#, no-wrap
msgid "Indices"
msgstr ""

#
#. type: node
#: R-exts.texi:4997
#: R-exts.texi:6079
#: R-exts.texi:6115
#: R-exts.texi:6152
#, no-wrap
msgid "Platform-specific sections"
msgstr ""

#
#. type: node
#: R-exts.texi:4997
#: R-exts.texi:6115
#: R-exts.texi:6152
#: R-exts.texi:6153
#: R-exts.texi:6186
#, no-wrap
msgid "Conditional text"
msgstr ""

#
#. type: node
#: R-exts.texi:4997
#: R-exts.texi:6152
#: R-exts.texi:6186
#: R-exts.texi:6187
#: R-exts.texi:6286
#, no-wrap
msgid "Dynamic pages"
msgstr ""

#
#. type: node
#: R-exts.texi:4997
#: R-exts.texi:6186
#: R-exts.texi:6286
#: R-exts.texi:6287
#: R-exts.texi:6371
#, no-wrap
msgid "User-defined macros"
msgstr ""

#
#. type: node
#: R-exts.texi:4997
#: R-exts.texi:6286
#: R-exts.texi:6371
#: R-exts.texi:6372
#: R-exts.texi:6437
#, no-wrap
msgid "Encoding"
msgstr ""

#
#. type: node
#: R-exts.texi:4997
#: R-exts.texi:6371
#: R-exts.texi:6437
#: R-exts.texi:6438
#: R-exts.texi:6474
#, no-wrap
msgid "Processing documentation files"
msgstr ""

#
#. type: cindex
#: R-exts.texi:4997
#: R-exts.texi:6437
#: R-exts.texi:6474
#: R-exts.texi:6475
#: R-exts.texi:6476
#, no-wrap
msgid "Editing Rd files"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5009
msgid ""
"@R{} objects are documented in files written in ``@R{} documentation'' (Rd) "
"format, a simple markup language much of which closely resembles (La)@TeX{}, "
"which can be processed into a variety of formats, including @LaTeX{}, "
"@HTML{} and plain text.  The translation is carried out by functions in the "
"@pkg{tools} package called by the script @command{Rdconv} in "
"@file{@var{R_HOME}/bin} and by the installation scripts for packages."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5015
msgid ""
"The @R{} distribution contains more than 1300 such files which can be found "
"in the @file{src/library/@var{pkg}/man} directories of the @R{} source tree, "
"where @var{pkg} stands for one of the standard packages which are included "
"in the @R{} distribution."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5019
msgid ""
"As an example, let us look at a simplified version of @file{src/library/base/"
"man/load.Rd} which documents the @R{} function @code{load}."
msgstr ""

#
#. type: smallexample
#: R-exts.texi:5046
#, no-wrap
msgid ""
"% File src/library/base/man/load.Rd\n"
"\\name@{load@}\n"
"\\alias@{load@}\n"
"\\title@{Reload Saved Datasets@}\n"
"\\description@{\n"
"  Reload the datasets written to a file with the function\n"
"  \\code@{save@}.\n"
"@}\n"
"\\usage@{\n"
"load(file, envir = parent.frame())\n"
"@}\n"
"\\arguments@{\n"
"  \\item@{file@}@{a connection or a character string giving the\n"
"    name of the file to load.@}\n"
"  \\item@{envir@}@{the environment where the data should be\n"
"    loaded.@}\n"
"@}\n"
"\\seealso@{\n"
"  \\code@{\\link@{save@}@}.\n"
"@}\n"
"\\examples@{\n"
"## save all data\n"
"save(list = ls(), file= \"all.RData\")\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:5049
#, no-wrap
msgid ""
"## restore the saved values to the current environment\n"
"load(\"all.RData\")\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:5054
#, no-wrap
msgid ""
"## restore the saved values to the workspace\n"
"load(\"all.RData\", .GlobalEnv)\n"
"@}\n"
"\\keyword@{file@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5065
msgid ""
"An @file{Rd} file consists of three parts.  The header gives basic "
"information about the name of the file, the topics documented, a title, a "
"short textual description and @R{} usage information for the objects "
"documented.  The body gives further information (for example, on the "
"function's arguments and return value, as in the above example).  Finally, "
"there is an optional footer with keyword information.  The header is "
"mandatory."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5072
msgid ""
"Information is given within a series of @emph{sections} with standard names "
"(and user-defined sections are also allowed).  Unless otherwise "
"specified@footnote{e.g.@: @code{\\alias}, @code{\\keyword} and @code{\\note} "
"sections.} these should occur only once in an @file{Rd} file (in any order), "
"and the processing software will retain only the first occurrence of a "
"standard section in the file, with a warning."
msgstr ""

#. type: Plain text
#: R-exts.texi:5076
msgid ""
"See @uref{https://developer.r-project.org/Rds.html, ``Guidelines for Rd "
"files''} for guidelines for writing documentation in @file{Rd} format which "
"should be useful for package writers."
msgstr ""

#
#. type: findex
#: R-exts.texi:5076
#, no-wrap
msgid "prompt"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5084
msgid ""
"The @R{} generic function @code{prompt} is used to construct a bare-bones "
"@file{Rd} file ready for manual editing.  Methods are defined for "
"documenting functions (which fill in the proper function and argument names) "
"and data frames.  There are also functions @code{promptData}, "
"@code{promptPackage}, @code{promptClass}, and @code{promptMethods} for other "
"types of @file{Rd} file."
msgstr ""

#. type: Plain text
#: R-exts.texi:5088
msgid ""
"The general syntax of @file{Rd} files is summarized below.  For a detailed "
"technical discussion of current @file{Rd} syntax, see @uref{https://"
"developer.r-project.org/parseRd.pdf, ``Parsing Rd files''}."
msgstr ""

#. type: Plain text
#: R-exts.texi:5103
msgid ""
"@file{Rd} files consist of four types of text input.  The most common is "
"@LaTeX{}-like, with the backslash used as a prefix on markup (e.g. "
"@code{\\alias}), and braces used to indicate arguments (e.g. "
"@code{@{load@}}).  The least common type of text is `verbatim' text, where "
"no markup other than the comment marker (@code{%}) is processed.  There is "
"also a rare variant of `verbatim' text (used in @code{\\eqn}, @code{\\deqn}, "
"@code{\\figure}, and @code{\\newcommand}) where comment markers need not be "
"escaped.  The final type is @R{}-like, intended for @R{} code, but allowing "
"some embedded macros.  Quoted strings within @R{}-like text are handled "
"specially: regular character escapes such as @code{\\n} may be entered as-"
"is.  Only markup starting with @code{\\l} (e.g.  @code{\\link}) or "
"@code{\\v} (e.g. @code{\\var}) will be recognized within quoted strings.  "
"The rarely used vertical tab @code{\\v} must be entered as @code{\\\\v}."
msgstr ""

#. type: Plain text
#: R-exts.texi:5111
msgid ""
"Each macro defines the input type for its argument.  For example, the file "
"initially uses @LaTeX{}-like syntax, and this is also used in the "
"@code{\\description} section, but the @code{\\usage} section uses @R{}-like "
"syntax, and the @code{\\alias} macro uses `verbatim' syntax.  Comments run "
"from a percent symbol @code{%} to the end of the line in all types of text "
"except the rare `verbatim' variant (as on the first line of the @code{load} "
"example)."
msgstr ""

#. type: Plain text
#: R-exts.texi:5118
msgid ""
"Because backslashes, braces and percent symbols have special meaning, to "
"enter them into text sometimes requires escapes using a backslash.  In "
"general balanced braces do not need to be escaped, but percent symbols "
"always do, except in the `verbatim' variant.  For the complete list of "
"macros and rules for escapes, see @uref{https://developer.r-project.org/"
"parseRd.pdf, ``Parsing Rd files''}."
msgstr ""

#
#. type: node
#: R-exts.texi:5124
#: R-exts.texi:5126
#: R-exts.texi:5127
#: R-exts.texi:5472
#, no-wrap
msgid "Documenting functions"
msgstr ""

#
#. type: node
#: R-exts.texi:5124
#: R-exts.texi:5126
#: R-exts.texi:5472
#: R-exts.texi:5473
#: R-exts.texi:5545
#, no-wrap
msgid "Documenting data sets"
msgstr ""

#
#. type: node
#: R-exts.texi:5124
#: R-exts.texi:5472
#: R-exts.texi:5545
#: R-exts.texi:5546
#: R-exts.texi:5599
#, no-wrap
msgid "Documenting S4 classes and methods"
msgstr ""

#
#. type: subsection
#: R-exts.texi:5124
#: R-exts.texi:5545
#: R-exts.texi:5599
#: R-exts.texi:5600
#, no-wrap
msgid "Documenting packages"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5131
msgid ""
"The basic markup commands used for documenting @R{} objects (in particular, "
"functions) are given in this subsection."
msgstr ""

#
#. type: item
#: R-exts.texi:5133
#, no-wrap
msgid "\\name@{@var{name}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5134
#, no-wrap
msgid "\\name"
msgstr ""

#
#. type: table
#: R-exts.texi:5151
msgid ""
"@var{name} typically@footnote{There can be exceptions: for example @file{Rd} "
"files are not allowed to start with a dot, and have to be uniquely named on "
"a case-insensitive file system.} is the basename of the @file{Rd} file "
"containing the documentation.  It is the ``name'' of the @file{Rd} object "
"represented by the file and has to be unique in a package.  To avoid "
"problems with indexing the package manual, it may not contain @samp{!} "
"@samp{|} nor @samp{@@}, and to avoid possible problems with the @HTML{} help "
"system it should not contain @samp{/} nor a space.  (@LaTeX{} special "
"characters are allowed, but may not be collated correctly in the index.)  "
"There can only be one @code{\\name} entry in a file, and it must not contain "
"any markup.  Entries in the package manual will be in alphabetic@footnote{in "
"the current locale, and with special treatment for @LaTeX{} special "
"characters and with any @samp{@var{pkgname}-package} topic moved to the top "
"of the list.} order of the @code{\\name} entries."
msgstr ""

#
#. type: item
#: R-exts.texi:5152
#, no-wrap
msgid "\\alias@{@var{topic}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5153
#, no-wrap
msgid "\\alias"
msgstr ""

#
#. type: table
#: R-exts.texi:5160
msgid ""
"The @code{\\alias} sections specify all ``topics'' the file documents.  This "
"information is collected into index data bases for lookup by the on-line "
"(plain text and @HTML{}) help systems.  The @var{topic} can contain spaces, "
"but (for historical reasons) leading and trailing spaces will be stripped.  "
"Percent and left brace need to be escaped by a backslash."
msgstr ""

#
#. type: table
#: R-exts.texi:5166
msgid ""
"There may be several @code{\\alias} entries.  Quite often it is convenient "
"to document several @R{} objects in one file.  For example, file "
"@file{Normal.Rd} documents the density, distribution function, quantile "
"function and generation of random variates for the normal distribution, and "
"hence starts with"
msgstr ""

#
#. type: group
#: R-exts.texi:5175
#, no-wrap
msgid ""
"\\name@{Normal@}\n"
"\\alias@{Normal@}\n"
"\\alias@{dnorm@}\n"
"\\alias@{pnorm@}\n"
"\\alias@{qnorm@}\n"
"\\alias@{rnorm@}\n"
msgstr ""

#
#. type: table
#: R-exts.texi:5182
msgid ""
"Also, it is often convenient to have several different ways to refer to an "
"@R{} object, and an @code{\\alias} does not need to be the name of an object."
msgstr ""

#
#. type: table
#: R-exts.texi:5186
msgid ""
"Note that the @code{\\name} is not necessarily a topic documented, and if so "
"desired it needs to have an explicit @code{\\alias} entry (as in this "
"example)."
msgstr ""

#
#. type: item
#: R-exts.texi:5187
#, no-wrap
msgid "\\title@{@var{Title}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5188
#, no-wrap
msgid "\\title"
msgstr ""

#
#. type: table
#: R-exts.texi:5192
msgid ""
"Title information for the @file{Rd} file.  This should be capitalized and "
"not end in a period; try to limit its length to at most 65 characters for "
"widest compatibility."
msgstr ""

#
#. type: table
#: R-exts.texi:5195
msgid ""
"Markup is supported in the text, but use of characters other than English "
"text and punctuation (e.g., @samp{<}) may limit portability."
msgstr ""

#
#. type: table
#: R-exts.texi:5197
msgid "There must be one (and only one) @code{\\title} section in a help file."
msgstr ""

#
#. type: item
#: R-exts.texi:5198
#, no-wrap
msgid "\\description@{@dots{}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5199
#, no-wrap
msgid "\\description"
msgstr ""

#
#. type: table
#: R-exts.texi:5204
msgid ""
"A short description of what the function(s) do(es) (one paragraph, a few "
"lines only).  (If a description is too long and cannot easily be shortened, "
"the file probably tries to document too much at once.)  This is mandatory "
"except for package-overview files."
msgstr ""

#
#. type: item
#: R-exts.texi:5205
#, no-wrap
msgid "\\usage@{@var{fun}(@var{arg1}, @var{arg2}, @dots{})@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5206
#, no-wrap
msgid "\\usage"
msgstr ""

#
#. type: table
#: R-exts.texi:5210
msgid ""
"One or more lines showing the synopsis of the function(s) and variables "
"documented in the file.  These are set in typewriter font.  This is an @R{}-"
"like command."
msgstr ""

#
#. type: table
#: R-exts.texi:5214
msgid ""
"The usage information specified should match the function definition "
"@emph{exactly} (such that automatic checking for consistency between code "
"and documentation is possible)."
msgstr ""

#
#. type: table
#: R-exts.texi:5221
msgid ""
"It is no longer advisable to use @code{\\synopsis} for the actual synopsis "
"and show modified synopses in the @code{\\usage}.  Support for "
"@code{\\synopsis} will be removed in \\R 3.1.0.  To indicate that a function "
"can be used in several different ways, depending on the named arguments "
"specified, use section @code{\\details}.  E.g., @file{abline.Rd} contains"
msgstr ""

#
#. type: group
#: R-exts.texi:5229
#, no-wrap
msgid ""
"\\details@{\n"
"  Typical usages are\n"
"\\preformatted@{abline(a, b, untf = FALSE, \\dots)\n"
"......\n"
"@}\n"
msgstr ""

#
#. type: findex
#: R-exts.texi:5232
#, no-wrap
msgid "\\method"
msgstr ""

#
#. type: table
#: R-exts.texi:5239
msgid ""
"Use @code{\\method@{@var{generic}@}@{@var{class}@}} to indicate the name of "
"an S3 method for the generic function @var{generic} for objects inheriting "
"from class @code{\"@var{class}\"}.  In the printed versions, this will come "
"out as @var{generic} (reflecting the understanding that methods should not "
"be invoked directly but @emph{via} method dispatch), but @code{codoc()} and "
"other QC tools always have access to the full name."
msgstr ""

#
#. type: table
#: R-exts.texi:5241
msgid "For example, @file{print.ts.Rd} contains"
msgstr ""

#
#. type: group
#: R-exts.texi:5247
#, no-wrap
msgid ""
"\\usage@{\n"
"\\method@{print@}@{ts@}(x, calendar, \\dots)\n"
"@}\n"
msgstr ""

#
#. type: table
#: R-exts.texi:5252
#: R-exts.texi:5288
msgid "which will print as"
msgstr ""

#
#. type: group
#: R-exts.texi:5256
#: R-exts.texi:5292
#, no-wrap
msgid ""
"Usage:\n"
"\n"
msgstr ""

#
#. type: group
#: R-exts.texi:5259
#, no-wrap
msgid ""
"     ## S3 method for class 'ts':\n"
"     print(x, calendar, ...)\n"
msgstr ""

#
#. type: table
#: R-exts.texi:5269
msgid ""
"Usage for replacement functions should be given in the style of @code{dim(x) "
"<- value} rather than explicitly indicating the name of the replacement "
"function (@w{@code{\"dim<-\"}} in the above).  Similarly, one can use "
"@code{\\method@{@var{generic}@}@{@var{class}@}(@var{arglist}) <- value} to "
"indicate the usage of an S3 replacement method for the generic replacement "
"function @code{\"@var{generic}<-\"} for objects inheriting from class "
"@code{\"@var{class}\"}."
msgstr ""

#
#. type: table
#: R-exts.texi:5275
msgid ""
"Usage for S3 methods for extracting or replacing parts of an object, S3 "
"methods for members of the Ops group, and S3 methods for user-defined "
"(binary) infix operators (@samp{%@var{xxx}%}) follows the above rules, using "
"the appropriate function names.  E.g., @file{Extract.factor.Rd} contains"
msgstr ""

#
#. type: group
#: R-exts.texi:5283
#, no-wrap
msgid ""
"\\usage@{\n"
"\\method@{[@}@{factor@}(x, \\dots, drop = FALSE)\n"
"\\method@{[[@}@{factor@}(x, \\dots)\n"
"\\method@{[@}@{factor@}(x, \\dots) <- value\n"
"@}\n"
msgstr ""

#
#. type: group
#: R-exts.texi:5299
#, no-wrap
msgid ""
"     ## S3 method for class 'factor':\n"
"     x[..., drop = FALSE]\n"
"     ## S3 method for class 'factor':\n"
"     x[[...]]\n"
"     ## S3 replacement method for class 'factor':\n"
"     x[...] <- value\n"
msgstr ""

#
#. type: findex
#: R-exts.texi:5302
#, no-wrap
msgid "\\S3method"
msgstr ""

#
#. type: table
#: R-exts.texi:5304
msgid "@code{\\S3method} is accepted as an alternative to @code{\\method}."
msgstr ""

#
#. type: item
#: R-exts.texi:5305
#, no-wrap
msgid "\\arguments@{@dots{}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5306
#, no-wrap
msgid "\\arguments"
msgstr ""

#
#. type: table
#: R-exts.texi:5308
msgid "Description of the function's arguments, using an entry of the form"
msgstr ""

#
#. type: example
#: R-exts.texi:5311
#, no-wrap
msgid "\\item@{@var{arg_i}@}@{@var{Description of arg_i}.@}\n"
msgstr ""

#
#. type: table
#: R-exts.texi:5317
msgid ""
"no whitespace between the three parts of the entry.) There may be optional "
"text outside the @code{\\item} entries, for example to give general "
"information about groups of parameters."
msgstr ""

#
#. type: item
#: R-exts.texi:5319
#, no-wrap
msgid "\\details@{@dots{}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5320
#, no-wrap
msgid "\\details"
msgstr ""

#
#. type: table
#: R-exts.texi:5324
msgid ""
"A detailed if possible precise description of the functionality provided, "
"extending the basic information in the @code{\\description} slot."
msgstr ""

#
#. type: item
#: R-exts.texi:5325
#, no-wrap
msgid "\\value@{@dots{}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5326
#, no-wrap
msgid "\\value"
msgstr ""

#
#. type: table
#: R-exts.texi:5328
msgid "Description of the function's return value."
msgstr ""

#
#. type: table
#: R-exts.texi:5331
msgid ""
"If a list with multiple values is returned, you can use entries of the form"
msgstr ""

#
#. type: example
#: R-exts.texi:5334
#, no-wrap
msgid "\\item@{@var{comp_i}@}@{@var{Description of comp_i}.@}\n"
msgstr ""

#
#. type: table
#: R-exts.texi:5343
msgid ""
"for each component of the list returned.  Optional text may "
"precede@footnote{Text between or after list items is discouraged.} this list "
"(see for example the help for @code{rle}).  Note that @code{\\value} is "
"implicitly a @code{\\describe} environment, so that environment should not "
"be used for listing components, just individual @code{\\item@{@}@{@}} "
"entries."
msgstr ""

#
#. type: item
#: R-exts.texi:5344
#, no-wrap
msgid "\\references@{@dots{}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5345
#, no-wrap
msgid "\\references"
msgstr ""

#
#. type: table
#: R-exts.texi:5348
msgid ""
"A section with references to the literature.  Use @code{\\url@{@}} or "
"@code{\\href@{@}@{@}} for web pointers."
msgstr ""

#
#. type: item
#: R-exts.texi:5349
#, no-wrap
msgid "\\note@{...@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5350
#, no-wrap
msgid "\\note"
msgstr ""

#
#. type: table
#: R-exts.texi:5353
msgid ""
"Use this for a special note you want to have pointed out.  Multiple "
"@code{\\note} sections are allowed, but might be confusing to the end users."
msgstr ""

#
#. type: table
#: R-exts.texi:5355
msgid "For example, @file{pie.Rd} contains"
msgstr ""

#
#. type: group
#: R-exts.texi:5364
#, no-wrap
msgid ""
"\\note@{\n"
"  Pie charts are a very bad way of displaying information.\n"
"  The eye is good at judging linear measures and bad at\n"
"  judging relative areas.\n"
"  ......\n"
"@}\n"
msgstr ""

#
#. type: item
#: R-exts.texi:5367
#, no-wrap
msgid "\\author@{@dots{}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5368
#, no-wrap
msgid "\\author"
msgstr ""

#
#. type: table
#: R-exts.texi:5373
msgid ""
"Information about the author(s) of the @file{Rd} file.  Use "
"@code{\\email@{@}} without extra delimiters (such as @samp{( )} or @samp{< "
">}) to specify email addresses, or @code{\\url@{@}} or @code{\\href@{@}@{@}} "
"for web pointers."
msgstr ""

#
#. type: item
#: R-exts.texi:5374
#, no-wrap
msgid "\\seealso@{@dots{}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5375
#, no-wrap
msgid "\\seealso"
msgstr ""

#
#. type: table
#: R-exts.texi:5380
msgid ""
"Pointers to related @R{} objects, using @code{\\code@{\\link@{...@}@}} to "
"refer to them (@code{\\code} is the correct markup for @R{} object names, "
"and @code{\\link} produces hyperlinks in output formats which support this.  "
"@xref{Marking text}, and @ref{Cross-references})."
msgstr ""

#
#. type: findex
#: R-exts.texi:5381
#, no-wrap
msgid "\\examples"
msgstr ""

#
#. type: item
#: R-exts.texi:5382
#, no-wrap
msgid "\\examples@{@dots{}@}"
msgstr ""

#
#. type: table
#: R-exts.texi:5386
msgid ""
"Examples of how to use the function.  Code in this section is set in "
"typewriter font without reformatting and is run by @code{example()} unless "
"marked otherwise (see below)."
msgstr ""

#
#. type: table
#: R-exts.texi:5392
msgid ""
"Examples are not only useful for documentation purposes, but also provide "
"test code used for diagnostic checking of @R{} code.  By default, text "
"inside @code{\\examples@{@}} will be displayed in the output of the help "
"page and run by @code{example()} and by @code{R CMD check}.  You can use "
"@code{\\dontrun@{@}}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5392
#, no-wrap
msgid "\\dontrun"
msgstr ""

#
#. type: table
#: R-exts.texi:5395
msgid ""
"for text that should only be shown, but not run, and @code{\\dontshow@{@}}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5395
#, no-wrap
msgid "\\dontshow"
msgstr ""

#
#. type: table
#: R-exts.texi:5399
msgid ""
"for extra commands for testing that should not be shown to users, but will "
"be run by @code{example()}.  (Previously this was called @code{\\testonly}, "
"and that is still accepted.)"
msgstr ""

#. type: table
#: R-exts.texi:5402
msgid ""
"Text inside @code{\\dontrun@{@}} is `verbatim', but the other parts of the "
"@code{\\examples} section are @R{}-like text."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5404
#: R-exts.texi:9163
msgid "For example,"
msgstr ""

#
#. type: group
#: R-exts.texi:5410
#, no-wrap
msgid ""
"x <- runif(10)       # @r{Shown and run.}\n"
"\\dontrun@{plot(x)@}    # @r{Only shown.}\n"
"\\dontshow@{log(x)@}    # @r{Only run.}\n"
msgstr ""

#. type: table
#: R-exts.texi:5420
msgid ""
"Thus, example code not included in @code{\\dontrun} must be executable! In "
"addition, it should not use any system-specific features or require special "
"facilities (such as Internet access or write permission to specific "
"directories).  Text included in @code{\\dontrun} is indicated by comments in "
"the processed help files: it need not be valid @R{} code but the escapes "
"must still be used for @code{%}, @code{\\} and unpaired braces as in other "
"`verbatim' text."
msgstr ""

#
#. type: table
#: R-exts.texi:5424
msgid ""
"Example code must be capable of being run by @code{example}, which uses "
"@code{source}.  This means that it should not access @file{stdin}, e.g.@: to "
"@code{scan()} data from the example file."
msgstr ""

#
#. type: table
#: R-exts.texi:5429
msgid ""
"Data needed for making the examples executable can be obtained by random "
"number generation (for example, @code{x <- rnorm(100)}), or by using "
"standard data sets listed by @code{data()} (see @code{?data} for more info)."
msgstr ""

#. type: table
#: R-exts.texi:5444
msgid ""
"Finally, there is @code{\\donttest}, used (at the beginning of a separate "
"line) to mark code that should be run by @code{example()} but not by @code{R "
"CMD check} (by default: as from @R{} 3.2.0 the option @option{--run-"
"donttest} can be used).  This should be needed only occasionally but can be "
"used for code which might fail in circumstances that are hard to test for, "
"for example in some locales.  (Use e.g. @code{capabilities()} or "
"@code{nzchar(Sys.which(\"someprogram\"))} to test for features needed in the "
"examples wherever possible, and you can also use @code{try()} or "
"@code{tryCatch()}.  Use @code{interactive()} to condition examples which "
"need someone to interact with.)  Note that code included in "
"@code{\\donttest} must be correct @R{} code, and any packages used should be "
"declared in the @file{DESCRIPTION} file.  It is good practice to include a "
"comment in the @code{\\donttest} section explaining why it is needed."
msgstr ""

#
#. type: findex
#: R-exts.texi:5445
#, no-wrap
msgid "\\keyword"
msgstr ""

#
#. type: item
#: R-exts.texi:5446
#, no-wrap
msgid "\\keyword@{@var{key}@}"
msgstr ""

#
#. type: table
#: R-exts.texi:5454
msgid ""
"There can be zero or more @code{\\keyword} sections per file.  Each "
"@code{\\keyword} section should specify a single keyword, preferably one of "
"the standard keywords as listed in file @file{KEYWORDS} in the @R{} "
"documentation directory (default @file{@var{R_HOME}/doc}).  Use e.g.@: "
"@code{RShowDoc(\"KEYWORDS\")} to inspect the standard keywords from within "
"@R{}.  There can be more than one @code{\\keyword} entry if the @R{} object "
"being documented falls into more than one category, or none."
msgstr ""

#
#. type: table
#: R-exts.texi:5458
msgid ""
"Do strongly consider using @code{\\concept} (@pxref{Indices}) instead of "
"@code{\\keyword} if you are about to use more than very few non-standard "
"keywords."
msgstr ""

#
#. type: table
#: R-exts.texi:5464
msgid ""
"The special keyword @samp{internal} marks a page of internal objects that "
"are not part of the package's API.  If the help page for object @code{foo} "
"has keyword @samp{internal}, then @code{help(foo)} gives this help page, but "
"@code{foo} is excluded from several object indices, including the "
"alphabetical list of objects in the @HTML{} help system."
msgstr ""

#
#. type: table
#: R-exts.texi:5469
msgid ""
"@code{help.search()} can search by keyword, including user-defined values: "
"however the `Search Engine & Keywords' @HTML{} page accessed @emph{via} "
"@code{help.start()} provides single-click access only to a pre-defined list "
"of keywords."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5478
msgid ""
"The structure of @file{Rd} files which document @R{} data sets is slightly "
"different.  Sections such as @code{\\arguments} and @code{\\value} are not "
"needed but the format and source of the data should be explained."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5481
msgid ""
"As an example, let us look at @file{src/library/datasets/man/rivers.Rd} "
"which documents the standard @R{} data set @code{rivers}."
msgstr ""

#
#. type: smallexample
#: R-exts.texi:5502
#, no-wrap
msgid ""
"\\name@{rivers@}\n"
"\\docType@{data@}\n"
"\\alias@{rivers@}\n"
"\\title@{Lengths of Major North American Rivers@}\n"
"\\description@{\n"
"  This data set gives the lengths (in miles) of 141 \\dQuote@{major@}\n"
"  rivers in North America, as compiled by the US Geological\n"
"  Survey.\n"
"@}\n"
"\\usage@{rivers@}\n"
"\\format@{A vector containing 141 observations.@}\n"
"\\source@{World Almanac and Book of Facts, 1975, page 406.@}\n"
"\\references@{\n"
"  McNeil, D. R. (1977) \\emph@{Interactive Data Analysis@}.\n"
"  New York: Wiley.\n"
"@}\n"
"\\keyword@{datasets@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5507
msgid "This uses the following additional markup commands."
msgstr ""

#
#. type: item
#: R-exts.texi:5509
#, no-wrap
msgid "\\docType@{@dots{}@}"
msgstr ""

#
#. type: table
#: R-exts.texi:5515
msgid ""
"Indicates the ``type'' of the documentation object.  Always @samp{data} for "
"data sets, and @samp{package} for @file{@var{pkg}-package.Rd} overview "
"files.  Documentation for S4 methods and classes uses @samp{methods} (from "
"@code{promptMethods()}) and @samp{class} (from @code{promptClass()})."
msgstr ""

#
#. type: item
#: R-exts.texi:5516
#, no-wrap
msgid "\\format@{@dots{}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5517
#, no-wrap
msgid "\\format"
msgstr ""

#
#. type: table
#: R-exts.texi:5522
msgid ""
"A description of the format of the data set (as a vector, matrix, data "
"frame, time series, @dots{}).  For matrices and data frames this should give "
"a description of each column, preferably as a list or table.  @xref{Lists "
"and tables}, for more information."
msgstr ""

#
#. type: item
#: R-exts.texi:5523
#, no-wrap
msgid "\\source@{@dots{}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5524
#, no-wrap
msgid "\\source"
msgstr ""

#. type: table
#: R-exts.texi:5528
msgid ""
"Details of the original source (a reference or @acronym{URL}, "
"@pxref{Specifying URLs}).  In addition, section @code{\\references} could "
"give secondary sources and usages."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5531
msgid "Note also that when documenting data set @var{bar},"
msgstr ""

#
#. type: itemize
#: R-exts.texi:5537
msgid ""
"The @code{\\usage} entry is always @code{@var{bar}} or (for packages which "
"do not use lazy-loading of data) @code{data(@var{bar})}.  (In particular, "
"only document a @emph{single} data object per @file{Rd} file.)"
msgstr ""

#
#. type: itemize
#: R-exts.texi:5539
msgid "The @code{\\keyword} entry should always be @samp{datasets}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5544
msgid ""
"If @code{@var{bar}} is a data frame, documenting it as a data set can be "
"initiated @emph{via} @code{prompt(@var{bar})}.  Otherwise, the "
"@code{promptData} function may be used."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5554
msgid ""
"There are special ways to use the @samp{?} operator, namely @samp{class?"
"@var{topic}} and @samp{methods?@var{topic}}, to access documentation for S4 "
"classes and methods, respectively.  This mechanism depends on conventions "
"for the topic names used in @code{\\alias} entries.  The topic names for S4 "
"classes and methods respectively are of the form"
msgstr ""

#
#. type: example
#: R-exts.texi:5558
#, no-wrap
msgid ""
"@var{class}-class\n"
"@var{generic},@var{signature_list}-method\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5568
msgid ""
"where @var{signature_list} contains the names of the classes in the "
"signature of the method (without quotes) separated by @samp{,} (without "
"whitespace), with @samp{ANY} used for arguments without an explicit "
"specification.  E.g., @samp{genericFunction-class} is the topic name for "
"documentation for the S4 class @code{\"genericFunction\"}, and @samp{coerce,"
"ANY,NULL-method} is the topic name for documentation for the S4 method for "
"@code{coerce} for signature @code{c(\"ANY\", \"NULL\")}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5575
msgid ""
"Skeletons of documentation for S4 classes and methods can be generated by "
"using the functions @code{promptClass()} and @code{promptMethods()} from "
"package @pkg{methods}.  If it is necessary or desired to provide an explicit "
"function declaration (in a @code{\\usage} section) for an S4 method (e.g., "
"if it has ``surprising arguments'' to be mentioned explicitly), one can use "
"the special markup"
msgstr ""

#
#. type: example
#: R-exts.texi:5578
#, no-wrap
msgid "\\S4method@{@var{generic}@}@{@var{signature_list}@}(@var{argument_list})\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5582
msgid "(e.g., @samp{\\S4method@{coerce@}@{ANY,NULL@}(from, to)})."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5590
msgid ""
"To make full use of the potential of the on-line documentation system, all "
"user-visible S4 classes and methods in a package should at least have a "
"suitable @code{\\alias} entry in one of the package's @file{Rd} files.  If a "
"package has methods for a function defined originally somewhere else, and "
"does not change the underlying default method for the function, the package "
"is responsible for documenting the methods it creates, but not for the "
"function itself or the default method."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5593
msgid ""
"An S4 replacement method is documented in the same way as an S3 one: see the "
"description of @code{\\method} in @ref{Documenting functions}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5598
msgid ""
"See @kbd{help(\"Documentation\", package = \"methods\")} for more "
"information on using and creating on-line documentation for S4 classes and "
"methods."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5608
msgid ""
"Packages may have an overview help page with an @code{\\alias} "
"@code{@var{pkgname}-package}, e.g.@: @samp{utils-package} for the "
"@pkg{utils} package, when @code{package?@var{pkgname}} will open that help "
"page.  If a topic named @code{@var{pkgname}} does not exist in another "
"@file{Rd} file, it is helpful to use this as an additional @code{\\alias}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5615
msgid ""
"Skeletons of documentation for a package can be generated using the function "
"@code{promptPackage()}.  If the @code{final = LIBS} argument is used, then "
"the @file{Rd} file will be generated in final form, containing the "
"information that would be produced up to @code{library(help = "
"@var{pkgname})}.  Otherwise (the default) comments will be inserted giving "
"suggestions for content."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5625
msgid ""
"Apart from the mandatory @code{\\name} and @code{\\title} and the "
"@code{@var{pkgname}-package} alias, the only requirement for the package "
"overview page is that it include a @code{\\docType@{package@}} statement.  "
"All other content is optional.  We suggest that it should be a short "
"overview, to give a reader unfamiliar with the package enough information to "
"get started.  More extensive documentation is better placed into a package "
"vignette (@pxref{Writing package vignettes}) and referenced from this page, "
"or into individual man pages for the functions, datasets, or classes."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5632
msgid ""
"To begin a new paragraph or leave a blank line in an example, just insert an "
"empty line (as in (La)@TeX{}).  To break a line, use @code{\\cr}."
msgstr ""

#
#. type: findex
#: R-exts.texi:5632
#, no-wrap
msgid "\\cr"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5637
msgid ""
"In addition to the predefined sections (such as @code{\\description@{@}}, "
"@code{\\value@{@}}, etc.), you can ``define'' arbitrary ones by "
"@code{\\section@{@var{section_title}@}@{@dots{}@}}."
msgstr ""

#
#. type: findex
#: R-exts.texi:5637
#, no-wrap
msgid "\\section"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5639
msgid "For example"
msgstr ""

#
#. type: example
#: R-exts.texi:5644
#, no-wrap
msgid ""
"\\section@{Warning@}@{\n"
"  You must not call this function unless @dots{}\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5653
msgid ""
"For consistency with the pre-assigned sections, the section name (the first "
"argument to @code{\\section}) should be capitalized (but not all upper "
"case).  Whitespace between the first and second braced expressions is not "
"allowed.  Markup (e.g.@: @code{\\code}) within the section title may cause "
"problems with the latex conversion (depending on the version of macro "
"packages such as @samp{hyperref}) and so should be avoided."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5660
msgid ""
"The @code{\\subsection} macro takes arguments in the same format as "
"@code{\\section}, but is used within a section, so it may be used to nest "
"subsections within sections or other subsections.  There is no predefined "
"limit on the nesting level, but formatting is not designed for more than 3 "
"levels (i.e. subsections within subsections within sections)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5665
msgid ""
"Note that additional named sections are always inserted at a fixed position "
"in the output (before @code{\\note}, @code{\\seealso} and the examples), no "
"matter where they appear in the input (but in the same order amongst "
"themselves as in the input)."
msgstr ""

#
#. type: cindex
#: R-exts.texi:5669
#, no-wrap
msgid "Marking text in documentation"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5673
msgid ""
"The following logical markup commands are available for emphasizing or "
"quoting text."
msgstr ""

#
#. type: item
#: R-exts.texi:5675
#, no-wrap
msgid "\\emph@{@var{text}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5676
#, no-wrap
msgid "\\emph"
msgstr ""

#
#. type: itemx
#: R-exts.texi:5677
#, no-wrap
msgid "\\strong@{@var{text}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5678
#, no-wrap
msgid "\\strong"
msgstr ""

#
#. type: table
#: R-exts.texi:5681
msgid ""
"Emphasize @var{text} using @emph{italic} and @strong{bold} font if possible; "
"@code{\\strong} is regarded as stronger (more emphatic)."
msgstr ""

#
#. type: item
#: R-exts.texi:5682
#, no-wrap
msgid "\\bold@{@var{text}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5683
#, no-wrap
msgid "\\bold"
msgstr ""

#. type: table
#: R-exts.texi:5685
msgid "Set @var{text} in @b{bold} font where possible."
msgstr ""

#
#. type: item
#: R-exts.texi:5686
#, no-wrap
msgid "\\sQuote@{@var{text}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5687
#, no-wrap
msgid "\\sQuote"
msgstr ""

#
#. type: itemx
#: R-exts.texi:5688
#, no-wrap
msgid "\\dQuote@{@var{text}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5689
#, no-wrap
msgid "\\dQuote"
msgstr ""

#
#. type: table
#: R-exts.texi:5692
msgid ""
"Portably single or double quote @var{text} (without hard-wiring the "
"characters used for quotation marks)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5696
msgid ""
"Each of the above commands takes @LaTeX{}-like input, so other macros may be "
"used within @var{text}."
msgstr ""

#. type: Plain text
#: R-exts.texi:5701
msgid ""
"The following logical markup commands are available for indicating specific "
"kinds of text.  Except as noted, these take `verbatim' text input, and so "
"other macros may not be used within them.  Some characters will need to be "
"escaped (@pxref{Insertions})."
msgstr ""

#
#. type: item
#: R-exts.texi:5703
#, no-wrap
msgid "\\code@{@var{text}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5704
#, no-wrap
msgid "\\code"
msgstr ""

#. type: table
#: R-exts.texi:5710
msgid ""
"Indicate text that is a literal example of a piece of an @R{} program, e.g., "
"a fragment of @R{} code or the name of an @R{} object.  Text is entered in "
"@R{}-like syntax, and displayed using @code{typewriter} font where "
"possible.  Macros @code{\\var} and @code{\\link} are interpreted within "
"@var{text}."
msgstr ""

#
#. type: item
#: R-exts.texi:5711
#, no-wrap
msgid "\\preformatted@{@var{text}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5712
#, no-wrap
msgid "\\preformatted"
msgstr ""

#. type: table
#: R-exts.texi:5718
msgid ""
"Indicate text that is a literal example of a piece of a program.  Text is "
"displayed using @code{typewriter} font where possible.  Formatting, e.g.@: "
"line breaks, is preserved.  (Note that this includes a line break after the "
"initial @{, so typically text should start on the same line as the command.)"
msgstr ""

#
#. type: table
#: R-exts.texi:5722
msgid ""
"Due to limitations in @LaTeX{} as of this writing, this macro may not be "
"nested within other markup macros other than @code{\\dQuote} and "
"@code{\\sQuote}, as errors or bad formatting may result."
msgstr ""

#
#. type: item
#: R-exts.texi:5723
#, no-wrap
msgid "\\kbd@{@var{keyboard-characters}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5724
#, no-wrap
msgid "\\kbd"
msgstr ""

#. type: table
#: R-exts.texi:5728
msgid ""
"Indicate keyboard input, using @kbd{slanted typewriter} font if possible, so "
"users can distinguish the characters they are supposed to type from computer "
"output.  Text is entered `verbatim'."
msgstr ""

#
#. type: item
#: R-exts.texi:5729
#, no-wrap
msgid "\\samp@{@var{text}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5730
#, no-wrap
msgid "\\samp"
msgstr ""

#. type: table
#: R-exts.texi:5734
msgid ""
"Indicate text that is a literal example of a sequence of characters, entered "
"`verbatim'.  No wrapping or reformatting will occur.  Displayed using "
"@code{typewriter} font where possible."
msgstr ""

#
#. type: item
#: R-exts.texi:5736
#, no-wrap
msgid "\\verb@{@var{text}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5737
#, no-wrap
msgid "\\verb"
msgstr ""

#
#. type: table
#: R-exts.texi:5742
msgid ""
"Indicate text that is a literal example of a sequence of characters, with no "
"interpretation of e.g.@: @code{\\var}, but which will be included within "
"word-wrapped text.  Displayed using @code{typewriter} font if possible."
msgstr ""

#
#. type: item
#: R-exts.texi:5743
#, no-wrap
msgid "\\pkg@{@var{package_name}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5744
#, no-wrap
msgid "\\pkg"
msgstr ""

#
#. type: table
#: R-exts.texi:5746
msgid "Indicate the name of an @R{} package.  @LaTeX{}-like."
msgstr ""

#
#. type: item
#: R-exts.texi:5747
#, no-wrap
msgid "\\file@{@var{file_name}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5748
#, no-wrap
msgid "\\file"
msgstr ""

#. type: table
#: R-exts.texi:5751
msgid ""
"Indicate the name of a file.  Text is @LaTeX{}-like, so backslash needs to "
"be escaped.  Displayed using a distinct font where possible."
msgstr ""

#
#. type: item
#: R-exts.texi:5752
#, no-wrap
msgid "\\email@{@var{email_address}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5753
#, no-wrap
msgid "\\email"
msgstr ""

#. type: table
#: R-exts.texi:5757
msgid ""
"Indicate an electronic mail address.  @LaTeX{}-like, will be rendered as a "
"hyperlink in @HTML{} and PDF conversion.  Displayed using @code{typewriter} "
"font where possible."
msgstr ""

#
#. type: item
#: R-exts.texi:5758
#, no-wrap
msgid "\\url@{@var{uniform_resource_locator}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5759
#, no-wrap
msgid "\\url"
msgstr ""

#. type: table
#: R-exts.texi:5766
msgid ""
"Indicate a uniform resource locator (@acronym{URL}) for the World Wide Web.  "
"The argument is handled as `verbatim' text (with percent and braces escaped "
"by backslash), and rendered as a hyperlink in @HTML{} and PDF conversion.  "
"Linefeeds are removed, and as from @R{} 3.2.0 leading and trailing "
"whitespace@footnote{as defined by the @R{} function @code{trimws}.} is "
"removed. @xref{Specifying URLs}."
msgstr ""

#. type: table
#: R-exts.texi:5768
msgid "Displayed using @code{typewriter} font where possible."
msgstr ""

#
#. type: item
#: R-exts.texi:5769
#, no-wrap
msgid "\\href@{@var{uniform_resource_locator}@}@{@var{text}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5770
#, no-wrap
msgid "\\href"
msgstr ""

#. type: table
#: R-exts.texi:5777
msgid ""
"Indicate a hyperlink to the World Wide Web. The first argument is handled as "
"`verbatim' text (with percent and braces escaped by backslash) and is used "
"as the @acronym{URL} in the hyperlink, with the second argument of @LaTeX{}-"
"like text displayed to the user.  Linefeeds are removed from the first "
"argument, and as from @R{} 3.2.0 leading and trailing whitespace is removed."
msgstr ""

#. type: table
#: R-exts.texi:5782
msgid ""
"Note that RFC3986-encoded URLs (e.g.@: using @samp{\\%28VS.85\\%29} in place "
"of @samp{(VS.85)}) may not work correctly in versions of @R{} before 3.1.3 "
"and are best avoided---use @code{URLdecode()} to decode them."
msgstr ""

#
#. type: item
#: R-exts.texi:5783
#, no-wrap
msgid "\\var@{@var{metasyntactic_variable}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5784
#, no-wrap
msgid "\\var"
msgstr ""

#
#. type: table
#: R-exts.texi:5789
msgid ""
"Indicate a metasyntactic variable.  In some cases this will be rendered "
"distinctly, e.g.@: in italic, but not in all@footnote{Currently it is "
"rendered differently only in @HTML{} conversions, and @LaTeX{} conversion "
"outside @samp{\\usage} and @samp{\\examples} environments.}. @LaTeX{}-like."
msgstr ""

#
#. type: item
#: R-exts.texi:5789
#, no-wrap
msgid "\\env@{@var{environment_variable}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5790
#, no-wrap
msgid "\\env"
msgstr ""

#. type: table
#: R-exts.texi:5793
msgid ""
"Indicate an environment variable. `Verbatim'.  Displayed using "
"@code{typewriter} font where possible"
msgstr ""

#
#. type: item
#: R-exts.texi:5793
#, no-wrap
msgid "\\option@{@var{option}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5794
#, no-wrap
msgid "\\option"
msgstr ""

#. type: table
#: R-exts.texi:5797
msgid ""
"Indicate a command-line option.  `Verbatim'.  Displayed using "
"@code{typewriter} font where possible."
msgstr ""

#
#. type: item
#: R-exts.texi:5797
#, no-wrap
msgid "\\command@{@var{command_name}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5798
#, no-wrap
msgid "\\command"
msgstr ""

#. type: table
#: R-exts.texi:5801
msgid ""
"Indicate the name of a command. @LaTeX{}-like, so @code{\\var} is "
"interpreted.  Displayed using @code{typewriter} font where possible."
msgstr ""

#
#. type: item
#: R-exts.texi:5801
#, no-wrap
msgid "\\dfn@{@var{term}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5802
#, no-wrap
msgid "\\dfn"
msgstr ""

#
#. type: table
#: R-exts.texi:5804
msgid "Indicate the introductory or defining use of a term. @LaTeX{}-like."
msgstr ""

#
#. type: item
#: R-exts.texi:5804
#, no-wrap
msgid "\\cite@{@var{reference}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5805
#, no-wrap
msgid "\\cite"
msgstr ""

#
#. type: table
#: R-exts.texi:5808
msgid ""
"Indicate a reference without a direct cross-reference @emph{via} "
"@code{\\link} (@pxref{Cross-references}), such as the name of a book. "
"@LaTeX{}-like."
msgstr ""

#
#. type: item
#: R-exts.texi:5808
#, no-wrap
msgid "\\acronym@{@var{acronym}@}"
msgstr ""

#
#. type: findex
#: R-exts.texi:5809
#, no-wrap
msgid "\\acronym"
msgstr ""

#
#. type: table
#: R-exts.texi:5812
msgid ""
"Indicate an acronym (an abbreviation written in all capital letters), such "
"as @acronym{GNU}. @LaTeX{}-like."
msgstr ""

#
#. type: cindex
#: R-exts.texi:5817
#, no-wrap
msgid "Lists and tables in documentation"
msgstr ""

#
#. type: findex
#: R-exts.texi:5819
#, no-wrap
msgid "\\itemize"
msgstr ""

#
#. type: findex
#: R-exts.texi:5820
#, no-wrap
msgid "\\enumerate"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5826
msgid ""
"The @code{\\itemize} and @code{\\enumerate} commands take a single argument, "
"within which there may be one or more @code{\\item} commands.  The text "
"following each @code{\\item} is formatted as one or more paragraphs, "
"suitably indented and with the first paragraph marked with a bullet point "
"(@code{\\itemize}) or a number (@code{\\enumerate})."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5829
msgid ""
"Note that unlike argument lists, @code{\\item} in these formats is followed "
"by a space and the text (not enclosed in braces).  For example"
msgstr ""

#
#. type: example
#: R-exts.texi:5837
#, no-wrap
msgid ""
"  \\enumerate@{\n"
"    \\item A database consists of one or more records, each with one or\n"
"    more named fields.\n"
"    \\item Regular lines start with a non-whitespace character.\n"
"    \\item Records are separated by one or more empty lines.\n"
"  @}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5840
msgid "@code{\\itemize} and @code{\\enumerate} commands may be nested."
msgstr ""

#
#. type: findex
#: R-exts.texi:5841
#, no-wrap
msgid "\\describe"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5847
msgid ""
"The @code{\\describe} command is similar to @code{\\itemize} but allows "
"initial labels to be specified.  Each @code{\\item} takes two arguments, the "
"label and the body of the item, in exactly the same way as an argument or "
"value @code{\\item}.  @code{\\describe} commands are mapped to @code{<DL>} "
"lists in @HTML{} and @code{\\description} lists in @LaTeX{}."
msgstr ""

#
#. type: findex
#: R-exts.texi:5848
#, no-wrap
msgid "\\tabular"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5855
msgid ""
"The @code{\\tabular} command takes two arguments.  The first gives for each "
"of the columns the required alignment (@samp{l} for left-justification, "
"@samp{r} for right-justification or @samp{c} for centring.)  The second "
"argument consists of an arbitrary number of lines separated by @code{\\cr}, "
"and with fields separated by @code{\\tab}.  For example:"
msgstr ""

#
#. type: group
#: R-exts.texi:5866
#, no-wrap
msgid ""
"  \\tabular@{rlll@}@{\n"
"    [,1] \\tab Ozone   \\tab numeric \\tab Ozone (ppb)\\cr\n"
"    [,2] \\tab Solar.R \\tab numeric \\tab Solar R (lang)\\cr\n"
"    [,3] \\tab Wind    \\tab numeric \\tab Wind (mph)\\cr\n"
"    [,4] \\tab Temp    \\tab numeric \\tab Temperature (degrees F)\\cr\n"
"    [,5] \\tab Month   \\tab numeric \\tab Month (1--12)\\cr\n"
"    [,6] \\tab Day     \\tab numeric \\tab Day of month (1--31)\n"
"  @}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5874
msgid ""
"There must be the same number of fields on each line as there are alignments "
"in the first argument, and they must be non-empty (but can contain only "
"spaces).  (There is no whitespace between @code{\\tabular} and the first "
"argument, nor between the two arguments.)"
msgstr ""

#
#. type: cindex
#: R-exts.texi:5877
#, no-wrap
msgid "Cross-references in documentation"
msgstr ""

#
#. type: findex
#: R-exts.texi:5879
#, no-wrap
msgid "\\link"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5887
msgid ""
"The markup @code{\\link@{@var{foo}@}} (usually in the combination "
"@code{\\code@{\\link@{@var{foo}@}@}}) produces a hyperlink to the help for "
"@var{foo}.  Here @var{foo} is a @emph{topic}, that is the argument of "
"@code{\\alias} markup in another @file{Rd} file (possibly in another "
"package).  Hyperlinks are supported in some of the formats to which "
"@file{Rd} files are converted, for example @HTML{} and PDF, but ignored in "
"others, e.g.@: the text format."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5890
msgid ""
"One main usage of @code{\\link} is in the @code{\\seealso} section of the "
"help page, @pxref{Rd format}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5894
msgid ""
"Note that whereas leading and trailing spaces are stripped when extracting a "
"topic from a @code{\\alias}, they are not stripped when looking up the topic "
"of a @code{\\link}."
msgstr ""

#
#. type: cindex
#: R-exts.texi:5895
#, no-wrap
msgid "\\linkS4class"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5906
msgid ""
"You can specify a link to a different topic than its name by "
"@code{\\link[=@var{dest}]@{@var{name}@}} which links to topic @var{dest} "
"with name @var{name}.  This can be used to refer to the documentation for "
"S3/4 classes, for example @code{\\code@{\"\\link[=abc-class]@{abc@}\"@}} "
"would be a way to refer to the documentation of an S4 class @code{\"abc\"} "
"defined in your package, and @code{\\code@{\"\\link[=terms."
"object]@{terms@}\"@}} to the S3 @code{\"terms\"} class (in package "
"@pkg{stats}).  To make these easy to read in the source file, "
"@code{\\code@{\"\\linkS4class@{abc@}\"@}} expands to the form given above."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5926
msgid ""
"There are two other forms of optional argument specified as "
"@code{\\link[@var{pkg}]@{@var{foo}@}} and @code{\\link[@var{pkg:"
"bar}]@{@var{foo}@}} to link to the package @pkg{@var{pkg}}, to @emph{files} "
"@file{@var{foo}.html} and @file{@var{bar}.html} respectively.  These are "
"rarely needed, perhaps to refer to not-yet-installed packages (but there the "
"@HTML{} help system will resolve the link at run time) or in the normally "
"undesirable event that more than one package offers help on a "
"topic@footnote{a common example in @acronym{CRAN} packages is "
"@code{\\link[mgcv]@{gam@}}.} (in which case the present package has "
"precedence so this is only needed to refer to other packages).  They are "
"currently only used in @HTML{} help (and ignored for hyperlinks in @LaTeX{} "
"conversions of help pages), and link to the file rather than the topic "
"(since there is no way to know which topics are in which files in an "
"uninstalled package).  The @strong{only} reason to use these forms for base "
"and recommended packages is to force a reference to a package that might be "
"further down the search path.  Because they have been frequently misused, "
"the @HTML{} help system looks for topic @code{@var{foo}} in package "
"@pkg{@var{pkg}} if it does not find file @file{@var{foo}.html}."
msgstr ""

#
#. type: cindex
#: R-exts.texi:5929
#, no-wrap
msgid "Mathematics in documentation"
msgstr ""

#
#. type: findex
#: R-exts.texi:5930
#, no-wrap
msgid "\\eqn"
msgstr ""

#
#. type: findex
#: R-exts.texi:5931
#, no-wrap
msgid "\\deqn"
msgstr ""

#. type: Plain text
#: R-exts.texi:5942
msgid ""
"Mathematical formulae should be set beautifully for printed documentation "
"yet we still want something useful for text and @HTML{} online help.  To "
"this end, the two commands @code{\\eqn@{@var{latex}@}@{@var{ascii}@}} and "
"@code{\\deqn@{@var{latex}@}@{@var{ascii}@}} are used.  Whereas @code{\\eqn} "
"is used for ``inline'' formulae (corresponding to @TeX{}'s "
"@code{$@dots{}$}), @code{\\deqn} gives ``displayed equations'' (as in "
"@LaTeX{}'s @code{displaymath} environment, or @TeX{}'s @code{$$@dots{}$$}).  "
"Both arguments are treated as `verbatim' text."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5947
msgid ""
"Both commands can also be used as @code{\\eqn@{@var{latexascii}@}} (only "
"@emph{one} argument) which then is used for both @var{latex} and "
"@var{ascii}.  No whitespace is allowed between command and the first "
"argument, nor between the first and second arguments."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5949
msgid "The following example is from @file{Poisson.Rd}:"
msgstr ""

#
#. type: group
#: R-exts.texi:5955
#, no-wrap
msgid ""
"  \\deqn@{p(x) = \\frac@{\\lambda^x e^@{-\\lambda@}@}@{x!@}@}@{%\n"
"\tp(x) = \\lambda^x exp(-\\lambda)/x!@}\n"
"  for \\eqn@{x = 0, 1, 2, \\ldots@}.\n"
msgstr ""

#
#. type: iftex
#: R-exts.texi:5962
msgid "For the @LaTeX{} manual, this becomes"
msgstr ""

#
#. type: tex
#: R-exts.texi:5967
#, no-wrap
msgid ""
"$$ p(x) = \\lambda^x\\ {e^{-\\lambda} \\over x!} $$\n"
"for $x = 0, 1, 2, \\ldots$.\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5973
msgid "For text on-line help we get"
msgstr ""

#
#. type: example
#: R-exts.texi:5978
#, no-wrap
msgid ""
"    p(x) = lambda^x exp(-lambda)/x!\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:5980
#, no-wrap
msgid "for x = 0, 1, 2, ....\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5987
msgid ""
"Greek letters (both cases) will be rendered in @HTML{} if preceded by a "
"backslash, @code{\\dots} and @code{\\ldots} will be rendered as ellipses and "
"@code{\\sqrt}, @code{\\ge} and @code{\\le} as mathematical symbols."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5990
msgid ""
"Note that only basic @LaTeX{} can be used, there being no provision to "
"specify @LaTeX{} style files such as the AMS extensions."
msgstr ""

#
#. type: cindex
#: R-exts.texi:5993
#, no-wrap
msgid "Figures in documentation"
msgstr ""

#
#. type: findex
#: R-exts.texi:5994
#, no-wrap
msgid "\\figure"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:5998
msgid ""
"To include figures in help pages, use the @code{\\figure} markup.  There are "
"three forms."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6006
msgid ""
"The two commonly used simple forms are @code{\\figure@{@var{filename}@}} and "
"@code{\\figure@{@var{filename}@}@{@var{alternate text}@}}.  This will "
"include a copy of the figure in either @HTML{} or @LaTeX{} output.  In text "
"output, the alternate text will be displayed instead.  (When the second "
"argument is omitted, the filename will be used.)  Both the filename and the "
"alternate text will be parsed verbatim, and should not include special "
"characters that are significant in @HTML{} or @LaTeX{}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6019
msgid ""
"The expert form is @code{\\figure@{@var{filename}@}@{options: @var{string}"
"@}}.  (The word @samp{options:} must be typed exactly as shown and followed "
"by at least one space.)  In this form, the @var{string} is copied into the "
"@HTML{} @code{img} tag as attributes following the @code{src} attribute, or "
"into the second argument of the @code{\\Figure} macro in @LaTeX{}, which by "
"default is used as options to an @code{\\includegraphics} call.  As it is "
"unlikely that any single string would suffice for both display modes, the "
"expert form would normally be wrapped in conditionals.  It is up to the "
"author to make sure that legal @HTML{}/@LaTeX{} is used.  For example, to "
"include a logo in both @HTML{} (using the simple form) and @LaTeX{} (using "
"the expert form), the following could be used:"
msgstr ""

#
#. type: example
#: R-exts.texi:6023
#, no-wrap
msgid ""
"\\if@{html@}@{\\figure@{logo.jpg@}@{Our logo@}@}\n"
"\\if@{latex@}@{\\figure@{logo.jpg@}@{options: width=0.5in@}@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6032
msgid ""
"The files containing the figures should be stored in the directory @file{man/"
"figures}.  Files with extensions @file{.jpg}, @file{.jpeg}, @file{.pdf}, "
"@file{.png} and @file{.svg} from that directory will be copied to the "
"@file{help/figures} directory at install time. (Figures in PDF format will "
"not display in most @HTML{} browsers, but might be the best choice in "
"reference manuals.)  Specify the filename relative to @file{man/figures} in "
"the @code{\\figure} directive."
msgstr ""

#
#. type: findex
#: R-exts.texi:6036
#, no-wrap
msgid "\\R"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6038
msgid "Use @code{\\R} for the @R{} system itself.  Use @code{\\dots}"
msgstr ""

#
#. type: findex
#: R-exts.texi:6038
#, no-wrap
msgid "\\dots"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6041
msgid ""
"for the dots in function argument lists @samp{@dots{}}, and @code{\\ldots}"
msgstr ""

#
#. type: findex
#: R-exts.texi:6041
#, no-wrap
msgid "\\ldots"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6049
msgid ""
"for ellipsis dots in ordinary text.@footnote{There is only a fine "
"distinction between @code{\\dots} and @code{\\ldots}.  It is technically "
"incorrect to use @code{\\ldots} in code blocks and @code{tools::checkRd} "
"will warn about this---on the other hand the current converters treat them "
"the same way in code blocks, and elsewhere apart from the small distinction "
"between the two in @LaTeX{}.} These can be followed by @code{@{@}}, and "
"should be unless followed by whitespace."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6054
msgid ""
"After an unescaped @samp{%}, you can put your own comments regarding the "
"help text.  The rest of the line (but not the newline at the end) will be "
"completely disregarded.  Therefore, you can also use it to make part of the "
"``help'' invisible."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6057
msgid ""
"You can produce a backslash (@samp{\\}) by escaping it by another "
"backslash.  (Note that @code{\\cr} is used for generating line breaks.)"
msgstr ""

#. type: Plain text
#: R-exts.texi:6066
msgid ""
"The ``comment'' character @samp{%} and unpaired braces@footnote{See the "
"examples section in the file @file{Paren.Rd} for an example.} @emph{almost "
"always} need to be escaped by @samp{\\}, and @samp{\\\\} can be used for "
"backslash and needs to be when there two or more adjacent backslashes).  In "
"@R{}-like code quoted strings are handled slightly differently; see "
"@uref{https://developer.r-project.org/parseRd.pdf, ``Parsing Rd files''} for "
"details -- in particular braces should not be escaped in quoted strings."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6068
msgid "All of @samp{% @{ @} \\} should be escaped in @LaTeX{}-like text."
msgstr ""

#
#. type: findex
#: R-exts.texi:6069
#, no-wrap
msgid "\\enc"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6078
msgid ""
"Text which might need to be represented differently in different encodings "
"should be marked by @code{\\enc}, e.g.@: @code{\\enc@{J@\"oreskog@}"
"@{Joreskog@}} (with no whitespace between the braces) where the first "
"argument will be used where encodings are allowed and the second should be "
"@acronym{ASCII} (and is used for e.g.@: the text conversion in locales that "
"cannot represent the encoded form).  (This is intended to be used for "
"individual words, not whole sentences or paragraphs.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6089
msgid ""
"The @code{\\alias} command (@pxref{Documenting functions}) is used to "
"specify the ``topics'' documented, which should include @emph{all} @R{} "
"objects in a package such as functions and variables, data sets, and S4 "
"classes and methods (@pxref{Documenting S4 classes and methods}).  The on-"
"line help system searches the index data base consisting of all alias topics."
msgstr ""

#
#. type: findex
#: R-exts.texi:6090
#, no-wrap
msgid "\\concept"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6095
msgid ""
"In addition, it is possible to provide ``concept index entries'' using "
"@code{\\concept}, which can be used for @code{help.search()} lookups.  E.g., "
"file @file{cor.test.Rd} in the standard package @pkg{stats} contains"
msgstr ""

#
#. type: example
#: R-exts.texi:6100
#, no-wrap
msgid ""
"\\concept@{Kendall correlation coefficient@}\n"
"\\concept@{Pearson correlation coefficient@}\n"
"\\concept@{Spearman correlation coefficient@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6106
msgid ""
"so that e.g.@: @kbd{??Spearman} will succeed in finding the help page for "
"the test for association between paired samples using Spearman's @eqn{\\rho, "
"rho}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6110
msgid ""
"(Note that @code{help.search()} only uses ``sections'' of documentation "
"objects with no additional markup.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6113
msgid ""
"If you want to cross reference such items from other help files @emph{via} "
"@code{\\link}, you need to use @code{\\alias} and not @code{\\concept}."
msgstr ""

#
#. type: cindex
#: R-exts.texi:6116
#: R-exts.texi:6117
#, no-wrap
msgid "Platform-specific documentation"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6122
msgid ""
"Sometimes the documentation needs to differ by platform.  Currently two OS-"
"specific options are available, @samp{unix} and @samp{windows}, and lines in "
"the help source file can be enclosed in"
msgstr ""

#
#. type: group
#: R-exts.texi:6128
#, no-wrap
msgid ""
"#ifdef @var{OS}\n"
"   ...\n"
"#endif\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6133
msgid "or"
msgstr ""

#
#. type: group
#: R-exts.texi:6139
#, no-wrap
msgid ""
"#ifndef @var{OS}\n"
"   ...\n"
"#endif\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6147
msgid ""
"for OS-specific inclusion or exclusion.  Such blocks should not be nested, "
"and should be entirely within a block (that, is between the opening and "
"closing brace of a section or item), or at top-level contain one or more "
"complete sections."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6151
msgid ""
"If the differences between platforms are extensive or the @R{} objects "
"documented are only relevant to one platform, platform-specific @file{Rd} "
"files can be put in a @file{unix} or @file{windows} subdirectory."
msgstr ""

#
#. type: cindex
#: R-exts.texi:6154
#, no-wrap
msgid "conditionals"
msgstr ""

#
#. type: findex
#: R-exts.texi:6155
#, no-wrap
msgid "\\if"
msgstr ""

#
#. type: findex
#: R-exts.texi:6156
#, no-wrap
msgid "\\ifelse"
msgstr ""

#
#. type: findex
#: R-exts.texi:6157
#, no-wrap
msgid "\\out"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6167
msgid ""
"Occasionally the best content for one output format is different from the "
"best content for another.  For this situation, the @code{\\if@{@var{format}@}"
"@{@var{text}@}} or @code{\\ifelse@{@var{format}@}@{@var{text}@}"
"@{@var{alternate}@}} markup is used.  Here @var{format} is a comma separated "
"list of formats in which the @var{text} should be rendered.  The "
"@var{alternate} will be rendered if the format does not match.  Both "
"@var{text} and @var{alternate} may be any sequence of text and markup."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6175
msgid ""
"Currently the following formats are recognized: @code{example}, @code{html}, "
"@code{latex} and @code{text}.  These select output for the corresponding "
"targets. (Note that @code{example} refers to extracted example code rather "
"than the displayed example in some other format.)  Also accepted are "
"@code{TRUE} (matching all formats) and @code{FALSE} (matching no formats).  "
"These could be the output of the @code{\\Sexpr} macro (@pxref{Dynamic "
"pages})."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6182
msgid ""
"The @code{\\out@{@var{literal}@}} macro would usually be used within the "
"@var{text} part of @code{\\if@{@var{format}@}@{@var{text}@}}.  It causes the "
"renderer to output the literal text exactly, with no attempt to escape "
"special characters.  For example, use the following to output the markup "
"necessary to display the Greek letter in @LaTeX{} or @HTML{}, and the text "
"string @code{alpha} in other formats:"
msgstr ""

#
#. type: example
#: R-exts.texi:6184
#, no-wrap
msgid "\\if@{latex@}@{\\out@{\\alpha@}@}\\ifelse@{html@}@{\\out@{&alpha;@}@}@{alpha@}\n"
msgstr ""

#
#. type: cindex
#: R-exts.texi:6188
#, no-wrap
msgid "dynamic pages"
msgstr ""

#
#. type: findex
#: R-exts.texi:6189
#, no-wrap
msgid "\\Sexpr"
msgstr ""

#
#. type: findex
#: R-exts.texi:6190
#, no-wrap
msgid "\\RdOpts"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6195
msgid ""
"Two macros supporting dynamically generated man pages are @code{\\Sexpr} and "
"@code{\\RdOpts}.  These are modelled after Sweave, and are intended to "
"contain executable @R{} expressions in the @file{Rd} file."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6200
msgid ""
"The main argument to @code{\\Sexpr} must be valid @R{} code that can be "
"executed. It may also take options in square brackets before the main "
"argument. Depending on the options, the code may be executed at package "
"build time, package install time, or man page rendering time."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6203
msgid ""
"The options follow the same format as in Sweave, but different options are "
"supported.  Currently the allowed options and their defaults are:"
msgstr ""

#
#. type: code{#1}
#: R-exts.texi:6205
#, no-wrap
msgid "eval=TRUE"
msgstr ""

#
#. type: itemize
#: R-exts.texi:6207
msgid "Whether the @R{} code should be evaluated."
msgstr ""

#
#. type: code{#1}
#: R-exts.texi:6208
#, no-wrap
msgid "echo=FALSE"
msgstr ""

#
#. type: itemize
#: R-exts.texi:6212
msgid ""
"Whether the @R{} code should be echoed.  If @code{TRUE}, a display will be "
"given in a preformatted block.  For example, @code{\\Sexpr[echo=TRUE]@{ x <- "
"1 @}} will be displayed as"
msgstr ""

#
#. type: example
#: R-exts.texi:6214
#, no-wrap
msgid "> x <- 1\n"
msgstr ""

#
#. type: code{#1}
#: R-exts.texi:6216
#, no-wrap
msgid "keep.source=TRUE"
msgstr ""

#
#. type: itemize
#: R-exts.texi:6219
msgid ""
"Whether to keep the author's formatting when displaying the code, or throw "
"it away and use a deparsed version."
msgstr ""

#
#. type: code{#1}
#: R-exts.texi:6220
#: R-exts.texi:6225
#, no-wrap
msgid "results=text"
msgstr ""

#
#. type: itemize
#: R-exts.texi:6223
msgid "How should the results be displayed? The possibilities are:"
msgstr ""

#
#. type: itemize
#: R-exts.texi:6228
msgid ""
"Apply @code{as.character()} to the result of the code, and insert it as a "
"text element."
msgstr ""

#
#. type: code{#1}
#: R-exts.texi:6229
#, no-wrap
msgid "results=verbatim"
msgstr ""

#
#. type: itemize
#: R-exts.texi:6232
msgid ""
"Print the results of the code just as if it was executed at the console, and "
"include the printed results verbatim.  (Invisible results will not print.)"
msgstr ""

#
#. type: code{#1}
#: R-exts.texi:6233
#, no-wrap
msgid "results=rd"
msgstr ""

#
#. type: itemize
#: R-exts.texi:6240
msgid ""
"The result is assumed to be a character vector containing markup to be "
"passed to @code{parse_Rd()}, with the result inserted in place.  This could "
"be used to insert computed aliases, for instance.  @code{parse_Rd()} is "
"called first with @code{fragment = FALSE} to allow a single Rd section macro "
"to be inserted.  If that fails, it is called again with @code{fragment = "
"TRUE}, the older behavior."
msgstr ""

#
#. type: code{#1}
#: R-exts.texi:6241
#, no-wrap
msgid "results=hide"
msgstr ""

#
#. type: itemize
#: R-exts.texi:6243
msgid "Insert no output."
msgstr ""

#
#. type: code{#1}
#: R-exts.texi:6245
#, no-wrap
msgid "strip.white=TRUE"
msgstr ""

#
#. type: itemize
#: R-exts.texi:6249
msgid ""
"Remove leading and trailing white space from each line of output if "
"@code{strip.white=TRUE}.  With @code{strip.white=all}, also remove blank "
"lines."
msgstr ""

#
#. type: code{#1}
#: R-exts.texi:6250
#: R-exts.texi:6256
#, no-wrap
msgid "stage=install"
msgstr ""

#
#. type: itemize
#: R-exts.texi:6252
msgid "Control when this macro is run.  Possible values are"
msgstr ""

#
#. type: code{#1}
#: R-exts.texi:6253
#, no-wrap
msgid "stage=build"
msgstr ""

#
#. type: itemize
#: R-exts.texi:6255
msgid "The macro is run when building a source tarball."
msgstr ""

#
#. type: itemize
#: R-exts.texi:6258
msgid "The macro is run when installing from source."
msgstr ""

#
#. type: code{#1}
#: R-exts.texi:6259
#, no-wrap
msgid "stage=render"
msgstr ""

#
#. type: itemize
#: R-exts.texi:6261
msgid "The macro is run when displaying the help page."
msgstr ""

#
#. type: itemize
#: R-exts.texi:6271
msgid ""
"Conditionals such as @code{#ifdef} (@pxref{Platform-specific sections}) are "
"applied after the @code{build} macros but before the @code{install} macros.  "
"In some situations (e.g. installing directly from a source directory without "
"a tarball, or building a binary package) the above description is not "
"literally accurate, but authors can rely on the sequence being @code{build}, "
"@code{#ifdef}, @code{install}, @code{render}, with all stages executed."
msgstr ""

#
#. type: itemize
#: R-exts.texi:6275
msgid ""
"Code is only run once in each stage, so a @code{\\Sexpr[results=rd]} macro "
"can output an @code{\\Sexpr} macro designed for a later stage, but not for "
"the current one or any earlier stage."
msgstr ""

#
#. type: code{#1}
#: R-exts.texi:6276
#, no-wrap
msgid "width, height, fig"
msgstr ""

#
#. type: itemize
#: R-exts.texi:6278
msgid "These options are currently allowed but ignored."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6282
msgid ""
"The @code{\\RdOpts} macro is used to set new defaults for options to apply "
"to following uses of @code{\\Sexpr}."
msgstr ""

#. type: Plain text
#: R-exts.texi:6285
msgid ""
"For more details, see the online document @uref{https://developer.r-project."
"org/parseRd.pdf, ``Parsing Rd files''}."
msgstr ""

#
#. type: cindex
#: R-exts.texi:6288
#, no-wrap
msgid "user-defined macros"
msgstr ""

#
#. type: findex
#: R-exts.texi:6289
#, no-wrap
msgid "\\newcommand"
msgstr ""

#
#. type: findex
#: R-exts.texi:6290
#, no-wrap
msgid "\\renewcommand"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6295
msgid ""
"The @code{\\newcommand} and @code{\\renewcommand} macros allow new macros to "
"be defined within an Rd file.  These are similar but not identical to the "
"same-named @LaTeX{} macros."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6304
msgid ""
"They each take two arguments which are parsed verbatim.  The first is the "
"name of the new macro including the initial backslash, and the second is the "
"macro definition.  As in @LaTeX{}, @code{\\newcommand} requires that the new "
"macro not have been previously defined, whereas @code{\\renewcommand} allows "
"existing macros (including all built-in ones) to be replaced.  (As from "
"version 3.2.0, this test is disabled by default, but may be enabled by "
"setting the environment variable @env{_WARN_DUPLICATE_RD_MACROS_} to a true "
"value.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6317
msgid ""
"Also as in @LaTeX{}, the new macro may be defined to take arguments, and "
"numeric placeholders such as @code{#1} are used in the macro definition. "
"However, unlike @LaTeX{}, the number of arguments is determined "
"automatically from the highest placeholder number seen in the macro "
"definition.  For example, a macro definition containing @code{#1} and "
"@code{#3} (but no other placeholders) will define a three argument macro "
"(whose second argument will be ignored). As in @LaTeX{}, at most 9 arguments "
"may be defined. If the @code{#} character is followed by a non-digit it will "
"have no special significance.  All arguments to user-defined macros will be "
"parsed as verbatim text, and simple text-substitution will be used to "
"replace the place-holders, after which the replacement text will be parsed."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6322
msgid ""
"As of @R{} version 3.2.0, a number of macros are defined in the file "
"@file{share/Rd/macros/system.Rd} of the @R{} source or home directory, and "
"these will normally be available in all @file{.Rd} files.  For example, that "
"file contains the definition"
msgstr ""

#
#. type: example
#: R-exts.texi:6324
#, no-wrap
msgid "\\newcommand@{\\PR@}@{\\Sexpr[results=rd]@{tools:::Rd_expr_PR(#1)@}@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6328
msgid ""
"which defines @code{\\PR} to be a single argument macro; then code "
"(typically used in the @file{NEWS.Rd} file) like"
msgstr ""

#
#. type: example
#: R-exts.texi:6330
#, no-wrap
msgid "\\PR@{1234@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6333
msgid "will expand to"
msgstr ""

#
#. type: example
#: R-exts.texi:6335
#, no-wrap
msgid "\\Sexpr[results=rd]@{tools:::Rd_expr_PR(1234)@}\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:6338
msgid "when parsed."
msgstr ""

#. type: Plain text
#: R-exts.texi:6341
msgid "Some macros that might be of general use are: @ftable @code"
msgstr ""

#. type: item
#: R-exts.texi:6341
#, no-wrap
msgid "\\CRANpkg@{pkg@}"
msgstr ""

#. type: Plain text
#: R-exts.texi:6343
msgid "A package on CRAN"
msgstr ""

#. type: item
#: R-exts.texi:6344
#, no-wrap
msgid "\\sspace"
msgstr ""

#. type: Plain text
#: R-exts.texi:6346
msgid "A single space (used after a period that does not end a sentence)."
msgstr ""

#. type: item
#: R-exts.texi:6347
#, no-wrap
msgid "\\doi@{numbers@}"
msgstr ""

#. type: Plain text
#: R-exts.texi:6349
msgid "A digital object identifier (DOI)."
msgstr ""

#. type: Plain text
#: R-exts.texi:6354
msgid ""
"See the @file{system.Rd} file in @file{share/Rd/macros} for more details and "
"macro definitions, including macros @code{\\packageTitle}, "
"@code{\\packageDescription}, @code{\\packageAuthor}, "
"@code{\\packageMaintainer}, @code{\\packageDESCRIPTION} and "
"@code{\\packageIndices}."
msgstr ""

#. type: code{#1}
#: R-exts.texi:6354
#, no-wrap
msgid "\\packageTitle"
msgstr ""

#. type: code{#1}
#: R-exts.texi:6355
#, no-wrap
msgid "\\packageDescription"
msgstr ""

#. type: code{#1}
#: R-exts.texi:6356
#, no-wrap
msgid "\\packageAuthor"
msgstr ""

#. type: code{#1}
#: R-exts.texi:6357
#, no-wrap
msgid "\\packageMaintainer"
msgstr ""

#. type: code{#1}
#: R-exts.texi:6358
#, no-wrap
msgid "\\packageDESCRIPTION"
msgstr ""

#. type: code{#1}
#: R-exts.texi:6359
#, no-wrap
msgid "\\packageIndices"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6368
msgid ""
"Packages may also define their own common macros; these would be stored in "
"an @file{.Rd} file in @file{man/macros} in the package source and will be "
"installed into @file{help/macros} when the package is installed.  A package "
"may also use the macros from a different package by listing the other "
"package in the @samp{RdMacros} field in the @file{DESCRIPTION} file."
msgstr ""

#
#. type: cindex
#: R-exts.texi:6373
#, no-wrap
msgid "encoding"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6385
msgid ""
"Rd files are text files and so it is impossible to deduce the encoding they "
"are written in unless @acronym{ASCII}: files with 8-bit characters could be "
"UTF-8, Latin-1, Latin-9, KOI8-R, EUC-JP, @emph{etc}.  So an "
"@code{\\encoding@{@}} section must be used to specify the encoding if it is "
"not @acronym{ASCII}.  (The @code{\\encoding@{@}} section must be on a line "
"by itself, and in particular one containing no non-@acronym{ASCII} "
"characters.  The encoding declared in the @file{DESCRIPTION} file will be "
"used if none is declared in the file.)  The @file{Rd} files are converted to "
"UTF-8 before parsing and so the preferred encoding for the files themselves "
"is now UTF-8."
msgstr ""

#. type: Plain text
#: R-exts.texi:6392
msgid ""
"Wherever possible, avoid non-@acronym{ASCII} chars in @file{Rd} files, and "
"even symbols such as @samp{<}, @samp{>}, @samp{$}, @samp{^}, @samp{&}, "
"@samp{|}, @samp{@@}, @samp{~}, and @samp{*} outside `verbatim' environments "
"(since they may disappear in fonts designed to render text).  (Function "
"@code{showNonASCIIfile} in package @pkg{tools} can help in finding non-"
"@acronym{ASCII} bytes in the files.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6403
msgid ""
"For convenience, encoding names @samp{latin1} and @samp{latin2} are always "
"recognized: these and @samp{UTF-8} are likely to work fairly widely.  "
"However, this does not mean that all characters in UTF-8 will be recognized, "
"and the coverage of non-Latin characters@footnote{@R{} 2.9.0 added support "
"for UTF-8 Cyrillic characters in @LaTeX{}, but on some OSes this will need "
"Cyrillic support added to @LaTeX{}, so environment variable "
"@env{_R_CYRILLIC_TEX_} may need to be set to a non-empty value to enable "
"this.} is fairly low.  Using @LaTeX{} @code{inputenx} (see @code{?Rd2pdf} in "
"@R{}) will give greater coverage of UTF-8."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6407
msgid ""
"The @code{\\enc} command (@pxref{Insertions}) can be used to provide "
"transliterations which will be used in conversions that do not support the "
"declared encoding."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6410
msgid ""
"The @LaTeX{} conversion converts the file to UTF-8 from the declared "
"encoding, and includes a"
msgstr ""

#
#. type: example
#: R-exts.texi:6413
#, no-wrap
msgid "\\inputencoding@{utf8@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6420
msgid ""
"command, and this needs to be matched by a suitable invocation of the "
"@command{\\usepackage@{inputenc@}} command.  The @R{} utility @command{R CMD "
"Rd2pdf} looks at the converted code and includes the encodings used: it "
"might for example use"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6431
msgid ""
"(Use of @code{utf8} as an encoding requires @LaTeX{} dated 2003/12/01 or "
"later.  Also, the use of Cyrillic characters in @samp{UTF-8} appears to also "
"need @samp{\\usepackage[T2A]@{fontenc@}}, and @command{R CMD Rd2pdf} "
"includes this conditionally on the file @file{t2aenc.def} being present and "
"environment variable @env{_R_CYRILLIC_TEX_} being set.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6434
msgid ""
"Note that this mechanism works best with Latin letters: the coverage of "
"UTF-8 in @LaTeX{} is quite low."
msgstr ""

#
#. type: cindex
#: R-exts.texi:6439
#, no-wrap
msgid "Processing Rd format"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6443
msgid ""
"There are several commands to process Rd files from the system command line."
msgstr ""

#
#. type: findex
#: R-exts.texi:6444
#, no-wrap
msgid "R CMD Rdconv"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6449
msgid ""
"Using @code{R CMD Rdconv} one can convert @R{} documentation format to other "
"formats, or extract the executable examples for run-time testing.  The "
"currently supported conversions are to plain text, @HTML{} and @LaTeX{} as "
"well as extraction of the examples."
msgstr ""

#
#. type: findex
#: R-exts.texi:6450
#, no-wrap
msgid "R CMD Rd2pdf"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6456
msgid ""
"@code{R CMD Rd2pdf} generates PDF output from documentation in @file{Rd} "
"files, which can be specified either explicitly or by the path to a "
"directory with the sources of a package.  In the latter case, a reference "
"manual for all documented objects in the package is created, including the "
"information in the @file{DESCRIPTION} files."
msgstr ""

#
#. type: findex
#: R-exts.texi:6457
#, no-wrap
msgid "R CMD Sweave"
msgstr ""

#
#. type: findex
#: R-exts.texi:6458
#, no-wrap
msgid "R CMD Stangle"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6463
msgid ""
"@code{R CMD Sweave} and @code{R CMD Stangle} process vignette-like "
"documentation files (e.g. Sweave vignettes with extension @samp{.Snw} or "
"@samp{.Rnw}, or other non-Sweave vignettes).  @code{R CMD Stangle} is used "
"to extract the @R{} code fragments."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6468
msgid ""
"The exact usage and a detailed list of available options for all of these "
"commands can be obtained by running @code{R CMD @var{command} --help}, e.g., "
"@kbd{R CMD Rdconv --help}.  All available commands can be listed using "
"@kbd{R --help} (or @kbd{Rcmd --help} under Windows)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6473
msgid ""
"All of these work under Windows.  You may need to have installed the the "
"tools to build packages from source as described in the ``R Installation and "
"Administration'' manual, although typically all that is needed is a @LaTeX{} "
"installation."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6481
msgid ""
"It can be very helpful to prepare @file{.Rd} files using a editor which "
"knows about their syntax and will highlight commands, indent to show the "
"structure and detect mis-matched braces, and so on."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6487
msgid ""
"The system most commonly used for this is some version of @command{Emacs} "
"(including @command{XEmacs}) with the @acronym{ESS} package (@uref{http://"
"ess.r-project.org/}: it is often is installed with @command{Emacs} but may "
"need to be loaded, or even installed, separately)."
msgstr ""

#. type: Plain text
#: R-exts.texi:6491
msgid ""
"Another is the Eclipse IDE with the Stat-ET plugin (@uref{http://www.walware."
"de/goto/statet}), and (on Windows only)  Tinn-R (@uref{http://sourceforge."
"net/@/projects/@/tinn-r/})."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6494
msgid ""
"People have also used @LaTeX{} mode in a editor, as @file{.Rd} files are "
"rather similar to @LaTeX{} files."
msgstr ""

#. type: Plain text
#: R-exts.texi:6497
msgid ""
"Some @R{} front-ends provide editing support for @file{.Rd} files, for "
"example RStudio (@uref{https://rstudio.org/})."
msgstr ""

#
#. type: node
#: R-exts.texi:6506
#: R-exts.texi:6513
#: R-exts.texi:6514
#: R-exts.texi:6515
#: R-exts.texi:6579
#, no-wrap
msgid "Tidying R code"
msgstr ""

#
#. type: node
#: R-exts.texi:6506
#: R-exts.texi:6513
#: R-exts.texi:6579
#: R-exts.texi:6580
#: R-exts.texi:6693
#, no-wrap
msgid "Profiling R code for speed"
msgstr ""

#
#. type: node
#: R-exts.texi:6506
#: R-exts.texi:6579
#: R-exts.texi:6693
#: R-exts.texi:6694
#: R-exts.texi:6756
#: R-exts.texi:6777
#: R-exts.texi:6800
#: R-exts.texi:6851
#, no-wrap
msgid "Profiling R code for memory use"
msgstr ""

#
#. type: node
#: R-exts.texi:6506
#: R-exts.texi:6693
#: R-exts.texi:6851
#: R-exts.texi:6852
#: R-exts.texi:6867
#: R-exts.texi:7077
#: R-exts.texi:7083
#, no-wrap
msgid "Profiling compiled code"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6512
msgid ""
"@R{} code which is worth preserving in a package and perhaps making "
"available for others to use is worth documenting, tidying up and perhaps "
"optimizing. The last two of these activities are the subject of this chapter."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6523
msgid ""
"@R{} treats function code loaded from packages and code entered by users "
"differently.  By default code entered by users has the source code stored "
"internally, and when the function is listed, the original source is "
"reproduced.  Loading code from a package (by default) discards the source "
"code, and the function listing is re-created from the parse tree of the "
"function."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6531
msgid ""
"Normally keeping the source code is a good idea, and in particular it avoids "
"comments being removed from the source.  However, we can make use of the "
"ability to re-create a function listing from its parse tree to produce a "
"tidy version of the function, for example with consistent indentation and "
"spaces around operators.  If the original source does not follow the "
"standard format this tidied version can be much easier to read."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6533
msgid "We can subvert the keeping of source in two ways."
msgstr ""

#
#. type: enumerate
#: R-exts.texi:6538
msgid ""
"The option @code{keep.source} can be set to @code{FALSE} before the code is "
"loaded into @R{}."
msgstr ""

#
#. type: enumerate
#: R-exts.texi:6541
msgid ""
"The stored source code can be removed by calling the @code{removeSource()} "
"function, for example by"
msgstr ""

#
#. type: example
#: R-exts.texi:6544
#, no-wrap
msgid "myfun <- removeSource(myfun)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6551
msgid ""
"In each case if we then list the function we will get the standard layout."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6554
msgid ""
"Suppose we have a file of functions @file{myfuns.R} that we want to tidy "
"up.  Create a file @file{tidy.R} containing"
msgstr ""

#
#. type: group
#: R-exts.texi:6559
#, no-wrap
msgid ""
"source(\"myfuns.R\", keep.source = FALSE)\n"
"dump(ls(all = TRUE), file = \"new.myfuns.R\")\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6567
msgid ""
"and run @R{} with this as the source file, for example by @kbd{R --vanilla < "
"tidy.R} or by pasting into an @R{} session.  Then the file @file{new.myfuns."
"R} will contain the functions in alphabetical order in the standard layout.  "
"Warning: comments in your functions will be lost."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6576
msgid ""
"The standard format provides a good starting point for further tidying.  "
"Although the deparsing cannot do so, we recommend the consistent use of the "
"preferred assignment operator @samp{<-} (rather than @samp{=}) for "
"assignment.  Many package authors use a version of Emacs (on a Unix-alike or "
"Windows) to edit @R{} code, using the ESS[S] mode of the @acronym{ESS} Emacs "
"package.  See @ref{R coding standards, , R coding standards, R-ints, R "
"Internals} for style options within the ESS[S] mode recommended for the "
"source code of @R{} itself."
msgstr ""

#
#. type: cindex
#: R-exts.texi:6581
#: R-exts.texi:6695
#: R-exts.texi:6853
#, no-wrap
msgid "Profiling"
msgstr ""

#
#. type: findex
#: R-exts.texi:6582
#: R-exts.texi:6758
#, no-wrap
msgid "Rprof"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6588
msgid ""
"It is possible to profile @R{} code on Windows and most@footnote{@R{} has to "
"be built to enable this, but the option @option{--enable-R-profiling} is the "
"default.} Unix-alike versions of @R{}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6598
msgid ""
"The command @command{Rprof} is used to control profiling, and its help page "
"can be consulted for full details.  Profiling works by recording at fixed "
"intervals@footnote{For Unix-alikes these are intervals of CPU time, and for "
"Windows of elapsed time.} (by default every 20 msecs)  which line in which "
"@R{} function is being used, and recording the results in a file (default "
"@file{Rprof.out} in the working directory).  Then the function "
"@code{summaryRprof} or the command-line utility @code{R CMD Rprof @var{Rprof."
"out}} can be used to summarize the activity."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6601
msgid ""
"As an example, consider the following code (from Venables & Ripley, 2002, "
"pp. 225--6)."
msgstr ""

#
#. type: group
#: R-exts.texi:6618
#, no-wrap
msgid ""
"library(MASS); library(boot)\n"
"storm.fm <- nls(Time ~ b*Viscosity/(Wt - c), stormer,\n"
"\t\tstart = c(b=30.401, c=2.2183))\n"
"st <- cbind(stormer, fit=fitted(storm.fm))\n"
"storm.bf <- function(rs, i) @{\n"
"    st$Time <-  st$fit + rs[i]\n"
"    tmp <- nls(Time ~ (b * Viscosity)/(Wt - c), st,\n"
"\t       start = coef(storm.fm))\n"
"    tmp$m$getAllPars()\n"
"@}\n"
"rs <- scale(resid(storm.fm), scale = FALSE) # remove the mean\n"
"Rprof(\"boot.out\")\n"
"storm.boot <- boot(rs, storm.bf, R = 4999) # slow enough to profile\n"
"Rprof(NULL)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6623
msgid "Having run this we can summarize the results by"
msgstr ""

#
#. type: group
#: R-exts.texi:6627
#, no-wrap
msgid ""
"R CMD Rprof boot.out\n"
"\n"
msgstr ""

#
#. type: group
#: R-exts.texi:6630
#, no-wrap
msgid ""
"Each sample represents 0.02 seconds.\n"
"Total run time: 22.52 seconds.\n"
"\n"
msgstr ""

#
#. type: group
#: R-exts.texi:6633
#, no-wrap
msgid ""
"Total seconds: time spent in function and callees.\n"
"Self seconds: time spent in function alone.\n"
msgstr ""

#
#. type: group
#: R-exts.texi:6652
#, no-wrap
msgid ""
"   %       total       %        self\n"
" total    seconds     self    seconds    name\n"
" 100.0     25.22       0.2      0.04     \"boot\"\n"
"  99.8     25.18       0.6      0.16     \"statistic\"\n"
"  96.3     24.30       4.0      1.02     \"nls\"\n"
"  33.9      8.56       2.2      0.56     \"<Anonymous>\"\n"
"  32.4      8.18       1.4      0.36     \"eval\"\n"
"  31.8      8.02       1.4      0.34     \".Call\"\n"
"  28.6      7.22       0.0      0.00     \"eval.parent\"\n"
"  28.5      7.18       0.3      0.08     \"model.frame\"\n"
"  28.1      7.10       3.5      0.88     \"model.frame.default\"\n"
"  17.4      4.38       0.7      0.18     \"sapply\"\n"
"  15.0      3.78       3.2      0.80     \"nlsModel\"\n"
"  12.5      3.16       1.8      0.46     \"lapply\"\n"
"  12.3      3.10       2.7      0.68     \"assign\"\n"
" ...\n"
msgstr ""

#
#. type: group
#: R-exts.texi:6670
#, no-wrap
msgid ""
"   %        self        %      total\n"
"  self    seconds     total   seconds    name\n"
"   5.7      1.44       7.5      1.88     \"inherits\"\n"
"   4.0      1.02      96.3     24.30     \"nls\"\n"
"   3.6      0.92       3.6      0.92     \"$\"\n"
"   3.5      0.88      28.1      7.10     \"model.frame.default\"\n"
"   3.2      0.80      15.0      3.78     \"nlsModel\"\n"
"   2.8      0.70       9.8      2.46     \"qr.coef\"\n"
"   2.7      0.68      12.3      3.10     \"assign\"\n"
"   2.5      0.64       2.5      0.64     \".Fortran\"\n"
"   2.5      0.62       7.1      1.80     \"qr.default\"\n"
"   2.2      0.56      33.9      8.56     \"<Anonymous>\"\n"
"   2.1      0.54       5.9      1.48     \"unlist\"\n"
"   2.1      0.52       7.9      2.00     \"FUN\"\n"
"  ...\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6677
msgid ""
"This often produces surprising results and can be used to identify "
"bottlenecks or pieces of @R{} code that could benefit from being replaced by "
"compiled code."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6681
msgid ""
"Two warnings: profiling does impose a small performance penalty, and the "
"output files can be very large if long runs are profiled at the default "
"sampling interval."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6688
msgid ""
"Profiling short runs can sometimes give misleading results.  @R{} from time "
"to time performs @emph{garbage collection} to reclaim unused memory, and "
"this takes an appreciable amount of time which profiling will charge to "
"whichever function happens to provoke it.  It may be useful to compare "
"profiling code immediately after a call to @code{gc()} with a profiling run "
"without a preceding call to @code{gc}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6692
msgid ""
"More detailed analysis of the output can be achieved by the tools in the "
"@acronym{CRAN} packages @CRANpkg{proftools} and @CRANpkg{profr}: in "
"particular these allow call graphs to be studied."
msgstr ""

#
#. type: cindex
#: R-exts.texi:6696
#, no-wrap
msgid "Memory use"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6705
msgid ""
"Measuring memory use in @R{} code is useful either when the code takes more "
"memory than is conveniently available or when memory allocation and copying "
"of objects is responsible for slow code. There are three ways to profile "
"memory use over time in @R{} code. All three require @R{} to have been "
"compiled with @option{--enable-memory-profiling}, which is not the default, "
"but is currently used for the OS X and Windows binary distributions. All can "
"be misleading, for different reasons."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6715
msgid ""
"In understanding the memory profiles it is useful to know a little more "
"about @R{}'s memory allocation. Looking at the results of @code{gc()} shows "
"a division of memory into @code{Vcells} used to store the contents of "
"vectors and @code{Ncells} used to store everything else, including all the "
"administrative overhead for vectors such as type and length information.  In "
"fact the vector contents are divided into two pools. Memory for small "
"vectors (by default 128 bytes or less) is obtained in large chunks and then "
"parcelled out by @R{}; memory for larger vectors is obtained directly from "
"the operating system."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6717
msgid "Some memory allocation is obvious in interpreted code, for example,"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:6720
#, no-wrap
msgid "y <- x + 1\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6729
msgid ""
"allocates memory for a new vector @code{y}. Other memory allocation is less "
"obvious and occurs because @code{R} is forced to make good on its promise of "
"`call-by-value' argument passing.  When an argument is passed to a function "
"it is not immediately copied. Copying occurs (if necessary) only when the "
"argument is modified.  This can lead to surprising memory use. For example, "
"in the `survey' package we have"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:6738
#, no-wrap
msgid ""
"print.svycoxph <- function (x, ...)\n"
"@{\n"
"    print(x$survey.design, varnames = FALSE, design.summaries = FALSE,\n"
"\t...)\n"
"    x$call <- x$printcall\n"
"    NextMethod()\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6745
msgid ""
"It may not be obvious that the assignment to @code{x$call} will cause the "
"entire object @code{x} to be copied.  This copying to preserve the call-by-"
"value illusion is usually done by the internal C function @code{duplicate}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6749
msgid ""
"The main reason that memory-use profiling is difficult is garbage "
"collection. Memory is allocated at well-defined times in an @R{} program, "
"but is freed whenever the garbage collector happens to run."
msgstr ""

#
#. type: node
#: R-exts.texi:6754
#: R-exts.texi:6756
#: R-exts.texi:6777
#, no-wrap
msgid "Memory statistics from Rprof"
msgstr ""

#
#. type: node
#: R-exts.texi:6754
#: R-exts.texi:6756
#: R-exts.texi:6777
#: R-exts.texi:6778
#: R-exts.texi:6800
#, no-wrap
msgid "Tracking memory allocations"
msgstr ""

#
#. type: subsection
#: R-exts.texi:6754
#: R-exts.texi:6777
#: R-exts.texi:6800
#: R-exts.texi:6801
#, no-wrap
msgid "Tracing copies of an object"
msgstr ""

#
#. type: subsection
#: R-exts.texi:6757
#, no-wrap
msgid "Memory statistics from @code{Rprof}"
msgstr ""

#
#. type: findex
#: R-exts.texi:6759
#, no-wrap
msgid "summaryRprof"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6776
msgid ""
"The sampling profiler @code{Rprof} described in the previous section can be "
"given the option @code{memory.profiling=TRUE}. It then writes out the total "
"@R{} memory allocation in small vectors, large vectors, and cons cells or "
"nodes at each sampling interval. It also writes out the number of calls to "
"the internal function @code{duplicate}, which is called to copy @R{} "
"objects. @code{summaryRprof} provides summaries of this information.  The "
"main reason that this can be misleading is that the memory use is attributed "
"to the function running at the end of the sampling interval. A second reason "
"is that garbage collection can make the amount of memory in use decrease, so "
"a function appears to use little memory.  Running under @code{gctorture} "
"helps with both problems: it slows down the code to effectively increase the "
"sampling frequency and it makes each garbage collection release a smaller "
"amount of memory.  Changing the memory limits with @code{mem.limits()} may "
"also be useful, to see how the code would run under different memory "
"conditions."
msgstr ""

#
#. type: findex
#: R-exts.texi:6779
#, no-wrap
msgid "Rprofmem"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6787
msgid ""
"The second method of memory profiling uses a memory-allocation profiler, "
"@code{Rprofmem()}, which writes out a stack trace to an output file every "
"time a large vector is allocated (with a user-specified threshold for "
"`large') or a new page of memory is allocated for the @R{} heap. Summary "
"functions for this output are still being designed."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6789
msgid "Running the example from the previous section with"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:6794
#, no-wrap
msgid ""
"> Rprofmem(\"boot.memprof\",threshold=1000)\n"
"> storm.boot <- boot(rs, storm.bf, R = 4999)\n"
"> Rprofmem(NULL)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6799
msgid ""
"shows that apart from some initial and final work in @code{boot} there are "
"no vector allocations over 1000 bytes."
msgstr ""

#
#. type: findex
#: R-exts.texi:6802
#, no-wrap
msgid "tracemem"
msgstr ""

#
#. type: findex
#: R-exts.texi:6803
#, no-wrap
msgid "untracemem"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6813
msgid ""
"The third method of memory profiling involves tracing copies made of a "
"specific (presumably large) @R{} object. Calling @code{tracemem} on an "
"object marks it so that a message is printed to standard output when the "
"object is copied @emph{via} @code{duplicate} or coercion to another type, or "
"when a new object of the same size is created in arithmetic operations. The "
"main reason that this can be misleading is that copying of subsets or "
"components of an object is not tracked. It may be helpful to use "
"@code{tracemem} on these components."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6817
msgid ""
"In the example above we can run @code{tracemem} on the data frame @code{st}"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:6837
#, no-wrap
msgid ""
"> tracemem(st)\n"
"[1] \"<0x9abd5e0>\"\n"
"> storm.boot <- boot(rs, storm.bf, R = 4)\n"
"memtrace[0x9abd5e0->0x92a6d08]: statistic boot\n"
"memtrace[0x92a6d08->0x92a6d80]: $<-.data.frame $<- statistic boot\n"
"memtrace[0x92a6d80->0x92a6df8]: $<-.data.frame $<- statistic boot\n"
"memtrace[0x9abd5e0->0x9271318]: statistic boot\n"
"memtrace[0x9271318->0x9271390]: $<-.data.frame $<- statistic boot\n"
"memtrace[0x9271390->0x9271408]: $<-.data.frame $<- statistic boot\n"
"memtrace[0x9abd5e0->0x914f558]: statistic boot\n"
"memtrace[0x914f558->0x914f5f8]: $<-.data.frame $<- statistic boot\n"
"memtrace[0x914f5f8->0x914f670]: $<-.data.frame $<- statistic boot\n"
"memtrace[0x9abd5e0->0x972cbf0]: statistic boot\n"
"memtrace[0x972cbf0->0x972cc68]: $<-.data.frame $<- statistic boot\n"
"memtrace[0x972cc68->0x972cd08]: $<-.data.frame $<- statistic boot\n"
"memtrace[0x9abd5e0->0x98ead98]: statistic boot\n"
"memtrace[0x98ead98->0x98eae10]: $<-.data.frame $<- statistic boot\n"
"memtrace[0x98eae10->0x98eae88]: $<-.data.frame $<- statistic boot\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6842
msgid ""
"The object is duplicated fifteen times, three times for each of the @code{R"
"+1} calls to @code{storm.bf}.  This is surprising, since none of the "
"duplications happen inside @code{nls}. Stepping through @code{storm.bf} in "
"the debugger shows that all three happen in the line"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:6845
#, no-wrap
msgid "st$Time <- st$fit + rs[i]\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6850
msgid ""
"Data frames are slower than matrices and this is an example of why.  Using "
"@code{tracemem(st$Viscosity)} does not reveal any additional copying."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6860
msgid ""
"Profiling compiled code is highly system-specific, but this section contains "
"some hints gleaned from various @R{} users.  Some methods need to be "
"different for a compiled executable and for dynamic/shared libraries/objects "
"as used by @R{} packages.  We know of no good way to profile DLLs on Windows."
msgstr ""

#
#. type: node
#: R-exts.texi:6865
#: R-exts.texi:6867
#: R-exts.texi:6868
#: R-exts.texi:7077
#, no-wrap
msgid "Linux"
msgstr ""

#
#. type: node
#: R-exts.texi:6865
#: R-exts.texi:6867
#: R-exts.texi:7077
#: R-exts.texi:7078
#: R-exts.texi:7083
#, no-wrap
msgid "Solaris"
msgstr ""

#
#. type: subsection
#: R-exts.texi:6865
#: R-exts.texi:7077
#: R-exts.texi:7083
#: R-exts.texi:7084
#, no-wrap
msgid "OS X"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6875
msgid ""
"Options include using @command{sprof} for a shared object, and "
"@command{oprofile} (see @uref{http://oprofile.sourceforge.net/}) and "
"@command{perf} (see @uref{https://perf.wiki.kernel.org/@/index.php/@/"
"Tutorial}) for any executable or shared object."
msgstr ""

#
#. type: subsubsection
#: R-exts.texi:6876
#, no-wrap
msgid "sprof"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6880
msgid ""
"You can select shared objects to be profiled with @command{sprof} by setting "
"the environment variable @env{LD_PROFILE}.  For example"
msgstr ""

#
#. type: example
#: R-exts.texi:6887
#, no-wrap
msgid ""
"% setenv LD_PROFILE /path/to/R_HOME/library/stats/libs/stats.so\n"
"R\n"
"... run the boot example\n"
"% sprof /path/to/R_HOME/library/stats/libs/stats.so \\\n"
"  /var/tmp/path/to/R_HOME/library/stats/libs/stats.so.profile\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:6889
#, no-wrap
msgid ""
"Flat profile:\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:6896
#, no-wrap
msgid ""
"Each sample counts as 0.01 seconds.\n"
"  %   cumulative   self              self     total\n"
" time   seconds   seconds    calls  us/call  us/call  name\n"
" 76.19      0.32     0.32        0     0.00           numeric_deriv\n"
" 16.67      0.39     0.07        0     0.00           nls_iter\n"
"  7.14      0.42     0.03        0     0.00           getListElement\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:6899
#, no-wrap
msgid ""
"rm /var/tmp/path/to/R_HOME/library/stats/libs/stats.so.profile\n"
"... to clean up ...\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6903
msgid ""
"It is possible that root access is needed to create the directories used for "
"the profile data."
msgstr ""

#
#. type: subsubsection
#: R-exts.texi:6904
#, no-wrap
msgid "oprofile and operf"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6912
msgid ""
"The @command{oprofile} project has two modes of operation.  In what is now "
"called `legacy' mode, it is uses a daemon to collect information on a "
"process (see below).  Since version 0.9.8 (August 2012), the preferred mode "
"is to use @command{operf}, so we discuss that first.  The modes differ in "
"how the profiling data is collected: it is analysed by tools such as "
"@command{opreport} and @command{oppannote} in both."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6916
msgid ""
"Here is an example on @code{x86_64} Linux using @R{} 3.0.2.  File @file{pvec."
"R} contains the part of the examples from @code{pvec} in package "
"@pkg{parallel}:"
msgstr ""

#
#. type: example
#: R-exts.texi:6922
#, no-wrap
msgid ""
"library(parallel)\n"
"N <- 1e6\n"
"dates <- sprintf('%04d-%02d-%02d', as.integer(2000+rnorm(N)),\n"
"                 as.integer(runif(N, 1, 12)), as.integer(runif(N, 1, 28)))\n"
"system.time(a <- as.POSIXct(dates, format = \"%Y-%m-%d\"))\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6924
msgid "with timings from the final step"
msgstr ""

#. type: example
#: R-exts.texi:6927
#, no-wrap
msgid ""
"   user  system elapsed\n"
"  0.371   0.237   0.612\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6930
msgid "@R{}-level profiling by @code{Rprof} shows"
msgstr ""

#
#. type: example
#: R-exts.texi:6936
#, no-wrap
msgid ""
"                     self.time self.pct total.time total.pct\n"
"\"strptime\"                1.70    41.06       1.70     41.06\n"
"\"as.POSIXct.POSIXlt\"      1.40    33.82       1.42     34.30\n"
"\"sprintf\"                 0.74    17.87       0.98     23.67\n"
"...\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6939
msgid ""
"so the conversion from character to @code{POSIXlt} takes most of the time."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6941
msgid "This can be run under @command{operf} and analysed by"
msgstr ""

#. type: example
#: R-exts.texi:6948
#, no-wrap
msgid ""
"operf R -f pvec.R\n"
"opreport\n"
"opreport -l /path/to/R_HOME/bin/exec/R\n"
"opannotate --source /path/to/R_HOME/bin/exec/R\n"
"## And for the system time\n"
"opreport -l /lib64/libc.so.6\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6950
msgid "The first report shows where (which library etc) the time was spent:"
msgstr ""

#
#. type: example
#: R-exts.texi:6964
#, no-wrap
msgid ""
"CPU_CLK_UNHALT...|\n"
"  samples|      %|\n"
"------------------\n"
"   166761 99.9161 Rdev\n"
"\tCPU_CLK_UNHALT...|\n"
"\t  samples|      %|\n"
"\t------------------\n"
"\t    70586 42.3276 no-vmlinux\n"
"\t    56963 34.1585 libc-2.16.so\n"
"\t    36922 22.1407 R\n"
"\t     1584  0.9499 stats.so\n"
"\t      624  0.3742 libm-2.16.so\n"
"...\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6968
msgid ""
"The rest of the output is voluminous, and only extracts are shown below."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6970
msgid "Most of the time within @R{} is spent in"
msgstr ""

#
#. type: example
#: R-exts.texi:6985
#, no-wrap
msgid ""
"samples  %        image name symbol name\n"
"10397    28.5123  R           R_gc_internal\n"
"5683     15.5848  R           do_sprintf\n"
"3036      8.3258  R           do_asPOSIXct\n"
"2427      6.6557  R           do_strptime\n"
"2421      6.6392  R           Rf_mkCharLenCE\n"
"1480      4.0587  R           w_strptime_internal\n"
"1202      3.2963  R           Rf_qnorm5\n"
"1165      3.1948  R           unif_rand\n"
"675       1.8511  R           mktime0\n"
"617       1.6920  R           makelt\n"
"617       1.6920  R           validate_tm\n"
"584       1.6015  R           day_of_the_week\n"
"...\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6991
msgid ""
"@command{opannotate} shows that 31% of the time in @R{} is spent in "
"@file{memory.c}, 21% in @file{datetime.c} and 7% in @file{Rstrptime.h}.  The "
"analysis for @file{libc} showed that calls to @code{wcsftime} dominated, so "
"those calls were cached for @R{} 3.0.3: the time spent in @code{no-vmlinux} "
"(the kernel) was reduced dramatically."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6995
msgid ""
"On platforms which support it, call graphs can be produced by "
"@command{opcontrol --callgraph} if collected via @command{operf --callgraph}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:6999
msgid ""
"The profiling data is by default stored in sub-directory "
"@file{oprofile_data} of the current directory, which can be removed at the "
"end of the session."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7002
msgid ""
"Another example, from @CRANpkg{sm} version 2.2-5.4.  The example for "
"@code{sm.variogram} took a long time:"
msgstr ""

#. type: example
#: R-exts.texi:7007
#, no-wrap
msgid ""
"system.time(example(sm.variogram))\n"
"...\n"
"   user  system elapsed\n"
"  5.543   3.202   8.785\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7012
msgid ""
"including a lot of system time.  Profiling just the slow part, the second "
"plot, showed"
msgstr ""

#
#. type: example
#: R-exts.texi:7024
#, no-wrap
msgid ""
"  samples|      %|\n"
"------------------\n"
"   381845 99.9885 R\n"
"\tCPU_CLK_UNHALT...|\n"
"\t  samples|      %|\n"
"\t------------------\n"
"\t   187484 49.0995 sm.so\n"
"\t   169627 44.4230 no-vmlinux\n"
"\t    12636  3.3092 libgfortran.so.3.0.0\n"
"\t     6455  1.6905 R\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7030
msgid ""
"so the system time was almost all in the Linux kernel.  It is possible to "
"dig deeper if you have a matching uncompressed kernel with debug symbols to "
"specify @emph{via} @option{--vmlinux}: we did not."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7033
msgid ""
"In `legacy' mode @code{oprofile} works by running a daemon which collects "
"information.  The daemon must be started as root, e.g."
msgstr ""

#
#. type: example
#: R-exts.texi:7040
#, no-wrap
msgid ""
"% su\n"
"% opcontrol --no-vmlinux\n"
"% (optional, some platforms) opcontrol --callgraph=5\n"
"% opcontrol --start\n"
"% exit\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7043
msgid "Then as a user"
msgstr ""

#
#. type: example
#: R-exts.texi:7071
#, no-wrap
msgid ""
"% R\n"
"... run the boot example\n"
"% opcontrol --dump\n"
"% opreport -l /path/to/R_HOME/library/stats/libs/stats.so\n"
"...\n"
"samples  %        symbol name\n"
"1623     75.5939  anonymous symbol from section .plt\n"
"349      16.2552  numeric_deriv\n"
"113       5.2632  nls_iter\n"
"62        2.8878  getListElement\n"
"% opreport -l /path/to/R_HOME/bin/exec/R\n"
"...\n"
"samples  %        symbol name\n"
"76052    11.9912  Rf_eval\n"
"54670     8.6198  Rf_findVarInFrame3\n"
"37814     5.9622  Rf_allocVector\n"
"31489     4.9649  Rf_duplicate\n"
"28221     4.4496  Rf_protect\n"
"26485     4.1759  Rf_cons\n"
"23650     3.7289  Rf_matchArgs\n"
"21088     3.3250  Rf_findFun\n"
"19995     3.1526  findVarLocInFrame\n"
"14871     2.3447  Rf_evalList\n"
"13794     2.1749  R_Newhashpjw\n"
"13522     2.1320  R_gc_internal\n"
"...\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7075
msgid ""
"Shutting down the profiler and clearing the records needs to be done as root."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7082
msgid ""
"On 64-bit (only) Solaris, the standard profiling tool @command{gprof} "
"collects information from shared objects compiled with @option{-pg}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7091
msgid ""
"Developers have recommended @command{sample} (or @command{Sampler.app}, "
"which is a GUI version), @command{Shark} (in version of @code{Xcode} up to "
"those for Snow Leopard), and @command{Instruments} (part of @code{Xcode}, "
"see @uref{https://developer.apple.com/library/mac/#documentation/"
"DeveloperTools/Conceptual/InstrumentsUserGuide/Introduction/Introduction."
"html})."
msgstr ""

#. type: Plain text
#: R-exts.texi:7105
msgid ""
"This chapter covers the debugging of @R{} extensions, starting with the ways "
"to get useful error information and moving on to how to deal with errors "
"that crash @R{}.  For those who prefer other styles there are contributed "
"packages such as @CRANpkg{debug} on @acronym{CRAN} (described in an article "
"in @uref{https://CRAN.R-project.org/@/doc/@/Rnews/@/Rnews_2003-3.pdf, R-News "
"3/3}).  (There are notes from 2002 provided by Roger Peng at @uref{http://"
"www.biostat.jhsph.edu/@/~rpeng/@/docs/@/R-debug-tools.pdf} which provide "
"complementary examples to those given here.)"
msgstr ""

#
#. type: node
#: R-exts.texi:7111
#: R-exts.texi:7114
#: R-exts.texi:7115
#: R-exts.texi:7193
#, no-wrap
msgid "Browsing"
msgstr ""

#
#. type: node
#: R-exts.texi:7111
#: R-exts.texi:7114
#: R-exts.texi:7193
#: R-exts.texi:7194
#: R-exts.texi:7509
#, no-wrap
msgid "Debugging R code"
msgstr ""

#
#. type: node
#: R-exts.texi:7111
#: R-exts.texi:7193
#: R-exts.texi:7509
#: R-exts.texi:7510
#: R-exts.texi:7540
#: R-exts.texi:7609
#: R-exts.texi:7728
#: R-exts.texi:7865
#: R-exts.texi:7991
#: R-exts.texi:8005
#: R-exts.texi:8014
#: R-exts.texi:8049
#, no-wrap
msgid "Checking memory access"
msgstr ""

#
#. type: node
#: R-exts.texi:7111
#: R-exts.texi:7509
#: R-exts.texi:8049
#: R-exts.texi:8050
#: R-exts.texi:8180
#: R-exts.texi:8211
#, no-wrap
msgid "Debugging compiled code"
msgstr ""

#
#. type: findex
#: R-exts.texi:7117
#, no-wrap
msgid "browser"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7124
msgid ""
"Most of the @R{}-level debugging facilities are based around the built-in "
"browser.  This can be used directly by inserting a call to @code{browser()} "
"into the code of a function (for example, using @code{fix(my_function)} ).  "
"When code execution reaches that point in the function, control returns to "
"the @R{} console with a special prompt.  For example"
msgstr ""

#
#. type: example
#: R-exts.texi:7143
#, no-wrap
msgid ""
"> fix(summary.data.frame) ## insert browser() call after for() loop\n"
"> summary(women)\n"
"Called from: summary.data.frame(women)\n"
"Browse[1]> ls()\n"
" [1] \"digits\" \"i\"      \"lbs\"    \"lw\"     \"maxsum\" \"nm\"     \"nr\"     \"nv\"\n"
" [9] \"object\" \"sms\"    \"z\"\n"
"Browse[1]> maxsum\n"
"[1] 7\n"
"Browse[1]>\n"
"     height         weight\n"
" Min.   :58.0   Min.   :115.0\n"
" 1st Qu.:61.5   1st Qu.:124.5\n"
" Median :65.0   Median :135.0\n"
" Mean   :65.0   Mean   :136.7\n"
" 3rd Qu.:68.5   3rd Qu.:148.0\n"
" Max.   :72.0   Max.   :164.0\n"
"> rm(summary.data.frame)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7152
msgid ""
"At the browser prompt one can enter any @R{} expression, so for example "
"@code{ls()} lists the objects in the current frame, and entering the name of "
"an object will@footnote{With the exceptions of the commands listed below: an "
"object of such a name can be printed @emph{via} an explicit call to "
"@code{print}.} print it.  The following commands are also accepted"
msgstr ""

#
#. type: code{#1}
#: R-exts.texi:7154
#, no-wrap
msgid "n"
msgstr ""

#
#. type: itemize
#: R-exts.texi:7160
msgid ""
"Enter `step-through' mode.  In this mode, hitting return executes the next "
"line of code (more precisely one line and any continuation lines).  Typing "
"@code{c} will continue to the end of the current context, e.g.@: to the end "
"of the current loop or function."
msgstr ""

#
#. type: code{#1}
#: R-exts.texi:7161
#, no-wrap
msgid "c"
msgstr ""

#
#. type: itemize
#: R-exts.texi:7165
msgid ""
"In normal mode, this quits the browser and continues execution, and just "
"return works in the same way.  @code{cont} is a synonym."
msgstr ""

#
#. type: code{#1}
#: R-exts.texi:7166
#, no-wrap
msgid "where"
msgstr ""

#
#. type: itemize
#: R-exts.texi:7169
msgid "This prints the call stack.  For example"
msgstr ""

#
#. type: example
#: R-exts.texi:7176
#, no-wrap
msgid ""
"> summary(women)\n"
"Called from: summary.data.frame(women)\n"
"Browse[1]> where\n"
"where 1: summary.data.frame(women)\n"
"where 2: summary(women)\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:7178
#, no-wrap
msgid "Browse[1]>\n"
msgstr ""

#
#. type: code{#1}
#: R-exts.texi:7180
#, no-wrap
msgid "Q"
msgstr ""

#
#. type: itemize
#: R-exts.texi:7184
msgid ""
"Quit both the browser and the current expression, and return to the top-"
"level prompt."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7192
msgid ""
"Errors in code executed at the browser prompt will normally return control "
"to the browser prompt.  Objects can be altered by assignment, and will keep "
"their changed values when the browser is exited.  If really necessary, "
"objects can be assigned to the workspace from the browser prompt (by using "
"@code{<<-} if the name is not already in scope)."
msgstr ""

#
#. type: findex
#: R-exts.texi:7196
#, no-wrap
msgid "traceback"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7205
msgid ""
"Suppose your @R{} program gives an error message.  The first thing to find "
"out is what @R{} was doing at the time of the error, and the most useful "
"tool is @code{traceback()}.  We suggest that this is run whenever the cause "
"of the error is not immediately obvious.  Daily, errors are reported to the "
"@R{} mailing lists as being in some package when @code{traceback()} would "
"show that the error was being reported by some other package or base @R{}.  "
"Here is an example from the regression suite."
msgstr ""

#
#. type: smallexample
#: R-exts.texi:7220
#, no-wrap
msgid ""
"> success <- c(13,12,11,14,14,11,13,11,12)\n"
"> failure <- c(0,0,0,0,0,0,0,2,2)\n"
"> resp <- cbind(success, failure)\n"
"> predictor <- c(0, 5^(0:7))\n"
"> glm(resp ~ 0+predictor, family = binomial(link=\"log\"))\n"
"Error: no valid set of coefficients has been found: please supply starting values\n"
"> traceback()\n"
"3: stop(\"no valid set of coefficients has been found: please supply\n"
"\t starting values\", call. = FALSE)\n"
"2: glm.fit(x = X, y = Y, weights = weights, start = start, etastart = etastart,\n"
"       mustart = mustart, offset = offset, family = family, control = control,\n"
"       intercept = attr(mt, \"intercept\") > 0)\n"
"1: glm(resp ~ 0 + predictor, family = binomial(link =\"log\"))\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7228
msgid ""
"The calls to the active frames are given in reverse order (starting with the "
"innermost).  So we see the error message comes from an explicit check in "
"@code{glm.fit}.  (@code{traceback()} shows you all the lines of the function "
"calls, which can be limited by setting @code{option} @option{\"deparse.max."
"lines\"}.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7231
msgid ""
"Sometimes the traceback will indicate that the error was detected inside "
"compiled code, for example (from @code{?nls})"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:7238
#, no-wrap
msgid ""
"Error in nls(y ~ a + b * x, start = list(a = 0.12345, b = 0.54321), trace = TRUE) :\n"
"\tstep factor 0.000488281 reduced below 'minFactor' of 0.000976563\n"
">  traceback()\n"
"2: .Call(R_nls_iter, m, ctrl, trace)\n"
"1: nls(y ~ a + b * x, start = list(a = 0.12345, b = 0.54321), trace = TRUE)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7245
msgid ""
"This will be the case if the innermost call is to @code{.C}, @code{."
"Fortran}, @code{.Call}, @code{.External} or @code{.Internal}, but as it is "
"also possible for such code to evaluate @R{} expressions, this need not be "
"the innermost call, as in"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:7266
#, no-wrap
msgid ""
"> traceback()\n"
"9: gm(a, b, x)\n"
"8: .Call(R_numeric_deriv, expr, theta, rho, dir)\n"
"7: numericDeriv(form[[3]], names(ind), env)\n"
"6: getRHS()\n"
"5: assign(\"rhs\", getRHS(), envir = thisEnv)\n"
"4: assign(\"resid\", .swts * (lhs - assign(\"rhs\", getRHS(), envir = thisEnv)),\n"
"       envir = thisEnv)\n"
"3: function (newPars)\n"
"   @{\n"
"       setPars(newPars)\n"
"       assign(\"resid\", .swts * (lhs - assign(\"rhs\", getRHS(), envir = thisEnv)),\n"
"\t   envir = thisEnv)\n"
"       assign(\"dev\", sum(resid^2), envir = thisEnv)\n"
"       assign(\"QR\", qr(.swts * attr(rhs, \"gradient\")), envir = thisEnv)\n"
"       return(QR$rank < min(dim(QR$qr)))\n"
"   @}(c(-0.00760232418963883, 1.00119632515036))\n"
"2: .Call(R_nls_iter, m, ctrl, trace)\n"
"1: nls(yeps ~ gm(a, b, x), start = list(a = 0.12345, b = 0.54321))\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7270
msgid ""
"Occasionally @code{traceback()} does not help, and this can be the case if "
"S4 method dispatch is involved.  Consider the following example"
msgstr ""

#
#. type: example
#: R-exts.texi:7280
#, no-wrap
msgid ""
"> xyd <- new(\"xyloc\", x=runif(20), y=runif(20))\n"
"Error in as.environment(pkg) : no item called \"package:S4nswv\"\n"
"on the search list\n"
"Error in initialize(value, ...) : S language method selection got\n"
"an error when called from internal dispatch for function 'initialize'\n"
"> traceback()\n"
"2: initialize(value, ...)\n"
"1: new(\"xyloc\", x = runif(20), y = runif(20))\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7289
msgid ""
"which does not help much, as there is no call to @code{as.environment} in "
"@code{initialize} (and the note ``called from internal dispatch'' tells us "
"so).  In this case we searched the @R{} sources for the quoted call, which "
"occurred in only one place, @code{methods:::.asEnvironmentPackage}.  So now "
"we knew where the error was occurring.  (This was an unusually opaque "
"example.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7291
msgid "The error message"
msgstr ""

#
#. type: example
#: R-exts.texi:7294
#, no-wrap
msgid "evaluation nested too deeply: infinite recursion / options(expressions=)?\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7300
msgid ""
"can be hard to handle with the default value (5000).  Unless you know that "
"there actually is deep recursion going on, it can help to set something like"
msgstr ""

#
#. type: example
#: R-exts.texi:7303
#, no-wrap
msgid "options(expressions=500)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7310
msgid ""
"Sometimes there is warning that clearly is the precursor to some later "
"error, but it is not obvious where it is coming from.  Setting "
"@command{options(warn = 2)} (which turns warnings into errors) can help here."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7314
msgid ""
"Once we have located the error, we have some choices.  One way to proceed is "
"to find out more about what was happening at the time of the crash by "
"looking a @emph{post-mortem} dump.  To do so, set"
msgstr ""

#
#. type: findex
#: R-exts.texi:7314
#, no-wrap
msgid "dump.frames"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7317
msgid ""
"@command{options(error=dump.frames)} and run the code again.  Then invoke "
"@command{debugger()} and explore the dump.  Continuing our example:"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:7322
#, no-wrap
msgid ""
"> options(error = dump.frames)\n"
"> glm(resp ~ 0 + predictor, family = binomial(link =\"log\"))\n"
"Error: no valid set of coefficients has been found: please supply starting values\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7329
msgid ""
"which is the same as before, but an object called @code{last.dump} has "
"appeared in the workspace.  (Such objects can be large, so remove it when it "
"is no longer needed.)  We can examine this at a later time by calling the "
"function @code{debugger}."
msgstr ""

#
#. type: findex
#: R-exts.texi:7329
#, no-wrap
msgid "debugger"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:7339
#, no-wrap
msgid ""
"> debugger()\n"
"Message:  Error: no valid set of coefficients has been found: please supply starting values\n"
"Available environments had calls:\n"
"1: glm(resp ~ 0 + predictor, family = binomial(link = \"log\"))\n"
"2: glm.fit(x = X, y = Y, weights = weights, start = start, etastart = etastart, mus\n"
"3: stop(\"no valid set of coefficients has been found: please supply starting values\n"
"Enter an environment number, or 0 to exit  Selection:\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7349
msgid ""
"which gives the same sequence of calls as @code{traceback}, but in outer-"
"first order and with only the first line of the call, truncated to the "
"current width.  However, we can now examine in more detail what was "
"happening at the time of the error.  Selecting an environment opens the "
"browser in that frame.  So we select the function call which spawned the "
"error message, and explore some of the variables (and execute two function "
"calls)."
msgstr ""

#
#. type: smallexample
#: R-exts.texi:7383
#, no-wrap
msgid ""
"Enter an environment number, or 0 to exit  Selection: 2\n"
"Browsing in the environment with call:\n"
"   glm.fit(x = X, y = Y, weights = weights, start = start, etas\n"
"Called from: debugger.look(ind)\n"
"Browse[1]> ls()\n"
" [1] \"aic\"        \"boundary\"   \"coefold\"    \"control\"    \"conv\"\n"
" [6] \"dev\"        \"dev.resids\" \"devold\"     \"EMPTY\"      \"eta\"\n"
"[11] \"etastart\"   \"family\"     \"fit\"        \"good\"       \"intercept\"\n"
"[16] \"iter\"       \"linkinv\"    \"mu\"         \"mu.eta\"     \"mu.eta.val\"\n"
"[21] \"mustart\"    \"n\"          \"ngoodobs\"   \"nobs\"       \"nvars\"\n"
"[26] \"offset\"     \"start\"      \"valideta\"   \"validmu\"    \"variance\"\n"
"[31] \"varmu\"      \"w\"          \"weights\"    \"x\"          \"xnames\"\n"
"[36] \"y\"          \"ynames\"     \"z\"\n"
"Browse[1]> eta\n"
"\t    1             2             3             4             5\n"
" 0.000000e+00 -2.235357e-06 -1.117679e-05 -5.588393e-05 -2.794197e-04\n"
"\t    6             7             8             9\n"
"-1.397098e-03 -6.985492e-03 -3.492746e-02 -1.746373e-01\n"
"Browse[1]> valideta(eta)\n"
"[1] TRUE\n"
"Browse[1]> mu\n"
"\t1         2         3         4         5         6         7         8\n"
"1.0000000 0.9999978 0.9999888 0.9999441 0.9997206 0.9986039 0.9930389 0.9656755\n"
"\t9\n"
"0.8397616\n"
"Browse[1]> validmu(mu)\n"
"[1] FALSE\n"
"Browse[1]> c\n"
"Available environments had calls:\n"
"1: glm(resp ~ 0 + predictor, family = binomial(link = \"log\"))\n"
"2: glm.fit(x = X, y = Y, weights = weights, start = start, etastart = etastart\n"
"3: stop(\"no valid set of coefficients has been found: please supply starting v\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:7386
#, no-wrap
msgid ""
"Enter an environment number, or 0 to exit  Selection: 0\n"
"> rm(last.dump)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7393
msgid ""
"Because @code{last.dump} can be looked at later or even in another @R{} "
"session, post-mortem debugging is possible even for batch usage of @R{}.  We "
"do need to arrange for the dump to be saved: this can be done either using "
"the command-line flag @option{--save} to save the workspace at the end of "
"the run, or @emph{via} a setting such as"
msgstr ""

#
#. type: example
#: R-exts.texi:7396
#, no-wrap
msgid "> options(error = quote(@{dump.frames(to.file=TRUE); q()@}))\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7401
msgid ""
"See the help on @code{dump.frames} for further options and a worked example."
msgstr ""

#
#. type: findex
#: R-exts.texi:7402
#, no-wrap
msgid "recover"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7404
msgid "An alternative error action is to use the function @command{recover()}:"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:7409
#, no-wrap
msgid ""
"> options(error = recover)\n"
"> glm(resp ~ 0 + predictor, family = binomial(link = \"log\"))\n"
"Error: no valid set of coefficients has been found: please supply starting values\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:7411
#, no-wrap
msgid ""
"Enter a frame number, or 0 to exit\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:7414
#, no-wrap
msgid ""
"1: glm(resp ~ 0 + predictor, family = binomial(link = \"log\"))\n"
"2: glm.fit(x = X, y = Y, weights = weights, start = start, etastart = etastart\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:7416
#, no-wrap
msgid "Selection:\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7424
msgid ""
"which is very similar to @code{dump.frames}.  However, we can examine the "
"state of the program directly, without dumping and re-loading the dump.  As "
"its help page says, @code{recover} can be routinely used as the error action "
"in place of @code{dump.calls} and @code{dump.frames}, since it behaves like "
"@code{dump.frames} in non-interactive use."
msgstr ""

#
#. type: findex
#: R-exts.texi:7426
#, no-wrap
msgid "debug"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7433
msgid ""
"Post-mortem debugging is good for finding out exactly what went wrong, but "
"not necessarily why.  An alternative approach is to take a closer look at "
"what was happening just before the error, and a good way to do that is to "
"use @command{debug}.  This inserts a call to the browser at the beginning of "
"the function, starting in step-through mode.  So in our example we could use"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:7460
#, no-wrap
msgid ""
"> debug(glm.fit)\n"
"> glm(resp ~ 0 + predictor, family = binomial(link =\"log\"))\n"
"debugging in: glm.fit(x = X, y = Y, weights = weights, start = start, etastart = etastart,\n"
"    mustart = mustart, offset = offset, family = family, control = control,\n"
"    intercept = attr(mt, \"intercept\") > 0)\n"
"debug: @{\n"
"## lists the whole function\n"
"Browse[1]>\n"
"debug: x <- as.matrix(x)\n"
"...\n"
"Browse[1]> start\n"
"[1] -2.235357e-06\n"
"debug: eta <- drop(x %*% start)\n"
"Browse[1]> eta\n"
"\t    1             2             3             4             5\n"
" 0.000000e+00 -2.235357e-06 -1.117679e-05 -5.588393e-05 -2.794197e-04\n"
"\t    6             7             8             9\n"
"-1.397098e-03 -6.985492e-03 -3.492746e-02 -1.746373e-01\n"
"Browse[1]>\n"
"debug: mu <- linkinv(eta <- eta + offset)\n"
"Browse[1]> mu\n"
"\t1         2         3         4         5         6         7         8\n"
"1.0000000 0.9999978 0.9999888 0.9999441 0.9997206 0.9986039 0.9930389 0.9656755\n"
"\t9\n"
"0.8397616\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7466
msgid ""
"(The prompt @code{Browse[1]>} indicates that this is the first level of "
"browsing: it is possible to step into another function that is itself being "
"debugged or contains a call to @code{browser()}.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7476
msgid ""
"@code{debug} can be used for hidden functions and S3 methods by e.g.@: "
"@code{debug(stats:::predict.Arima)}.  (It cannot be used for S4 methods, but "
"an alternative is given on the help page for @code{debug}.)  Sometimes you "
"want to debug a function defined inside another function, e.g.@: the "
"function @code{arimafn} defined inside @code{arima}.  To do so, set "
"@code{debug} on the outer function (here @code{arima}) and step through it "
"until the inner function has been defined.  Then call @code{debug} on the "
"inner function (and use @code{c} to get out of step-through mode in the "
"outer function)."
msgstr ""

#
#. type: findex
#: R-exts.texi:7477
#, no-wrap
msgid "undebug"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7482
msgid ""
"To remove debugging of a function, call @code{undebug} with the argument "
"previously given to @code{debug}; debugging otherwise lasts for the rest of "
"the @R{} session (or until the function is edited or otherwise replaced)."
msgstr ""

#
#. type: findex
#: R-exts.texi:7483
#, no-wrap
msgid "trace"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7487
msgid ""
"@code{trace} can be used to temporarily insert debugging code into a "
"function, for example to insert a call to @code{browser()} just before the "
"point of the error.  To return to our running example"
msgstr ""

#
#. type: example
#: R-exts.texi:7501
#, no-wrap
msgid ""
"## first get a numbered listing of the expressions of the function\n"
"> page(as.list(body(glm.fit)), method=\"print\")\n"
"> trace(glm.fit, browser, at=22)\n"
"Tracing function \"glm.fit\" in package \"stats\"\n"
"[1] \"glm.fit\"\n"
"> glm(resp ~ 0 + predictor, family = binomial(link =\"log\"))\n"
"Tracing glm.fit(x = X, y = Y, weights = weights, start = start,\n"
"   etastart = etastart,  .... step 22\n"
"Called from: eval(expr, envir, enclos)\n"
"Browse[1]> n\n"
"## and single-step from here.\n"
"> untrace(glm.fit)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7507
msgid ""
"For your own functions, it may be as easy to use @code{fix} to insert "
"temporary code, but @code{trace} can help with functions in a namespace (as "
"can @code{fixInNamespace}).  Alternatively, use @code{trace(,edit=TRUE)} to "
"insert code visually."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7518
msgid ""
"Errors in memory allocation and reading/writing outside arrays are very "
"common causes of crashes (e.g.,@: segfaults) on some machines.  Often the "
"crash appears long after the invalid memory access: in particular damage to "
"the structures which @R{} itself has allocated may only become apparent at "
"the next garbage collection (or even at later garbage collections after "
"objects have been deleted)."
msgstr ""

#. type: Plain text
#: R-exts.texi:7522
msgid ""
"Note that memory access errors may be seen with LAPACK, BLAS, OpenMP and "
"Java-using packages: some at least of these seem to be intentional, and some "
"are related to passing characters to Fortran."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7529
msgid ""
"Some of these tools can detect mismatched allocation and deallocation.  C++ "
"programmers should note that memory allocated by @code{new []} must be freed "
"by @code{delete []}, other uses of @code{new} by @code{delete}, and memory "
"allocated by @code{malloc}, @code{calloc} and @code{realloc} by "
"@code{free}.  Some platforms will tolerate mismatches (perhaps with memory "
"leaks) but others will segfault."
msgstr ""

#
#. type: node
#: R-exts.texi:7538
#: R-exts.texi:7540
#: R-exts.texi:7541
#: R-exts.texi:7609
#, no-wrap
msgid "Using gctorture"
msgstr ""

#
#. type: node
#: R-exts.texi:7538
#: R-exts.texi:7540
#: R-exts.texi:7609
#: R-exts.texi:7610
#: R-exts.texi:7728
#, no-wrap
msgid "Using valgrind"
msgstr ""

#
#. type: node
#: R-exts.texi:7538
#: R-exts.texi:7609
#: R-exts.texi:7728
#: R-exts.texi:7832
#: R-exts.texi:7865
#, no-wrap
msgid "Using Address Sanitizer"
msgstr ""

#
#. type: node
#: R-exts.texi:7538
#: R-exts.texi:7728
#: R-exts.texi:7865
#: R-exts.texi:7991
#, no-wrap
msgid "Using Undefined Behaviour Sanitizer"
msgstr ""

#
#. type: node
#: R-exts.texi:7538
#: R-exts.texi:7865
#: R-exts.texi:7991
#: R-exts.texi:7992
#: R-exts.texi:8005
#, no-wrap
msgid "Other analyses with `clang'"
msgstr ""

#
#. type: node
#: R-exts.texi:7538
#: R-exts.texi:7991
#: R-exts.texi:8005
#: R-exts.texi:8006
#: R-exts.texi:8014
#, no-wrap
msgid "Using `Dr. Memory'"
msgstr ""

#
#. type: subsection
#: R-exts.texi:7538
#: R-exts.texi:8005
#: R-exts.texi:8014
#: R-exts.texi:8015
#, no-wrap
msgid "Fortran array bounds checking"
msgstr ""

#
#. type: findex
#: R-exts.texi:7543
#, no-wrap
msgid "gctorture"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7547
msgid ""
"We can help to detect memory problems in @R{} objects earlier by running "
"garbage collection as often as possible.  This is achieved by "
"@code{gctorture(TRUE)}, which as described on its help page"
msgstr ""

#
#. type: quotation
#: R-exts.texi:7552
msgid ""
"Provokes garbage collection on (nearly) every memory allocation.  Intended "
"to ferret out memory protection bugs.  Also makes @R{} run @emph{very} "
"slowly, unfortunately."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7559
msgid ""
"The reference to `memory protection' is to missing C-level calls to "
"@code{PROTECT}/@code{UNPROTECT} (@pxref{Garbage Collection}) which if "
"missing allow @R{} objects to be garbage-collected when they are still in "
"use.  But it can also help with other memory-related errors."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7563
msgid ""
"Normally running under @code{gctorture(TRUE)} will just produce a crash "
"earlier in the @R{} program, hopefully close to the actual cause. See the "
"next section for how to decipher such crashes."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7567
msgid ""
"It is possible to run all the examples, tests and vignettes covered by "
"@code{R CMD check} under @code{gctorture(TRUE)} by using the option "
"@option{--use-gct}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7575
msgid ""
"The function @code{gctorture2} provides more refined control over the GC "
"torture process.  Its arguments @code{step}, @code{wait} and "
"@code{inhibit_release} are documented on its help page.  Environment "
"variables can also be used at the start of the @R{} session to turn on GC "
"torture: @env{R_GCTORTURE} corresponds to the @code{step} argument to "
"@code{gctorture2}, @env{R_GCTORTURE_WAIT} to @code{wait}, and "
"@env{R_GCTORTURE_INHIBIT_RELEASE} to @code{inhibit_release}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7579
msgid ""
"If @R{} is configured with @option{--enable-strict-barrier} then a variety "
"of tests for the integrity of the write barrier are enabled.  In addition "
"tests to help detect protect issues are enabled:"
msgstr ""

#
#. type: itemize
#: R-exts.texi:7584
msgid "All GCs are full GCs."
msgstr ""

#
#. type: itemize
#: R-exts.texi:7587
msgid "New nodes in small node pages are marked as @code{NEWSXP} on creation."
msgstr ""

#
#. type: itemize
#: R-exts.texi:7591
msgid ""
"After a GC all free nodes that are not of type @code{NEWSXP} are marked as "
"type @code{FREESXP} and their previous type is recorded."
msgstr ""

#
#. type: itemize
#: R-exts.texi:7597
msgid ""
"Most calls to accessor functions check their @code{SEXP} inputs and "
"@code{SEXP} outputs and signal an error if a @code{FREESXP} is found.  The "
"address of the node and the old type are included in the error message."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7604
msgid ""
"@code{R CMD check --use-gct} can be set to use @code{gctorture2(@var{n})} "
"rather than @code{gctorture(TRUE)} by setting environment variable "
"@env{_R_CHECK_GCT_N_} to a positive integer value to be used as "
"@code{@var{n}}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7607
msgid ""
"Used with a debugger and with @code{gctorture} or @code{gctorture2} this "
"mechanism can be helpful in isolating memory protect problems."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7618
msgid ""
"If you have access to Linux on a common CPU type or supported versions of OS "
"X@footnote{at the time of writing mainly for 10.9 with some support for "
"10.8, none for the current 10.10.} you can use @code{valgrind} (@uref{http://"
"www.valgrind.org/}, pronounced to rhyme with `tinned') to check for possible "
"problems.  To run some examples under @code{valgrind} use something like"
msgstr ""

#
#. type: example
#: R-exts.texi:7622
#, no-wrap
msgid ""
"R -d valgrind --vanilla < mypkg-Ex.R\n"
"R -d \"valgrind --tool=memcheck --leak-check=full\" --vanilla < mypkg-Ex.R\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7637
msgid ""
"where @file{mypkg-Ex.R} is a set of examples, e.g.@: the file created in "
"@file{mypkg.Rcheck} by @code{R CMD check}.  Occasionally this reports memory "
"reads of `uninitialised values' that are the result of compiler "
"optimization, so can be worth checking under an unoptimized compile: for "
"maximal information use a build with debugging symbols.  We know there will "
"be some small memory leaks from @code{readline} and @R{} itself --- these "
"are memory areas that are in use right up to the end of the @R{} session.  "
"Expect this to run around 20x slower than without @code{valgrind}, and in "
"some cases much slower than that.  Several versions of @code{valgrind} were "
"not happy with some optimized BLASes that use @acronym{CPU}-specific "
"instructions so you may need to build a version of @R{} specifically to use "
"with @code{valgrind}."
msgstr ""

#. type: Plain text
#: R-exts.texi:7652
msgid ""
"On platforms where @code{valgrind} is installed you can build a version of "
"@R{} with extra instrumentation to help @code{valgrind} detect errors in the "
"use of memory allocated from the @R{} heap.  The @command{configure} option "
"is @option{--with-valgrind-instrumentation=@var{level}}, where @var{level} "
"is 0, 1 or 2.  Level 0 is the default and does not add any anything.  Level "
"1 will detect some uses@footnote{Those in some numeric, logical, integer, "
"raw, complex vectors and in memory allocated by @code{R_alloc}.} of "
"uninitialised memory and has little impact on speed (compared to level 0). "
"Level 2 will detect many other memory-use bugs@footnote{including using the "
"data sections of @R{} vectors after they are freed.} but make @R{} much "
"slower when running under @code{valgrind}.  Using this in conjunction with "
"@code{gctorture} can be even more effective (and even slower)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7654
msgid "An example of @code{valgrind} output is"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:7673
#, no-wrap
msgid ""
"==12539== Invalid read of size 4\n"
"==12539==    at 0x1CDF6CBE: csc_compTr (Mutils.c:273)\n"
"==12539==    by 0x1CE07E1E: tsc_transpose (dtCMatrix.c:25)\n"
"==12539==    by 0x80A67A7: do_dotcall (dotcode.c:858)\n"
"==12539==    by 0x80CACE2: Rf_eval (eval.c:400)\n"
"==12539==    by 0x80CB5AF: R_execClosure (eval.c:658)\n"
"==12539==    by 0x80CB98E: R_execMethod (eval.c:760)\n"
"==12539==    by 0x1B93DEFA: R_standardGeneric (methods_list_dispatch.c:624)\n"
"==12539==    by 0x810262E: do_standardGeneric (objects.c:1012)\n"
"==12539==    by 0x80CAD23: Rf_eval (eval.c:403)\n"
"==12539==    by 0x80CB2F0: Rf_applyClosure (eval.c:573)\n"
"==12539==    by 0x80CADCC: Rf_eval (eval.c:414)\n"
"==12539==    by 0x80CAA03: Rf_eval (eval.c:362)\n"
"==12539==  Address 0x1C0D2EA8 is 280 bytes inside a block of size 1996 alloc'd\n"
"==12539==    at 0x1B9008D1: malloc (vg_replace_malloc.c:149)\n"
"==12539==    by 0x80F1B34: GetNewPage (memory.c:610)\n"
"==12539==    by 0x80F7515: Rf_allocVector (memory.c:1915)\n"
"...\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7691
msgid ""
"This example is from an instrumented version of @R{}, while tracking down a "
"bug in the @CRANpkg{Matrix} package in 2006.  The first line indicates that "
"@R{} has tried to read 4 bytes from a memory address that it does not have "
"access to. This is followed by a C stack trace showing where the error "
"occurred. Next is a description of the memory that was accessed. It is "
"inside a block allocated by @code{malloc}, called from @code{GetNewPage}, "
"that is, in the internal @R{} heap.  Since this memory all belongs to @R{}, "
"@code{valgrind} would not (and did not)  detect the problem in an "
"uninstrumented build of @R{}.  In this example the stack trace was enough to "
"isolate and fix the bug, which was in @code{tsc_transpose}, and in this "
"example running under @code{gctorture()} did not provide any additional "
"information.  When the stack trace is not sufficiently informative the "
"option @option{--db-attach=yes} to @code{valgrind} may be helpful.  This "
"starts a post-mortem debugger (by default @code{gdb}) so that variables in "
"the C code can be inspected (@pxref{Inspecting R objects})."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7698
msgid ""
"@command{valgrind} is good at spotting the use of uninitialized values: use "
"option @option{--track-origins=yes} to show where these originated from.  "
"What it cannot detect is the misuse of arrays allocated on the stack: this "
"includes C automatic variables and some@footnote{small fixed-size arrays by "
"default in @command{gfortran}, for example.} Fortran arrays."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7704
msgid ""
"It is possible to run all the examples, tests and vignettes covered by "
"@code{R CMD check} under @code{valgrind} by using the option @option{--use-"
"valgrind}.  If you do this you will need to select the @code{valgrind} "
"options some other way, for example by having a @file{~/.valgrindrc} file "
"containing"
msgstr ""

#
#. type: example
#: R-exts.texi:7708
#, no-wrap
msgid ""
"--leak-check=full\n"
"--track-origins=yes\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7712
msgid "or setting the environment variable @env{VALGRIND_OPTS}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7722
msgid ""
"On OS X you may need to ensure that debugging symbols are made available (so "
"@command{valgrind} reports line numbers in files).  This can usually be done "
"with the @command{valgrind} option @option{--dsymutil=yes} to ask for the "
"symbols to be dumped when the @file{.so} file is loaded.  This will not work "
"where packages are installed into a system area (such as the @file{R."
"framework}) and can be slow.  Installing packages with @command{R CMD "
"INSTALL --dsym} installs the dumped symbols.  (This can also be done by "
"setting environment variable @env{PKG_MAKE_DSYM} to a non-empty value before "
"the @command{INSTALL}.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7727
msgid ""
"This section has described the use of @command{memtest}, the default (and "
"most useful) of @code{valgrind}'s tools.  There are others described in its "
"documentation: @command{helgrind} can be useful for threaded programs."
msgstr ""

#
#. type: subsection
#: R-exts.texi:7729
#, no-wrap
msgid "Using the Address Sanitizer"
msgstr ""

#. type: Plain text
#: R-exts.texi:7744
msgid ""
"@command{AddressSanitizer} (`ASan') is a tool with similar aims to the "
"memory checker in @command{valgrind}.  It is available with suitable "
"builds@footnote{currently only on @cputype{ix86}/@cputype{x86_64} Linux and "
"OS X (including the builds in Xcode 7 beta but not earlier Apple releases).  "
"On some platforms, e.g.@: Fedora, the runtime library, @pkg{libasan}, needs "
"to be installed separately. OS X users can install a suitable "
"@command{clang} from the sources, @url{http://llvm.org/releases/} or "
"possibly distributions such as MacPorts or Homebrew.} of @command{gcc} and "
"@command{clang} on common Linux and OS X platforms.  See @uref{http://clang."
"llvm.org/@/docs/@/UsersManual.html#controlling-code-generation}, "
"@uref{http://clang.llvm.org/@/docs/@/AddressSanitizer.html} and "
"@uref{https://code.google.com/@/p/@/address-sanitizer/}."
msgstr ""

#. type: Plain text
#: R-exts.texi:7749
msgid ""
"More thorough checks of C++ code are done if the C++ library has been "
"`annotated': at the time of writing this applied to @code{std::vector} in "
"@code{libc++} for use with @command{clang} and gives rise to @samp{container-"
"overflow} reports."
msgstr ""

#. type: Plain text
#: R-exts.texi:7757
msgid ""
"It requires code to have been compiled @emph{and linked} with @option{-"
"fsanitize=address} and compiling with @code{-fno-omit-frame-pointer} will "
"give more legible reports.  It has a runtime penalty of 2--3x, extended "
"compilation times and uses substantially more memory, often 1--2GB, at run "
"time.  On 64-bit platforms it reserves (but does not allocate) 16--20TB of "
"virtual memory: restrictive shell settings can cause problems."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7761
msgid ""
"By comparison with @command{valgrind}, ASan can detect misuse of stack and "
"global variables but not the use of uninitialized memory."
msgstr ""

#. type: Plain text
#: R-exts.texi:7768
msgid ""
"Recent versions return symbolic addresses for the location of the error "
"provided @command{llvm-symbolizer}@footnote{part of the LLVM project and in "
"distributed in @code{llvm} RPMs and @code{.deb}s on Linux.  It is not "
"currently shipped by Apple.} is on the path: if it is available but not on "
"the path or has been renamed@footnote{as Ubuntu does.}, one can use an "
"environment variable, e.g.@:"
msgstr ""

#
#. type: example
#: R-exts.texi:7771
#, no-wrap
msgid "ASAN_SYMBOLIZER_PATH=/path/to/llvm-symbolizer\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:7781
msgid ""
"An alternative is to pipe the output through @command{asan_symbolize.py}"
"@footnote{installed on some Linux systems as @command{asan_symbolize}, and "
"obtainable from @uref{https://llvm.org/@/svn/@/llvm-project/@/compiler-rt/@/"
"trunk/@/lib/@/asan/scripts/@/asan_symbolize.py}: it makes use of "
"@command{llvm-symbolizer} if available.} and perhaps then (for compiled C++ "
"code) @command{c++filt}.  (On OS X, you may need to run @command{dsymutil} "
"to get line-number reports.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7784
msgid ""
"The simplest way to make use of this is to build a version of @R{} with "
"something like"
msgstr ""

#. type: example
#: R-exts.texi:7788
#, no-wrap
msgid ""
"CC=\"gcc -std=gnu99 -fsanitize=address\"\n"
"CFLAGS=\"-fno-omit-frame-pointer -g -O2 -Wall -pedantic -mtune=native\"\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7794
msgid ""
"which will ensure that the @code{libasan} run-time library is compiled into "
"the @R{} executable.  However this check can be enabled on a per-package "
"basis by using a @file{~/.R/Makevars} file like"
msgstr ""

#
#. type: example
#: R-exts.texi:7799
#, no-wrap
msgid ""
"CC = gcc-4.9 -std=gnu99 -fsanitize=address -fno-omit-frame-pointer\n"
"CXX = g++-4.9 -fsanitize=address -fno-omit-frame-pointer\n"
"F77 = gfortran-4.9 -fsanitize=address\n"
"FC = gfortran-4.9 -fsanitize=address\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7804
msgid ""
"(Note that @code{-fsanitize=address} has to be part of the compiler "
"specification to ensure it is used for linking.  These settings will not be "
"honoured by packages which ignore @file{~/.R/Makevars}.)  It will be "
"necessary to build @R{} with"
msgstr ""

#
#. type: example
#: R-exts.texi:7807
#, no-wrap
msgid "MAIN_LDFLAGS = -fsanitize=address\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7812
msgid ""
"to link the runtime libraries into the @R{} executable if it was not "
"specified as part of @samp{CC} when @R{} was built."
msgstr ""

#. type: Plain text
#: R-exts.texi:7818
msgid ""
"For options available @emph{via} the environment variable @env{ASAN_OPTIONS} "
"see @uref{https://code.google.com/@/p/@/address-sanitizer/@/wiki/@/Flags#Run-"
"time_flags}.  With @command{gcc} additional control is available @emph{via} "
"the @option{--params} flag: see its @command{man} page."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7822
msgid ""
"For more detailed information on an error, @R{} can be run under a debugger "
"with a breakpoint set before the address sanitizer report is produced: for "
"@command{gdb} or @command{lldb} you could use"
msgstr ""

#
#. type: example
#: R-exts.texi:7824
#, no-wrap
msgid "break __asan_report_error\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:7827
msgid ""
"(See @uref{https://code.google.com/@/p/@/address-sanitizer/@/wiki@//"
"AddressSanitizer#gdb}.)"
msgstr ""

#
#. type: node
#: R-exts.texi:7830
#: R-exts.texi:7832
#, no-wrap
msgid "Using Leak Sanitizer"
msgstr ""

#
#. type: subsubsection
#: R-exts.texi:7833
#, no-wrap
msgid "Using the Leak Sanitizer"
msgstr ""

#. type: Plain text
#: R-exts.texi:7839
msgid ""
"For @code{x86_64} Linux there is a leak sanitizer, `LSan': see @uref{https://"
"code.google.com/@/p/@/address-sanitizer/@/wiki/@/LeakSanitizer}.  This is "
"available on recent versions of @code{gcc} and @code{clang}, and where "
"available is compiled in as part of ASan."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7842
msgid ""
"One way to invoke this from an ASan-enabled build is by the environment "
"variable"
msgstr ""

#
#. type: example
#: R-exts.texi:7845
#, no-wrap
msgid "ASAN_OPTIONS='detect_leaks=1'\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:7849
msgid ""
"However, this was made the default for @command{clang} 3.5 and @command{gcc} "
"5.1.0."
msgstr ""

#. type: Plain text
#: R-exts.texi:7855
msgid ""
"When LSan is enabled, leaks give the process a failure error status (by "
"default @code{23}).  For an @R{} package this means the @R{} process, and as "
"the parser retains some memory to the end of the process, if @R{} itself was "
"built against ASan, all runs will have a failure error status (which may "
"include running @R{} as part of building @R{} itself)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7857
msgid "To disable both this and some strict checking use"
msgstr ""

#. type: example
#: R-exts.texi:7860
#, no-wrap
msgid "setenv ASAN_OPTIONS 'alloc_dealloc_mismatch=0:detect_leaks=0:detect_odr_violation=0'\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7864
msgid ""
"LSan also has a `stand-alone' mode where it is compiled in using @option{-"
"fsanitize=leak} and avoids the run-time overhead of ASan."
msgstr ""

#
#. type: subsection
#: R-exts.texi:7866
#, no-wrap
msgid "Using the Undefined Behaviour Sanitizer"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7879
msgid ""
"`Undefined behaviour' is where the language standard does not require "
"particular behaviour from the compiler.  Examples include division by zero "
"(where for doubles @R{} requires the @acronym{ISO}/@acronym{IEC}@tie{}60559 "
"behaviour but C/C++ do not), use of zero-length arrays, shifts too far for "
"signed types (e.g.@: @code{int x, y; y = x << 31;}), out-of-range coercion, "
"invalid C++ casts and mis-alignment.  Not uncommon examples of out-of-range "
"coercion in @R{} packages are attempts to coerce a @code{NaN} or infinity to "
"type @code{int} or @code{NA_INTEGER} to an unsigned type such as "
"@code{size_t}.  Also common is @code{y[x - 1]} forgetting that @code{x} "
"might be @code{NA_INTEGER}."
msgstr ""

#. type: Plain text
#: R-exts.texi:7885
msgid ""
"`UBSanitizer' is a tool for C/C++ source code selected by @option{-"
"fsanitize=undefined} in suitable builds of @command{clang}, and GCC as from "
"4.9.0.  Its (main) runtime library is linked into each package's DLL, so it "
"is less often needed to be included in @env{MAIN_LDFLAGS}."
msgstr ""

#. type: Plain text
#: R-exts.texi:7889
msgid ""
"Some versions have greatly increased compilation times on a few "
"files@footnote{e.g.@: @file{src/main/dotcode.c} and parts of the "
"@pkg{Matrix} sources with @command{clang} 3.7.0).}."
msgstr ""

#. type: Plain text
#: R-exts.texi:7892
msgid ""
"This sanitizer can be combined with the Address Sanitizer by @option{-"
"fsanitize=undefined,address} (where both are supported)."
msgstr ""

#. type: Plain text
#: R-exts.texi:7899
msgid ""
"Finer control of what is checked can be achieved by other options: for "
"@command{clang} see @uref{http://clang.llvm.org/@/docs/@/UsersManual."
"html#controlling-code-generation}.@footnote{or the user manual for your "
"version of @command{clang}, e.g.@: @uref{http://llvm.org/@/releases/"
"@/3.6.2@//tools/@/clang/@/docs/@/UsersManual.html}.} The current set for "
"@command{clang} is (on a single line):"
msgstr ""

#. type: example
#: R-exts.texi:7904
#, no-wrap
msgid ""
"-fsanitize=alignment,bool,bounds,enum,float-cast-overflow,\n"
"float-divide-by-zero,function,integer-divide-by-zero,non-null-attribute,\n"
"null,object-size,return,returns-nonnull-attribute,shift,\n"
"signed-integer-overflow,unreachable,vla-bound,vptr\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7909
msgid ""
"a subset of which could be combined with @code{address}, or use something "
"like"
msgstr ""

#
#. type: example
#: R-exts.texi:7912
#, no-wrap
msgid "-fsanitize=undefined -fno-sanitize=float-divide-by-zero\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:7917
msgid ""
"(@code{function}, @code{return} and @code{vptr} apply only to C++).  In "
"addition,"
msgstr ""

#
#. type: example
#: R-exts.texi:7919
#, no-wrap
msgid "-fsanitize=unsigned-integer-overflow\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7922
msgid ""
"is available as a separate option in some versions of @command{clang} (not "
"enabled by @option{-fsanitize=undefined})."
msgstr ""

#. type: Plain text
#: R-exts.texi:7924
msgid "@command{clang} 3.5 and later may need"
msgstr ""

#
#. type: example
#: R-exts.texi:7927
#, no-wrap
msgid "-fsanitize=undefined -fno-sanitize=float-divide-by-zero,vptr\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:7934
msgid ""
"for C++ code (in @code{CXX} and @code{CXX1X}) as the run-time library for "
"@code{vptr} needs to be linked into the main @R{} executable (and that would "
"need to be linked by @code{clang++}, not @code{clang}: you could try "
"building @R{} with something like"
msgstr ""

#. type: example
#: R-exts.texi:7937
#, no-wrap
msgid ""
"MAIN_LD=\"clang++ -fsanitize=undefined\"\n"
"R_OPENMP_CFLAGS=\"-fopenmp=libomp\"\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:7940
msgid ""
"or add @code{-lclang_rt.asan_cxx-x86_64}@footnote{This includes the C++ "
"UBSAN handlers, despite its name.} or similar to @code{LD_FLAGS})."
msgstr ""

#. type: Plain text
#: R-exts.texi:7945
msgid ""
"See @uref{https://gcc.gnu.org/@/onlinedocs/@/gcc/@/Debugging-Options.html} "
"(or the manual for your version of GCC, installed or @emph{via} "
"@uref{https://gcc.gnu.org/@/onlinedocs/}) for the options supported by GCC: "
"5.2.0 supports"
msgstr ""

#. type: example
#: R-exts.texi:7950
#, no-wrap
msgid ""
"-fsanitize=alignment,bool,bounds,enum,float-cast-overflow,\n"
"integer-divide-by-zero,non-null-attribute,null,object-size,\n"
"return,returns-nonnull-attribute,shift,signed-integer-overflow,\n"
"unreachable,vla-bound,vptr\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7953
msgid "with"
msgstr ""

#
#. type: example
#: R-exts.texi:7955
#, no-wrap
msgid "-fsanitize=float-divide-by-zero\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:7961
msgid ""
"as a separate option not enabled by @code{-fsanitize=undefined} (and not "
"desirable for @R{} uses).  At the time of writing the @code{object-size} and "
"@code{vptr} checks produced many warnings on GCC's own C++ headers, so "
"should be disabled."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7964
msgid "Other useful flags include"
msgstr ""

#
#. type: example
#: R-exts.texi:7966
#, no-wrap
msgid "-no-fsanitize-recover\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7974
msgid ""
"which causes the first report to be fatal (it always is for the "
"@code{unreachable} and @code{return} suboptions).  For more detailed "
"information on where the runtime error occurs, @R{} can be run under a "
"debugger with a breakpoint set before the sanitizer report is produced: for "
"@command{gdb} or @command{lldb} you could use"
msgstr ""

#
#. type: example
#: R-exts.texi:7977
#, no-wrap
msgid ""
"break __ubsan_handle_float_cast_overflow\n"
"break __ubsan_handle_float_cast_overflow_abort\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7980
msgid "or similar (there are handlers for each type of undefined behaviour)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:7984
msgid ""
"There are also the compiler flags @option{-fcatch-undefined-behavior} and "
"@option{-ftrapv}, said to be more reliable in @command{clang} than "
"@command{gcc}."
msgstr ""

#. type: Plain text
#: R-exts.texi:7989
msgid ""
"For more details on the topic see @uref{http://blog.regehr.org/archives/213} "
"and @uref{http://blog.llvm.org/@/2011/@/05/@/what-every-c-programmer-should-"
"know.html} (which has 3 parts)."
msgstr ""

#. type: Plain text
#: R-exts.texi:8001
msgid ""
"Recent versions of @command{clang} on @cputype{x86_64} Linux have "
"`ThreadSanitizer' (@uref{https://code.google.com/@/p/@/thread-sanitizer/}), "
"a `data race detector for C/C++ programs', and "
"`MemorySanitizer' (@uref{http://clang.llvm.org/@/docs/@/MemorySanitizer."
"html}, @uref{https://code.google.com/@/p/@/memory-sanitizer/@/wiki/@/"
"MemorySanitizer})  for the detection of uninitialized memory.  Both are "
"based on and provide similar functionality to tools in @command{valgrind}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8004
msgid ""
"@command{clang} has a `Static Analyser' which can be run on the source files "
"during compilation: see @uref{http://clang-analyzer.llvm.org/}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8013
msgid ""
"`Dr. Memory' from @uref{http://www.drmemory.org/} is a memory checker for "
"(currently) 32-bit Windows, Linux and OS X with similar aims to "
"@command{valgrind}.  It works with unmodified executables@footnote{but works "
"better if inlining and frame pointer optimizations are disabled.} and "
"detects memory access errors, uninitialized reads and memory leaks."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8021
msgid ""
"Most of the Fortran compilers used with @R{} allow code to be compiled with "
"checking of array bounds: for example @command{gfortran} has option @option{-"
"fbounds-check} and Solaris Studio has @option{-C}.  This will give an error "
"when the upper or lower bound is exceeded, e.g."
msgstr ""

#
#. type: example
#: R-exts.texi:8024
#, no-wrap
msgid ""
"At line 97 of file .../src/appl/dqrdc2.f\n"
"Fortran runtime error: Index '1' of dimension 1 of array 'x' above upper bound of 0\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8029
msgid ""
"One does need to be aware that lazy programmers often specify Fortran "
"dimensions as @code{1} rather than @code{*} or a real bound and these will "
"be reported."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8033
msgid ""
"It is easy to arrange to use this check on just the code in your package: "
"add to @file{~/.R/Makevars} something like (for @command{gfortran})"
msgstr ""

#
#. type: example
#: R-exts.texi:8036
#, no-wrap
msgid ""
"FCFLAGS = -g -O2 -mtune=native -fbounds-check\n"
"FFLAGS = -g -O2 -mtune=native -fbounds-check\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8040
msgid "when you run @command{R CMD check}."
msgstr ""

#. type: Plain text
#: R-exts.texi:8047
msgid ""
"This may report incorrectly errors with the way that Fortran character "
"variables are passed, particularly when Fortran subroutines are called from "
"C code.  This may include the use of BLAS and LAPACK subroutines in @R{}, so "
"it is not advisable to build @R{} itself with bounds checking (and may not "
"even be possible as these subroutines are called during the @R{} build)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8060
msgid ""
"Sooner or later programmers will be faced with the need to debug compiled "
"code loaded into @R{}.  This section is geared to platforms using "
"@command{gdb} with code compiled by @code{gcc}, but similar things are "
"possible with other debuggers such as @command{lldb} (@uref{http://lldb.llvm."
"org/}, used on OS X) and Sun's @command{dbx}: some debuggers have graphical "
"front-ends available."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8065
msgid ""
"Consider first `crashes', that is when @R{} terminated unexpectedly with an "
"illegal memory access (a `segfault' or `bus error'), illegal instruction or "
"similar.  Unix-alike versions of @R{} use a signal handler which aims to "
"give some basic information.  For example"
msgstr ""

#
#. type: example
#: R-exts.texi:8069
#, no-wrap
msgid ""
" *** caught segfault ***\n"
"address 0x20000028, cause 'memory not mapped'\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:8077
#, no-wrap
msgid ""
"Traceback:\n"
" 1: .identC(class1[[1]], class2)\n"
" 2: possibleExtends(class(sloti), classi, ClassDef2 = getClassDef(classi,\n"
"where = where))\n"
" 3: validObject(t(cu))\n"
" 4: stopifnot(validObject(cu <- as(tu, \"dtCMatrix\")), validObject(t(cu)),\n"
"validObject(t(tu)))\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:8084
#, no-wrap
msgid ""
"Possible actions:\n"
"1: abort (with core dump)\n"
"2: normal R exit\n"
"3: exit R without saving workspace\n"
"4: exit R saving workspace\n"
"Selection: 3\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8091
msgid ""
"Since the @R{} process may be damaged, the only really safe options are the "
"first or third.  (Note that a core dump is only produced where enabled: a "
"common default in a shell is to limit its size to 0, thereby disabling it.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8099
msgid ""
"A fairly common cause of such crashes is a package which uses @code{.C} or "
"@code{.Fortran} and writes beyond (at either end) one of the arguments it is "
"passed.  As from @R{} 3.0.0 there is a good way to detect this: using "
"@code{options(CBoundsCheck = TRUE)} (which can be selected @emph{via} the "
"environment variable @env{R_C_BOUNDS_CHECK=yes)} changes the way @code{.C} "
"and @code{.Fortran} work to check if the compiled code writes in the 64 "
"bytes at either end of an argument."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8104
msgid ""
"Another cause of a `crash' is to overrun the C stack.  @R{} tries to track "
"that in its own code, but it may happen in third-party compiled code.  For "
"modern POSIX-compliant OSes @R{} can safely catch that and return to the top-"
"level prompt, so one gets something like"
msgstr ""

#
#. type: example
#: R-exts.texi:8109
#, no-wrap
msgid ""
"> .C(\"aaa\")\n"
"Error: segfault from C stack overflow\n"
">\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8116
msgid ""
"However, C stack overflows are fatal under Windows and normally defeat "
"attempts at debugging on that platform.  Further, the size of the stack is "
"set when @R{} is compiled, whereas on POSIX OSes it can be set in the shell "
"from which @R{} is launched."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8118
msgid "If you have a crash which gives a core dump you can use something like"
msgstr ""

#
#. type: example
#: R-exts.texi:8121
#, no-wrap
msgid "gdb /path/to/R/bin/exec/R core.12345\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8127
msgid ""
"to examine the core dump.  If core dumps are disabled or to catch errors "
"that do not generate a dump one can run @R{} directly under a debugger by "
"for example"
msgstr ""

#
#. type: example
#: R-exts.texi:8132
#, no-wrap
msgid ""
"$ R -d gdb --vanilla\n"
"...\n"
"gdb> run\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8139
msgid ""
"at which point @R{} will run normally, and hopefully the debugger will catch "
"the error and return to its prompt.  This can also be used to catch infinite "
"loops or interrupt very long-running code.  For a simple example"
msgstr ""

#
#. type: example
#: R-exts.texi:8157
#, no-wrap
msgid ""
"> for(i in 1:1e7) x <- rnorm(100)\n"
"[hit Ctrl-C]\n"
"Program received signal SIGINT, Interrupt.\n"
"0x00397682 in _int_free () from /lib/tls/libc.so.6\n"
"(gdb) where\n"
"#0  0x00397682 in _int_free () from /lib/tls/libc.so.6\n"
"#1  0x00397eba in free () from /lib/tls/libc.so.6\n"
"#2  0xb7cf2551 in R_gc_internal (size_needed=313)\n"
"    at /users/ripley/R/svn/R-devel/src/main/memory.c:743\n"
"#3  0xb7cf3617 in Rf_allocVector (type=13, length=626)\n"
"    at /users/ripley/R/svn/R-devel/src/main/memory.c:1906\n"
"#4  0xb7c3f6d3 in PutRNGstate ()\n"
"    at /users/ripley/R/svn/R-devel/src/main/RNG.c:351\n"
"#5  0xb7d6c0a5 in do_random2 (call=0x94bf7d4, op=0x92580e8, args=0x9698f98,\n"
"    rho=0x9698f28) at /users/ripley/R/svn/R-devel/src/main/random.c:183\n"
"...\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8163
msgid ""
"In many cases it is possible to attach a debugger to a running process: this "
"is helpful if an alternative front-end is in use or to investigate a task "
"that seems to be taking far too long.  This is done by something like"
msgstr ""

#
#. type: example
#: R-exts.texi:8166
#, no-wrap
msgid "gdb -p @var{pid}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8172
msgid ""
"where @code{@var{pid}} is the id of the @R{} executable or front-end.  This "
"stops the process so its state can be examined: use @code{continue} to "
"resume execution."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8174
msgid "Some ``tricks'' worth knowing follow:"
msgstr ""

#
#. type: node
#: R-exts.texi:8178
#: R-exts.texi:8180
#: R-exts.texi:8211
#, no-wrap
msgid "Finding entry points"
msgstr ""

#
#. type: node
#: R-exts.texi:8178
#: R-exts.texi:8180
#: R-exts.texi:8211
#, no-wrap
msgid "Inspecting R objects"
msgstr ""

#
#. type: subsection
#: R-exts.texi:8181
#, no-wrap
msgid "Finding entry points in dynamically loaded code"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8187
msgid ""
"Under most compilation environments, compiled code dynamically loaded into "
"@R{} cannot have breakpoints set within it until it is loaded.  To use a "
"symbolic debugger on such dynamically loaded code under Unix-alikes use"
msgstr ""

#
#. type: itemize
#: R-exts.texi:8191
msgid ""
"Call the debugger on the @R{} executable, for example by @kbd{R -d gdb}."
msgstr ""

#
#. type: itemize
#: R-exts.texi:8193
msgid "Start @R{}."
msgstr ""

#
#. type: itemize
#: R-exts.texi:8196
msgid ""
"At the @R{} prompt, use @code{dyn.load} or @code{library} to load your "
"shared object."
msgstr ""

#
#. type: itemize
#: R-exts.texi:8199
msgid ""
"Send an interrupt signal.  This will put you back to the debugger prompt."
msgstr ""

#
#. type: itemize
#: R-exts.texi:8201
msgid "Set the breakpoints in your code."
msgstr ""

#
#. type: itemize
#: R-exts.texi:8203
msgid "Continue execution of @R{} by typing @kbd{signal 0@key{RET}}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8209
msgid ""
"Under Windows signals may not be able to be used, and if so the procedure is "
"more complicated.  See the rw-FAQ and @uref{http://www.stats.uwo.ca/faculty/"
"murdoch/software/debuggingR/gdb.shtml, @code{www.stats.uwo.ca/faculty/"
"murdoch/@/software/@/debuggingR/@/gdb.shtml}}."
msgstr ""

#
#. type: cindex
#: R-exts.texi:8212
#: R-exts.texi:8213
#, no-wrap
msgid "Inspecting R objects when debugging"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8219
msgid ""
"The key to inspecting @R{} objects from compiled code is the function "
"@code{PrintValue(SEXP @var{s})} which uses the normal @R{} printing "
"mechanisms to print the @R{} object pointed to by @var{s}, or the safer "
"version @code{R_PV(SEXP @var{s})} which will only print `objects'."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8222
msgid ""
"One way to make use of @code{PrintValue} is to insert suitable calls into "
"the code to be debugged."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8226
msgid ""
"Another way is to call @code{R_PV} from the symbolic debugger.  "
"(@code{PrintValue} is hidden as @code{Rf_PrintValue}.)  For example, from "
"@code{gdb} we can use"
msgstr ""

#
#. type: example
#: R-exts.texi:8229
#, no-wrap
msgid "(gdb) p R_PV(ab)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8234
msgid ""
"using the object @code{ab} from the convolution example, if we have placed a "
"suitable breakpoint in the convolution C code."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8237
msgid ""
"To examine an arbitrary @R{} object we need to work a little harder.  For "
"example, let"
msgstr ""

#
#. type: example
#: R-exts.texi:8240
#, no-wrap
msgid "R> DF <- data.frame(a = 1:3, b = 4:6)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8246
msgid ""
"By setting a breakpoint at @code{do_get} and typing @kbd{get(\"DF\")} at the "
"@R{} prompt, one can find out the address in memory of @code{DF}, for example"
msgstr ""

#
#. type: group
#: R-exts.texi:8270
#, no-wrap
msgid ""
"Value returned is $1 = (SEXPREC *) 0x40583e1c\n"
"(gdb) p *$1\n"
"$2 = @{\n"
"  sxpinfo = @{type = 19, obj = 1, named = 1, gp = 0,\n"
"    mark = 0, debug = 0, trace = 0, = 0@},\n"
"  attrib = 0x40583e80,\n"
"  u = @{\n"
"    vecsxp = @{\n"
"      length = 2,\n"
"      type = @{c = 0x40634700 \"0>X@@D>X@@0>X@@\", i = 0x40634700,\n"
"\tf = 0x40634700, z = 0x40634700, s = 0x40634700@},\n"
"      truelength = 1075851272,\n"
"    @},\n"
"    primsxp = @{offset = 2@},\n"
"    symsxp = @{pname = 0x2, value = 0x40634700, internal = 0x40203008@},\n"
"    listsxp = @{carval = 0x2, cdrval = 0x40634700, tagval = 0x40203008@},\n"
"    envsxp = @{frame = 0x2, enclos = 0x40634700@},\n"
"    closxp = @{formals = 0x2, body = 0x40634700, env = 0x40203008@},\n"
"    promsxp = @{value = 0x2, expr = 0x40634700, env = 0x40203008@}\n"
"  @}\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8275
msgid "(Debugger output reformatted for better legibility)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8278
msgid ""
"Using @code{R_PV()} one can ``inspect'' the values of the various elements "
"of the SEXP, for example,"
msgstr ""

#
#. type: group
#: R-exts.texi:8284
#, no-wrap
msgid ""
"(gdb) p R_PV($1->attrib)\n"
"$names\n"
"[1] \"a\" \"b\"\n"
"\n"
msgstr ""

#
#. type: group
#: R-exts.texi:8287
#, no-wrap
msgid ""
"$row.names\n"
"[1] \"1\" \"2\" \"3\"\n"
"\n"
msgstr ""

#
#. type: group
#: R-exts.texi:8290
#, no-wrap
msgid ""
"$class\n"
"[1] \"data.frame\"\n"
"\n"
msgstr ""

#
#. type: group
#: R-exts.texi:8292
#, no-wrap
msgid "$3 = void\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8297
msgid ""
"To find out where exactly the corresponding information is stored, one needs "
"to go ``deeper'':"
msgstr ""

#
#. type: group
#: R-exts.texi:8309
#, no-wrap
msgid ""
"(gdb) set $a = $1->attrib\n"
"(gdb) p $a->u.listsxp.tagval->u.symsxp.pname->u.vecsxp.type.c\n"
"$4 = 0x405d40e8 \"names\"\n"
"(gdb) p $a->u.listsxp.carval->u.vecsxp.type.s[1]->u.vecsxp.type.c\n"
"$5 = 0x40634378 \"b\"\n"
"(gdb) p $1->u.vecsxp.type.s[0]->u.vecsxp.type.i[0]\n"
"$6 = 1\n"
"(gdb) p $1->u.vecsxp.type.s[1]->u.vecsxp.type.i[1]\n"
"$7 = 5\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8315
msgid ""
"Another alternative is the @code{R_inspect} function which shows the low-"
"level structure of the objects recursively (addresses differ from the above "
"as this example is created on another machine):"
msgstr ""

#
#. type: group
#: R-exts.texi:8333
#, no-wrap
msgid ""
"(gdb) p R_inspect($1)\n"
"@@100954d18 19 VECSXP g0c2 [OBJ,NAM(2),ATT] (len=2, tl=0)\n"
"  @@100954d50 13 INTSXP g0c2 [NAM(2)] (len=3, tl=0) 1,2,3\n"
"  @@100954d88 13 INTSXP g0c2 [NAM(2)] (len=3, tl=0) 4,5,6\n"
"ATTRIB:\n"
"  @@102a70140 02 LISTSXP g0c0 []\n"
"    TAG: @@10083c478 01 SYMSXP g0c0 [MARK,NAM(2),gp=0x4000] \"names\"\n"
"    @@100954dc0 16 STRSXP g0c2 [NAM(2)] (len=2, tl=0)\n"
"      @@10099df28 09 CHARSXP g0c1 [MARK,gp=0x21] \"a\"\n"
"      @@10095e518 09 CHARSXP g0c1 [MARK,gp=0x21] \"b\"\n"
"    TAG: @@100859e60 01 SYMSXP g0c0 [MARK,NAM(2),gp=0x4000] \"row.names\"\n"
"    @@102a6f868 13 INTSXP g0c1 [NAM(2)] (len=2, tl=1) -2147483648,-3\n"
"    TAG: @@10083c948 01 SYMSXP g0c0 [MARK,gp=0x4000] \"class\"\n"
"    @@102a6f838 16 STRSXP g0c1 [NAM(2)] (len=1, tl=1)\n"
"      @@1008c6d48 09 CHARSXP g0c2 [MARK,gp=0x21,ATT] \"data.frame\"\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8337
msgid "In general the representation of each object follows the format:"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:8340
#, no-wrap
msgid "@@<address> <type-nr> <type-name> <gc-info> [<flags>] ...\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:8347
msgid ""
"For a more fine-grained control over the depth of the recursion and the "
"output of vectors @code{R_inspect3} takes additional two character()  "
"parameters: maximum depth and the maximal number of elements that will be "
"printed for scalar vectors. The defaults in @code{R_inspect} are currently "
"-1 (no limit) and 5 respectively."
msgstr ""

#
#. type: node
#: R-exts.texi:8368
#: R-exts.texi:8370
#: R-exts.texi:8371
#: R-exts.texi:8372
#: R-exts.texi:8394
#, no-wrap
msgid "Operating system access"
msgstr ""

#
#. type: node
#: R-exts.texi:8368
#: R-exts.texi:8370
#: R-exts.texi:8394
#: R-exts.texi:8563
#, no-wrap
msgid "Interface functions .C and .Fortran"
msgstr ""

#
#. type: node
#: R-exts.texi:8368
#: R-exts.texi:8394
#: R-exts.texi:8563
#: R-exts.texi:8693
#, no-wrap
msgid "dyn.load and dyn.unload"
msgstr ""

#
#. type: node
#: R-exts.texi:8368
#: R-exts.texi:8563
#: R-exts.texi:8693
#: R-exts.texi:8694
#: R-exts.texi:8695
#: R-exts.texi:8872
#: R-exts.texi:8939
#: R-exts.texi:8991
#, no-wrap
msgid "Registering native routines"
msgstr ""

#
#. type: node
#: R-exts.texi:8368
#: R-exts.texi:8693
#: R-exts.texi:8991
#: R-exts.texi:8992
#: R-exts.texi:8993
#: R-exts.texi:9108
#, no-wrap
msgid "Creating shared objects"
msgstr ""

#
#. type: node
#: R-exts.texi:8368
#: R-exts.texi:8991
#: R-exts.texi:9108
#: R-exts.texi:9109
#: R-exts.texi:9110
#: R-exts.texi:9236
#, no-wrap
msgid "Interfacing C++ code"
msgstr ""

#
#. type: node
#: R-exts.texi:8368
#: R-exts.texi:9108
#: R-exts.texi:9236
#: R-exts.texi:9237
#: R-exts.texi:9254
#, no-wrap
msgid "Fortran I/O"
msgstr ""

#
#. type: node
#: R-exts.texi:8368
#: R-exts.texi:9236
#: R-exts.texi:9254
#: R-exts.texi:9255
#: R-exts.texi:9276
#: R-exts.texi:9350
#: R-exts.texi:9427
#, no-wrap
msgid "Linking to other packages"
msgstr ""

#
#. type: node
#: R-exts.texi:8368
#: R-exts.texi:9254
#: R-exts.texi:9427
#: R-exts.texi:9428
#: R-exts.texi:9429
#: R-exts.texi:9552
#: R-exts.texi:9670
#: R-exts.texi:9692
#: R-exts.texi:9768
#: R-exts.texi:9909
#: R-exts.texi:9939
#: R-exts.texi:10000
#: R-exts.texi:10032
#: R-exts.texi:10092
#: R-exts.texi:10171
#: R-exts.texi:10257
#, no-wrap
msgid "Handling R objects in C"
msgstr ""

#
#. type: node
#: R-exts.texi:8368
#: R-exts.texi:9427
#: R-exts.texi:10257
#: R-exts.texi:10274
#: R-exts.texi:10315
#: R-exts.texi:10456
#: R-exts.texi:10502
#, no-wrap
msgid "Interface functions .Call and .External"
msgstr ""

#
#. type: node
#: R-exts.texi:8368
#: R-exts.texi:10257
#: R-exts.texi:10502
#: R-exts.texi:10503
#: R-exts.texi:10504
#: R-exts.texi:10633
#: R-exts.texi:10716
#: R-exts.texi:10939
#, no-wrap
msgid "Evaluating R expressions from C"
msgstr ""

#
#. type: node
#: R-exts.texi:8368
#: R-exts.texi:10502
#: R-exts.texi:10939
#: R-exts.texi:10940
#: R-exts.texi:10941
#: R-exts.texi:11008
#: R-exts.texi:11038
#, no-wrap
msgid "Parsing R code from C"
msgstr ""

#
#. type: node
#: R-exts.texi:8368
#: R-exts.texi:10939
#: R-exts.texi:11038
#: R-exts.texi:11039
#: R-exts.texi:11162
#: R-exts.texi:11213
#, no-wrap
msgid "External pointers and weak references"
msgstr ""

#
#. type: node
#: R-exts.texi:8368
#: R-exts.texi:11038
#: R-exts.texi:11213
#: R-exts.texi:11214
#: R-exts.texi:11234
#, no-wrap
msgid "Vector accessor functions"
msgstr ""

#
#. type: section
#: R-exts.texi:8368
#: R-exts.texi:11213
#: R-exts.texi:11234
#: R-exts.texi:11235
#, no-wrap
msgid "Character encoding issues"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8376
msgid ""
"Access to operating system functions is @emph{via} the @R{} functions "
"@code{system} and @code{system2}."
msgstr ""

#
#. type: findex
#: R-exts.texi:8376
#, no-wrap
msgid "system"
msgstr ""

#
#. type: findex
#: R-exts.texi:8377
#, no-wrap
msgid "system2"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8384
msgid ""
"The details will differ by platform (see the on-line help), and about all "
"that can safely be assumed is that the first argument will be a string "
"@code{command} that will be passed for execution (not necessarily by a "
"shell) and the second argument to @code{system} will be @code{internal} "
"which if true will collect the output of the command into an @R{} character "
"vector."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8388
msgid ""
"On POSIX-compliant OSes these commands pass a command-line to a shell: "
"Windows is not POSIX-compliant and there is a separate function @code{shell} "
"to do so."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8390
msgid "The function @code{system.time}"
msgstr ""

#
#. type: findex
#: R-exts.texi:8390
#, no-wrap
msgid "system.time"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8393
msgid ""
"is available for timing.  Timing on child processes is only available on "
"Unix-alikes, and may not be reliable there."
msgstr ""

#
#. type: section
#: R-exts.texi:8395
#, no-wrap
msgid "Interface functions @code{.C} and @code{.Fortran}"
msgstr ""

#
#. type: cindex
#: R-exts.texi:8396
#: R-exts.texi:10259
#, no-wrap
msgid "Interfaces to compiled code"
msgstr ""

#
#. type: findex
#: R-exts.texi:8398
#, no-wrap
msgid ".C"
msgstr ""

#
#. type: findex
#: R-exts.texi:8399
#, no-wrap
msgid ".Fortran"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8407
msgid ""
"These two functions provide an interface to compiled code that has been "
"linked into @R{}, either at build time or @emph{via} @code{dyn.load} "
"(@pxref{dyn.load and dyn.unload}).  They are primarily intended for compiled "
"C and FORTRAN 77 code respectively, but the @code{.C} function can be used "
"with other languages which can generate C interfaces, for example C++ "
"(@pxref{Interfacing C++ code})."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8415
msgid ""
"The first argument to each function is a character string specifying the "
"symbol name as known@footnote{possibly after some platform-specific "
"translation, e.g.@: adding leading or trailing underscores.} to C or "
"FORTRAN, that is the function or subroutine name.  (That the symbol is "
"loaded can be tested by, for example, @code{is.loaded(\"cg\")}.  Use the "
"name you pass to @code{.C} or @code{.Fortran} rather than the translated "
"symbol name.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8422
msgid ""
"There can be up to 65 further arguments giving @R{} objects to be passed to "
"compiled code.  Normally these are copied before being passed in, and copied "
"again to an @R{} list object when the compiled code returns.  If the "
"arguments are given names, these are used as names for the components in the "
"returned list object (but not passed to the compiled code)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8426
msgid ""
"The following table gives the mapping between the modes of @R{} atomic "
"vectors and the types of arguments to a C function or FORTRAN subroutine."
msgstr ""

#
#. type: multitable
#: R-exts.texi:8430
msgid "@headitem @R{} storage mode"
msgstr ""

#
#. type: multitable
#: R-exts.texi:8430
msgid "C type"
msgstr ""

#
#. type: multitable
#: R-exts.texi:8430
msgid "FORTRAN type"
msgstr ""

#
#. type: item
#: R-exts.texi:8430
#, no-wrap
msgid "@code{logical}   @tab @code{int *}     @tab @code{INTEGER}"
msgstr ""

#
#. type: item
#: R-exts.texi:8431
#, no-wrap
msgid "@code{integer}   @tab @code{int *}     @tab @code{INTEGER}"
msgstr ""

#
#. type: item
#: R-exts.texi:8432
#, no-wrap
msgid "@code{double}    @tab @code{double *}  @tab @code{DOUBLE PRECISION}"
msgstr ""

#
#. type: item
#: R-exts.texi:8433
#, no-wrap
msgid "@code{complex}   @tab @code{Rcomplex *} @tab @code{DOUBLE COMPLEX}"
msgstr ""

#
#. type: item
#: R-exts.texi:8434
#, no-wrap
msgid "@code{character} @tab @code{char **}   @tab @code{CHARACTER*255}"
msgstr ""

#
#. type: item
#: R-exts.texi:8435
#, no-wrap
msgid "@code{raw}       @tab @code{unsigned char *}    @tab none"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8446
msgid ""
"Do please note the first two.  On the 64-bit Unix/Linux/OS X platforms, "
"@code{long} is 64-bit whereas @code{int} and @code{INTEGER} are 32-bit.  "
"Code ported from S-PLUS (which uses @code{long *} for @code{logical} and "
"@code{integer}) will not work on all 64-bit platforms (although it may "
"appear to work on some, including Windows).  Note also that if your compiled "
"code is a mixture of C functions and FORTRAN subprograms the argument types "
"must match as given in the table above."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8455
msgid ""
"C type @code{Rcomplex} is a structure with @code{double} members @code{r} "
"and @code{i} defined in the header file @file{R_ext/Complex.h} included by "
"@file{R.h}.  (On most platforms this is stored in a way compatible with the "
"C99 @code{double complex} type: however, it may not be possible to pass "
"@code{Rcomplex} to a C99 function expecting a @code{double complex} "
"argument.  Nor need it be compatible with a C++ @code{complex} type.  "
"Moreover, the compatibility can depends on the optimization level set for "
"the compiler.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8459
msgid ""
"Only a single character string can be passed to or from FORTRAN, and the "
"success of this is compiler-dependent.  Other @R{} objects can be passed to "
"@code{.C}, but it is much better to use one of the other interfaces."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8465
msgid ""
"It is possible to pass numeric vectors of storage mode @code{double} to C as "
"@code{float *} or to FORTRAN as @code{REAL} by setting the attribute "
"@code{Csingle}, most conveniently by using the @R{} functions @code{as."
"single}, @code{single} or @code{mode}.  This is intended only to be used to "
"aid interfacing existing C or FORTRAN code."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8471
msgid ""
"Logical values are sent as @code{0} (@code{FALSE}), @code{1} (@code{TRUE}) "
"or @code{INT_MIN = -2147483648} (@code{NA}, but only if @code{NAOK} is "
"true), and the compiled code should return one of these three values.  (Non-"
"zero values other than @code{INT_MIN} are mapped to @code{TRUE}.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8477
msgid ""
"Unless formal argument @code{NAOK} is true, all the other arguments are "
"checked for missing values @code{NA} and for the @acronym{IEEE} special "
"values @code{NaN}, @code{Inf} and @code{-Inf}, and the presence of any of "
"these generates an error.  If it is true, these values are passed unchecked."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8489
msgid ""
"Argument @code{PACKAGE} confines the search for the symbol name to a "
"specific shared object (or use @code{\"base\"} for code compiled into "
"@R{}).  Its use is highly desirable, as there is no way to avoid two package "
"writers using the same symbol name, and such name clashes are normally "
"sufficient to cause @R{} to crash.  (If it is not present and the call is "
"from the body of a function defined in a package namespace, the shared "
"object loaded by the first (if any) @code{useDynLib} directive will be "
"used.  However, prior to @R{} 2.15.2 the detection of the correct namespace "
"is unreliable and you are strongly recommended to use the @code{PACKAGE} "
"argument for packages to be used with earlier versions of @R{}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8493
msgid ""
"Note that the compiled code should not return anything except through its "
"arguments: C functions should be of type @code{void} and FORTRAN subprograms "
"should be subroutines."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8497
msgid ""
"To fix ideas, let us consider a very simple example which convolves two "
"finite sequences. (This is hard to do fast in interpreted @R{} code, but "
"easy in C code.)  We could do this using @code{.C} by"
msgstr ""

#
#. type: group
#: R-exts.texi:8503
#, no-wrap
msgid ""
"void convolve(double *a, int *na, double *b, int *nb, double *ab)\n"
"@{\n"
"    int nab = *na + *nb - 1;\n"
"\n"
msgstr ""

#
#. type: group
#: R-exts.texi:8510
#, no-wrap
msgid ""
"    for(int i = 0; i < nab; i++)\n"
"\tab[i] = 0.0;\n"
"    for(int i = 0; i < *na; i++)\n"
"\tfor(int j = 0; j < *nb; j++)\n"
"\t    ab[i + j] += a[i] * b[j];\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8515
msgid "called from @R{} by"
msgstr ""

#
#. type: group
#: R-exts.texi:8525
#, no-wrap
msgid ""
"conv <- function(a, b)\n"
"    .C(\"convolve\",\n"
"       as.double(a),\n"
"       as.integer(length(a)),\n"
"       as.double(b),\n"
"       as.integer(length(b)),\n"
"       ab = double(length(a) + length(b) - 1))$ab\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8531
msgid ""
"Note that we take care to coerce all the arguments to the correct @R{} "
"storage mode before calling @code{.C}; mistakes in matching the types can "
"lead to wrong results or hard-to-catch errors."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8544
msgid ""
"Special care is needed in handling @code{character} vector arguments in C "
"(or C++).  On entry the contents of the elements are duplicated and assigned "
"to the elements of a @code{char **} array, and on exit the elements of the C "
"array are copied to create new elements of a character vector.  This means "
"that the contents of the character strings of the @code{char **} array can "
"be changed, including to @code{\\0} to shorten the string, but the strings "
"cannot be lengthened.  It is possible@footnote{Note that this is then not "
"checked for over-runs by option @code{CBoundsCheck = TRUE}.} to allocate a "
"new string @emph{via} @code{R_alloc} and replace an entry in the @code{char "
"**} array by the new string.  However, when character vectors are used other "
"than in a read-only way, the @code{.Call} interface is much to be preferred."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8556
msgid ""
"Passing character strings to FORTRAN code needs even more care, and should "
"be avoided where possible.  Only the first element of the character vector "
"is passed in, as a fixed-length (255) character array.  Up to 255 characters "
"are passed back to a length-one character vector.  How well this works (or "
"even if it works at all) depends on the C and FORTRAN compilers on each "
"platform (including on their options).  Often what is being passed to "
"FORTRAN is one of a small set of possible values (a factor in @R{} terms) "
"which could alternatively be passed as an integer code: similarly FORTRAN "
"code that wants to generate diagnostic messages can pass an integer code to "
"a C or @R{} wrapper which will convert it to a character string."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8562
msgid ""
"It is possible to pass some @R{} objects other than atomic vectors via "
"@code{.C}, but this is only supported for historical compatibility: use the "
"@code{.Call} or @code{.External} interfaces for such objects.  Any C/C++ "
"code that includes @file{Rinternals.h} should be called via @code{.Call} or "
"@code{.External}."
msgstr ""

#
#. type: section
#: R-exts.texi:8564
#, no-wrap
msgid "@code{dyn.load} and @code{dyn.unload}"
msgstr ""

#
#. type: cindex
#: R-exts.texi:8565
#, no-wrap
msgid "Dynamic loading"
msgstr ""

#
#. type: findex
#: R-exts.texi:8567
#, no-wrap
msgid "dyn.load"
msgstr ""

#
#. type: findex
#: R-exts.texi:8568
#, no-wrap
msgid "dyn.unload"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8573
msgid ""
"Compiled code to be used with @R{} is loaded as a shared object (Unix-alikes "
"including OS X, @pxref{Creating shared objects} for more information) or DLL "
"(Windows)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8578
msgid ""
"The shared object/DLL is loaded by @code{dyn.load} and unloaded by @code{dyn."
"unload}.  Unloading is not normally necessary, but it is needed to allow the "
"DLL to be re-built on some platforms, including Windows."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8583
msgid ""
"The first argument to both functions is a character string giving the path "
"to the object.  Programmers should not assume a specific file extension for "
"the object/DLL (such as @file{.so}) but use a construction like"
msgstr ""

#
#. type: example
#: R-exts.texi:8586
#, no-wrap
msgid "file.path(path1, path2, paste0(\"mylib\", .Platform$dynlib.ext))\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8593
msgid ""
"for platform independence.  On Unix-alike systems the path supplied to "
"@code{dyn.load} can be an absolute path, one relative to the current "
"directory or, if it starts with @samp{~}, relative to the user's home "
"directory."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8597
msgid ""
"Loading is most often done automatically based on the @code{useDynLib()} "
"declaration in the @file{NAMESPACE} file, but may be done explicitly "
"@emph{via} a call to @code{library.dynam}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8599
msgid "This has the form"
msgstr ""

#
#. type: example
#: R-exts.texi:8602
#, no-wrap
msgid "library.dynam(\"libname\", package, lib.loc)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8609
msgid ""
"where @code{libname} is the object/DLL name @emph{with the extension "
"omitted}.  Note that the first argument, @code{chname}, should @strong{not} "
"be @code{package} since this will not work if the package is installed under "
"another name."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8615
msgid ""
"Under some Unix-alike systems there is a choice of how the symbols are "
"resolved when the object is loaded, governed by the arguments @code{local} "
"and @code{now}.  Only use these if really necessary: in particular using "
"@code{now=FALSE} and then calling an unresolved symbol will terminate @R{} "
"unceremoniously."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8623
msgid ""
"@R{} provides a way of executing some code automatically when a object/DLL "
"is either loaded or unloaded.  This can be used, for example, to register "
"native routines with @R{}'s dynamic symbol mechanism, initialize some data "
"in the native code, or initialize a third party library.  On loading a DLL, "
"@R{} will look for a routine within that DLL named @code{R_init_@var{lib}} "
"where @var{lib} is the name of the DLL file with the extension removed.  For "
"example, in the command"
msgstr ""

#
#. type: example
#: R-exts.texi:8626
#, no-wrap
msgid "library.dynam(\"mylib\", package, lib.loc)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8636
msgid ""
"R looks for the symbol named @code{R_init_mylib}.  Similarly, when unloading "
"the object, @R{} looks for a routine named @code{R_unload_@var{lib}}, e.g., "
"@code{R_unload_mylib}.  In either case, if the routine is present, @R{} will "
"invoke it and pass it a single argument describing the DLL.  This is a value "
"of type @code{DllInfo} which is defined in the @file{Rdynload.h} file in the "
"@file{R_ext} directory."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8643
msgid ""
"Note that there are some implicit restrictions on this mechanism as the "
"basename of the DLL needs to be both a valid file name and valid as part of "
"a C entry point (e.g.@: it cannot contain @samp{.}): for portable code it is "
"best to confine DLL names to be @acronym{ASCII} alphanumeric plus "
"underscore.  If entry point @code{R_init_@var{lib}} is not found it is also "
"looked for with @samp{.} replaced by @samp{_}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8647
msgid ""
"The following example shows templates for the initialization and unload "
"routines for the @code{mylib} DLL."
msgstr ""

#
#. type: example
#: R-exts.texi:8654
#, no-wrap
msgid ""
"#include <R.h>\n"
"#include <Rinternals.h>\n"
"#include <R_ext/Rdynload.h>\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:8661
#, no-wrap
msgid ""
"void\n"
"R_init_mylib(DllInfo *info)\n"
"@{\n"
"  /* Register routines,\n"
"     allocate resources. */\n"
"@}\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:8667
#, no-wrap
msgid ""
"void\n"
"R_unload_mylib(DllInfo *info)\n"
"@{\n"
"  /* Release resources. */\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8676
msgid ""
"If a shared object/DLL is loaded more than once the most recent version is "
"used.  More generally, if the same symbol name appears in several shared "
"objects, the most recently loaded occurrence is used.  The @code{PACKAGE} "
"argument and registration (see the next section) provide good ways to avoid "
"any ambiguity in which occurrence is meant."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8682
msgid ""
"On Unix-alikes the paths used to resolve dynamically linked dependent "
"libraries are fixed (for security reasons) when the process is launched, so "
"@code{dyn.load} will only look for such libraries in the locations set by "
"the @file{R} shell script (@emph{via} @file{etc/ldpaths}) and in the OS-"
"specific defaults."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8691
msgid ""
"Windows allows more control (and less security) over where dependent DLLs "
"are looked for.  On all versions this includes the @env{PATH} environment "
"variable, but with lowest priority: note that it does not include the "
"directory from which the DLL was loaded.  It is possible to add a single "
"path with quite high priority @emph{via} the @code{DLLpath} argument to "
"@code{dyn.load}.  This is (by default) used by @code{library.dynam} to "
"include the package's @file{libs/i386} or @file{libs/x64} directory in the "
"DLL search path."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8698
msgid "By `native' routine, we mean an entry point in compiled code."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8711
msgid ""
"In calls to @code{.C}, @code{.Call}, @code{.Fortran} and @code{.External}, "
"@R{} must locate the specified native routine by looking in the appropriate "
"shared object/DLL.  By default, @R{} uses the operating system-specific "
"dynamic loader to lookup the symbol in all loaded DLLs and elsewhere.  "
"Alternatively, the author of the DLL can explicitly register routines with "
"@R{} and use a single, platform-independent mechanism for finding the "
"routines in the DLL.  One can use this registration mechanism to provide "
"additional information about a routine, including the number and type of the "
"arguments, and also make it available to @R{} programmers under a different "
"name.  In the future, registration may be used to implement a form of "
"``secure'' or limited native access."
msgstr ""

#
#. type: findex
#: R-exts.texi:8712
#, no-wrap
msgid "R_registerRoutines"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8724
msgid ""
"To register routines with @R{}, one calls the C routine "
"@code{R_registerRoutines}.  This is typically done when the DLL is first "
"loaded within the initialization routine @code{R_init_@var{dll name}} "
"described in @ref{dyn.load and dyn.unload}.  @code{R_registerRoutines} takes "
"5 arguments.  The first is the @code{DllInfo} object passed by @R{} to the "
"initialization routine. This is where @R{} stores the information about the "
"methods.  The remaining 4 arguments are arrays describing the routines for "
"each of the 4 different interfaces: @code{.C}, @code{.Call}, @code{.Fortran} "
"and @code{.External}.  Each argument is a @code{FIND}-terminated array of "
"the element types given in the following table:"
msgstr ""

#
#. type: item
#: R-exts.texi:8727
#, no-wrap
msgid "@code{.C} @tab @code{R_CMethodDef}"
msgstr ""

#
#. type: item
#: R-exts.texi:8728
#, no-wrap
msgid "@code{.Call} @tab @code{R_CallMethodDef}"
msgstr ""

#
#. type: item
#: R-exts.texi:8729
#, no-wrap
msgid "@code{.Fortran} @tab @code{R_FortranMethodDef}"
msgstr ""

#
#. type: item
#: R-exts.texi:8730
#, no-wrap
msgid "@code{.External} @tab @code{R_ExternalMethodDef}"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8740
msgid ""
"Currently, the @code{R_ExternalMethodDef} is the same as "
"@code{R_CallMethodDef} type and contains fields for the name of the routine "
"by which it can be accessed in @R{}, a pointer to the actual native symbol "
"(i.e., the routine itself), and the number of arguments the routine expects "
"to be passed from @R{}. For example, if we had a routine named @code{myCall} "
"defined as"
msgstr ""

#
#. type: example
#: R-exts.texi:8743
#, no-wrap
msgid "SEXP myCall(SEXP a, SEXP b, SEXP c);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8747
msgid "we would describe this as"
msgstr ""

#
#. type: example
#: R-exts.texi:8753
#, no-wrap
msgid ""
"static R_CallMethodDef callMethods[]  = @{\n"
"  @{\"myCall\", (DL_FUNC) &myCall, 3@},\n"
"  @{NULL, NULL, 0@}\n"
"@};\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8762
msgid ""
"along with any other routines for the @code{.Call} interface. For routines "
"with a variable number of arguments invoked @emph{via} the @code{.External} "
"interface, one specifies @code{-1} for the number of arguments which tells "
"@R{} not to check the actual number passed.  Note that the number of "
"arguments passed to @code{.External} were not checked prior to @R{} 3.0.0."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8773
msgid ""
"Routines for use with the @code{.C} and @code{.Fortran} interfaces are "
"described with similar data structures, but which have two additional fields "
"for describing the type and ``style'' of each argument.  Each of these can "
"be omitted. However, if specified, each should be an array with the same "
"number of elements as the number of parameters for the routine.  The types "
"array should contain the @code{SEXP} types describing the expected type of "
"the argument. (Technically, the elements of the types array are of type "
"@code{R_NativePrimitiveArgType} which is just an unsigned integer.)  The "
"@R{} types and corresponding type identifiers are provided in the following "
"table:"
msgstr ""

#
#. type: item
#: R-exts.texi:8776
#, no-wrap
msgid "@code{numeric} @tab @code{REALSXP}"
msgstr ""

#
#. type: item
#: R-exts.texi:8777
#, no-wrap
msgid "@code{integer} @tab @code{INTSXP}"
msgstr ""

#
#. type: item
#: R-exts.texi:8778
#, no-wrap
msgid "@code{logical} @tab @code{LGLSXP}"
msgstr ""

#
#. type: item
#: R-exts.texi:8779
#, no-wrap
msgid "@code{single} @tab @code{SINGLESXP}"
msgstr ""

#
#. type: item
#: R-exts.texi:8780
#, no-wrap
msgid "@code{character} @tab @code{STRSXP}"
msgstr ""

#
#. type: item
#: R-exts.texi:8781
#, no-wrap
msgid "@code{list} @tab @code{VECSXP}"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8786
msgid "Consider a C routine, @code{myC}, declared as"
msgstr ""

#
#. type: example
#: R-exts.texi:8789
#, no-wrap
msgid "void myC(double *x, int *n, char **names, int *status);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8792
msgid "We would register it as"
msgstr ""

#
#. type: example
#: R-exts.texi:8797
#, no-wrap
msgid ""
"static R_NativePrimitiveArgType myC_t[] = @{\n"
"    REALSXP, INTSXP, STRSXP, LGLSXP\n"
"@};\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:8802
#, no-wrap
msgid ""
"static R_CMethodDef cMethods[] = @{\n"
"   @{\"myC\", (DL_FUNC) &myC, 4, myC_t@}\n"
"   @{NULL, NULL, 0@}\n"
"@};\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8811
msgid ""
"One can also specify whether each argument is used simply as input, or as "
"output, or as both input and output.  The style field in the description of "
"a method is used for this.  The purpose is to allow@footnote{but this is not "
"currently done.} @R{} to transfer values more efficiently across the @R{}-C/"
"FORTRAN interface by avoiding copying values when it is not necessary. "
"Typically, one omits this information in the registration data."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8817
msgid ""
"Having created the arrays describing each routine, the last step is to "
"actually register them with @R{}.  We do this by calling "
"@code{R_registerRoutines}.  For example, if we have the descriptions above "
"for the routines accessed by the @code{.C} and @code{.Call} we would use the "
"following code:"
msgstr ""

#
#. type: example
#: R-exts.texi:8824
#, no-wrap
msgid ""
"void\n"
"R_init_myLib(DllInfo *info)\n"
"@{\n"
"   R_registerRoutines(info, cMethods, callMethods, NULL, NULL);\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8831
msgid ""
"This routine will be invoked when @R{} loads the shared object/DLL named "
"@code{myLib}.  The last two arguments in the call to "
"@code{R_registerRoutines} are for the routines accessed by @code{.Fortran} "
"and @code{.External} interfaces.  In our example, these are given as "
"@code{NULL} since we have no routines of these types."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8835
msgid ""
"When @R{} unloads a shared object/DLL, its registrations are automatically "
"removed.  There is no other facility for unregistering a symbol."
msgstr ""

#. type: Plain text
#: R-exts.texi:8840
msgid ""
"Examples of registering routines can be found in the different packages in "
"the @R{} source tree (e.g., @pkg{stats}).  Also, there is a brief, high-"
"level introduction in @emph{R News} (volume 1/3, September 2001, pages "
"20--23, @uref{https://www.r-project.org/@/doc/@/Rnews/Rnews_2001-3.pdf})."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8847
msgid ""
"Once routines are registered, they can be referred to as @R{} objects if "
"they this is arranged in the @code{useDynLib} call in the package's "
"@file{NAMESPACE} file (see @ref{useDynLib}).  This avoids the overhead of "
"looking up an entry point each time it is used, and ensure that the entry "
"point in the package is the one used (without a @code{PACKAGE = \"pkg\"} "
"argument).  So for example the @pkg{stats} package has"
msgstr ""

#
#. type: example
#: R-exts.texi:8850
#, no-wrap
msgid ""
"# Refer to all C/Fortran routines by their name prefixed by C_\n"
"useDynLib(stats, .registration = TRUE, .fixes = \"C_\")\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8853
msgid ""
"in its @file{NAMESPACE} file, and then @code{ansari.test}'s default methods "
"can contain"
msgstr ""

#
#. type: example
#: R-exts.texi:8857
#, no-wrap
msgid ""
"\tpansari <- function(q, m, n)\n"
"\t    .C(C_pansari, as.integer(length(q)), p = as.double(q),\n"
"\t\tas.integer(m), as.integer(n))$p\n"
msgstr ""

#
#. type: node
#: R-exts.texi:8870
#: R-exts.texi:8872
#: R-exts.texi:8873
#: R-exts.texi:8939
#, no-wrap
msgid "Speed considerations"
msgstr ""

#
#. type: subsection
#: R-exts.texi:8870
#: R-exts.texi:8872
#: R-exts.texi:8939
#: R-exts.texi:8940
#, no-wrap
msgid "Linking to native routines in other packages"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8879
msgid ""
"Sometimes registering native routines or using a @code{PACKAGE} argument can "
"make a large difference.  The results can depend quite markedly on the OS "
"(and even if it is 32- or 64-bit), on the version of @R{} and what else is "
"loaded into @R{} at the time."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8882
msgid ""
"To fix ideas, first consider @code{x84_64} OS 10.7 and @R{} 2.15.2.  A "
"simple @code{.Call} function might be"
msgstr ""

#
#. type: example
#: R-exts.texi:8884
#, no-wrap
msgid "foo <- function(x) .Call(\"foo\", x)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8886
#: R-exts.texi:10530
msgid "with C code"
msgstr ""

#
#. type: example
#: R-exts.texi:8891
#, no-wrap
msgid ""
"SEXP foo(SEXP x)\n"
"@{\n"
"    return x;\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8895
msgid ""
"If we compile with by @command{R CMD SHLIB foo.c}, load the code by "
"@code{dyn.load(\"foo.so\")} and run @code{foo(pi)} it took around 22 "
"microseconds (us). Specifying the DLL by"
msgstr ""

#
#. type: example
#: R-exts.texi:8897
#, no-wrap
msgid "foo2 <- function(x) .Call(\"foo\", x, PACKAGE = \"foo\")\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8899
msgid "reduced the time to 1.7 us."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8907
msgid ""
"Now consider making these functions part of a package whose @file{NAMESPACE} "
"file uses @code{useDynlib(foo)}.  This immediately reduces the running time "
"as @code{\"foo\"} will be preferentially looked for @file{foo.dll}.  Without "
"specifying @code{PACKAGE} it took about 5 us (it needs to fathom out the "
"appropriate DLL each time it is invoked but it does not need to search all "
"DLLs), and with the @code{PACKAGE} argument it is again about 1.7 us."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8913
msgid ""
"Next suppose the package has registered the native routine @code{foo}.  Then "
"@code{foo()} still has to find the appropriate DLL but can get to the entry "
"point in the DLL faster, in about 4.2 us.  And @code{foo2()} now takes about "
"1 us.  If we register the symbols in the @file{NAMESPACE} file and use"
msgstr ""

#
#. type: example
#: R-exts.texi:8915
#, no-wrap
msgid "foo3 <- function(x) .Call(C_foo, x)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8918
msgid ""
"then the address for the native routine is looked up just once when the "
"package is loaded, and @code{foo3(pi)} takes about 0.8 us."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8921
msgid ""
"Versions using @code{.C()} rather than @code{.Call()} take about 0.2 us "
"longer."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8925
msgid ""
"These are all quite small differences, but C routines are not uncommonly "
"invoked millions of times for run times of a few microseconds, and those "
"doing such things may wish to be aware of the differences."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8929
msgid ""
"On Linux and Solaris there is a much smaller overhead in looking up symbols "
"so @code{foo(pi)} takes around 5 times as long as @code{foo3(pi)}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8936
msgid ""
"Symbol lookup on Windows used to be far slower, so @R{} maintains a small "
"cache.  If the cache is currently empty enough that the symbol can be stored "
"in the cache then the performance is similar to Linux and Solaris: if not it "
"may be slower.  @R{}'s own code always uses registered symbols and so these "
"never contribute to the cache: however many other packages do rely on symbol "
"lookup."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8946
msgid ""
"In addition to registering C routines to be called by @R{}, it can at times "
"be useful for one package to make some of its C routines available to be "
"called by C code in another package.  The interface consists of two routines "
"declared in header @file{R_ext/Rdynload.h} as"
msgstr ""

#
#. type: findex
#: R-exts.texi:8947
#, no-wrap
msgid "R_RegisterCCallable"
msgstr ""

#
#. type: findex
#: R-exts.texi:8948
#, no-wrap
msgid "R_GetCCallable"
msgstr ""

#
#. type: example
#: R-exts.texi:8953
#, no-wrap
msgid ""
"void R_RegisterCCallable(const char *package, const char *name,\n"
"\t\t\t DL_FUNC fptr);\n"
"DL_FUNC R_GetCCallable(const char *package, const char *name);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8957
msgid ""
"A package @pkg{packA} that wants to make a C routine @code{myCfun} available "
"to C code in other packages would include the call"
msgstr ""

#
#. type: example
#: R-exts.texi:8960
#, no-wrap
msgid "R_RegisterCCallable(\"packA\", \"myCfun\", myCfun);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8965
msgid ""
"in its initialization function @code{R_init_packA}.  A package @pkg{packB} "
"that wants to use this routine would retrieve the function pointer with a "
"call of the form"
msgstr ""

#
#. type: example
#: R-exts.texi:8968
#, no-wrap
msgid "p_myCfun = R_GetCCallable(\"packA\", \"myCfun\");\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8974
msgid ""
"The author of @pkg{packB} is responsible for ensuring that @code{p_myCfun} "
"has an appropriate declaration. In the future @R{} may provide some "
"automated tools to simplify exporting larger numbers of routines."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8980
msgid ""
"A package that wishes to make use of header files in other packages needs to "
"declare them as a comma-separated list in the field @samp{LinkingTo} in the "
"@file{DESCRIPTION} file.  This then arranges that the @file{include} "
"directories in the installed linked-to packages are added to the include "
"paths for C and C++ code."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8986
msgid ""
"It must specify@footnote{whether or not @samp{LinkingTo} is used.} "
"@samp{Imports} or @samp{Depends} of those packages, for they have to be "
"loaded@footnote{so there needs to be a corresponding @code{import} or "
"@code{importFrom} entry in the @file{NAMESPACE} file.} prior to this one (so "
"the path to their compiled code has been registered)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:8990
msgid ""
"A @acronym{CRAN} example of the use of this mechanism is package "
"@CRANpkg{lme4}, which links to @CRANpkg{Matrix}."
msgstr ""

#
#. type: findex
#: R-exts.texi:8994
#, no-wrap
msgid "R CMD SHLIB"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9004
msgid ""
"Shared objects for loading into @R{} can be created using @command{R CMD "
"SHLIB}.  This accepts as arguments a list of files which must be object "
"files (with extension @file{.o}) or sources for C, C++, FORTRAN 77, Fortran "
"9x, Objective C or Objective C++ (with extensions @file{.c}, @file{.cc} or "
"@file{.cpp}, @file{.f}, @file{.f90} or @file{.f95}, @file{.m}, and @file{."
"mm} or @file{.M}, respectively), or commands to be passed to the linker.  "
"See @kbd{R CMD SHLIB --help} (or the @R{} help for @code{SHLIB}) for usage "
"information."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9007
msgid ""
"If compiling the source files does not work ``out of the box'', you can "
"specify additional flags by setting some of the variables"
msgstr ""

#
#. type: vindex
#: R-exts.texi:9007
#, no-wrap
msgid "PKG_CPPFLAGS"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9009
msgid ""
"@code{PKG_CPPFLAGS} (for the C preprocessor, typically @samp{-I} flags),"
msgstr ""

#
#. type: vindex
#: R-exts.texi:9009
#, no-wrap
msgid "PKG_CFLAGS"
msgstr ""

#
#. type: vindex
#: R-exts.texi:9010
#, no-wrap
msgid "PKG_CXXFLAGS"
msgstr ""

#
#. type: vindex
#: R-exts.texi:9011
#, no-wrap
msgid "PKG_FFLAGS"
msgstr ""

#
#. type: vindex
#: R-exts.texi:9012
#, no-wrap
msgid "PKG_FCFLAGS"
msgstr ""

#
#. type: vindex
#: R-exts.texi:9013
#, no-wrap
msgid "PKG_OBJCFLAGS"
msgstr ""

#
#. type: vindex
#: R-exts.texi:9014
#, no-wrap
msgid "PKG_OBJCXXFLAGS"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9021
msgid ""
"@code{PKG_CFLAGS}, @code{PKG_CXXFLAGS}, @code{PKG_FFLAGS}, "
"@code{PKG_FCFLAGS}, @code{PKG_OBJCFLAGS}, and @code{PKG_OBJCXXFLAGS} (for "
"the C, C++, FORTRAN 77, Fortran 9x, Objective C, and Objective C++ "
"compilers, respectively) in the file @file{Makevars} in the compilation "
"directory (or, of course, create the object files directly from the command "
"line)."
msgstr ""

#
#. type: vindex
#: R-exts.texi:9021
#, no-wrap
msgid "PKG_LIBS"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9027
msgid ""
"Similarly, variable @code{PKG_LIBS} in @file{Makevars} can be used for "
"additional @samp{-l} and @samp{-L} flags to be passed to the linker when "
"building the shared object. (Supplying linker commands as arguments to "
"@code{R CMD SHLIB} will take precedence over @code{PKG_LIBS} in "
"@file{Makevars}.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9032
msgid ""
"It is possible to arrange to include compiled code from other languages by "
"setting the macro @samp{OBJECTS} in file @file{Makevars}, together with "
"suitable rules to make the objects."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9037
msgid ""
"Flags which are already set (for example in file @file{etc@var{R_ARCH}/"
"Makeconf}) can be overridden by the environment variable @env{MAKEFLAGS} (at "
"least for systems using a POSIX-compliant @code{make}), as in (Bourne shell "
"syntax)"
msgstr ""

#
#. type: example
#: R-exts.texi:9040
#, no-wrap
msgid "MAKEFLAGS=\"CFLAGS=-O3\" R CMD SHLIB *.c\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9045
msgid ""
"It is also possible to set such variables in personal @file{Makevars} files, "
"which are read after the local @file{Makevars} and the system makefiles or "
"in a site-wide @file{Makevars.site} file."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9054
msgid ""
"Note that as @command{R CMD SHLIB} uses Make, it will not remake a shared "
"object just because the flags have changed, and if @file{test.c} and "
"@file{test.f} both exist in the current directory"
msgstr ""

#
#. type: example
#: R-exts.texi:9057
#, no-wrap
msgid "R CMD SHLIB test.f\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9061
msgid "will compile @file{test.c}!"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9071
msgid ""
"If the @file{src} subdirectory of an add-on package contains source code "
"with one of the extensions listed above or a file @file{Makevars} but "
"@strong{not} a file @file{Makefile}, @command{R CMD INSTALL} creates a "
"shared object (for loading into @R{} through @code{useDynlib} in the "
"@file{NAMESPACE}, or in the @code{.onLoad} function of the package)  using "
"the @command{R CMD SHLIB} mechanism.  If file @file{Makevars} exists it is "
"read first, then the system makefile and then any personal @file{Makevars} "
"files."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9078
msgid ""
"If the @file{src} subdirectory of package contains a file @file{Makefile}, "
"this is used by @command{R CMD INSTALL} in place of the @code{R CMD SHLIB} "
"mechanism.  @command{make} is called with makefiles @file{@var{R_HOME}/"
"etc@var{R_ARCH}/Makeconf}, @file{src/Makefile} and any personal "
"@file{Makevars} files (in that order).  The first target found in @file{src/"
"Makefile} is used."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9081
msgid ""
"It is better to make use of a @file{Makevars} file rather than a "
"@file{Makefile}: the latter should be needed only exceptionally."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9098
msgid ""
"Under Windows the same commands work, but @file{Makevars.win} will be used "
"in preference to @file{Makevars}, and only @file{src/Makefile.win} will be "
"used by @code{R CMD INSTALL} with @file{src/Makefile} being ignored.  For "
"past experiences of building DLLs with a variety of compilers, see file "
"@samp{README.packages} and @uref{http://www.stats.uwo.ca/@/faculty/@/murdoch/"
"@/software/@/compilingDLLs/} .  Under Windows you can supply an exports "
"definitions file called @file{@var{dllname}-win.def}: otherwise all entry "
"points in objects (but not libraries) supplied to @code{R CMD SHLIB} will be "
"exported from the DLL.  An example is @file{stats-win.def} for the "
"@pkg{stats} package: a @acronym{CRAN} example in package @CRANpkg{fastICA}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9107
msgid ""
"If you feel tempted to read the source code and subvert these mechanisms, "
"please resist.  Far too much developer time has been wasted in chasing down "
"errors caused by failures to follow this documentation, and even more by "
"package authors demanding explanations as to why their packages no longer "
"work.  In particular, undocumented environment or @command{make} variables "
"are not for use by package writers and are subject to change without notice."
msgstr ""

#
#. type: cindex
#: R-exts.texi:9111
#, no-wrap
msgid "C++ code, interfacing"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9116
msgid ""
"Suppose we have the following hypothetical C++ library, consisting of the "
"two files @file{X.h} and @file{X.cpp}, and implementing the two classes "
"@code{X} and @code{Y} which we want to use in @R{}."
msgstr ""

#
#. type: example
#: R-exts.texi:9121
#, no-wrap
msgid ""
"// X.h\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:9125
#, no-wrap
msgid ""
"class X @{\n"
"public: X (); ~X ();\n"
"@};\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:9129
#, no-wrap
msgid ""
"class Y @{\n"
"public: Y (); ~Y ();\n"
"@};\n"
msgstr ""

#
#. type: example
#: R-exts.texi:9137
#, no-wrap
msgid ""
"// X.cpp\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:9140
#, no-wrap
msgid ""
"#include <R.h>\n"
"#include \"X.h\"\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:9142
#, no-wrap
msgid ""
"static Y y;\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:9147
#, no-wrap
msgid ""
"X::X()  @{ REprintf(\"constructor X\\n\"); @}\n"
"X::~X() @{ REprintf(\"destructor X\\n\");  @}\n"
"Y::Y()  @{ REprintf(\"constructor Y\\n\"); @}\n"
"Y::~Y() @{ REprintf(\"destructor Y\\n\");  @}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9153
msgid ""
"To use with @R{}, the only thing we have to do is writing a wrapper function "
"and ensuring that the function is enclosed in"
msgstr ""

#
#. type: example
#: R-exts.texi:9157
#: R-exts.texi:9172
#, no-wrap
msgid ""
"extern \"C\" @{\n"
"\n"
msgstr ""

#
#. type: group
#: R-exts.texi:9159
#, no-wrap
msgid "@}\n"
msgstr ""

#
#. type: example
#: R-exts.texi:9168
#, no-wrap
msgid ""
"// X_main.cpp:\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:9170
#, no-wrap
msgid ""
"#include \"X.h\"\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:9176
#, no-wrap
msgid ""
"void X_main () @{\n"
"  X x;\n"
"@}\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:9178
#, no-wrap
msgid "@} // extern \"C\"\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9187
msgid ""
"Compiling and linking should be done with the C++ compiler-linker (rather "
"than the C compiler-linker or the linker itself); otherwise, the C++ "
"initialization code (and hence the constructor of the static variable "
"@code{Y}) are not called.  On a properly configured system, one can simply "
"use"
msgstr ""

#
#. type: example
#: R-exts.texi:9190
#, no-wrap
msgid "R CMD SHLIB X.cpp X_main.cpp\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9195
msgid ""
"to create the shared object, typically @file{X.so} (the file name extension "
"may be different on your platform).  Now starting @R{} yields"
msgstr ""

#
#. type: group
#: R-exts.texi:9202
#, no-wrap
msgid ""
"R version 2.14.1 Patched (2012-01-16 r58124)\n"
"Copyright (C) 2012 The R Foundation for Statistical Computing\n"
"...\n"
"Type    \"q()\" to quit R.\n"
msgstr ""

#
#. type: group
#: R-exts.texi:9214
#, no-wrap
msgid ""
"R> dyn.load(paste(\"X\", .Platform$dynlib.ext, sep = \"\"))\n"
"constructor Y\n"
"R> .C(\"X_main\")\n"
"constructor X\n"
"destructor X\n"
"list()\n"
"R> q()\n"
"Save workspace image? [y/n/c]: y\n"
"destructor Y\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9219
msgid ""
"The @R{} for Windows @acronym{FAQ} (@file{rw-FAQ}) contains details of how "
"to compile this example under Windows."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9227
msgid ""
"Earlier version of this example used C++ iostreams: this is best avoided.  "
"There is no guarantee that the output will appear in the @R{} console, and "
"indeed it will not on the @R{} for Windows console.  Use @R{} code or the C "
"entry points (@pxref{Printing}) for all I/O if at all possible.  Examples "
"have been seen where merely loading a DLL that contained calls to C++ I/O "
"upset @R{}'s own C I/O (for example by resetting buffers on open files)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9235
msgid ""
"Most @R{} header files can be included within C++ programs, and they should "
"@strong{not} be included within an @code{extern \"C\"} block (as they "
"include C++ system headers).  It may not be possible to include some @R{} "
"headers as they in turn include C header files that may cause conflicts---if "
"this happens, define @samp{NO_C_HEADERS} before including the @R{} headers, "
"and include C++ versions (such as @samp{cmath}) of the appropriate headers "
"yourself before the @R{} headers."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9243
msgid ""
"We have already warned against the use of C++ iostreams not least because "
"output is not guaranteed to appear on the @R{} console, and this warning "
"applies equally to Fortran (77 or 9x) output to units @code{*} and @code{6}. "
"@xref{Printing from FORTRAN}, which describes workarounds."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9253
msgid ""
"In the past most Fortran compilers implemented I/O on top of the C I/O "
"system and so the two interworked successfully.  This was true of "
"@command{g77}, but it is less true of @command{gfortran} as used in "
"@code{gcc 4.y.z}.  In particular, any package that makes use of Fortran I/O "
"will when compiled on Windows interfere with C I/O: when the Fortran I/O is "
"initialized (typically when the package is loaded) the C @code{stdout} and "
"@code{stderr} are switched to LF line endings.  (Function @code{init} in "
"file @file{src/modules/lapack/init_win.c} shows how to mitigate this.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9262
msgid ""
"It is not in general possible to link a DLL in package @pkg{packA} to a DLL "
"provided by package @pkg{packB} (for the security reasons mentioned in "
"@ref{dyn.load and dyn.unload}, and also because some platforms distinguish "
"between shared objects and dynamic libraries), but it is on Windows."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9267
msgid ""
"Note that there can be tricky versioning issues here, as package @pkg{packB} "
"could be re-installed after package @pkg{packA} --- it is desirable that the "
"API provided by package @pkg{packB} remains backwards-compatible."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9270
msgid ""
"Shipping a static library in package @pkg{packB} for other packages to link "
"to avoids most of the difficulties."
msgstr ""

#
#. type: node
#: R-exts.texi:9274
#: R-exts.texi:9276
#: R-exts.texi:9277
#: R-exts.texi:9350
#, no-wrap
msgid "Unix-alikes"
msgstr ""

#
#. type: subsection
#: R-exts.texi:9274
#: R-exts.texi:9276
#: R-exts.texi:9350
#: R-exts.texi:9351
#, no-wrap
msgid "Windows"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9283
msgid ""
"It is possible to link a shared object in package @pkg{packA} to a library "
"provided by package @pkg{packB} under limited circumstances on a Unix-alike "
"OS.  There are severe portability issues, so this is not recommended for a "
"distributed package."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9295
msgid ""
"This is easiest if @pkg{packB} provides a static library @file{packB/lib/"
"libpackB.a}.  (Note using directory @file{lib} rather than @file{libs} is "
"conventional, and architecture-specific sub-directories may be needed and "
"are assumed in the sample code below. The code in the static library will "
"need to be compiled with @code{PIC} flags on platforms where it matters.)  "
"Then as the code from package @pkg{packB} is incorporated when package "
"@pkg{packA} is installed, we only need to find the static library at install "
"time for package @pkg{packA}.  The only issue is to find package "
"@pkg{packB}, and for that we can ask @R{} by something like (long lines "
"broken for display here)"
msgstr ""

#
#. type: example
#: R-exts.texi:9301
#, no-wrap
msgid ""
"PKGB_PATH=`echo 'library(packB);\n"
"  cat(system.file(\"lib\",  package=\"packB\", mustWork=TRUE))' \\\n"
" | \"$@{R_HOME@}/bin/R\" --vanilla --slave`\n"
"PKG_LIBS=\"$(PKGB_PATH)$(R_ARCH)/libpackB.a\"\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9306
msgid ""
"For a dynamic library @file{packB/lib/libpackB.so} (@file{packB/lib/libpackB."
"dylib} on OS X: note that you cannot link to a shared object, @file{.so}, on "
"that platform) we could use"
msgstr ""

#
#. type: example
#: R-exts.texi:9312
#, no-wrap
msgid ""
"PKGB_PATH=`echo 'library(packB);\n"
"  cat(system.file(\"lib\", package=\"packB\", mustWork=TRUE))' \\\n"
" | \"$@{R_HOME@}/bin/R\" --vanilla --slave`\n"
"PKG_LIBS=-L\"$(PKGB_PATH)$(R_ARCH)\" -lpackB\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:9328
msgid ""
"This will work for installation, but very likely not when package "
"@code{packB} is loaded, as the path to package @pkg{packB}'s @file{lib} "
"directory is not in the @command{ld.so}@footnote{@command{dyld} on OS X, and "
"@env{DYLD_LIBRARY_PATHS} below.} search path.  You can arrange to put it "
"there @strong{before} @R{} is launched by setting (on some platforms) "
"@env{LD_RUN_PATH} or @env{LD_LIBRARY_PATH} or adding to the @command{ld.so} "
"cache (see @command{man ldconfig}).  On platforms that support it, the path "
"to the directory containing the dynamic library can be hardcoded at install "
"time (which assumes that the location of package @pkg{packB} will not be "
"changed nor the package updated to a changed API).  On systems with the "
"@command{gcc} or @command{clang} and the @acronym{GNU} linker (e.g.@: Linux) "
"and some others this can be done by e.g.@:"
msgstr ""

#
#. type: example
#: R-exts.texi:9334
#, no-wrap
msgid ""
"PKGB_PATH=`echo 'library(packB);\n"
"  cat(system.file(\"lib\", package=\"packB\", mustWork=TRUE)))' \\\n"
" | \"$@{R_HOME@}/bin/R\" --vanilla --slave`\n"
"PKG_LIBS=-L\"$(PKGB_PATH)$(R_ARCH)\" -Wl,-rpath,\"$(PKGB_PATH)$(R_ARCH)\" -lpackB\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9340
msgid ""
"Some other systems (e.g.@: Solaris with its native linker) use @option{-"
"Rdir} rather than @option{-rpath,dir} (and this is accepted by the compiler "
"as well as the linker)."
msgstr ""

#. type: Plain text
#: R-exts.texi:9344
msgid ""
"It may be possible to figure out what is required semi-automatically from "
"the result of @command{R CMD libtool --config} (look for @samp{hardcode})."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9348
msgid ""
"Making headers provided by package @pkg{packB} available to the code to be "
"compiled in package @pkg{packA} can be done by the @code{LinkingTo} "
"mechanism (@pxref{Registering native routines})."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9358
msgid ""
"Suppose package @pkg{packA} wants to make use of compiled code provided by "
"@pkg{packB} in DLL @file{packB/libs/exB.dll}, possibly the package's DLL "
"@file{packB/libs/packB.dll}.  (This can be extended to linking to more than "
"one package in a similar way.)  There are three issues to be addressed:"
msgstr ""

#
#. type: itemize
#: R-exts.texi:9364
msgid ""
"Making headers provided by package @pkg{packB} available to the code to be "
"compiled in package @pkg{packA}."
msgstr ""

#
#. type: itemize
#: R-exts.texi:9367
msgid ""
"This is done by the @code{LinkingTo} mechanism (@pxref{Registering native "
"routines})."
msgstr ""

#
#. type: item
#: R-exts.texi:9368
#, no-wrap
msgid "preparing @code{packA.dll} to link to @file{packB/libs/exB.dll}."
msgstr ""

#
#. type: itemize
#: R-exts.texi:9371
msgid "This needs an entry in @file{Makevars.win} of the form"
msgstr ""

#
#. type: example
#: R-exts.texi:9374
#, no-wrap
msgid "PKG_LIBS= -L<something> -lexB\n"
msgstr ""

#
#. type: itemize
#: R-exts.texi:9379
msgid ""
"and one possibility is that @code{<something>} is the path to the installed "
"@file{pkgB/libs} directory.  To find that we need to ask @R{} where it is by "
"something like"
msgstr ""

#
#. type: example
#: R-exts.texi:9385
#, no-wrap
msgid ""
"PKGB_PATH=`echo 'library(packB);\n"
"  cat(system.file(\"libs\", package=\"packB\", mustWork=TRUE))' \\\n"
" | rterm --vanilla --slave`\n"
"PKG_LIBS= -L\"$(PKGB_PATH)$(R_ARCH)\" -lexB\n"
msgstr ""

#
#. type: itemize
#: R-exts.texi:9390
msgid ""
"Another possibility is to use an import library, shipping with package "
"@pkg{packA} an exports file @file{exB.def}.  Then @file{Makevars.win} could "
"contain"
msgstr ""

#
#. type: example
#: R-exts.texi:9393
#, no-wrap
msgid ""
"PKG_LIBS= -L. -lexB\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:9395
#, no-wrap
msgid ""
"all: $(SHLIB) before\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:9398
#, no-wrap
msgid ""
"before: libexB.dll.a\n"
"libexB.dll.a: exB.def\n"
msgstr ""

#
#. type: itemize
#: R-exts.texi:9403
msgid ""
"and then installing package @pkg{packA} will make and use the import library "
"for @file{exB.dll}.  (One way to prepare the exports file is to use "
"@file{pexports.exe}.)"
msgstr ""

#
#. type: item
#: R-exts.texi:9404
#, no-wrap
msgid "loading @file{packA.dll} which depends on @file{exB.dll}."
msgstr ""

#
#. type: itemize
#: R-exts.texi:9411
msgid ""
"If @code{exB.dll} was used by package @pkg{packB} (because it is in fact "
"@file{packB.dll} or @file{packB.dll} depends on it) and @pkg{packB} has been "
"loaded before @pkg{packA}, then nothing more needs to be done as @file{exB."
"dll} will already be loaded into the @R{} executable.  (This is the most "
"common scenario.)"
msgstr ""

#
#. type: itemize
#: R-exts.texi:9415
msgid ""
"More generally, we can use the @code{DLLpath} argument to @code{library."
"dynam} to ensure that @code{exB.dll} is found, for example by setting"
msgstr ""

#
#. type: example
#: R-exts.texi:9419
#, no-wrap
msgid ""
"library.dynam(\"packA\", pkg, lib,\n"
"\t      DLLpath = system.file(\"libs\", package=\"packB\"))\n"
msgstr ""

#
#. type: itemize
#: R-exts.texi:9424
msgid ""
"Note that @code{DLLpath} can only set one path, and so for linking to two or "
"more packages you would need to resort to setting environment variable "
"@env{PATH}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9440
msgid ""
"Using C code to speed up the execution of an @R{} function is often very "
"fruitful.  Traditionally this has been done @emph{via} the @code{.C} "
"function in @R{}.  However, if a user wants to write C code using internal "
"@R{} data structures, then that can be done using the @code{.Call} and "
"@code{.External} functions.  The syntax for the calling function in @R{} in "
"each case is similar to that of @code{.C}, but the two functions have "
"different C interfaces.  Generally the @code{.Call} interface is simpler to "
"use, but @code{.External} is a little more general."
msgstr ""

#
#. type: findex
#: R-exts.texi:9440
#: R-exts.texi:10277
#, no-wrap
msgid ".Call"
msgstr ""

#
#. type: findex
#: R-exts.texi:9441
#: R-exts.texi:10318
#, no-wrap
msgid ".External"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9444
msgid "A call to @code{.Call} is very similar to @code{.C}, for example"
msgstr ""

#
#. type: example
#: R-exts.texi:9447
#, no-wrap
msgid ".Call(\"convolve2\", a, b)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9453
msgid ""
"The first argument should be a character string giving a C symbol name of "
"code that has already been loaded into @R{}.  Up to 65 @R{} objects can "
"passed as arguments.  The C side of the interface is"
msgstr ""

#
#. type: group
#: R-exts.texi:9458
#: R-exts.texi:9477
#: R-exts.texi:9599
#: R-exts.texi:9800
#: R-exts.texi:9826
#: R-exts.texi:10294
#: R-exts.texi:10336
#, no-wrap
msgid ""
"#include <R.h>\n"
"#include <Rinternals.h>\n"
"\n"
msgstr ""

#
#. type: group
#: R-exts.texi:9461
#, no-wrap
msgid ""
"SEXP convolve2(SEXP a, SEXP b)\n"
" ...\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9465
msgid "A call to @code{.External} is almost identical"
msgstr ""

#
#. type: example
#: R-exts.texi:9468
#, no-wrap
msgid ".External(\"convolveE\", a, b)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9472
msgid "but the C side of the interface is different, having only one argument"
msgstr ""

#
#. type: group
#: R-exts.texi:9480
#, no-wrap
msgid ""
"SEXP convolveE(SEXP args)\n"
" ...\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9486
msgid ""
"Here @code{args} is a @code{LISTSXP}, a Lisp-style pairlist from which the "
"arguments can be extracted."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9494
msgid ""
"In each case the @R{} objects are available for manipulation @emph{via} a "
"set of functions and macros defined in the header file @file{Rinternals.h} "
"or some @Sl{}-compatibility macros@footnote{That is, similar to those "
"defined in @Sl{} version 4 from the 1990s: these are not kept up to date and "
"are not recommended for new projects.} defined in @file{Rdefines.h}.  See "
"@ref{Interface functions .Call and .External} for details on @code{.Call} "
"and @code{.External}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9507
msgid ""
"Before you decide to use @code{.Call} or @code{.External}, you should look "
"at other alternatives.  First, consider working in interpreted @R{} code; if "
"this is fast enough, this is normally the best option.  You should also see "
"if using @code{.C} is enough.  If the task to be performed in C is simple "
"enough involving only atomic vectors and requiring no call to @R{}, @code{."
"C} suffices. A great deal of useful code was written using just @code{.C} "
"before @code{.Call} and @code{.External} were available.  These interfaces "
"allow much more control, but they also impose much greater responsibilities "
"so need to be used with care.  Neither @code{.Call} nor @code{.External} "
"copy their arguments: you should treat arguments you receive through these "
"interfaces as read-only."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9515
msgid ""
"To handle @R{} objects from within C code we use the macros and functions "
"that have been used to implement the core parts of @R{}.  A "
"public@footnote{ @pxref{The R API}: note that these are not all part of the "
"API.} subset of these is defined in the header file @file{Rinternals.h} in "
"the directory @file{@var{R_INCLUDE_DIR}} (default @file{@var{R_HOME}/"
"include}) that should be available on any @R{} installation."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9520
msgid ""
"A substantial amount of @R{}, including the standard packages, is "
"implemented using the functions and macros described here, so the @R{} "
"source code provides a rich source of examples and ``how to do it'': do make "
"use of the source code for inspirational examples."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9538
msgid ""
"It is necessary to know something about how @R{} objects are handled in C "
"code.  All the @R{} objects you will deal with will be handled with the type "
"@dfn{SEXP}@footnote{SEXP is an acronym for @emph{S}imple @emph{EXP}ression, "
"common in LISP-like language syntaxes.}, which is a pointer to a structure "
"with typedef @code{SEXPREC}.  Think of this structure as a @emph{variant "
"type} that can handle all the usual types of @R{} objects, that is vectors "
"of various modes, functions, environments, language objects and so on.  The "
"details are given later in this section and in @ref{R Internal Structures, , "
"R Internal Structures, R-ints, R Internals}, but for most purposes the "
"programmer does not need to know them.  Think rather of a model such as that "
"used by Visual Basic, in which @R{} objects are handed around in C code (as "
"they are in interpreted @R{} code) as the variant type, and the appropriate "
"part is extracted for, for example, numerical calculations, only when it is "
"needed.  As in interpreted @R{} code, much use is made of coercion to force "
"the variant object to the right type."
msgstr ""

#
#. type: node
#: R-exts.texi:9550
#: R-exts.texi:9552
#: R-exts.texi:9670
#, no-wrap
msgid "Garbage Collection"
msgstr ""

#
#. type: node
#: R-exts.texi:9550
#: R-exts.texi:9552
#: R-exts.texi:9670
#: R-exts.texi:9671
#: R-exts.texi:9672
#: R-exts.texi:9692
#, no-wrap
msgid "Allocating storage"
msgstr ""

#
#. type: node
#: R-exts.texi:9550
#: R-exts.texi:9670
#: R-exts.texi:9692
#: R-exts.texi:9693
#: R-exts.texi:9694
#: R-exts.texi:9768
#, no-wrap
msgid "Details of R types"
msgstr ""

#
#. type: node
#: R-exts.texi:9550
#: R-exts.texi:9692
#: R-exts.texi:9768
#: R-exts.texi:9769
#: R-exts.texi:9770
#: R-exts.texi:9909
#, no-wrap
msgid "Attributes"
msgstr ""

#
#. type: node
#: R-exts.texi:9550
#: R-exts.texi:9768
#: R-exts.texi:9909
#: R-exts.texi:9910
#: R-exts.texi:9911
#: R-exts.texi:9939
#, no-wrap
msgid "Classes"
msgstr ""

#
#. type: node
#: R-exts.texi:9550
#: R-exts.texi:9909
#: R-exts.texi:9939
#: R-exts.texi:9940
#: R-exts.texi:9941
#: R-exts.texi:10000
#, no-wrap
msgid "Handling lists"
msgstr ""

#
#. type: node
#: R-exts.texi:9550
#: R-exts.texi:9939
#: R-exts.texi:10000
#: R-exts.texi:10001
#: R-exts.texi:10032
#, no-wrap
msgid "Handling character data"
msgstr ""

#
#. type: node
#: R-exts.texi:9550
#: R-exts.texi:10000
#: R-exts.texi:10032
#: R-exts.texi:10033
#: R-exts.texi:10092
#, no-wrap
msgid "Finding and setting variables"
msgstr ""

#
#. type: node
#: R-exts.texi:9550
#: R-exts.texi:10032
#: R-exts.texi:10092
#: R-exts.texi:10093
#: R-exts.texi:10158
#: R-exts.texi:10171
#, no-wrap
msgid "Some convenience functions"
msgstr ""

#
#. type: subsection
#: R-exts.texi:9550
#: R-exts.texi:10092
#: R-exts.texi:10171
#: R-exts.texi:10172
#, no-wrap
msgid "Named objects and copying"
msgstr ""

#
#. type: subsection
#: R-exts.texi:9553
#, no-wrap
msgid "Handling the effects of garbage collection"
msgstr ""

#
#. type: cindex
#: R-exts.texi:9554
#, no-wrap
msgid "Garbage collection"
msgstr ""

#
#. type: findex
#: R-exts.texi:9556
#, no-wrap
msgid "PROTECT"
msgstr ""

#
#. type: findex
#: R-exts.texi:9557
#, no-wrap
msgid "UNPROTECT"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9564
msgid ""
"We need to know a little about the way @R{} handles memory allocation.  The "
"memory allocated for @R{} objects is not freed by the user; instead, the "
"memory is from time to time @dfn{garbage collected}.  That is, some or all "
"of the allocated memory not being used is freed or marked as re-usable."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9569
msgid ""
"The @R{} object types are represented by a C structure defined by a typedef "
"@code{SEXPREC} in @file{Rinternals.h}.  It contains several things among "
"which are pointers to data blocks and to other @code{SEXPREC}s.  A "
"@code{SEXP} is simply a pointer to a @code{SEXPREC}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9578
msgid ""
"If you create an @R{} object in your C code, you must tell @R{} that you are "
"using the object by using the @code{PROTECT} macro on a pointer to the "
"object. This tells @R{} that the object is in use so it is not destroyed "
"during garbage collection.  Notice that it is the object which is protected, "
"not the pointer variable.  It is a common mistake to believe that if you "
"invoked @code{PROTECT(@var{p})} at some point then @var{p} is protected from "
"then on, but that is not true once a new object is assigned to @var{p}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9582
msgid ""
"Protecting an @R{} object automatically protects all the @R{} objects "
"pointed to in the corresponding @code{SEXPREC}, for example all elements of "
"a protected list are automatically protected."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9592
msgid ""
"The programmer is solely responsible for housekeeping the calls to "
"@code{PROTECT}.  There is a corresponding macro @code{UNPROTECT} that takes "
"as argument an @code{int} giving the number of objects to unprotect when "
"they are no longer needed.  The protection mechanism is stack-based, so "
"@code{UNPROTECT(@var{n})} unprotects the last @var{n} objects which were "
"protected.  The calls to @code{PROTECT} and @code{UNPROTECT} must balance "
"when the user's code returns.  @R{} will warn about @code{\"stack imbalance "
"in .Call\"} (or @code{.External}) if the housekeeping is wrong."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9594
msgid "Here is a small example of creating an @R{} numeric vector in C code:"
msgstr ""

#
#. type: group
#: R-exts.texi:9606
#, no-wrap
msgid ""
"    SEXP ab;\n"
"      ....\n"
"    ab = PROTECT(allocVector(REALSXP, 2));\n"
"    REAL(ab)[0] = 123.45;\n"
"    REAL(ab)[1] = 67.89;\n"
"    UNPROTECT(1);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9617
msgid ""
"Now, the reader may ask how the @R{} object could possibly get removed "
"during those manipulations, as it is just our C code that is running.  As it "
"happens, we can do without the protection in this example, but in general we "
"do not know (nor want to know) what is hiding behind the @R{} macros and "
"functions we use, and any of them might cause memory to be allocated, hence "
"garbage collection and hence our object @code{ab} to be removed. It is "
"usually wise to err on the side of caution and assume that any of the @R{} "
"macros and functions might remove the object."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9626
msgid ""
"In some cases it is necessary to keep better track of whether protection is "
"really needed.  Be particularly aware of situations where a large number of "
"objects are generated.  The pointer protection stack has a fixed size "
"(default 10,000) and can become full.  It is not a good idea then to just "
"@code{PROTECT} everything in sight and @code{UNPROTECT} several thousand "
"objects at the end. It will almost invariably be possible to either assign "
"the objects as part of another object (which automatically protects them) or "
"unprotect them immediately after use."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9629
msgid ""
"Protection is not needed for objects which @R{} already knows are in use.  "
"In particular, this applies to function arguments."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9635
msgid ""
"There is a less-used macro @code{UNPROTECT_PTR(@var{s})} that unprotects the "
"object pointed to by the @code{SEXP} @var{s}, even if it is not the top item "
"on the pointer protection stack. This is rarely needed outside the parser "
"(the @R{} sources currently have three examples, one in @file{src/main/"
"plot3d.c})."
msgstr ""

#
#. type: findex
#: R-exts.texi:9635
#, no-wrap
msgid "UNPROTECT_PTR"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9641
msgid ""
"Sometimes an object is changed (for example duplicated, coerced or grown) "
"yet the current value needs to be protected.  For these cases "
"@code{PROTECT_WITH_INDEX} saves an index of the protection location that can "
"be used to replace the protected value using @code{REPROTECT}."
msgstr ""

#
#. type: findex
#: R-exts.texi:9641
#, no-wrap
msgid "PROTECT_WITH_INDEX"
msgstr ""

#
#. type: findex
#: R-exts.texi:9642
#, no-wrap
msgid "REPROTECT"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9644
msgid "For example (from the internal code for @code{optim})"
msgstr ""

#
#. type: example
#: R-exts.texi:9647
#, no-wrap
msgid ""
"    PROTECT_INDEX ipx;\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:9651
#, no-wrap
msgid ""
"    ....\n"
"    s = PROTECT_WITH_INDEX(eval(OS->R_fcall, OS->R_env), &ipx);\n"
"    s = REPROTECT(coerceVector(s, REALSXP), ipx);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9657
msgid ""
"Note that it is dangerous to mix @code{UNPROTECT_PTR} with "
"@code{PROTECT_WITH_INDEX}, as the former changes the protection locations of "
"objects that were protected after the one being unprotected."
msgstr ""

#
#. type: findex
#: R-exts.texi:9658
#, no-wrap
msgid "R_PreserveObject"
msgstr ""

#
#. type: findex
#: R-exts.texi:9659
#, no-wrap
msgid "R_ReleaseObject"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9669
msgid ""
"There is another way to avoid the affects of garbage collection: a call to "
"@code{R_PreserveObject} adds an object to an internal list of objects not to "
"be collects, and a subsequent call to @code{R_ReleaseObject} removes it from "
"that list.  This provides a way for objects which are not returned as part "
"of @R{} objects to be protected across calls to compiled code: on the other "
"hand it becomes the user's responsibility to release them when they are no "
"longer needed (and this often requires the use of a finalizer).  It is less "
"efficient that the normal protection mechanism, and should be used sparingly."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9677
msgid ""
"For many purposes it is sufficient to allocate @R{} objects and manipulate "
"those.  There are quite a few @code{alloc@var{Xxx}} functions defined in "
"@file{Rinternals.h}---you may want to explore them."
msgstr ""

#
#. type: findex
#: R-exts.texi:9678
#, no-wrap
msgid "allocVector"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9685
msgid ""
"One that is commonly used is @code{allocVector}, the C-level equivalent of "
"@R{}-level @code{vector()} and its wrappers such as @code{integer()} and "
"@code{character()}.  One distinction is that whereas the @R{} functions "
"always initialize the elements of the vector, @code{allocVector} only does "
"so for lists, expressions and character vectors (the cases where the "
"elements are themselves @R{} objects)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9691
msgid ""
"If storage is required for C objects during the calculations this is best "
"allocating by calling @code{R_alloc}; @pxref{Memory allocation}.  All of "
"these memory allocation routines do their own error-checking, so the "
"programmer may assume that they will raise an error and not return if the "
"memory cannot be allocated."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9701
msgid ""
"Users of the @file{Rinternals.h} macros will need to know how the @R{} types "
"are known internally.  The different @R{} data types are represented in C by "
"@dfn{SEXPTYPE}.  Some of these are familiar from @R{} and some are internal "
"data types.  The usual @R{} object modes are given in the table."
msgstr ""

#
#. type: multitable
#: R-exts.texi:9705
msgid "@headitem SEXPTYPE"
msgstr ""

#
#. type: multitable
#: R-exts.texi:9705
msgid "@R{} equivalent"
msgstr ""

#
#. type: item
#: R-exts.texi:9705
#, no-wrap
msgid "@code{REALSXP}  @tab numeric with storage mode @code{double}"
msgstr ""

#
#. type: item
#: R-exts.texi:9706
#, no-wrap
msgid "@code{INTSXP}   @tab integer"
msgstr ""

#
#. type: item
#: R-exts.texi:9707
#, no-wrap
msgid "@code{CPLXSXP}  @tab complex"
msgstr ""

#
#. type: item
#: R-exts.texi:9708
#, no-wrap
msgid "@code{LGLSXP}   @tab logical"
msgstr ""

#
#. type: item
#: R-exts.texi:9709
#, no-wrap
msgid "@code{STRSXP}   @tab character"
msgstr ""

#
#. type: item
#: R-exts.texi:9710
#, no-wrap
msgid "@code{VECSXP}   @tab list (generic vector)"
msgstr ""

#
#. type: item
#: R-exts.texi:9711
#, no-wrap
msgid "@code{LISTSXP}  @tab pairlist"
msgstr ""

#
#. type: item
#: R-exts.texi:9712
#, no-wrap
msgid "@code{DOTSXP}   @tab a @samp{@dots{}} object"
msgstr ""

#
#. type: item
#: R-exts.texi:9713
#, no-wrap
msgid "@code{NILSXP}   @tab NULL"
msgstr ""

#
#. type: item
#: R-exts.texi:9714
#, no-wrap
msgid "@code{SYMSXP}   @tab name/symbol"
msgstr ""

#
#. type: item
#: R-exts.texi:9715
#, no-wrap
msgid "@code{CLOSXP}   @tab function or function closure"
msgstr ""

#
#. type: item
#: R-exts.texi:9716
#, no-wrap
msgid "@code{ENVSXP}   @tab environment"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9727
msgid ""
"Among the important internal @code{SEXPTYPE}s are @code{LANGSXP}, "
"@code{CHARSXP}, @code{PROMSXP}, etc.  (@strong{N.B.}: although it is "
"possible to return objects of internal types, it is unsafe to do so as "
"assumptions are made about how they are handled which may be violated at "
"user-level evaluation.)  More details are given in @ref{R Internal "
"Structures, , R Internal Structures, R-ints, R Internals}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9736
msgid ""
"Unless you are very sure about the type of the arguments, the code should "
"check the data types.  Sometimes it may also be necessary to check data "
"types of objects created by evaluating an @R{} expression in the C code.  "
"You can use functions like @code{isReal}, @code{isInteger} and "
"@code{isString} to do type checking.  See the header file @file{Rinternals."
"h} for definitions of other such functions.  All of these take a @code{SEXP} "
"as argument and return 1 or 0 to indicate @var{TRUE} or @var{FALSE}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9743
msgid ""
"What happens if the @code{SEXP} is not of the correct type? Sometimes you "
"have no other option except to generate an error.  You can use the function "
"@code{error} for this.  It is usually better to coerce the object to the "
"correct type.  For example, if you find that an @code{SEXP} is of the type "
"@code{INTEGER}, but you need a @code{REAL} object, you can change the type "
"by using"
msgstr ""

#
#. type: example
#: R-exts.texi:9746
#, no-wrap
msgid "@var{newSexp} = PROTECT(coerceVector(@var{oldSexp}, REALSXP));\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9753
msgid ""
"Protection is needed as a new @emph{object} is created; the object formerly "
"pointed to by the @code{SEXP} is still protected but now unused.@footnote{If "
"no coercion was required, @code{coerceVector} would have passed the old "
"object through unchanged.}"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9756
msgid ""
"All the coercion functions do their own error-checking, and generate "
"@code{NA}s with a warning or stop with an error as appropriate."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9761
msgid ""
"Note that these coercion functions are @emph{not} the same as calling "
"@code{as.numeric} (and so on) in @R{} code, as they do not dispatch on the "
"class of the object.  Thus it is normally preferable to do the coercion in "
"the calling @R{} code."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9767
msgid ""
"So far we have only seen how to create and coerce @R{} objects from C code, "
"and how to extract the numeric data from numeric @R{} vectors.  These can "
"suffice to take us a long way in interfacing @R{} objects to numerical "
"algorithms, but we may need to know a little more to create useful return "
"objects."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9776
msgid ""
"Many @R{} objects have attributes: some of the most useful are classes and "
"the @code{dim} and @code{dimnames} that mark objects as matrices or arrays.  "
"It can also be helpful to work with the @code{names} attribute of vectors."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9780
msgid ""
"To illustrate this, let us write code to take the outer product of two "
"vectors (which @code{outer} and @code{%o%} already do).  As usual the @R{} "
"code is simple"
msgstr ""

#
#. type: example
#: R-exts.texi:9787
#, no-wrap
msgid ""
"out <- function(x, y)\n"
"@{\n"
"    storage.mode(x) <- storage.mode(y) <- \"double\"\n"
"    .Call(\"out\", x, y)\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9793
msgid ""
"where we expect @code{x} and @code{y} to be numeric vectors (possibly "
"integer), possibly with names.  This time we do the coercion in the calling "
"@R{} code."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9795
msgid "C code to do the computations is"
msgstr ""

#
#. type: group
#: R-exts.texi:9814
#, no-wrap
msgid ""
"SEXP out(SEXP x, SEXP y)\n"
"@{\n"
"    int nx = length(x), ny = length(y);\n"
"    SEXP ans = PROTECT(allocMatrix(REALSXP, nx, ny));\n"
"    double *rx = REAL(x), *ry = REAL(y), *rans = REAL(ans);\n"
"    for(int i = 0; i < nx; i++) @{\n"
"\tdouble tmp = rx[i];\n"
"\tfor(int j = 0; j < ny; j++)\n"
"\t    rans[i + nx*j] = tmp * ry[j];\n"
"    @}\n"
"    UNPROTECT(1);\n"
"    return ans;\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9820
msgid ""
"Note the way @code{REAL} is used: as it is a function call it can be "
"considerably faster to store the result and index that."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9822
msgid ""
"However, we would like to set the @code{dimnames} of the result.  We can use"
msgstr ""

#
#. type: group
#: R-exts.texi:9833
#, no-wrap
msgid ""
"SEXP out(SEXP x, SEXP y)\n"
"@{\n"
"    int nx = length(x), ny = length(y);\n"
"    SEXP ans = PROTECT(allocMatrix(REALSXP, nx, ny));\n"
"    double *rx = REAL(x), *ry = REAL(y), *rans = REAL(ans);\n"
"\n"
msgstr ""

#
#. type: group
#: R-exts.texi:9839
#, no-wrap
msgid ""
"    for(int i = 0; i < nx; i++) @{\n"
"      double tmp = rx[i];\n"
"      for(int j = 0; j < ny; j++)\n"
"\trans[i + nx*j] = tmp * ry[j];\n"
"    @}\n"
"\n"
msgstr ""

#
#. type: group
#: R-exts.texi:9844
#, no-wrap
msgid ""
"    SEXP dimnames = PROTECT(allocVector(VECSXP, 2));\n"
"    SET_VECTOR_ELT(dimnames, 0, getAttrib(x, R_NamesSymbol));\n"
"    SET_VECTOR_ELT(dimnames, 1, getAttrib(y, R_NamesSymbol));\n"
"    setAttrib(ans, R_DimNamesSymbol, dimnames);\n"
msgstr ""

#
#. type: group
#: R-exts.texi:9850
#, no-wrap
msgid ""
"    UNPROTECT(3);\n"
"    return ans;\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9855
msgid ""
"This example introduces several new features.  The @code{getAttrib} and "
"@code{setAttrib}"
msgstr ""

#
#. type: findex
#: R-exts.texi:9855
#, no-wrap
msgid "getAttrib"
msgstr ""

#
#. type: findex
#: R-exts.texi:9856
#, no-wrap
msgid "setAttrib"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9861
msgid ""
"functions get and set individual attributes.  Their second argument is a "
"@code{SEXP} defining the name in the symbol table of the attribute we want; "
"these and many such symbols are defined in the header file @file{Rinternals."
"h}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9867
msgid ""
"There are shortcuts here too: the functions @code{namesgets}, @code{dimgets} "
"and @code{dimnamesgets} are the internal versions of the default methods of "
"@code{names<-}, @code{dim<-} and @code{dimnames<-} (for vectors and arrays), "
"and there are functions such as @code{GetMatrixDimnames} and "
"@code{GetArrayDimnames}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9870
msgid ""
"What happens if we want to add an attribute that is not pre-defined? We need "
"to add a symbol for it @emph{via} a call to"
msgstr ""

#
#. type: findex
#: R-exts.texi:9870
#, no-wrap
msgid "install"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9873
msgid ""
"@code{install}.  Suppose for illustration we wanted to add an attribute "
"@code{\"version\"} with value @code{3.0}.  We could use"
msgstr ""

#
#. type: group
#: R-exts.texi:9881
#, no-wrap
msgid ""
"    SEXP version;\n"
"    version = PROTECT(allocVector(REALSXP, 1));\n"
"    REAL(version)[0] = 3.0;\n"
"    setAttrib(ans, install(\"version\"), version);\n"
"    UNPROTECT(1);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9888
msgid ""
"Using @code{install} when it is not needed is harmless and provides a simple "
"way to retrieve the symbol from the symbol table if it is already installed. "
"However, the lookup takes a non-trivial amount of time, so consider code "
"such as"
msgstr ""

#
#. type: example
#: R-exts.texi:9893
#, no-wrap
msgid ""
"static SEXP VerSymbol = NULL;\n"
"...\n"
"    if (VerSymbol == NULL) VerSymbol = install(\"version\");\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9897
msgid "if it is to be done frequently."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9899
msgid "This example can be simplified by another convenience function:"
msgstr ""

#
#. type: group
#: R-exts.texi:9905
#, no-wrap
msgid ""
"    SEXP version = PROTECT(ScalarReal(3.0));\n"
"    setAttrib(ans, install(\"version\"), version);\n"
"    UNPROTECT(1);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9917
msgid ""
"In @R{} the class is just the attribute named @code{\"class\"} so it can be "
"handled as such, but there is a shortcut @code{classgets}.  Suppose we want "
"to give the return value in our example the class @code{\"mat\"}.  We can use"
msgstr ""

#
#. type: group
#: R-exts.texi:9931
#, no-wrap
msgid ""
"#include <R.h>\n"
"#include <Rinternals.h>\n"
"      ....\n"
"    SEXP ans, dim, dimnames, class;\n"
"      ....\n"
"    class = PROTECT(allocVector(STRSXP, 1));\n"
"    SET_STRING_ELT(class, 0, mkChar(\"mat\"));\n"
"    classgets(ans, class);\n"
"    UNPROTECT(4);\n"
"    return ans;\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9938
msgid ""
"As the value is a character vector, we have to know how to create that from "
"a C character array, which we do using the function @code{mkChar}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9948
msgid ""
"Some care is needed with lists, as @R{} moved early on from using LISP-like "
"lists (now called ``pairlists'') to S-like generic vectors.  As a result, "
"the appropriate test for an object of mode @code{list} is @code{isNewList}, "
"and we need @code{allocVector(VECSXP, @var{n}}) and @emph{not} "
"@code{allocList(@var{n})}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9951
msgid ""
"List elements can be retrieved or set by direct access to the elements of "
"the generic vector.  Suppose we have a list object"
msgstr ""

#
#. type: example
#: R-exts.texi:9954
#, no-wrap
msgid "a <- list(f = 1, g = 2, h = 3)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9958
msgid "Then we can access @code{a$g} as @code{a[[2]]} by"
msgstr ""

#
#. type: group
#: R-exts.texi:9964
#, no-wrap
msgid ""
"    double g;\n"
"      ....\n"
"    g = REAL(VECTOR_ELT(a, 1))[0];\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9969
msgid ""
"This can rapidly become tedious, and the following function (based on one in "
"package @pkg{stats}) is very useful:"
msgstr ""

#
#. type: group
#: R-exts.texi:9973
#, no-wrap
msgid ""
"/* get the list element named str, or return NULL */\n"
"\n"
msgstr ""

#
#. type: group
#: R-exts.texi:9977
#, no-wrap
msgid ""
"SEXP getListElement(SEXP list, const char *str)\n"
"@{\n"
"    SEXP elmt = R_NilValue, names = getAttrib(list, R_NamesSymbol);\n"
msgstr ""

#
#. type: group
#: R-exts.texi:9987
#, no-wrap
msgid ""
"    for (int i = 0; i < length(list); i++)\n"
"\tif(strcmp(CHAR(STRING_ELT(names, i)), str) == 0) @{\n"
"\t   elmt = VECTOR_ELT(list, i);\n"
"\t   break;\n"
"\t@}\n"
"    return elmt;\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:9992
msgid "and enables us to say"
msgstr ""

#
#. type: group
#: R-exts.texi:9997
#, no-wrap
msgid ""
"  double g;\n"
"  g = REAL(getListElement(a, \"g\"))[0];\n"
msgstr ""

#
#. type: cindex
#: R-exts.texi:10002
#, no-wrap
msgid "handling character data"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10008
msgid ""
"R character vectors are stored as @code{STRSXP}s, a vector type like "
"@code{VECSXP} where every element is of type @code{CHARSXP}.  The "
"@code{CHARSXP} elements of @code{STRSXP}s are accessed using "
"@code{STRING_ELT} and @code{SET_STRING_ELT}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10018
msgid ""
"@code{CHARSXP}s are read-only objects and must never be modified.  In "
"particular, the C-style string contained in a @code{CHARSXP} should be "
"treated as read-only and for this reason the @code{CHAR} function used to "
"access the character data of a @code{CHARSXP} returns @code{(const char *)} "
"(this also allows compilers to issue warnings about improper use).  Since "
"@code{CHARSXP}s are immutable, the same @code{CHARSXP} can be shared by any "
"@code{STRSXP} needing an element representing the same string. @R{} "
"maintains a global cache of @code{CHARSXP}s so that there is only ever one "
"@code{CHARSXP} representing a given string in memory."
msgstr ""

#
#. type: findex
#: R-exts.texi:10019
#, no-wrap
msgid "mkChar"
msgstr ""

#
#. type: findex
#: R-exts.texi:10020
#, no-wrap
msgid "mkCharLen"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10027
msgid ""
"You can obtain a @code{CHARSXP} by calling @code{mkChar} and providing a nul-"
"terminated C-style string.  This function will return a pre-existing "
"@code{CHARSXP} if one with a matching string already exists, otherwise it "
"will create a new one and add it to the cache before returning it to you.  "
"The variant @code{mkCharLen} can be used to create a @code{CHARSXP} from "
"part of a buffer and will ensure null-termination."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10031
msgid ""
"Note that @R{} character strings are restricted to @code{2^31 - 1} bytes, "
"and hence so should the input to @code{mkChar} be (C allows longer strings "
"on 64-bit platforms)."
msgstr ""

#
#. type: cindex
#: R-exts.texi:10034
#, no-wrap
msgid "Finding variables"
msgstr ""

#
#. type: cindex
#: R-exts.texi:10035
#, no-wrap
msgid "Setting variables"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10042
msgid ""
"It will be usual that all the @R{} objects needed in our C computations are "
"passed as arguments to @code{.Call} or @code{.External}, but it is possible "
"to find the values of @R{} objects from within the C given their names.  The "
"following code is the equivalent of @code{get(name, envir = rho)}."
msgstr ""

#
#. type: group
#: R-exts.texi:10048
#, no-wrap
msgid ""
"SEXP getvar(SEXP name, SEXP rho)\n"
"@{\n"
"    SEXP ans;\n"
"\n"
msgstr ""

#
#. type: group
#: R-exts.texi:10057
#, no-wrap
msgid ""
"    if(!isString(name) || length(name) != 1)\n"
"\terror(\"name is not a single string\");\n"
"    if(!isEnvironment(rho))\n"
"\terror(\"rho should be an environment\");\n"
"    ans = findVar(installChar(STRING_ELT(name, 0)), rho);\n"
"    Rprintf(\"first value is %f\\n\", REAL(ans)[0]);\n"
"    return R_NilValue;\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10061
msgid "The main work is done by"
msgstr ""

#
#. type: findex
#: R-exts.texi:10061
#, no-wrap
msgid "findVar"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10065
msgid ""
"@code{findVar}, but to use it we need to install @code{name} as a name in "
"the symbol table.  As we wanted the value for internal use, we return "
"@code{NULL}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10067
msgid "Similar functions with syntax"
msgstr ""

#
#. type: group
#: R-exts.texi:10072
#, no-wrap
msgid ""
"void defineVar(SEXP symbol, SEXP value, SEXP rho)\n"
"void setVar(SEXP symbol, SEXP value, SEXP rho)\n"
msgstr ""

#
#. type: findex
#: R-exts.texi:10074
#, no-wrap
msgid "defineVar"
msgstr ""

#
#. type: findex
#: R-exts.texi:10075
#, no-wrap
msgid "setVar"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10091
msgid ""
"can be used to assign values to @R{} variables.  @code{defineVar} creates a "
"new binding or changes the value of an existing binding in the specified "
"environment frame; it is the analogue of @code{assign(symbol, value, envir = "
"rho, inherits = FALSE)}, but unlike @code{assign}, @code{defineVar} does not "
"make a copy of the object @code{value}.@footnote{You can assign a "
"@emph{copy} of the object in the environment frame @code{rho} using "
"@code{defineVar(symbol, duplicate(value), rho)}).} @code{setVar} searches "
"for an existing binding for @code{symbol} in @code{rho} or its enclosing "
"environments.  If a binding is found, its value is changed to @code{value}.  "
"Otherwise, a new binding with the specified value is created in the global "
"environment.  This corresponds to @code{assign(symbol, value, envir = rho, "
"inherits = TRUE)}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10098
msgid ""
"Some operations are done so frequently that there are convenience functions "
"to handle them. (All these are provided via the header file @file{Rinternals."
"h}.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10101
msgid ""
"Suppose we wanted to pass a single logical argument @code{ignore_quotes}: we "
"could use"
msgstr ""

#
#. type: example
#: R-exts.texi:10105
#, no-wrap
msgid ""
"    int ign = asLogical(ignore_quotes);\n"
"    if(ign == NA_LOGICAL) error(\"'ignore_quotes' must be TRUE or FALSE\");\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10114
msgid ""
"which will do any coercion needed (at least from a vector argument), and "
"return @code{NA_LOGICAL} if the value passed was @code{NA} or coercion "
"failed.  There are also @code{asInteger}, @code{asReal} and "
"@code{asComplex}.  The function @code{asChar} returns a @code{CHARSXP}.  All "
"of these functions ignore any elements of an input vector after the first."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10116
msgid "To return a length-one real vector we can use"
msgstr ""

#
#. type: example
#: R-exts.texi:10119
#, no-wrap
msgid ""
"    double x;\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:10122
#, no-wrap
msgid ""
"    ...\n"
"    return ScalarReal(x);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10128
msgid ""
"and there are versions of this for all the atomic vector types (those for a "
"length-one character vector being @code{ScalarString} with argument a "
"@code{CHARSXP} and @code{mkString} with argument @code{const char *})."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10134
msgid ""
"Some of the @code{is@var{XXXX}} functions differ from their apparent @R{}-"
"level counterparts: for example @code{isVector} is true for any atomic "
"vector type (@code{isVectorAtomic}) and for lists and expressions "
"(@code{isVectorList}) (with no check on attributes).  @code{isMatrix} is a "
"test of a length-2 @code{\"dim\"} attribute."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10147
msgid ""
"There are a series of small macros/functions to help construct pairlists and "
"language objects (whose internal structures just differ by "
"@code{SEXPTYPE}).  Function @code{CONS(u, v)} is the basic building block: "
"it constructs a pairlist from @code{u} followed by @code{v} (which is a "
"pairlist or @code{R_NilValue}).  @code{LCONS} is a variant that constructs a "
"language object.  Functions @code{list1} to @code{list5} construct a "
"pairlist from one to five items, and @code{lang1} to @code{lang6} do the "
"same for a language object (a function to call plus zero to five "
"arguments).  Functions @code{elt} and @code{lastElt} find the @var{i}th "
"element and the last element of a pairlist, and @code{nthcdr} returns a "
"pointer to the @var{n}th position in the pairlist (whose @code{CAR} is the "
"@var{n}th item)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10151
msgid ""
"Functions @code{str2type} and @code{type2str} map @R{} length-one character "
"strings to and from @code{SEXPTYPE} numbers, and @code{type2char} maps "
"numbers to C character strings."
msgstr ""

#
#. type: subsubsection
#: R-exts.texi:10156
#: R-exts.texi:10158
#: R-exts.texi:10159
#, no-wrap
msgid "Semi-internal convenience functions"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10164
msgid ""
"There is quite a collection of functions that may be used in your C code "
"@emph{if} you are willing to adapt to rare ``API'' changes.  These typically "
"contain ``workhorses'' of their @R{} counterparts."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10167
msgid ""
"Functions @code{any_duplicated} and @code{any_duplicated3} are fast versions "
"of @R{}'s @code{any(duplicated(.))}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10169
msgid ""
"Function @code{R_compute_identical} corresponds to @R{}'s @code{identical} "
"function."
msgstr ""

#
#. type: findex
#: R-exts.texi:10173
#, no-wrap
msgid "duplicate"
msgstr ""

#
#. type: cindex
#: R-exts.texi:10174
#, no-wrap
msgid "Copying objects"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10177
msgid "When assignments are done in @R{} such as"
msgstr ""

#
#. type: example
#: R-exts.texi:10181
#, no-wrap
msgid ""
"x <- 1:10\n"
"y <- x\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10193
msgid ""
"the named object is not necessarily copied, so after those two assignments "
"@code{y} and @code{x} are bound to the same @code{SEXPREC} (the structure a "
"@code{SEXP} points to).  This means that any code which alters one of them "
"has to make a copy before modifying the copy if the usual @R{} semantics are "
"to apply.  Note that whereas @code{.C} and @code{.Fortran} do copy their "
"arguments (unless the dangerous @code{dup = FALSE} is used), @code{.Call} "
"and @code{.External} do not.  So @code{duplicate} is commonly called on "
"arguments to @code{.Call} before modifying them."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10202
msgid ""
"However, at least some of this copying is unneeded.  In the first assignment "
"shown, @code{x <- 1:10}, @R{} first creates an object with value @code{1:10} "
"and then assigns it to @code{x} but if @code{x} is modified no copy is "
"necessary as the temporary object with value @code{1:10} cannot be referred "
"to again.  @R{} distinguishes between named and unnamed objects @emph{via} a "
"field in a @code{SEXPREC} that can be accessed @emph{via} the macros "
"@code{NAMED} and @code{SET_NAMED}.  This can take values"
msgstr ""

#
#. type: item
#: R-exts.texi:10204
#, no-wrap
msgid "0"
msgstr ""

#
#. type: table
#: R-exts.texi:10206
msgid "The object is not bound to any symbol"
msgstr ""

#
#. type: item
#: R-exts.texi:10206
#, no-wrap
msgid "1"
msgstr ""

#
#. type: table
#: R-exts.texi:10208
msgid "The object has been bound to exactly one symbol"
msgstr ""

#
#. type: item
#: R-exts.texi:10208
#, no-wrap
msgid "2"
msgstr ""

#
#. type: table
#: R-exts.texi:10211
msgid ""
"The object has potentially been bound to two or more symbols, and one should "
"act as if another variable is currently bound to this value."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10216
msgid ""
"Note the past tenses: @R{} does not do full reference counting and there may "
"currently be fewer bindings."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10223
msgid ""
"It is safe to modify the value of any @code{SEXP} for which "
"@code{NAMED(foo)} is zero, and if @code{NAMED(foo)} is two, the value should "
"be duplicated (@emph{via} a call to @code{duplicate}) before any "
"modification.  Note that it is the responsibility of the author of the code "
"making the modification to do the duplication, even if it is @code{x} whose "
"value is being modified after @code{y <- x}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10228
msgid ""
"The case @code{NAMED(foo) == 1} allows some optimization, but it can be "
"ignored (and duplication done whenever @code{NAMED(foo) > 0}).  (This "
"optimization is not currently usable in user code.)  It is intended for use "
"within replacement functions.  Suppose we used"
msgstr ""

#
#. type: example
#: R-exts.texi:10232
#, no-wrap
msgid ""
"x <- 1:10\n"
"foo(x) <- 3\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10236
msgid "which is computed as"
msgstr ""

#
#. type: example
#: R-exts.texi:10240
#, no-wrap
msgid ""
"x <- 1:10\n"
"x <- \"foo<-\"(x, 3)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10249
msgid ""
"Then inside @code{\"foo<-\"} the object pointing to the current value of "
"@code{x} will have @code{NAMED(foo)} as one, and it would be safe to modify "
"it as the only symbol bound to it is @code{x} and that will be rebound "
"immediately.  (Provided the remaining code in @code{\"foo<-\"} make no "
"reference to @code{x}, and no one is going to attempt a direct call such as "
"@code{y <- \"foo<-\"(x)}.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10251
msgid "This mechanism is likely to be replaced in future versions of @R{}."
msgstr ""

#
#. type: section
#: R-exts.texi:10258
#, no-wrap
msgid "Interface functions @code{.Call} and @code{.External}"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10262
msgid "In this section we consider the details of the @R{}/C interfaces."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10267
msgid ""
"These two interfaces have almost the same functionality. @code{.Call} is "
"based on the interface of the same name in @Sl{} version 4, and @code{."
"External} is based on @R{}'s @code{.Internal}.  @code{.External} is more "
"complex but allows a variable number of arguments."
msgstr ""

#
#. type: node
#: R-exts.texi:10272
#: R-exts.texi:10274
#: R-exts.texi:10315
#, no-wrap
msgid "Calling .Call"
msgstr ""

#
#. type: node
#: R-exts.texi:10272
#: R-exts.texi:10274
#: R-exts.texi:10315
#: R-exts.texi:10456
#, no-wrap
msgid "Calling .External"
msgstr ""

#
#. type: subsection
#: R-exts.texi:10272
#: R-exts.texi:10315
#: R-exts.texi:10456
#: R-exts.texi:10457
#, no-wrap
msgid "Missing and special values"
msgstr ""

#
#. type: subsection
#: R-exts.texi:10275
#, no-wrap
msgid "Calling @code{.Call}"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10281
msgid ""
"Let us convert our finite convolution example to use @code{.Call}.  The "
"calling function in @R{} is"
msgstr ""

#
#. type: example
#: R-exts.texi:10284
#, no-wrap
msgid "conv <- function(a, b) .Call(\"convolve2\", a, b)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10289
msgid ""
"which could hardly be simpler, but as we shall see all the type coercion is "
"transferred to the C code, which is"
msgstr ""

#
#. type: group
#: R-exts.texi:10300
#, no-wrap
msgid ""
"SEXP convolve2(SEXP a, SEXP b)\n"
"@{\n"
"    int na, nb, nab;\n"
"    double *xa, *xb, *xab;\n"
"    SEXP ab;\n"
"\n"
msgstr ""

#
#. type: group
#: R-exts.texi:10312
#, no-wrap
msgid ""
"    a = PROTECT(coerceVector(a, REALSXP));\n"
"    b = PROTECT(coerceVector(b, REALSXP));\n"
"    na = length(a); nb = length(b); nab = na + nb - 1;\n"
"    ab = PROTECT(allocVector(REALSXP, nab));\n"
"    xa = REAL(a); xb = REAL(b); xab = REAL(ab);\n"
"    for(int i = 0; i < nab; i++) xab[i] = 0.0;\n"
"    for(int i = 0; i < na; i++)\n"
"\tfor(int j = 0; j < nb; j++) xab[i + j] += xa[i] * xb[j];\n"
"    UNPROTECT(3);\n"
"    return ab;\n"
"@}\n"
msgstr ""

#
#. type: subsection
#: R-exts.texi:10316
#, no-wrap
msgid "Calling @code{.External}"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10322
msgid ""
"We can use the same example to illustrate @code{.External}.  The @R{} code "
"changes only by replacing @code{.Call} by @code{.External}"
msgstr ""

#
#. type: example
#: R-exts.texi:10325
#, no-wrap
msgid "conv <- function(a, b) .External(\"convolveE\", a, b)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10331
msgid ""
"but the main change is how the arguments are passed to the C code, this time "
"as a single SEXP.  The only change to the C code is how we handle the "
"arguments."
msgstr ""

#
#. type: group
#: R-exts.texi:10342
#, no-wrap
msgid ""
"SEXP convolveE(SEXP args)\n"
"@{\n"
"    int i, j, na, nb, nab;\n"
"    double *xa, *xb, *xab;\n"
"    SEXP a, b, ab;\n"
"\n"
msgstr ""

#
#. type: group
#: R-exts.texi:10347
#, no-wrap
msgid ""
"    a = PROTECT(coerceVector(CADR(args), REALSXP));\n"
"    b = PROTECT(coerceVector(CADDR(args), REALSXP));\n"
"    ...\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10353
msgid ""
"Once again we do not need to protect the arguments, as in the @R{} side of "
"the interface they are objects that are already in use.  The macros"
msgstr ""

#
#. type: group
#: R-exts.texi:10360
#, no-wrap
msgid ""
"  first = CADR(args);\n"
"  second = CADDR(args);\n"
"  third = CADDDR(args);\n"
"  fourth = CAD4R(args);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10366
msgid ""
"provide convenient ways to access the first four arguments.  More generally "
"we can use the"
msgstr ""

#
#. type: findex
#: R-exts.texi:10366
#, no-wrap
msgid "CAR"
msgstr ""

#
#. type: findex
#: R-exts.texi:10367
#, no-wrap
msgid "CDR"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10369
msgid "@code{CDR} and @code{CAR} macros as in"
msgstr ""

#
#. type: group
#: R-exts.texi:10374
#, no-wrap
msgid ""
"  args = CDR(args); a = CAR(args);\n"
"  args = CDR(args); b = CAR(args);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10380
msgid ""
"which clearly allows us to extract an unlimited number of arguments (whereas "
"@code{.Call} has a limit, albeit at 65 not a small one)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10388
msgid ""
"More usefully, the @code{.External} interface provides an easy way to handle "
"calls with a variable number of arguments, as @code{length(args)} will give "
"the number of arguments supplied (of which the first is ignored).  We may "
"need to know the names (`tags') given to the actual arguments, which we can "
"by using the @code{TAG} macro and using something like the following "
"example, that prints the names and the first value of its arguments if they "
"are vector types."
msgstr ""

#
#. type: group
#: R-exts.texi:10402
#, no-wrap
msgid ""
"SEXP showArgs(SEXP args)\n"
"@{\n"
"    args = CDR(args); /* skip 'name' */\n"
"    for(int i = 0; args != R_NilValue; i++, args = CDR(args)) @{\n"
"\tconst char *name =\n"
"\t    isNull(TAG(args)) ? \"\" : CHAR(PRINTNAME(TAG(args)));\n"
"\tSEXP el = CAR(args);\n"
"\tif (length(el) == 0) @{\n"
"\t    Rprintf(\"[%d] '%s' R type, length 0\\n\", i+1, name);\n"
"\t   continue;\n"
"\t@}\n"
msgstr ""

#
#. type: group
#: R-exts.texi:10408
#, no-wrap
msgid ""
"\tswitch(TYPEOF(el)) @{\n"
"\tcase REALSXP:\n"
"\t    Rprintf(\"[%d] '%s' %f\\n\", i+1, name, REAL(el)[0]);\n"
"\t    break;\n"
msgstr ""

#
#. type: group
#: R-exts.texi:10414
#, no-wrap
msgid ""
"\tcase LGLSXP:\n"
"\tcase INTSXP:\n"
"\t    Rprintf(\"[%d] '%s' %d\\n\", i+1, name, INTEGER(el)[0]);\n"
"\t    break;\n"
msgstr ""

#
#. type: group
#: R-exts.texi:10422
#, no-wrap
msgid ""
"\tcase CPLXSXP:\n"
"\t@{\n"
"\t    Rcomplex cpl = COMPLEX(el)[0];\n"
"\t    Rprintf(\"[%d] '%s' %f + %fi\\n\", i+1, name, cpl.r, cpl.i);\n"
"\t@}\n"
"\t    break;\n"
msgstr ""

#
#. type: group
#: R-exts.texi:10428
#, no-wrap
msgid ""
"\tcase STRSXP:\n"
"\t    Rprintf(\"[%d] '%s' %s\\n\", i+1, name,\n"
"\t\t   CHAR(STRING_ELT(el, 0)));\n"
"\t   break;\n"
msgstr ""

#
#. type: group
#: R-exts.texi:10436
#, no-wrap
msgid ""
"\tdefault:\n"
"\t    Rprintf(\"[%d] '%s' R type\\n\", i+1, name);\n"
"       @}\n"
"    @}\n"
"    return R_NilValue;\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10440
msgid "This can be called by the wrapper function"
msgstr ""

#
#. type: example
#: R-exts.texi:10443
#, no-wrap
msgid "showArgs <- function(...) invisible(.External(\"showArgs\", ...))\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10448
msgid ""
"Note that this style of programming is convenient but not necessary, as an "
"alternative style is"
msgstr ""

#
#. type: example
#: R-exts.texi:10451
#, no-wrap
msgid "showArgs1 <- function(...) invisible(.Call(\"showArgs1\", list(...)))\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10455
msgid "The (very similar) C code is in the scripts."
msgstr ""

#
#. type: cindex
#: R-exts.texi:10458
#: R-exts.texi:11666
#, no-wrap
msgid "Missing values"
msgstr ""

#
#. type: cindex
#: R-exts.texi:10459
#: R-exts.texi:11667
#, no-wrap
msgid "IEEE special values"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10471
msgid ""
"One piece of error-checking the @code{.C} call does (unless @code{NAOK} is "
"true) is to check for missing (@code{NA}) and @acronym{IEEE} special values "
"(@code{Inf}, @code{-Inf} and @code{NaN}) and give an error if any are "
"found.  With the @code{.Call} interface these will be passed to our code.  "
"In this example the special values are no problem, as @acronym{IEC60559} "
"arithmetic will handle them correctly.  In the current implementation this "
"is also true of @code{NA} as it is a type of @code{NaN}, but it is unwise to "
"rely on such details.  Thus we will re-write the code to handle @code{NA}s "
"using macros defined in @file{R_ext/Arith.h} included by @file{R.h}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10474
msgid ""
"The code changes are the same in any of the versions of @code{convolve2} or "
"@code{convolveE}:"
msgstr ""

#
#. type: group
#: R-exts.texi:10485
#, no-wrap
msgid ""
"    ...\n"
"  for(int i = 0; i < na; i++)\n"
"    for(int j = 0; j < nb; j++)\n"
"\tif(ISNA(xa[i]) || ISNA(xb[j]) || ISNA(xab[i + j]))\n"
"\t    xab[i + j] = NA_REAL;\n"
"\telse\n"
"\t    xab[i + j] += xa[i] * xb[j];\n"
"    ...\n"
msgstr ""

#
#. type: findex
#: R-exts.texi:10488
#: R-exts.texi:11668
#, no-wrap
msgid "ISNA"
msgstr ""

#
#. type: findex
#: R-exts.texi:10489
#: R-exts.texi:11669
#, no-wrap
msgid "ISNAN"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10498
msgid ""
"Note that the @code{ISNA} macro, and the similar macros @code{ISNAN} (which "
"checks for @code{NaN} or @code{NA}) and @code{R_FINITE} (which is false for "
"@code{NA} and all the special values), only apply to numeric values of type "
"@code{double}.  Missingness of integers, logicals and character strings can "
"be tested by equality to the constants @code{NA_INTEGER}, @code{NA_LOGICAL} "
"and @code{NA_STRING}.  These and @code{NA_REAL} can be used to set elements "
"of @R{} vectors to @code{NA}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10501
msgid ""
"The constants @code{R_NaN}, @code{R_PosInf} and @code{R_NegInf} can be used "
"to set @code{double}s to the special values."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10507
msgid "The main function we will use is"
msgstr ""

#
#. type: example
#: R-exts.texi:10510
#, no-wrap
msgid "SEXP eval(SEXP expr, SEXP rho);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10517
msgid ""
"the equivalent of the interpreted @R{} code @code{eval(expr, envir = rho)} "
"(so @code{rho} must be an environment), although we can also make use of "
"@code{findVar}, @code{defineVar} and @code{findFun} (which restricts the "
"search to functions)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10520
msgid ""
"To see how this might be applied, here is a simplified internal version of "
"@code{lapply} for expressions, used as"
msgstr ""

#
#. type: group
#: R-exts.texi:10525
#, no-wrap
msgid ""
"a <- list(a = 1:5, b = rnorm(10), test = runif(100))\n"
".Call(\"lapply\", a, quote(sum(x)), new.env())\n"
msgstr ""

#
#. type: group
#: R-exts.texi:10537
#, no-wrap
msgid ""
"SEXP lapply(SEXP list, SEXP expr, SEXP rho)\n"
"@{\n"
"    int n = length(list);\n"
"    SEXP ans;\n"
"\n"
msgstr ""

#
#. type: group
#: R-exts.texi:10549
#, no-wrap
msgid ""
"    if(!isNewList(list)) error(\"'list' must be a list\");\n"
"    if(!isEnvironment(rho)) error(\"'rho' should be an environment\");\n"
"    ans = PROTECT(allocVector(VECSXP, n));\n"
"    for(int i = 0; i < n; i++) @{\n"
"\tdefineVar(install(\"x\"), VECTOR_ELT(list, i), rho);\n"
"\tSET_VECTOR_ELT(ans, i, eval(expr, rho));\n"
"    @}\n"
"    setAttrib(ans, R_NamesSymbol, getAttrib(list, R_NamesSymbol));\n"
"    UNPROTECT(1);\n"
"    return ans;\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10557
msgid ""
"It would be closer to @code{lapply} if we could pass in a function rather "
"than an expression.  One way to do this is @emph{via} interpreted @R{} code "
"as in the next example, but it is possible (if somewhat obscure) to do this "
"in C code.  The following is based on the code in @file{src/main/optimize.c}."
msgstr ""

#
#. type: group
#: R-exts.texi:10564
#, no-wrap
msgid ""
"SEXP lapply2(SEXP list, SEXP fn, SEXP rho)\n"
"@{\n"
"    int n = length(list);\n"
"    SEXP R_fcall, ans;\n"
"\n"
msgstr ""

#
#. type: group
#: R-exts.texi:10578
#, no-wrap
msgid ""
"    if(!isNewList(list)) error(\"'list' must be a list\");\n"
"    if(!isFunction(fn)) error(\"'fn' must be a function\");\n"
"    if(!isEnvironment(rho)) error(\"'rho' should be an environment\");\n"
"    R_fcall = PROTECT(lang2(fn, R_NilValue));\n"
"    ans = PROTECT(allocVector(VECSXP, n));\n"
"    for(int i = 0; i < n; i++) @{\n"
"\tSETCADR(R_fcall, VECTOR_ELT(list, i));\n"
"\tSET_VECTOR_ELT(ans, i, eval(R_fcall, rho));\n"
"    @}\n"
"    setAttrib(ans, R_NamesSymbol, getAttrib(list, R_NamesSymbol));\n"
"    UNPROTECT(2);\n"
"    return ans;\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10583
msgid "used by"
msgstr ""

#
#. type: example
#: R-exts.texi:10586
#, no-wrap
msgid ".Call(\"lapply2\", a, sum, new.env())\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10592
msgid ""
"Function @code{lang2} creates an executable pairlist of two elements, but "
"this will only be clear to those with a knowledge of a LISP-like language."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10596
msgid ""
"As a more comprehensive example of constructing an @R{} call in C code and "
"evaluating, consider the following fragment of @code{printAttributes} in "
"@file{src/main/print.c}."
msgstr ""

#
#. type: example
#: R-exts.texi:10612
#, no-wrap
msgid ""
"    /* Need to construct a call to\n"
"       print(CAR(a), digits=digits)\n"
"       based on the R_print structure, then eval(call, env).\n"
"       See do_docall for the template for this sort of thing.\n"
"    */\n"
"    SEXP s, t;\n"
"    t = s = PROTECT(allocList(3));\n"
"    SET_TYPEOF(s, LANGSXP);\n"
"    SETCAR(t, install(\"print\")); t = CDR(t);\n"
"    SETCAR(t,  CAR(a)); t = CDR(t);\n"
"    SETCAR(t, ScalarInteger(digits));\n"
"    SET_TAG(t, install(\"digits\"));\n"
"    eval(s, env);\n"
"    UNPROTECT(1);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10619
msgid ""
"At this point @code{CAR(a)} is the @R{} object to be printed, the current "
"attribute.  There are three steps: the call is constructed as a pairlist of "
"length 3, the list is filled in, and the expression represented by the "
"pairlist is evaluated."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10627
msgid ""
"A pairlist is quite distinct from a generic vector list, the only user-"
"visible form of list in @R{}.  A pairlist is a linked list (with "
"@code{CDR(t)} computing the next entry), with items (accessed by "
"@code{CAR(t)}) and names or tags (set by @code{SET_TAG}).  In this call "
"there are to be three items, a symbol (pointing to the function to be "
"called) and two argument values, the first unnamed and the second named.  "
"Setting the type to @code{LANGSXP} makes this a call which can be evaluated."
msgstr ""

#
#. type: node
#: R-exts.texi:10631
#: R-exts.texi:10633
#: R-exts.texi:10634
#: R-exts.texi:10635
#: R-exts.texi:10716
#, no-wrap
msgid "Zero-finding"
msgstr ""

#
#. type: subsection
#: R-exts.texi:10631
#: R-exts.texi:10633
#: R-exts.texi:10716
#: R-exts.texi:10717
#, no-wrap
msgid "Calculating numerical derivatives"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10640
msgid ""
"In this section we re-work the example of Becker, Chambers & Wilks (1988, pp."
"~205--10) on finding a zero of a univariate function.  The @R{} code and an "
"example are"
msgstr ""

#
#. type: example
#: R-exts.texi:10651
#, no-wrap
msgid ""
"zero <- function(f, guesses, tol = 1e-7) @{\n"
"    f.check <- function(x) @{\n"
"\tx <- f(x)\n"
"\tif(!is.numeric(x)) stop(\"Need a numeric result\")\n"
"\tas.double(x)\n"
"    @}\n"
"    .Call(\"zero\", body(f.check), as.double(guesses), as.double(tol),\n"
"\t  new.env())\n"
"@}\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:10654
#, no-wrap
msgid ""
"cube1 <- function(x) (x^2 + 1) * (x - 1.5)\n"
"zero(cube1, c(0, 5))\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10659
msgid ""
"where this time we do the coercion and error-checking in the @R{} code.  The "
"C code is"
msgstr ""

#. type: group
#: R-exts.texi:10669
#, no-wrap
msgid ""
"SEXP mkans(double x)\n"
"@{\n"
"    // no need for PROTECT() here, as REAL(.) does not allocate:\n"
"    SEXP ans = allocVector(REALSXP, 1);\n"
"    REAL(ans)[0] = x;\n"
"    return ans;\n"
"@}\n"
msgstr ""

#
#. type: group
#: R-exts.texi:10682
#, no-wrap
msgid ""
"double feval(double x, SEXP f, SEXP rho)\n"
"@{\n"
"    // a version with (too) much PROTECT()ion .. \"better safe than sorry\"\n"
"    SEXP symbol, value;\n"
"    PROTECT(symbol = install(\"x\"));\n"
"    PROTECT(value = mkans(x));\n"
"    defineVar(symbol, value, rho);\n"
"    UNPROTECT(2);\n"
"    return(REAL(eval(f, rho))[0]);\n"
"@}\n"
msgstr ""

#
#. type: group
#: R-exts.texi:10690
#, no-wrap
msgid ""
"SEXP zero(SEXP f, SEXP guesses, SEXP stol, SEXP rho)\n"
"@{\n"
"    double x0 = REAL(guesses)[0], x1 = REAL(guesses)[1],\n"
"\t   tol = REAL(stol)[0];\n"
"    double f0, f1, fc, xc;\n"
msgstr ""

#
#. type: group
#: R-exts.texi:10698
#, no-wrap
msgid ""
"    if(tol <= 0.0) error(\"non-positive tol value\");\n"
"    f0 = feval(x0, f, rho); f1 = feval(x1, f, rho);\n"
"    if(f0 == 0.0) return mkans(x0);\n"
"    if(f1 == 0.0) return mkans(x1);\n"
"    if(f0*f1 > 0.0) error(\"x[0] and x[1] have the same sign\");\n"
msgstr ""

#
#. type: group
#: R-exts.texi:10713
#, no-wrap
msgid ""
"    for(;;) @{\n"
"\txc = 0.5*(x0+x1);\n"
"\tif(fabs(x0-x1) < tol) return  mkans(xc);\n"
"\tfc = feval(xc, f, rho);\n"
"\tif(fc == 0) return  mkans(xc);\n"
"\tif(f0*fc > 0.0) @{\n"
"\t    x0 = xc; f0 = fc;\n"
"\t@} else @{\n"
"\t    x1 = xc; f1 = fc;\n"
"\t@}\n"
"    @}\n"
"@}\n"
msgstr ""

#
#. type: cindex
#: R-exts.texi:10718
#, no-wrap
msgid "Numerical derivatives"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10724
msgid ""
"We will use a longer example (by Saikat DebRoy) to illustrate the use of "
"evaluation and @code{.External}.  This calculates numerical derivatives, "
"something that could be done as effectively in interpreted @R{} code but may "
"be needed as part of a larger C calculation."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10726
msgid "An interpreted @R{} version and an example are"
msgstr ""

#
#. type: group
#: R-exts.texi:10748
#, no-wrap
msgid ""
"numeric.deriv <- function(expr, theta, rho=sys.frame(sys.parent()))\n"
"@{\n"
"    eps <- sqrt(.Machine$double.eps)\n"
"    ans <- eval(substitute(expr), rho)\n"
"    grad <- matrix(, length(ans), length(theta),\n"
"\t\t   dimnames=list(NULL, theta))\n"
"    for (i in seq_along(theta)) @{\n"
"\told <- get(theta[i], envir=rho)\n"
"\tdelta <- eps * max(1, abs(old))\n"
"\tassign(theta[i], old+delta, envir=rho)\n"
"\tans1 <- eval(substitute(expr), rho)\n"
"\tassign(theta[i], old, envir=rho)\n"
"\tgrad[, i] <- (ans1 - ans)/delta\n"
"    @}\n"
"    attr(ans, \"gradient\") <- grad\n"
"    ans\n"
"@}\n"
"omega <- 1:5; x <- 1; y <- 2\n"
"numeric.deriv(sin(omega*x*y), c(\"x\", \"y\"))\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10754
msgid ""
"where @code{expr} is an expression, @code{theta} a character vector of "
"variable names and @code{rho} the environment to be used."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10756
msgid "For the compiled version the call from @R{} will be"
msgstr ""

#
#. type: example
#: R-exts.texi:10759
#, no-wrap
msgid ".External(\"numeric_deriv\", @var{expr}, @var{theta}, @var{rho})\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10763
msgid "with example usage"
msgstr ""

#
#. type: example
#: R-exts.texi:10767
#, no-wrap
msgid ""
".External(\"numeric_deriv\", quote(sin(omega*x*y)),\n"
"\t  c(\"x\", \"y\"), .GlobalEnv)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10772
msgid ""
"Note the need to quote the expression to stop it being evaluated in the "
"caller."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10774
msgid "Here is the complete C code which we will explain section by section."
msgstr ""

#
#. type: group
#: R-exts.texi:10779
#, no-wrap
msgid ""
"#include <R.h> /* for DOUBLE_EPS */\n"
"#include <Rinternals.h>\n"
"\n"
msgstr ""

#
#. type: group
#: R-exts.texi:10785
#, no-wrap
msgid ""
"SEXP numeric_deriv(SEXP args)\n"
"@{\n"
"    SEXP theta, expr, rho, ans, ans1, gradient, par, dimnames;\n"
"    double tt, xx, delta, eps = sqrt(DOUBLE_EPS), *rgr, *rans;\n"
"    int i, start;\n"
msgstr ""

#
#. type: group
#: R-exts.texi:10793
#: R-exts.texi:10836
#, no-wrap
msgid ""
"    expr = CADR(args);\n"
"    if(!isString(theta = CADDR(args)))\n"
"\terror(\"theta should be of type character\");\n"
"    if(!isEnvironment(rho = CADDDR(args)))\n"
"\terror(\"rho should be an environment\");\n"
msgstr ""

#
#. type: group
#: R-exts.texi:10799
#, no-wrap
msgid ""
"    ans = PROTECT(coerceVector(eval(expr, rho), REALSXP));\n"
"    gradient = PROTECT(allocMatrix(REALSXP, LENGTH(ans), LENGTH(theta)));\n"
"    rgr = REAL(gradient); rans = REAL(ans);\n"
msgstr ""

#
#. type: group
#: R-exts.texi:10814
#, no-wrap
msgid ""
"    for(i = 0, start = 0; i < LENGTH(theta); i++, start += LENGTH(ans)) @{\n"
"\tpar = PROTECT(findVar(installChar(STRING_ELT(theta, i)), rho));\n"
"\ttt = REAL(par)[0];\n"
"\txx = fabs(tt);\n"
"\tdelta = (xx < 1) ? eps : xx*eps;\n"
"\tREAL(par)[0] += delta;\n"
"\tans1 = PROTECT(coerceVector(eval(expr, rho), REALSXP));\n"
"\tfor(int j = 0; j < LENGTH(ans); j++)\n"
"\t    rgr[j + start] = (REAL(ans1)[j] - rans[j])/delta;\n"
"\tREAL(par)[0] = tt;\n"
"\tUNPROTECT(2); /* par, ans1 */\n"
"    @}\n"
msgstr ""

#
#. type: group
#: R-exts.texi:10824
#, no-wrap
msgid ""
"    dimnames = PROTECT(allocVector(VECSXP, 2));\n"
"    SET_VECTOR_ELT(dimnames, 1,  theta);\n"
"    dimnamesgets(gradient, dimnames);\n"
"    setAttrib(ans, install(\"gradient\"), gradient);\n"
"    UNPROTECT(3); /* ans  gradient  dimnames */\n"
"    return ans;\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10828
msgid "The code to handle the arguments is"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10845
msgid ""
"Note that we check for correct types of @code{theta} and @code{rho} but do "
"not check the type of @code{expr}.  That is because @code{eval} can handle "
"many types of @R{} objects other than @code{EXPRSXP}.  There is no useful "
"coercion we can do, so we stop with an error message if the arguments are "
"not of the correct mode."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10848
msgid ""
"The first step in the code is to evaluate the expression in the environment "
"@code{rho}, by"
msgstr ""

#
#. type: example
#: R-exts.texi:10851
#, no-wrap
msgid "    ans = PROTECT(coerceVector(eval(expr, rho), REALSXP));\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10855
msgid "We then allocate space for the calculated derivative by"
msgstr ""

#
#. type: example
#: R-exts.texi:10858
#, no-wrap
msgid "    gradient = PROTECT(allocMatrix(REALSXP, LENGTH(ans), LENGTH(theta)));\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10866
msgid ""
"The first argument to @code{allocMatrix} gives the @code{SEXPTYPE} of the "
"matrix: here we want it to be @code{REALSXP}.  The other two arguments are "
"the numbers of rows and columns.  (Note that @code{LENGTH} is intended to be "
"used for vectors: @code{length} is more generally applicable.)"
msgstr ""

#
#. type: group
#: R-exts.texi:10871
#, no-wrap
msgid ""
"    for(i = 0, start = 0; i < LENGTH(theta); i++, start += LENGTH(ans)) @{\n"
"\tpar = PROTECT(findVar(installChar(STRING_ELT(theta, i)), rho));\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10884
msgid ""
"Here, we are entering a for loop.  We loop through each of the variables.  "
"In the @code{for} loop, we first create a symbol corresponding to the "
"@code{i}'th element of the @code{STRSXP} @code{theta}.  Here, "
"@code{STRING_ELT(theta, i)} accesses the @code{i}'th element of the "
"@code{STRSXP} @code{theta}.  Macro @code{CHAR()} extracts the actual "
"character representation@footnote{@pxref{Character encoding issues} for why "
"this might not be what is required.} of it: it returns a pointer.  We then "
"install the name and use @code{findVar} to find its value."
msgstr ""

#
#. type: group
#: R-exts.texi:10892
#, no-wrap
msgid ""
"\ttt = REAL(par)[0];\n"
"\txx = fabs(tt);\n"
"\tdelta = (xx < 1) ? eps : xx*eps;\n"
"\tREAL(par)[0] += delta;\n"
"\tans1 = PROTECT(coerceVector(eval(expr, rho), REALSXP));\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10903
msgid ""
"We first extract the real value of the parameter, then calculate "
"@code{delta}, the increment to be used for approximating the numerical "
"derivative.  Then we change the value stored in @code{par} (in environment "
"@code{rho}) by @code{delta} and evaluate @code{expr} in environment "
"@code{rho} again.  Because we are directly dealing with original @R{} memory "
"locations here, @R{} does the evaluation for the changed parameter value."
msgstr ""

#
#. type: group
#: R-exts.texi:10911
#, no-wrap
msgid ""
"\tfor(int j = 0; j < LENGTH(ans); j++)\n"
"\t    rgr[j + start] = (REAL(ans1)[j] - rans[j])/delta;\n"
"\tREAL(par)[0] = tt;\n"
"\tUNPROTECT(2);\n"
"    @}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10917
msgid ""
"Now, we compute the @code{i}'th column of the gradient matrix.  Note how it "
"is accessed: @R{} stores matrices by column (like FORTRAN)."
msgstr ""

#
#. type: group
#: R-exts.texi:10927
#, no-wrap
msgid ""
"    dimnames = PROTECT(allocVector(VECSXP, 2));\n"
"    SET_VECTOR_ELT(dimnames, 1, theta);\n"
"    dimnamesgets(gradient, dimnames);\n"
"    setAttrib(ans, install(\"gradient\"), gradient);\n"
"    UNPROTECT(3);\n"
"    return ans;\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10938
msgid ""
"First we add column names to the gradient matrix.  This is done by "
"allocating a list (a @code{VECSXP}) whose first element, the row names, is "
"@code{NULL} (the default) and the second element, the column names, is set "
"as @code{theta}.  This list is then assigned as the attribute having the "
"symbol @code{R_DimNamesSymbol}.  Finally we set the gradient matrix as the "
"gradient attribute of @code{ans}, unprotect the remaining protected "
"locations and return the answer @code{ans}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10949
msgid ""
"Suppose an @R{} extension want to accept an @R{} expression from the user "
"and evaluate it.  The previous section covered evaluation, but the "
"expression will be entered as text and needs to be parsed first.  A small "
"part of @R{}'s parse interface is declared in header file @file{R_ext/Parse."
"h}@footnote{This is only guaranteed to show the current interface: it is "
"liable to change.}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10952
msgid ""
"An example of the usage can be found in the (example) Windows package "
"@pkg{windlgs} included in the @R{} source tree.  The essential part is"
msgstr ""

#
#. type: group
#: R-exts.texi:10958
#, no-wrap
msgid ""
"#include <R.h>\n"
"#include <Rinternals.h>\n"
"#include <R_ext/Parse.h>\n"
"\n"
msgstr ""

#
#. type: group
#: R-exts.texi:10980
#, no-wrap
msgid ""
"SEXP menu_ttest3()\n"
"@{\n"
"    char cmd[256];\n"
"    SEXP cmdSexp, cmdexpr, ans = R_NilValue;\n"
"    ParseStatus status;\n"
"   ...\n"
"    if(done == 1) @{\n"
"\tcmdSexp = PROTECT(allocVector(STRSXP, 1));\n"
"\tSET_STRING_ELT(cmdSexp, 0, mkChar(cmd));\n"
"\tcmdexpr = PROTECT(R_ParseVector(cmdSexp, -1, &status, R_NilValue));\n"
"\tif (status != PARSE_OK) @{\n"
"\t    UNPROTECT(2);\n"
"\t    error(\"invalid call %s\", cmd);\n"
"\t@}\n"
"\t/* Loop is needed here as EXPSEXP will be of length > 1 */\n"
"\tfor(int i = 0; i < length(cmdexpr); i++)\n"
"\t    ans = eval(VECTOR_ELT(cmdexpr, i), R_GlobalEnv);\n"
"\tUNPROTECT(2);\n"
"    @}\n"
"    return ans;\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:10985
msgid ""
"Note that a single line of text may give rise to more than one @R{} "
"expression."
msgstr ""

#
#. type: findex
#: R-exts.texi:10986
#, no-wrap
msgid "R_ParseVector"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11003
msgid ""
"@code{R_ParseVector} is essentially the code used to implement "
"@code{parse(text=)} at @R{} level.  The first argument is a character vector "
"(corresponding to @code{text}) and the second the maximal number of "
"expressions to parse (corresponding to @code{n}).  The third argument is a "
"pointer to a variable of an enumeration type, and it is normal (as "
"@code{parse} does) to regard all values other than @code{PARSE_OK} as an "
"error.  Other values which might be returned are @code{PARSE_INCOMPLETE} (an "
"incomplete expression was found) and @code{PARSE_ERROR} (a syntax error), in "
"both cases the value returned being @code{R_NilValue}. The fourth argument "
"is a length one character vector to be used as a filename in error messages, "
"a @code{srcfile} object or the @R{} @code{NULL} object (as in the example "
"above). If a @code{srcfile} object was used, a @code{srcref} attribute would "
"be attached to the result, containing a list of @code{srcref} objects of the "
"same length as the expression, to allow it to be echoed with its original "
"formatting."
msgstr ""

#
#. type: subsection
#: R-exts.texi:11006
#: R-exts.texi:11008
#: R-exts.texi:11009
#, no-wrap
msgid "Accessing source references"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11014
msgid ""
"The source references added by the parser are recorded by @R{}'s evaluator "
"as it evaluates code. Two functions make these available to debuggers "
"running C code:"
msgstr ""

#
#. type: findex
#: R-exts.texi:11014
#, no-wrap
msgid "R_Srcref"
msgstr ""

#
#. type: findex
#: R-exts.texi:11015
#, no-wrap
msgid "R_GetCurrentSrcref"
msgstr ""

#
#. type: findex
#: R-exts.texi:11016
#, no-wrap
msgid "R_GetSrcFilename"
msgstr ""

#
#. type: example
#: R-exts.texi:11020
#, no-wrap
msgid "SEXP R_GetCurrentSrcref(int skip);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11029
msgid ""
"This function checks @code{R_Srcref} and the current evaluation stack for "
"entries that contain source reference information.  The @code{skip} argument "
"tells how many source references to skip before returning the @code{SEXP} of "
"the @code{srcref} object, counting from the top of the stack.  If @code{skip "
"< 0}, @code{abs(skip)} locations are counted up from the bottom of the "
"stack. If too few or no source references are found, @code{NULL} is returned."
msgstr ""

#
#. type: example
#: R-exts.texi:11032
#, no-wrap
msgid "SEXP R_GetSrcFilename(SEXP srcref);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11037
msgid ""
"This function extracts the filename from the source reference for display, "
"returning a length 1 character vector containing the filename.  If no name "
"is found, @code{\"\"} is returned."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11043
msgid ""
"The @code{SEXPTYPE}s @code{EXTPTRSXP} and @code{WEAKREFSXP} can be "
"encountered at @R{} level, but are created in C code."
msgstr ""

#
#. type: cindex
#: R-exts.texi:11044
#, no-wrap
msgid "external pointer"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11052
msgid ""
"External pointer @code{SEXP}s are intended to handle references to C "
"structures such as `handles', and are used for this purpose in package "
"@CRANpkg{RODBC} for example.  They are unusual in their copying semantics in "
"that when an @R{} object is copied, the external pointer object is not "
"duplicated.  (For this reason external pointers should only be used as part "
"of an object with normal semantics, for example an attribute or an element "
"of a list.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11054
msgid "An external pointer is created by"
msgstr ""

#
#. type: example
#: R-exts.texi:11057
#, no-wrap
msgid "SEXP R_MakeExternalPtr(void *p, SEXP tag, SEXP prot);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11069
msgid ""
"where @code{p} is the pointer (and hence this cannot portably be a function "
"pointer), and @code{tag} and @code{prot} are references to ordinary @R{} "
"objects which will remain in existence (be protected from garbage "
"collection) for the lifetime of the external pointer object.  A useful "
"convention is to use the @code{tag} field for some form of type "
"identification and the @code{prot} field for protecting the memory that the "
"external pointer represents, if that memory is allocated from the @R{} "
"heap.  Both @code{tag} and @code{prot} can be @code{R_NilValue}, and often "
"are."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11071
msgid "The elements of an external pointer can be accessed and set @emph{via}"
msgstr ""

#
#. type: example
#: R-exts.texi:11080
#, no-wrap
msgid ""
"void *R_ExternalPtrAddr(SEXP s);\n"
"SEXP R_ExternalPtrTag(SEXP s);\n"
"SEXP R_ExternalPtrProtected(SEXP s);\n"
"void R_ClearExternalPtr(SEXP s);\n"
"void R_SetExternalPtrAddr(SEXP s, void *p);\n"
"void R_SetExternalPtrTag(SEXP s, SEXP tag);\n"
"void R_SetExternalPtrProtected(SEXP s, SEXP p);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11084
msgid "Clearing a pointer sets its value to the C @code{NULL} pointer."
msgstr ""

#
#. type: cindex
#: R-exts.texi:11085
#, no-wrap
msgid "finalizer"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11089
msgid ""
"An external pointer object can have a @emph{finalizer}, a piece of code to "
"be run when the object is garbage collected.  This can be @R{} code or C "
"code, and the various interfaces are, respectively."
msgstr ""

#
#. type: example
#: R-exts.texi:11092
#, no-wrap
msgid ""
"void R_RegisterFinalizerEx(SEXP s, SEXP fun, Rboolean onexit);\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:11095
#, no-wrap
msgid ""
"typedef void (*R_CFinalizer_t)(SEXP);\n"
"void R_RegisterCFinalizerEx(SEXP s, R_CFinalizer_t fun, Rboolean onexit);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11104
msgid ""
"The @R{} function indicated by @code{fun} should be a function of a single "
"argument, the object to be finalized.  @R{} does not perform a garbage "
"collection when shutting down, and the @code{onexit} argument of the "
"extended forms can be used to ask that the finalizer be run during a normal "
"shutdown of the @R{} session.  It is suggested that it is good practice to "
"clear the pointer on finalization."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11107
msgid ""
"The only @R{} level function for interacting with external pointers is "
"@code{reg.finalizer} which can be used to set a finalizer."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11111
msgid ""
"It is probably not a good idea to allow an external pointer to be @code{save}"
"d and then reloaded, but if this happens the pointer will be set to the C "
"@code{NULL} pointer."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11117
msgid ""
"Finalizers can be run at many places in the code base and much of it, "
"including the @R{} interpreter, is not re-entrant.  So great care is needed "
"in choosing the code to be run in a finalizer. As from @R{} 3.0.3 finalizers "
"are marked to be run at garbage collection but only run at a somewhat safe "
"point thereafter."
msgstr ""

#
#. type: cindex
#: R-exts.texi:11118
#, no-wrap
msgid "weak reference"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11122
msgid ""
"Weak references are used to allow the programmer to maintain information on "
"entities without preventing the garbage collection of the entities once they "
"become unreachable."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11128
msgid ""
"A weak reference contains a key and a value.  The value is reachable is if "
"it either reachable directly or @emph{via} weak references with reachable "
"keys.  Once a value is determined to be unreachable during garbage "
"collection, the key and value are set to @code{R_NilValue} and the finalizer "
"will be run later in the garbage collection."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11130
msgid "Weak reference objects are created by one of"
msgstr ""

#
#. type: example
#: R-exts.texi:11135
#, no-wrap
msgid ""
"SEXP R_MakeWeakRef(SEXP key, SEXP val, SEXP fin, Rboolean onexit);\n"
"SEXP R_MakeWeakRefC(SEXP key, SEXP val, R_CFinalizer_t fin,\n"
"\t\t    Rboolean onexit);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11141
msgid ""
"where the @R{} or C finalizer are specified in exactly the same way as for "
"an external pointer object (whose finalization interface is implemented "
"@emph{via} weak references)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11143
msgid "The parts can be accessed @emph{via}"
msgstr ""

#
#. type: example
#: R-exts.texi:11148
#, no-wrap
msgid ""
"SEXP R_WeakRefKey(SEXP w);\n"
"SEXP R_WeakRefValue(SEXP w);\n"
"void R_RunWeakRefFinalizer(SEXP w);\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:11156
msgid ""
"A toy example of the use of weak references can be found at @uref{http://"
"homepage.stat.uiowa.edu/~luke/R/references/weakfinex.html, @code{homepage.@/"
"stat.@/uiowa.@/edu/@/~luke/@/R/references/@/weakfinex.html}}, but that is "
"used to add finalizers to external pointers which can now be done more "
"directly.  At the time of writing no @acronym{CRAN} or Bioconductor package "
"uses weak references."
msgstr ""

#
#. type: node
#: R-exts.texi:11160
#: R-exts.texi:11162
#, no-wrap
msgid "An external pointer example"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11172
msgid ""
"Package @CRANpkg{RODBC} uses external pointers to maintain its "
"@emph{channels}, connections to databases.  There can be several connections "
"open at once, and the status information for each is stored in a C structure "
"(pointed to by @code{this_handle}) in the code extract below) that is "
"returned @emph{via} an external pointer as part of the RODBC `channel' (as "
"the @code{\"handle_ptr\"} attribute).  The external pointer is created by"
msgstr ""

#
#. type: example
#: R-exts.texi:11187
#, no-wrap
msgid ""
"    SEXP ans, ptr;\n"
"    ans = PROTECT(allocVector(INTSXP, 1));\n"
"    ptr = R_MakeExternalPtr(thisHandle, install(\"RODBC_channel\"), R_NilValue);\n"
"    PROTECT(ptr);\n"
"    R_RegisterCFinalizerEx(ptr, chanFinalizer, TRUE);\n"
"\t    ...\n"
"    /* return the channel no */\n"
"    INTEGER(ans)[0] = nChannels;\n"
"    /* and the connection string as an attribute */\n"
"    setAttrib(ans, install(\"connection.string\"), constr);\n"
"    setAttrib(ans, install(\"handle_ptr\"), ptr);\n"
"    UNPROTECT(3);\n"
"    return ans;\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:11195
msgid ""
"Note the symbol given to identify the usage of the external pointer, and the "
"use of the finalizer.  Since the final argument when registering the "
"finalizer is @code{TRUE}, the finalizer will be run at the of the @R{} "
"session (unless it crashes).  This is used to close and clean up the "
"connection to the database.  The finalizer code is simply"
msgstr ""

#
#. type: example
#: R-exts.texi:11203
#, no-wrap
msgid ""
"static void chanFinalizer(SEXP ptr)\n"
"@{\n"
"    if(!R_ExternalPtrAddr(ptr)) return;\n"
"    inRODBCClose(R_ExternalPtrAddr(ptr));\n"
"    R_ClearExternalPtr(ptr); /* not really needed */\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11208
msgid ""
"Clearing the pointer and checking for a @code{NULL} pointer avoids any "
"possibility of attempting to close an already-closed channel."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11212
msgid ""
"@R{}'s connections provide another example of using external pointers, in "
"that case purely to be able to use a finalizer to close and destroy the "
"connection if it is no longer is use."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11221
msgid ""
"The vector accessors like @code{REAL} and @code{INTEGER} and "
"@code{VECTOR_ELT} are @emph{functions} when used in @R{} extensions.  (For "
"efficiency they are macros when used in the @R{} source code, apart from "
"@code{SET_STRING_ELT} and @code{SET_VECTOR_ELT} which are always functions.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11224
msgid ""
"The accessor functions check that they are being used on an appropriate type "
"of @code{SEXP}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11233
msgid ""
"If efficiency is essential, the macro versions of the accessors can be "
"obtained by defining @samp{USE_RINTERNALS} before including @file{Rinternals."
"h}.  If you find it necessary to do so, please do test that your code "
"compiles without @samp{USE_RINTERNALS} defined, as this provides a stricter "
"test that the accessors have been used correctly.  Note too that the use of "
"@samp{USE_RINTERNALS} when the header is included in C++ code is not "
"supported: doing so uses C99 features which are not necessarily in C++."
msgstr ""

#
#. type: findex
#: R-exts.texi:11237
#, no-wrap
msgid "translateChar"
msgstr ""

#
#. type: findex
#: R-exts.texi:11238
#, no-wrap
msgid "translateCharUTF8"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11250
msgid ""
"@code{CHARSXP}s can be marked as coming from a known encoding (Latin-1 or "
"UTF-8).  This is mainly intended for human-readable output, and most "
"packages can just treat such @code{CHARSXP}s as a whole.  However, if they "
"need to be interpreted as characters or output at C level then it would "
"normally be correct to ensure that they are converted to the encoding of the "
"current locale: this can be done by accessing the data in the @code{CHARSXP} "
"by @code{translateChar} rather than by @code{CHAR}.  If re-encoding is "
"needed this allocates memory with @code{R_alloc} which thus persists to the "
"end of the @code{.Call}/@code{.External} call unless @code{vmaxset} is used "
"(@pxref{Transient storage allocation})."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11255
msgid ""
"There is a similar function @code{translateCharUTF8} which converts to "
"UTF-8: this has the advantage that a faithful translation is almost always "
"possible (whereas only a few languages can be represented in the encoding of "
"the current locale unless that is UTF-8)."
msgstr ""

#
#. type: findex
#: R-exts.texi:11256
#, no-wrap
msgid "getCharCE"
msgstr ""

#
#. type: findex
#: R-exts.texi:11257
#, no-wrap
msgid "mkCharCE"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11260
msgid ""
"There is a public interface to the encoding marked on @code{CHARXSXPs} "
"@emph{via}"
msgstr ""

#
#. type: example
#: R-exts.texi:11265
#, no-wrap
msgid ""
"typedef enum @{CE_NATIVE, CE_UTF8, CE_LATIN1, CE_SYMBOL, CE_ANY@} cetype_t;\n"
"cetype_t getCharCE(SEXP);\n"
"SEXP mkCharCE(const char *, cetype_t);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11277
msgid ""
"Only @code{CE_UTF8} and @code{CE_LATIN1} are marked on @code{CHARSXPs} (and "
"so @code{Rf_getCharCE} will only return one of the first three), and these "
"should only be used on non-@acronym{ASCII} strings.  Value @code{CE_SYMBOL} "
"is used internally to indicate Adobe Symbol encoding.  Value @code{CE_ANY} "
"is used to indicate a character string that will not need re-encoding -- "
"this is used for character strings known to be in @acronym{ASCII}, and can "
"also be used as an input parameter where the intention is that the string is "
"treated as a series of bytes.  (See the comments under @code{mkChar} about "
"the length of input allowed.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11279
msgid "Function"
msgstr ""

#
#. type: findex
#: R-exts.texi:11280
#, no-wrap
msgid "reEnc"
msgstr ""

#
#. type: example
#: R-exts.texi:11284
#, no-wrap
msgid ""
"const char *reEnc(const char *x, cetype_t ce_in, cetype_t ce_out,\n"
"\t\t  int subst);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11294
msgid ""
"can be used to re-encode character strings: like @code{translateChar} it "
"returns a string allocated by @code{R_alloc}.  This can translate from "
"@code{CE_SYMBOL} to @code{CE_UTF8}, but not conversely.  Argument "
"@code{subst} controls what to do with untranslatable characters or invalid "
"input: this is done byte-by-byte with @code{1} indicates to output hex of "
"the form @code{<a0>}, and @code{2} to replace by @code{.}, with any other "
"value causing the byte to produce no output."
msgstr ""

#
#. type: findex
#: R-exts.texi:11295
#, no-wrap
msgid "mkCharLenCE"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11297
msgid "There is also"
msgstr ""

#
#. type: example
#: R-exts.texi:11300
#, no-wrap
msgid "SEXP mkCharLenCE(const char *, size_t, cetype_t);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11304
msgid "to create marked character strings of a given length."
msgstr ""

#
#. type: chapter
#: R-exts.texi:11307
#, no-wrap
msgid "The R @acronym{API}: entry points for C code"
msgstr ""

#
#. type: node
#: R-exts.texi:11327
#: R-exts.texi:11398
#: R-exts.texi:11399
#: R-exts.texi:11411
#: R-exts.texi:11504
#: R-exts.texi:11548
#, no-wrap
msgid "Memory allocation"
msgstr ""

#
#. type: node
#: R-exts.texi:11327
#: R-exts.texi:11398
#: R-exts.texi:11548
#: R-exts.texi:11549
#: R-exts.texi:11589
#: R-exts.texi:11607
#, no-wrap
msgid "Error handling"
msgstr ""

#
#. type: node
#: R-exts.texi:11327
#: R-exts.texi:11548
#: R-exts.texi:11607
#: R-exts.texi:11664
#, no-wrap
msgid "Random numbers"
msgstr ""

#
#. type: node
#: R-exts.texi:11327
#: R-exts.texi:11607
#: R-exts.texi:11664
#: R-exts.texi:11709
#, no-wrap
msgid "Missing and IEEE values"
msgstr ""

#
#. type: node
#: R-exts.texi:11327
#: R-exts.texi:11664
#: R-exts.texi:11709
#: R-exts.texi:11710
#: R-exts.texi:11742
#: R-exts.texi:11772
#, no-wrap
msgid "Printing"
msgstr ""

#
#. type: node
#: R-exts.texi:11327
#: R-exts.texi:11709
#: R-exts.texi:11772
#: R-exts.texi:11773
#: R-exts.texi:11774
#: R-exts.texi:11845
#, no-wrap
msgid "Calling C from FORTRAN and vice versa"
msgstr ""

#
#. type: node
#: R-exts.texi:11327
#: R-exts.texi:11772
#: R-exts.texi:11845
#: R-exts.texi:11846
#: R-exts.texi:11872
#: R-exts.texi:11996
#: R-exts.texi:12056
#: R-exts.texi:12181
#: R-exts.texi:12237
#, no-wrap
msgid "Numerical analysis subroutines"
msgstr ""

#
#. type: node
#: R-exts.texi:11327
#: R-exts.texi:11845
#: R-exts.texi:12237
#: R-exts.texi:12238
#: R-exts.texi:12324
#, no-wrap
msgid "Optimization"
msgstr ""

#
#. type: node
#: R-exts.texi:11327
#: R-exts.texi:12237
#: R-exts.texi:12324
#: R-exts.texi:12325
#: R-exts.texi:12411
#, no-wrap
msgid "Integration"
msgstr ""

#
#. type: node
#: R-exts.texi:11327
#: R-exts.texi:12324
#: R-exts.texi:12411
#: R-exts.texi:12412
#: R-exts.texi:12549
#, no-wrap
msgid "Utility functions"
msgstr ""

#
#. type: node
#: R-exts.texi:11327
#: R-exts.texi:12411
#: R-exts.texi:12549
#: R-exts.texi:12550
#: R-exts.texi:12582
#, no-wrap
msgid "Re-encoding"
msgstr ""

#
#. type: node
#: R-exts.texi:11327
#: R-exts.texi:12549
#: R-exts.texi:12582
#: R-exts.texi:12583
#: R-exts.texi:12611
#, no-wrap
msgid "Allowing interrupts"
msgstr ""

#
#. type: node
#: R-exts.texi:11327
#: R-exts.texi:12582
#: R-exts.texi:12611
#: R-exts.texi:12612
#: R-exts.texi:12674
#, no-wrap
msgid "Platform and version information"
msgstr ""

#
#. type: node
#: R-exts.texi:11327
#: R-exts.texi:12611
#: R-exts.texi:12674
#: R-exts.texi:12675
#: R-exts.texi:12702
#, no-wrap
msgid "Inlining C functions"
msgstr ""

#
#. type: node
#: R-exts.texi:11327
#: R-exts.texi:12674
#: R-exts.texi:12702
#: R-exts.texi:12703
#: R-exts.texi:12760
#, no-wrap
msgid "Controlling visibility"
msgstr ""

#
#. type: node
#: R-exts.texi:11327
#: R-exts.texi:12702
#: R-exts.texi:12760
#: R-exts.texi:12811
#, no-wrap
msgid "Standalone Mathlib"
msgstr ""

#
#. type: section
#: R-exts.texi:11327
#: R-exts.texi:12760
#: R-exts.texi:12811
#: R-exts.texi:12812
#, no-wrap
msgid "Organization of header files"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11333
msgid ""
"There are a large number of entry points in the @R{} executable/DLL that can "
"be called from C code (and some that can be called from FORTRAN code).  Only "
"those documented here are stable enough that they will only be changed with "
"considerable notice."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11336
msgid ""
"The recommended procedure to use these is to include the header file @file{R."
"h} in your C code by"
msgstr ""

#
#. type: example
#: R-exts.texi:11339
#, no-wrap
msgid "#include <R.h>\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11346
msgid ""
"This will include several other header files from the directory "
"@file{@var{R_INCLUDE_DIR}/R_ext}, and there are other header files there "
"that can be included too, but many of the features they contain should be "
"regarded as undocumented and unstable."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11351
msgid ""
"An alternative is to include the header file @file{S.h}, which may be useful "
"when porting code from @Sl{}.  This includes rather less than @file{R.h}, "
"and has some extra compatibility definitions (for example the "
"@code{S_complex} type from @Sl{})."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11355
msgid ""
"The defines used for compatibility with @Sl{} sometimes causes conflicts "
"(notably with Windows headers), and the known problematic defines can be "
"removed by defining @code{STRICT_R_HEADERS}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11360
msgid ""
"Most of these header files, including all those included by @file{R.h}, can "
"be used from C++ code.  Some others need to be included within an "
"@code{extern \"C\"} declaration, and for clarity this is advisable for all "
"@R{} header files."
msgstr ""

#
#. type: quotation
#: R-exts.texi:11365
msgid ""
"Because @R{} re-maps many of its external names to avoid clashes with user "
"code, it is @emph{essential} to include the appropriate header files when "
"using these entry points."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11374
msgid ""
"This remapping can cause problems@footnote{Known problems are redefining "
"@code{LENGTH}, @code{error}, @code{length}, @code{vector} and "
"@code{warning}}, and can be eliminated by defining @code{R_NO_REMAP} and "
"prepending @samp{Rf_} to @emph{all} the function names used from "
"@file{Rinternals.h} and @file{R_ext/Error.h}.  These problems can usually be "
"avoided by including other headers (such as system headers and those for "
"external software used by the package) before @file{R.h}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11376
msgid "We can classify the entry points as"
msgstr ""

#
#. type: item
#: R-exts.texi:11378
#, no-wrap
msgid "API"
msgstr ""

#
#. type: table
#: R-exts.texi:11382
msgid ""
"Entry points which are documented in this manual and declared in an "
"installed header file.  These can be used in distributed packages and will "
"only be changed after deprecation."
msgstr ""

#
#. type: item
#: R-exts.texi:11383
#, no-wrap
msgid "public"
msgstr ""

#
#. type: table
#: R-exts.texi:11387
msgid ""
"Entry points declared in an installed header file that are exported on all "
"@R{} platforms but are not documented and subject to change without notice."
msgstr ""

#
#. type: item
#: R-exts.texi:11388
#, no-wrap
msgid "private"
msgstr ""

#
#. type: table
#: R-exts.texi:11392
msgid ""
"Entry points that are used when building @R{} and exported on all @R{} "
"platforms but are not declared in the installed header files.  Do not use "
"these in distributed code."
msgstr ""

#
#. type: item
#: R-exts.texi:11393
#, no-wrap
msgid "hidden"
msgstr ""

#
#. type: table
#: R-exts.texi:11396
msgid ""
"Entry points that are where possible (Windows and some modern Unix-alike "
"compilers/loaders when using @R{} as a shared library) not exported."
msgstr ""

#
#. type: cindex
#: R-exts.texi:11400
#, no-wrap
msgid "Memory allocation from C"
msgstr ""

#
#. type: node
#: R-exts.texi:11405
#: R-exts.texi:11411
#: R-exts.texi:11412
#: R-exts.texi:11504
#, no-wrap
msgid "Transient storage allocation"
msgstr ""

#
#. type: subsection
#: R-exts.texi:11405
#: R-exts.texi:11411
#: R-exts.texi:11504
#: R-exts.texi:11505
#, no-wrap
msgid "User-controlled memory"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11410
msgid ""
"There are two types of memory allocation available to the C programmer, one "
"in which @R{} manages the clean-up and the other in which user has full "
"control (and responsibility)."
msgstr ""

#
#. type: findex
#: R-exts.texi:11413
#, no-wrap
msgid "R_alloc"
msgstr ""

#
#. type: findex
#: R-exts.texi:11414
#, no-wrap
msgid "R_allocLD"
msgstr ""

#
#. type: findex
#: R-exts.texi:11415
#, no-wrap
msgid "S_alloc"
msgstr ""

#
#. type: findex
#: R-exts.texi:11416
#, no-wrap
msgid "S_realloc"
msgstr ""

#
#. type: findex
#: R-exts.texi:11417
#, no-wrap
msgid "vmaxget"
msgstr ""

#
#. type: findex
#: R-exts.texi:11418
#, no-wrap
msgid "vmaxset"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11422
msgid ""
"Here @R{} will reclaim the memory at the end of the call to @code{.C}, "
"@code{.Call} or @code{.External}.  Use"
msgstr ""

#
#. type: example
#: R-exts.texi:11425
#, no-wrap
msgid "char *R_alloc(size_t @var{n}, int @var{size})\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11430
msgid ""
"which allocates @var{n} units of @var{size} bytes each.  A typical usage "
"(from package @pkg{stats}) is"
msgstr ""

#
#. type: example
#: R-exts.texi:11433
#, no-wrap
msgid "x = (int *) R_alloc(nrows(merge)+2, sizeof(int));\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11438
msgid ""
"(@code{size_t} is defined in @file{stddef.h} which the header defining "
"@code{R_alloc} includes.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11441
msgid ""
"There is a similar call, @code{S_alloc} (for compatibility with older "
"versions of @Sl{}) which zeroes the memory allocated,"
msgstr ""

#
#. type: example
#: R-exts.texi:11444
#, no-wrap
msgid "char *S_alloc(long @var{n}, int @var{size})\n"
msgstr ""

#
#. type: example
#: R-exts.texi:11451
#, no-wrap
msgid "char *S_realloc(char *@var{p}, long @var{new}, long @var{old}, int @var{size})\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11456
msgid ""
"which changes the allocation size from @var{old} to @var{new} units, and "
"zeroes the additional units."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11459
msgid ""
"For compatibility with current versions of @Sl{}, header @file{S.h} (only) "
"defines wrapper macros equivalent to"
msgstr ""

#
#. type: example
#: R-exts.texi:11463
#, no-wrap
msgid ""
"type* Salloc(long @var{n}, int @var{type})\n"
"type* Srealloc(char *@var{p}, long @var{new}, long @var{old}, int @var{type})\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11470
msgid ""
"This memory is taken from the heap, and released at the end of the @code{."
"C}, @code{.Call} or @code{.External} call.  Users can also manage it, by "
"noting the current position with a call to @code{vmaxget} and subsequently "
"clearing memory allocated by a call to @code{vmaxset}. An example might be"
msgstr ""

#
#. type: example
#: R-exts.texi:11475
#, no-wrap
msgid ""
"void *vmax = vmaxget()\n"
"// a loop involving the use of R_alloc at each iteration\n"
"vmaxset(vmax)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11479
msgid "This is only recommended for experts."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11482
msgid ""
"Note that this memory will be freed on error or user interrupt (if allowed: "
"@pxref{Allowing interrupts})."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11487
msgid ""
"Note that although @var{n} is @code{size_t}, there may be limits imposed by "
"@R{}'s internal allocation mechanism.  These will only come into play on 64-"
"bit systems, where the limit for @var{n} prior to @R{} 3.0.0 was just under "
"16Gb."
msgstr ""

#. type: Plain text
#: R-exts.texi:11491
msgid ""
"The memory returned is only guaranteed to be aligned as required for "
"@code{double} pointers: take precautions if casting to a pointer which needs "
"more.  As from @R{} 3.2.0 there is also"
msgstr ""

#
#. type: example
#: R-exts.texi:11494
#, no-wrap
msgid "long double *R_allocLD(size_t @var{n})\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11499
msgid ""
"which is guaranteed to have the 16-byte alignment needed for @code{long "
"double} pointers on some platforms."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11503
msgid ""
"These functions should only be used in code called by @code{.C} etc, never "
"from front-ends.  They are not thread-safe."
msgstr ""

#
#. type: findex
#: R-exts.texi:11506
#, no-wrap
msgid "Calloc"
msgstr ""

#
#. type: findex
#: R-exts.texi:11507
#, no-wrap
msgid "Realloc"
msgstr ""

#
#. type: findex
#: R-exts.texi:11508
#, no-wrap
msgid "Free"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11514
msgid ""
"The other form of memory allocation is an interface to @code{malloc}, the "
"interface providing @R{} error handling.  This memory lasts until freed by "
"the user and is additional to the memory allocated for the @R{} workspace."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11516
msgid "The interface functions are"
msgstr ""

#
#. type: group
#: R-exts.texi:11522
#, no-wrap
msgid ""
"@var{type}* Calloc(size_t @var{n}, @var{type})\n"
"@var{type}* Realloc(@var{any} *@var{p}, size_t @var{n}, @var{type})\n"
"void Free(@var{any} *@var{p})\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11531
msgid ""
"providing analogues of @code{calloc}, @code{realloc} and @code{free}.  If "
"there is an error during allocation it is handled by @R{}, so if these "
"routines return the memory has been successfully allocated or freed.  "
"@code{Free} will set the pointer @var{p} to @code{NULL}.  (Some but not all "
"versions of @Sl{} do so.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11536
msgid ""
"Users should arrange to @code{Free} this memory when no longer needed, "
"including on error or user interrupt.  This can often be done most "
"conveniently from an @code{on.exit} action in the calling @R{} function -- "
"see @code{pwilcox} for an example."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11540
msgid ""
"Do not assume that memory allocated by @code{Calloc}/@code{Realloc} comes "
"from the same pool as used by @code{malloc}: in particular do not use "
"@code{free} or @code{strdup} with it."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11543
msgid ""
"Memory obtained by these functions should be aligned in the same way as "
"@code{malloc}, that is `suitably aligned for any kind of variable'."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11546
msgid ""
"These entry points need to be prefixed by @code{R_} if "
"@code{STRICT_R_HEADERS} has been defined."
msgstr ""

#
#. type: cindex
#: R-exts.texi:11550
#, no-wrap
msgid "Error handling from C"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11554
msgid ""
"The basic error handling routines are the equivalents of @code{stop} and "
"@code{warning} in @R{} code, and use the same interface."
msgstr ""

#
#. type: group
#: R-exts.texi:11559
#, no-wrap
msgid ""
"void error(const char * @var{format}, ...);\n"
"void warning(const char * @var{format}, ...);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11567
msgid ""
"These have the same call sequences as calls to @code{printf}, but in the "
"simplest case can be called with a single character string argument giving "
"the error message. (Don't do this if the string contains @samp{%} or might "
"otherwise be interpreted as a format.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11570
msgid ""
"If @code{STRICT_R_HEADERS} is not defined there is also an @Sl{}-"
"compatibility interface which uses calls of the form"
msgstr ""

#
#. type: group
#: R-exts.texi:11577
#, no-wrap
msgid ""
"PROBLEM ...... ERROR\n"
"MESSAGE ...... WARN\n"
"PROBLEM ...... RECOVER(NULL_ENTRY)\n"
"MESSAGE ...... WARNING(NULL_ENTRY)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11584
msgid ""
"the last two being the forms available in all @Sl{} versions.  Here "
"@samp{......} is a set of arguments to @code{printf}, so can be a string or "
"a format string followed by arguments separated by commas."
msgstr ""

#
#. type: cindex
#: R-exts.texi:11587
#: R-exts.texi:11589
#: R-exts.texi:11590
#: R-exts.texi:11591
#, no-wrap
msgid "Error handling from FORTRAN"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11596
msgid ""
"There are two interface function provided to call @code{error} and "
"@code{warning} from FORTRAN code, in each case with a simple character "
"string argument.  They are defined as"
msgstr ""

#
#. type: group
#: R-exts.texi:11601
#, no-wrap
msgid ""
"subroutine rexit(@var{message})\n"
"subroutine rwarn(@var{message})\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11605
msgid "Messages of more than 255 characters are truncated, with a warning."
msgstr ""

#
#. type: section
#: R-exts.texi:11608
#, no-wrap
msgid "Random number generation"
msgstr ""

#
#. type: cindex
#: R-exts.texi:11609
#: R-exts.texi:11920
#, no-wrap
msgid "Random numbers in C"
msgstr ""

#
#. type: findex
#: R-exts.texi:11610
#, no-wrap
msgid "unif_rand"
msgstr ""

#
#. type: findex
#: R-exts.texi:11611
#, no-wrap
msgid "norm_rand"
msgstr ""

#
#. type: findex
#: R-exts.texi:11612
#, no-wrap
msgid "exp_rand"
msgstr ""

#
#. type: findex
#: R-exts.texi:11613
#, no-wrap
msgid "GetRNGstate"
msgstr ""

#
#. type: findex
#: R-exts.texi:11614
#, no-wrap
msgid "PutRNGstate"
msgstr ""

#
#. type: findex
#: R-exts.texi:11615
#, no-wrap
msgid ".Random.seed"
msgstr ""

#
#. type: findex
#: R-exts.texi:11616
#, no-wrap
msgid "seed_in"
msgstr ""

#
#. type: findex
#: R-exts.texi:11617
#, no-wrap
msgid "seed_out"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11620
msgid "The interface to @R{}'s internal random number generation routines is"
msgstr ""

#
#. type: group
#: R-exts.texi:11626
#, no-wrap
msgid ""
"double unif_rand();\n"
"double norm_rand();\n"
"double exp_rand();\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11632
msgid ""
"giving one uniform, normal or exponential pseudo-random variate.  However, "
"before these are used, the user must call"
msgstr ""

#
#. type: example
#: R-exts.texi:11635
#, no-wrap
msgid "GetRNGstate();\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11639
msgid "and after all the required variates have been generated, call"
msgstr ""

#
#. type: example
#: R-exts.texi:11642
#, no-wrap
msgid "PutRNGstate();\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11647
msgid ""
"These essentially read in (or create) @code{.Random.seed} and write it out "
"after use."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11652
msgid ""
"File @file{S.h} defines @code{seed_in} and @code{seed_out} for @Sl{}-"
"compatibility rather than @code{GetRNGstate} and @code{PutRNGstate}.  These "
"take a @code{long *} argument which is ignored."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11656
msgid ""
"The random number generator is private to @R{}; there is no way to select "
"the kind of RNG or set the seed except by evaluating calls to the @R{} "
"functions."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11661
msgid ""
"The C code behind @R{}'s @code{r@var{xxx}} functions can be accessed by "
"including the header file @file{Rmath.h}; @xref{Distribution functions}.  "
"Those calls generate a single variate and should also be enclosed in calls "
"to @code{GetRNGstate} and @code{PutRNGstate}."
msgstr ""

#
#. type: section
#: R-exts.texi:11665
#, no-wrap
msgid "Missing and @acronym{IEEE} special values"
msgstr ""

#
#. type: findex
#: R-exts.texi:11670
#, no-wrap
msgid "R_FINITE"
msgstr ""

#
#. type: findex
#: R-exts.texi:11671
#, no-wrap
msgid "R_IsNaN"
msgstr ""

#
#. type: findex
#: R-exts.texi:11672
#, no-wrap
msgid "R_PosInf"
msgstr ""

#
#. type: findex
#: R-exts.texi:11673
#, no-wrap
msgid "R_NegInf"
msgstr ""

#
#. type: findex
#: R-exts.texi:11674
#, no-wrap
msgid "NA_REAL"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11678
msgid ""
"A set of functions is provided to test for @code{NA}, @code{Inf}, @code{-"
"Inf} and @code{NaN}.  These functions are accessed @emph{via} macros:"
msgstr ""

#
#. type: group
#: R-exts.texi:11684
#, no-wrap
msgid ""
"ISNA(@var{x})        @r{True for R's @code{NA} only}\n"
"ISNAN(@var{x})       @r{True for R's @code{NA} and @acronym{IEEE} @code{NaN}}\n"
"R_FINITE(@var{x})    @r{False for @code{Inf}, @code{-Inf}, @code{NA}, @code{NaN}}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11690
msgid ""
"and @emph{via} function @code{R_IsNaN} which is true for @code{NaN} but not "
"@code{NA}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11695
msgid ""
"Do use @code{R_FINITE} rather than @code{isfinite} or @code{finite}; the "
"latter is often mendacious and @code{isfinite} is only available on a some "
"platforms, on which @code{R_FINITE} is a macro expanding to @code{isfinite}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11699
msgid ""
"Currently in C code @code{ISNAN} is a macro calling @code{isnan}.  (Since "
"this gives problems on some C++ systems, if the @R{} headers is called from C"
"++ code a function call is used.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11703
msgid ""
"You can check for @code{Inf} or @code{-Inf} by testing equality to "
"@code{R_PosInf} or @code{R_NegInf}, and set (but not test) an @code{NA} as "
"@code{NA_REAL}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11707
msgid ""
"All of the above apply to @emph{double} variables only.  For integer "
"variables there is a variable accessed by the macro @code{NA_INTEGER} which "
"can used to set or test for missingness."
msgstr ""

#
#. type: cindex
#: R-exts.texi:11711
#, no-wrap
msgid "Printing from C"
msgstr ""

#
#. type: findex
#: R-exts.texi:11712
#, no-wrap
msgid "Rprintf"
msgstr ""

#
#. type: findex
#: R-exts.texi:11713
#, no-wrap
msgid "REprintf"
msgstr ""

#
#. type: findex
#: R-exts.texi:11714
#, no-wrap
msgid "Rvprintf"
msgstr ""

#
#. type: findex
#: R-exts.texi:11715
#, no-wrap
msgid "REvprintf"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11724
msgid ""
"The most useful function for printing from a C routine compiled into @R{} is "
"@code{Rprintf}.  This is used in exactly the same way as @code{printf}, but "
"is guaranteed to write to @R{}'s output (which might be a @acronym{GUI} "
"console rather than a file, and can be re-directed by @code{sink}).  It is "
"wise to write complete lines (including the @code{\"\\n\"}) before returning "
"to @R{}.  It is defined in @file{R_ext/Print.h}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11728
msgid ""
"The function @code{REprintf} is similar but writes on the error stream "
"(@code{stderr}) which may or may not be different from the standard output "
"stream."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11733
msgid ""
"Functions @code{Rvprintf} and @code{REvprintf} are analogues using the "
"@code{vprintf} interface.  Because that is a C99 interface, they are only "
"defined by @file{R_ext/Print.h} in C++ code if the macro "
"@code{R_USE_C99_IN_CXX} is defined when it is included."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11737
msgid ""
"Another circumstance when it may be important to use these functions is when "
"using parallel computation on a cluster of computational nodes, as their "
"output will be re-directed/logged appropriately."
msgstr ""

#
#. type: cindex
#: R-exts.texi:11740
#: R-exts.texi:11742
#: R-exts.texi:11743
#: R-exts.texi:11744
#, no-wrap
msgid "Printing from FORTRAN"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11750
msgid ""
"On many systems FORTRAN @code{write} and @code{print} statements can be "
"used, but the output may not interleave well with that of C, and will be "
"invisible on @acronym{GUI} interfaces.  They are not portable and best "
"avoided."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11753
msgid ""
"Three subroutines are provided to ease the output of information from "
"FORTRAN code."
msgstr ""

#
#. type: group
#: R-exts.texi:11759
#, no-wrap
msgid ""
"subroutine dblepr(@var{label}, @var{nchar}, @var{data}, @var{ndata})\n"
"subroutine realpr(@var{label}, @var{nchar}, @var{data}, @var{ndata})\n"
"subroutine intpr (@var{label}, @var{nchar}, @var{data}, @var{ndata})\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11771
msgid ""
"Here @var{label} is a character label of up to 255 characters, @var{nchar} "
"is its length (which can be @code{-1} if the whole label is to be used), and "
"@var{data} is an array of length at least @var{ndata} of the appropriate "
"type (@code{double precision}, @code{real} and @code{integer} "
"respectively).  These routines print the label on one line and then print "
"@var{data} as if it were an @R{} vector on subsequent line(s).  They work "
"with zero @var{ndata}, and so can be used to print a label alone."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11780
msgid ""
"Naming conventions for symbols generated by FORTRAN differ by platform: it "
"is not safe to assume that FORTRAN names appear to C with a trailing "
"underscore.  To help cover up the platform-specific differences there is a "
"set of macros that should be used."
msgstr ""

#
#. type: item
#: R-exts.texi:11782
#, no-wrap
msgid "F77_SUB(@var{name})"
msgstr ""

#
#. type: table
#: R-exts.texi:11784
msgid "to define a function in C to be called from FORTRAN"
msgstr ""

#
#. type: item
#: R-exts.texi:11784
#, no-wrap
msgid "F77_NAME(@var{name})"
msgstr ""

#
#. type: table
#: R-exts.texi:11786
msgid "to declare a FORTRAN routine in C before use"
msgstr ""

#
#. type: item
#: R-exts.texi:11786
#, no-wrap
msgid "F77_CALL(@var{name})"
msgstr ""

#
#. type: table
#: R-exts.texi:11788
msgid "to call a FORTRAN routine from C"
msgstr ""

#
#. type: item
#: R-exts.texi:11788
#, no-wrap
msgid "F77_COMDECL(@var{name})"
msgstr ""

#
#. type: table
#: R-exts.texi:11790
msgid "to declare a FORTRAN common block in C"
msgstr ""

#
#. type: item
#: R-exts.texi:11790
#, no-wrap
msgid "F77_COM(@var{name})"
msgstr ""

#
#. type: table
#: R-exts.texi:11792
msgid "to access a FORTRAN common block from C"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11799
msgid ""
"On most current platforms these are all the same, but it is unwise to rely "
"on this.  Note that names with underscores are not legal in FORTRAN 77, and "
"are not portably handled by the above macros.  (Also, all FORTRAN names for "
"use by @R{} are lower case, but this is not enforced by the macros.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11802
msgid ""
"For example, suppose we want to call R's normal random numbers from "
"FORTRAN.  We need a C wrapper along the lines of"
msgstr ""

#
#. type: cindex
#: R-exts.texi:11803
#, no-wrap
msgid "Random numbers in FORTRAN"
msgstr ""

#
#. type: example
#: R-exts.texi:11807
#: R-exts.texi:12686
#, no-wrap
msgid ""
"#include <R.h>\n"
"\n"
msgstr ""

#
#. type: group
#: R-exts.texi:11811
#, no-wrap
msgid ""
"void F77_SUB(rndstart)(void) @{ GetRNGstate(); @}\n"
"void F77_SUB(rndend)(void) @{ PutRNGstate(); @}\n"
"double F77_SUB(normrnd)(void) @{ return norm_rand(); @}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11816
msgid "to be called from FORTRAN as in"
msgstr ""

#
#. type: group
#: R-exts.texi:11826
#, no-wrap
msgid ""
"      subroutine testit()\n"
"      double precision normrnd, x\n"
"      call rndstart()\n"
"      x = normrnd()\n"
"      call dblepr(\"X was\", 5, x, 1)\n"
"      call rndend()\n"
"      end\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11833
msgid ""
"Note that this is not guaranteed to be portable, for the return conventions "
"might not be compatible between the C and FORTRAN compilers used.  (Passing "
"values @emph{via} arguments is safer.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11836
msgid ""
"The standard packages, for example @pkg{stats}, are a rich source of further "
"examples."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11843
msgid ""
"Passing character strings from C to FORTRAN 77 or @emph{vice versa} is not "
"portable (and to Fortran 90 or later is even less so).  We have found that "
"it helps to ensure that a C string to be passed is followed by several "
"@code{nul}s (and not just the one needed as a C terminator).  But for "
"maximal portability character strings in FORTRAN should be avoided."
msgstr ""

#
#. type: cindex
#: R-exts.texi:11847
#, no-wrap
msgid "Numerical analysis subroutines from C"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11851
msgid ""
"@R{} contains a large number of mathematical functions for its own use, for "
"example numerical linear algebra computations and special functions."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11859
msgid ""
"The header files @file{R_ext/BLAS.h}, @file{R_ext/Lapack.h} and @file{R_ext/"
"Linpack.h} contains declarations of the BLAS, LAPACK and LINPACK linear "
"algebra functions included in @R{}.  These are expressed as calls to FORTRAN "
"subroutines, and they will also be usable from users' FORTRAN code.  "
"Although not part of the official @acronym{API}, this set of subroutines is "
"unlikely to change (but might be supplemented)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11864
msgid ""
"The header file @file{Rmath.h} lists many other functions that are available "
"and documented in the following subsections. Many of these are C interfaces "
"to the code behind @R{} functions, so the @R{} function documentation may "
"give further details."
msgstr ""

#
#. type: node
#: R-exts.texi:11870
#: R-exts.texi:11872
#: R-exts.texi:11873
#: R-exts.texi:11996
#, no-wrap
msgid "Distribution functions"
msgstr ""

#
#. type: node
#: R-exts.texi:11870
#: R-exts.texi:11872
#: R-exts.texi:11996
#: R-exts.texi:11997
#: R-exts.texi:12056
#, no-wrap
msgid "Mathematical functions"
msgstr ""

#
#. type: node
#: R-exts.texi:11870
#: R-exts.texi:11996
#: R-exts.texi:12056
#: R-exts.texi:12057
#: R-exts.texi:12181
#, no-wrap
msgid "Numerical Utilities"
msgstr ""

#
#. type: subsection
#: R-exts.texi:11870
#: R-exts.texi:12056
#: R-exts.texi:12181
#: R-exts.texi:12182
#, no-wrap
msgid "Mathematical constants"
msgstr ""

#
#. type: cindex
#: R-exts.texi:11874
#, no-wrap
msgid "Distribution functions from C"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11879
msgid ""
"The routines used to calculate densities, cumulative distribution functions "
"and quantile functions for the standard statistical distributions are "
"available as entry points."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11882
msgid ""
"The arguments for the entry points follow the pattern of those for the "
"normal distribution:"
msgstr ""

#
#. type: group
#: R-exts.texi:11891
#, no-wrap
msgid ""
"double dnorm(double @var{x}, double @var{mu}, double @var{sigma}, int @var{give_log});\n"
"double pnorm(double @var{x}, double @var{mu}, double @var{sigma}, int @var{lower_tail},\n"
"\t     int @var{give_log});\n"
"double qnorm(double @var{p}, double @var{mu}, double @var{sigma}, int @var{lower_tail},\n"
"\t     int @var{log_p});\n"
"double rnorm(double @var{mu}, double @var{sigma});\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11900
msgid ""
"That is, the first argument gives the position for the density and CDF and "
"probability for the quantile function, followed by the distribution's "
"parameters.  Argument @var{lower_tail} should be @code{TRUE} (or @code{1}) "
"for normal use, but can be @code{FALSE} (or @code{0}) if the probability of "
"the upper tail is desired or specified."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11904
msgid ""
"Finally, @var{give_log} should be non-zero if the result is required on log "
"scale, and @var{log_p} should be non-zero if @var{p} has been specified on "
"log scale."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11908
msgid ""
"Note that you directly get the cumulative (or ``integrated'')  @emph{hazard} "
"function, @eqn{H(t) = - \\log(1 - F(t)), H(t) = - log(1 - F(t))}, by using"
msgstr ""

#
#. type: example
#: R-exts.texi:11911
#, no-wrap
msgid "- p@var{dist}(t, ..., /*lower_tail = */ FALSE, /* give_log = */ TRUE)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11915
msgid "or shorter (and more cryptic) @code{- p@var{dist}(t, ..., 0, 1)}."
msgstr ""

#
#. type: cindex
#: R-exts.texi:11915
#, no-wrap
msgid "cumulative hazard"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11920
msgid ""
"The random-variate generation routine @code{rnorm} returns one normal "
"variate. @xref{Random numbers}, for the protocol in using the random-variate "
"routines."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11927
msgid ""
"Note that these argument sequences are (apart from the names and that "
"@code{rnorm} has no @var{n}) mainly the same as the corresponding @R{} "
"functions of the same name, so the documentation of the @R{} functions can "
"be used.  Note that the exponential and gamma distributions are parametrized "
"by @code{scale} rather than @code{rate}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11933
msgid ""
"For reference, the following table gives the basic name (to be prefixed by "
"@samp{d}, @samp{p}, @samp{q} or @samp{r} apart from the exceptions noted) "
"and distribution-specific arguments for the complete set of distributions."
msgstr ""

#
#. type: item
#: R-exts.texi:11936
#, no-wrap
msgid "beta @tab @code{beta} @tab @code{a}, @code{b}"
msgstr ""

#
#. type: item
#: R-exts.texi:11937
#, no-wrap
msgid "non-central beta @tab @code{nbeta} @tab @code{a}, @code{b}, @code{ncp}"
msgstr ""

#
#. type: item
#: R-exts.texi:11939
#, no-wrap
msgid "binomial @tab @code{binom} @tab @code{n}, @code{p}"
msgstr ""

#
#. type: item
#: R-exts.texi:11940
#, no-wrap
msgid "Cauchy @tab @code{cauchy} @tab @code{location}, @code{scale}"
msgstr ""

#
#. type: item
#: R-exts.texi:11941
#, no-wrap
msgid "chi-squared @tab @code{chisq} @tab @code{df}"
msgstr ""

#
#. type: item
#: R-exts.texi:11942
#, no-wrap
msgid "non-central chi-squared @tab @code{nchisq} @tab @code{df}, @code{ncp}"
msgstr ""

#
#. type: item
#: R-exts.texi:11943
#, no-wrap
msgid "exponential @tab @code{exp} @tab @code{scale} (and @strong{not} @code{rate})"
msgstr ""

#
#. type: item
#: R-exts.texi:11944
#, no-wrap
msgid "F @tab @code{f} @tab @code{n1}, @code{n2}"
msgstr ""

#
#. type: item
#: R-exts.texi:11945
#, no-wrap
msgid "non-central F @tab @code{nf} @tab @code{n1}, @code{n2}, @code{ncp}"
msgstr ""

#
#. type: item
#: R-exts.texi:11946
#, no-wrap
msgid "gamma @tab @code{gamma} @tab @code{shape}, @code{scale}"
msgstr ""

#
#. type: item
#: R-exts.texi:11947
#, no-wrap
msgid "geometric @tab @code{geom} @tab @code{p}"
msgstr ""

#
#. type: item
#: R-exts.texi:11948
#, no-wrap
msgid "hypergeometric @tab @code{hyper} @tab @code{NR}, @code{NB}, @code{n}"
msgstr ""

#
#. type: item
#: R-exts.texi:11950
#, no-wrap
msgid "logistic @tab @code{logis} @tab @code{location}, @code{scale}"
msgstr ""

#
#. type: item
#: R-exts.texi:11951
#, no-wrap
msgid "lognormal @tab @code{lnorm} @tab @code{logmean}, @code{logsd}"
msgstr ""

#
#. type: item
#: R-exts.texi:11952
#, no-wrap
msgid "negative binomial @tab @code{nbinom} @tab @code{size}, @code{prob}"
msgstr ""

#
#. type: item
#: R-exts.texi:11953
#, no-wrap
msgid "normal @tab @code{norm} @tab @code{mu}, @code{sigma}"
msgstr ""

#
#. type: item
#: R-exts.texi:11954
#, no-wrap
msgid "Poisson @tab @code{pois} @tab @code{lambda}"
msgstr ""

#
#. type: item
#: R-exts.texi:11955
#, no-wrap
msgid "Student's t @tab @code{t} @tab @code{n}"
msgstr ""

#
#. type: item
#: R-exts.texi:11956
#, no-wrap
msgid "non-central t @tab @code{nt} @tab @code{df}, @code{delta}"
msgstr ""

#
#. type: item
#: R-exts.texi:11957
#, no-wrap
msgid "Studentized range @tab @code{tukey} (*) @tab @code{rr}, @code{cc}, @code{df}"
msgstr ""

#
#. type: item
#: R-exts.texi:11959
#, no-wrap
msgid "uniform @tab @code{unif} @tab @code{a}, @code{b}"
msgstr ""

#
#. type: item
#: R-exts.texi:11961
#, no-wrap
msgid "Weibull @tab @code{weibull} @tab @code{shape}, @code{scale}"
msgstr ""

#
#. type: item
#: R-exts.texi:11962
#, no-wrap
msgid "Wilcoxon rank sum @tab @code{wilcox} @tab @code{m}, @code{n}"
msgstr ""

#
#. type: item
#: R-exts.texi:11963
#, no-wrap
msgid "Wilcoxon signed rank @tab @code{signrank} @tab @code{n}"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11973
msgid ""
"Entries marked with an asterisk only have @samp{p} and @samp{q} functions "
"available, and none of the non-central distributions have @samp{r} "
"functions.  After a call to @code{dwilcox}, @code{pwilcox} or @code{qwilcox} "
"the function @code{wilcox_free()} should be called, and similarly for the "
"signed rank functions."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11976
msgid ""
"(If remapping is suppressed, the Normal distribution names are "
"@code{Rf_dnorm4}, @code{Rf_pnorm5} and @code{Rf_qnorm5}.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11981
msgid ""
"For the negative binomial distribution (@samp{nbinom}), in addition to the "
"@code{(size, prob)} parametrization, the alternative @code{(size, mu)} "
"parametrization is provided as well by functions @samp{[dpqr]nbinom_mu()}, "
"see @kbd{?NegBinomial} in @R{}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11986
msgid ""
"Functions @code{dpois_raw(x, *)} and @code{dbinom_raw(x, *)} are versions of "
"the Poisson and binomial probability mass functions which work continuously "
"in @code{x}, whereas @code{dbinom(x,*)} and @code{dpois(x,*)} only return "
"non zero values for integer @code{x}."
msgstr ""

#
#. type: group
#: R-exts.texi:11990
#, no-wrap
msgid ""
"double dbinom_raw(double x, double n, double p, double q, int give_log)\n"
"double dpois_raw (double x, double lambda, int give_log)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:11994
msgid ""
"Note that @code{dbinom_raw()} gets both @eqn{p, p} and @eqn{q = 1-p, q = 1-"
"p} which may be advantageous when one of them is close to @eqn{1, 1}."
msgstr ""

#
#. type: findex
#: R-exts.texi:11999
#, no-wrap
msgid "gammafn"
msgstr ""

#
#. type: findex
#: R-exts.texi:12000
#, no-wrap
msgid "lgammafn"
msgstr ""

#
#. type: findex
#: R-exts.texi:12001
#, no-wrap
msgid "digamma"
msgstr ""

#
#. type: findex
#: R-exts.texi:12002
#, no-wrap
msgid "trigamma"
msgstr ""

#
#. type: findex
#: R-exts.texi:12003
#, no-wrap
msgid "tetragamma"
msgstr ""

#
#. type: findex
#: R-exts.texi:12004
#, no-wrap
msgid "pentagamma"
msgstr ""

#
#. type: findex
#: R-exts.texi:12005
#, no-wrap
msgid "psigamma"
msgstr ""

#
#. type: cindex
#: R-exts.texi:12006
#, no-wrap
msgid "Gamma function"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12007
#, no-wrap
msgid "double gammafn (double @var{x})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:12008
#, no-wrap
msgid "double lgammafn (double @var{x})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:12009
#, no-wrap
msgid "double digamma (double @var{x})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:12010
#, no-wrap
msgid "double trigamma (double @var{x})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:12011
#, no-wrap
msgid "double tetragamma (double @var{x})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:12012
#, no-wrap
msgid "double pentagamma (double @var{x})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:12013
#, no-wrap
msgid "double psigamma (double @var{x}, double @var{deriv})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12019
msgid ""
"The Gamma function, the natural logarithm of its absolute value and first "
"four derivatives and the n-th derivative of Psi, the digamma function, which "
"is the derivative of @code{lgammafn}. In other words, @code{digamma(x)} is "
"the same as @code{(psigamma(x,0)}, @code{trigamma(x) == psigamma(x,1)}, etc."
msgstr ""

#
#. type: findex
#: R-exts.texi:12021
#, no-wrap
msgid "beta"
msgstr ""

#
#. type: findex
#: R-exts.texi:12022
#, no-wrap
msgid "lbeta"
msgstr ""

#
#. type: cindex
#: R-exts.texi:12023
#, no-wrap
msgid "Beta function"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12024
#, no-wrap
msgid "double beta (double @var{a}, double @var{b})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:12025
#, no-wrap
msgid "double lbeta (double @var{a}, double @var{b})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12027
msgid "The (complete) Beta function and its natural logarithm."
msgstr ""

#
#. type: findex
#: R-exts.texi:12029
#, no-wrap
msgid "choose"
msgstr ""

#
#. type: findex
#: R-exts.texi:12030
#, no-wrap
msgid "lchoose"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12031
#, no-wrap
msgid "double choose (double @var{n}, double @var{k})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:12032
#, no-wrap
msgid "double lchoose (double @var{n}, double @var{k})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12037
msgid ""
"The number of combinations of @var{k} items chosen from from @var{n} and the "
"natural logarithm of its absolute value, generalized to arbitrary real "
"@var{n}.  @var{k} is rounded to the nearest integer (with a warning if "
"needed)."
msgstr ""

#
#. type: findex
#: R-exts.texi:12039
#, no-wrap
msgid "bessel_i"
msgstr ""

#
#. type: findex
#: R-exts.texi:12040
#, no-wrap
msgid "bessel_j"
msgstr ""

#
#. type: findex
#: R-exts.texi:12041
#, no-wrap
msgid "bessel_k"
msgstr ""

#
#. type: findex
#: R-exts.texi:12042
#, no-wrap
msgid "bessel_y"
msgstr ""

#
#. type: cindex
#: R-exts.texi:12043
#, no-wrap
msgid "Bessel functions"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12044
#, no-wrap
msgid "double bessel_i (double @var{x}, double @var{nu}, double @var{expo})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:12045
#, no-wrap
msgid "double bessel_j (double @var{x}, double @var{nu})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:12046
#, no-wrap
msgid "double bessel_k (double @var{x}, double @var{nu}, double @var{expo})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:12047
#, no-wrap
msgid "double bessel_y (double @var{x}, double @var{nu})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12053
msgid ""
"Bessel functions of types I, J, K and Y with index @var{nu}.  For "
"@code{bessel_i} and @code{bessel_k} there is the option to return @w{exp(-"
"@var{x}) I(@var{x}; @var{nu})} or @w{exp(@var{x}) K(@var{x}; @var{nu})} if "
"@var{expo} is 2. (Use @code{@var{expo} == 1} for unscaled values.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12059
msgid ""
"There are a few other numerical utility functions available as entry points."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12061
#, no-wrap
msgid "double R_pow (double @var{x}, double @var{y})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:12062
#, no-wrap
msgid "double R_pow_di (double @var{x}, int @var{i})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12068
msgid ""
"@code{R_pow(@var{x}, @var{y})} and @code{R_pow_di(@var{x}, @var{i})} compute "
"@code{@var{x}^@var{y}} and @code{@var{x}^@var{i}}, respectively using "
"@code{R_FINITE} checks and returning the proper result (the same as @R{}) "
"for the cases where @var{x}, @var{y} or @var{i} are 0 or missing or infinite "
"or @code{NaN}."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12070
#, no-wrap
msgid "double log1p (double @var{x})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12073
msgid ""
"Computes @code{log(1 + @var{x})} (@emph{log 1 @b{p}lus x}), accurately even "
"for small @var{x}, i.e., @eqn{|x| \\ll 1, |x| << 1}."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12077
#: R-exts.texi:12098
msgid ""
"This should be provided by your platform, in which case it is not included "
"in @file{Rmath.h}, but is (probably) in @file{math.h} which @file{Rmath.h} "
"includes."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12079
#, no-wrap
msgid "double log1pmx (double @var{x})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12082
msgid ""
"Computes @code{log(1 + @var{x}) - @var{x}} (@emph{log 1 @b{p}lus x @b{m}inus "
"@b{x}}), accurately even for small @var{x}, i.e., @eqn{|x| \\ll 1, |x| << 1}."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12084
#, no-wrap
msgid "double log1pexp (double @var{x})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12087
msgid ""
"Computes @code{log(1 + exp(@var{x}))} (@emph{log 1 @b{p}lus @b{exp}}), "
"accurately, notably for large @var{x}, e.g., @eqn{x > 720, x > 720}."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12091
#, no-wrap
msgid "double expm1 (double @var{x})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12094
msgid ""
"Computes @code{exp(@var{x}) - 1} (@emph{exp x @b{m}inus 1}), accurately even "
"for small @var{x}, i.e., @eqn{|x| \\ll 1, |x| << 1}."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12100
#, no-wrap
msgid "double lgamma1p (double @var{x})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12103
msgid ""
"Computes @code{log(gamma(@var{x} + 1))} (@emph{log(gamma(1 @b{p}lus x))}), "
"accurately even for small @var{x}, i.e., @eqn{0 < x < 0.5, 0 < x < 0.5}."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12105
#, no-wrap
msgid "double cospi (double @var{x})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12108
msgid ""
"Computes @code{cos(pi * x)} (where @code{pi} is 3.14159...), accurately, "
"notably for half integer @var{x}."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12112
msgid ""
"This might be provided by your platform@footnote{It is an optional C11 "
"extension.}, in which case it is not included in @file{Rmath.h}, but is in "
"@file{math.h} which @file{Rmath.h} includes."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12114
#, no-wrap
msgid "double sinpi (double @var{x})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12116
msgid ""
"Computes @code{sin(pi * x)} accurately, notably for (half) integer @var{x}."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12119
#: R-exts.texi:12126
msgid ""
"This might be provided by your platform, in which case it is not included in "
"@file{Rmath.h}, but is in @file{math.h} which @file{Rmath.h} includes."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12121
#, no-wrap
msgid "double tanpi (double @var{x})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12123
msgid ""
"Computes @code{tan(pi * x)} accurately, notably for (half) integer @var{x}."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12128
#, no-wrap
msgid "double logspace_add (double @var{logx}, double @var{logy})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:12129
#, no-wrap
msgid "double logspace_sub (double @var{logx}, double @var{logy})"
msgstr ""

#. type: deftypefunx
#: R-exts.texi:12130
#, no-wrap
msgid "double logspace_sum (const double* @var{logx}, int @var{n})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12136
msgid ""
"Compute the log of a sum or difference from logs of terms, i.e., ``x + y'' "
"as @code{log (exp(@var{logx}) + exp(@var{logy}))} and ``x - y'' as @code{log "
"(exp(@var{logx}) - exp(@var{logy}))}, and ``sum_i x[i]'' as @code{log (sum[i "
"= 1:@var{n} exp(@var{logx}[i])] )} without causing unnecessary overflows or "
"throwing away too much accuracy."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12138
#, no-wrap
msgid "int imax2 (int @var{x}, int @var{y})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:12139
#, no-wrap
msgid "int imin2 (int @var{x}, int @var{y})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:12140
#, no-wrap
msgid "double fmax2 (double @var{x}, double @var{y})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:12141
#, no-wrap
msgid "double fmin2 (double @var{x}, double @var{y})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12146
msgid ""
"Return the larger (@code{max}) or smaller (@code{min}) of two integer or "
"double numbers, respectively.  Note that @code{fmax2} and @code{fmin2} "
"differ from C99's @code{fmax} and @code{fmin} when one of the arguments is a "
"@code{NaN}: these versions return @code{NaN}."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12148
#, no-wrap
msgid "double sign (double @var{x})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12152
msgid ""
"Compute the @emph{signum} function, where sign(@var{x}) is 1, 0, or "
"@math{-1}, when @var{x} is positive, 0, or negative, respectively, and "
"@code{NaN} if @code{x} is a @code{NaN}."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12154
#, no-wrap
msgid "double fsign (double @var{x}, double @var{y})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12157
msgid ""
"Performs ``transfer of sign'' and is defined as @eqn{|x| * \\hbox{sign}(y), |"
"x| * sign(y)}."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12159
#, no-wrap
msgid "double fprec (double @var{x}, double @var{digits})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12162
msgid ""
"Returns the value of @var{x} rounded to @var{digits} decimal digits (after "
"the decimal point)."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12164
msgid "This is the function used by @R{}'s @code{signif()}."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12166
#, no-wrap
msgid "double fround (double @var{x}, double @var{digits})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12169
msgid ""
"Returns the value of @var{x} rounded to @var{digits} @emph{significant} "
"decimal digits."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12171
msgid "This is the function used by @R{}'s @code{round()}."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12173
#, no-wrap
msgid "double ftrunc (double @var{x})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12176
msgid ""
"Returns the value of @var{x} truncated (to an integer value) towards zero."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12179
msgid ""
"Note that this is no longer needed in C code, as C99 provide a @code{trunc} "
"function.  It is needed for portable C++98 code."
msgstr ""

#
#. type: findex
#: R-exts.texi:12183
#, no-wrap
msgid "M_E"
msgstr ""

#
#. type: findex
#: R-exts.texi:12184
#, no-wrap
msgid "M_PI"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12192
msgid ""
"@R{} has a set of commonly used mathematical constants encompassing "
"constants usually found @file{math.h} and contains further ones that are "
"used in statistical computations.  All these are defined to (at least)  30 "
"digits accuracy in @file{Rmath.h}.  The following definitions use "
"@code{ln(x)} for the natural logarithm (@code{log(x)} in @R{})."
msgstr ""

#
#. type: multitable
#: R-exts.texi:12197
msgid "@headitem Name"
msgstr ""

#
#. type: multitable
#: R-exts.texi:12197
msgid "Definition (@code{ln = log})"
msgstr ""

#
#. type: multitable
#: R-exts.texi:12197
msgid "round(@emph{value}, 7)"
msgstr ""

#
#. type: item
#: R-exts.texi:12197
#, no-wrap
msgid "@code{M_E} @tab @math{e} @tab 2.7182818"
msgstr ""

#
#. type: item
#: R-exts.texi:12198
#, no-wrap
msgid "@code{M_LOG2E} @tab log2(@math{e}) @tab 1.4426950"
msgstr ""

#
#. type: item
#: R-exts.texi:12199
#, no-wrap
msgid "@code{M_LOG10E} @tab log10(@math{e}) @tab 0.4342945"
msgstr ""

#
#. type: item
#: R-exts.texi:12200
#, no-wrap
msgid "@code{M_LN2} @tab ln(2) @tab 0.6931472"
msgstr ""

#
#. type: item
#: R-exts.texi:12201
#, no-wrap
msgid "@code{M_LN10} @tab ln(10) @tab 2.3025851"
msgstr ""

#
#. type: item
#: R-exts.texi:12202
#, no-wrap
msgid "@code{M_PI} @tab @eqn{\\pi, pi}   @tab 3.1415927"
msgstr ""

#
#. type: item
#: R-exts.texi:12203
#, no-wrap
msgid "@code{M_PI_2} @tab @eqn{\\pi/2, pi/2} @tab 1.5707963"
msgstr ""

#
#. type: item
#: R-exts.texi:12204
#, no-wrap
msgid "@code{M_PI_4} @tab @eqn{\\pi/4, pi/4} @tab 0.7853982"
msgstr ""

#
#. type: item
#: R-exts.texi:12205
#, no-wrap
msgid "@code{M_1_PI} @tab @eqn{1/\\pi, 1/pi} @tab 0.3183099"
msgstr ""

#
#. type: item
#: R-exts.texi:12206
#, no-wrap
msgid "@code{M_2_PI} @tab @eqn{2/\\pi, 2/pi} @tab 0.6366198"
msgstr ""

#
#. type: item
#: R-exts.texi:12207
#, no-wrap
msgid "@code{M_2_SQRTPI} @tab 2/sqrt(@eqn{\\pi, pi}) @tab 1.1283792"
msgstr ""

#
#. type: item
#: R-exts.texi:12208
#, no-wrap
msgid "@code{M_SQRT2} @tab sqrt(2) @tab 1.4142136"
msgstr ""

#
#. type: item
#: R-exts.texi:12209
#, no-wrap
msgid "@code{M_SQRT1_2} @tab 1/sqrt(2) @tab 0.7071068"
msgstr ""

#
#. type: item
#: R-exts.texi:12211
#, no-wrap
msgid "@code{M_SQRT_3} @tab sqrt(3) @tab 1.7320508"
msgstr ""

#
#. type: item
#: R-exts.texi:12212
#, no-wrap
msgid "@code{M_SQRT_32} @tab sqrt(32) @tab 5.6568542"
msgstr ""

#
#. type: item
#: R-exts.texi:12213
#, no-wrap
msgid "@code{M_LOG10_2} @tab log10(2) @tab 0.3010300"
msgstr ""

#
#. type: item
#: R-exts.texi:12214
#, no-wrap
msgid "@code{M_2PI} @tab @eqn{2\\pi, 2*pi} @tab 6.2831853"
msgstr ""

#
#. type: item
#: R-exts.texi:12215
#, no-wrap
msgid "@code{M_SQRT_PI} @tab sqrt(@eqn{\\pi, pi}) @tab 1.7724539"
msgstr ""

#
#. type: item
#: R-exts.texi:12216
#, no-wrap
msgid "@code{M_1_SQRT_2PI} @tab 1/sqrt(@eqn{2\\pi, 2*pi}) @tab 0.3989423"
msgstr ""

#
#. type: item
#: R-exts.texi:12217
#, no-wrap
msgid "@code{M_SQRT_2dPI} @tab sqrt(2/@eqn{\\pi, pi}) @tab 0.7978846"
msgstr ""

#
#. type: item
#: R-exts.texi:12218
#, no-wrap
msgid "@code{M_LN_SQRT_PI} @tab ln(sqrt(@eqn{\\pi, pi})) @tab 0.5723649"
msgstr ""

#
#. type: item
#: R-exts.texi:12219
#, no-wrap
msgid "@code{M_LN_SQRT_2PI} @tab ln(sqrt(@eqn{2\\pi, 2*pi})) @tab 0.9189385"
msgstr ""

#
#. type: item
#: R-exts.texi:12220
#, no-wrap
msgid "@code{M_LN_SQRT_PId2} @tab ln(sqrt(@eqn{\\pi, pi}/2)) @tab 0.2257914"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12227
msgid ""
"There are a set of constants (@code{PI}, @code{DOUBLE_EPS}) (and so on)  "
"defined (unless @code{STRICT_R_HEADERS} is defined) in the included header "
"@file{R_ext/Constants.h}, mainly for compatibility with @Sl{}."
msgstr ""

#
#. type: findex
#: R-exts.texi:12228
#, no-wrap
msgid "TRUE"
msgstr ""

#
#. type: findex
#: R-exts.texi:12229
#, no-wrap
msgid "FALSE"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12235
msgid ""
"Further, the included header @file{R_ext/Boolean.h} has enumeration "
"constants @code{TRUE} and @code{FALSE} of type @code{Rboolean} in order to "
"provide a way of using ``logical'' variables in C consistently.  This can "
"conflict with other software: for example it conflicts with the headers in "
"IJG's @code{jpeg-9} (but not earlier versions)."
msgstr ""

#
#. type: cindex
#: R-exts.texi:12239
#, no-wrap
msgid "optimization"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12244
msgid ""
"The C code underlying @code{optim} can be accessed directly.  The user needs "
"to supply a function to compute the function to be minimized, of the type"
msgstr ""

#
#. type: example
#: R-exts.texi:12247
#, no-wrap
msgid "typedef double optimfn(int n, double *par, void *ex);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12253
msgid ""
"where the first argument is the number of parameters in the second "
"argument.  The third argument is a pointer passed down from the calling "
"routine, normally used to carry auxiliary information."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12255
msgid "Some of the methods also require a gradient function"
msgstr ""

#
#. type: example
#: R-exts.texi:12258
#, no-wrap
msgid "typedef void optimgr(int n, double *par, double *gr, void *ex);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12264
msgid ""
"which passes back the gradient in the @code{gr} argument.  No function is "
"provided for finite-differencing, nor for approximating the Hessian at the "
"result."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12266
msgid "The interfaces (defined in header @file{R_ext/Applic.h}) are"
msgstr ""

#
#. type: item
#: R-exts.texi:12268
#, no-wrap
msgid "Nelder Mead:"
msgstr ""

#
#. type: findex
#: R-exts.texi:12269
#, no-wrap
msgid "nmmin"
msgstr ""

#
#. type: example
#: R-exts.texi:12275
#, no-wrap
msgid ""
"void nmmin(int n, double *xin, double *x, double *Fmin, optimfn fn,\n"
"\t   int *fail, double abstol, double intol, void *ex,\n"
"\t   double alpha, double beta, double gamma, int trace,\n"
"\t   int *fncount, int maxit);\n"
msgstr ""

#
#. type: item
#: R-exts.texi:12277
#, no-wrap
msgid "BFGS:"
msgstr ""

#
#. type: findex
#: R-exts.texi:12278
#, no-wrap
msgid "vmmin"
msgstr ""

#
#. type: example
#: R-exts.texi:12284
#, no-wrap
msgid ""
"void vmmin(int n, double *x, double *Fmin,\n"
"\t   optimfn fn, optimgr gr, int maxit, int trace,\n"
"\t   int *mask, double abstol, double reltol, int nREPORT,\n"
"\t   void *ex, int *fncount, int *grcount, int *fail);\n"
msgstr ""

#
#. type: item
#: R-exts.texi:12286
#, no-wrap
msgid "Conjugate gradients:"
msgstr ""

#
#. type: findex
#: R-exts.texi:12287
#, no-wrap
msgid "cgmin"
msgstr ""

#
#. type: example
#: R-exts.texi:12293
#, no-wrap
msgid ""
"void cgmin(int n, double *xin, double *x, double *Fmin,\n"
"\t   optimfn fn, optimgr gr, int *fail, double abstol,\n"
"\t   double intol, void *ex, int type, int trace,\n"
"\t   int *fncount, int *grcount, int maxit);\n"
msgstr ""

#
#. type: item
#: R-exts.texi:12295
#, no-wrap
msgid "Limited-memory BFGS with bounds:"
msgstr ""

#
#. type: findex
#: R-exts.texi:12296
#, no-wrap
msgid "lbfgsb"
msgstr ""

#
#. type: example
#: R-exts.texi:12303
#, no-wrap
msgid ""
"void lbfgsb(int n, int lmm, double *x, double *lower,\n"
"\t    double *upper, int *nbd, double *Fmin, optimfn fn,\n"
"\t    optimgr gr, int *fail, void *ex, double factr,\n"
"\t    double pgtol, int *fncount, int *grcount,\n"
"\t    int maxit, char *msg, int trace, int nREPORT);\n"
msgstr ""

#
#. type: item
#: R-exts.texi:12305
#, no-wrap
msgid "Simulated annealing:"
msgstr ""

#
#. type: findex
#: R-exts.texi:12306
#, no-wrap
msgid "samin"
msgstr ""

#
#. type: example
#: R-exts.texi:12310
#, no-wrap
msgid ""
"void samin(int n, double *x, double *Fmin, optimfn fn, int maxit,\n"
"\t   int tmax, double temp, int trace, void *ex);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12322
msgid ""
"Many of the arguments are common to the various methods.  @code{n} is the "
"number of parameters, @code{x} or @code{xin} is the starting parameters on "
"entry and @code{x} the final parameters on exit, with final value returned "
"in @code{Fmin}.  Most of the other parameters can be found from the help "
"page for @code{optim}: see the source code @file{src/appl/lbfgsb.c} for the "
"values of @code{nbd}, which specifies which bounds are to be used."
msgstr ""

#
#. type: cindex
#: R-exts.texi:12326
#, no-wrap
msgid "integration"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12331
msgid ""
"The C code underlying @code{integrate} can be accessed directly.  The user "
"needs to supply a @emph{vectorizing} C function to compute the function to "
"be integrated, of the type"
msgstr ""

#
#. type: example
#: R-exts.texi:12334
#, no-wrap
msgid "typedef void integr_fn(double *x, int n, void *ex);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12345
msgid ""
"where @code{x[]} is both input and output and has length @code{n}, i.e., a C "
"function, say @code{fn}, of type @code{integr_fn} must basically do "
"@code{for(i in 1:n) x[i] := f(x[i], ex)}.  The vectorization requirement can "
"be used to speed up the integrand instead of calling it @code{n} times.  "
"Note that in the current implementation built on QUADPACK, @code{n} will be "
"either 15 or 21.  The @code{ex} argument is a pointer passed down from the "
"calling routine, normally used to carry auxiliary information."
msgstr ""

#. type: Plain text
#: R-exts.texi:12349
msgid ""
"There are interfaces (defined in header @file{R_ext/Applic.h}) for integrals "
"over finite and infinite intervals (or ``ranges'' or ``integration "
"boundaries'')."
msgstr ""

#
#. type: item
#: R-exts.texi:12351
#, no-wrap
msgid "Finite:"
msgstr ""

#
#. type: findex
#: R-exts.texi:12352
#, no-wrap
msgid "Rdqags"
msgstr ""

#
#. type: example
#: R-exts.texi:12359
#, no-wrap
msgid ""
"void Rdqags(integr_fn f, void *ex, double *a, double *b,\n"
"\t    double *epsabs, double *epsrel,\n"
"\t    double *result, double *abserr, int *neval, int *ier,\n"
"\t    int *limit, int *lenw, int *last,\n"
"\t    int *iwork, double *work);\n"
msgstr ""

#. type: item
#: R-exts.texi:12361
#, no-wrap
msgid "Infinite:"
msgstr ""

#
#. type: findex
#: R-exts.texi:12362
#, no-wrap
msgid "Rdqagi"
msgstr ""

#
#. type: example
#: R-exts.texi:12369
#, no-wrap
msgid ""
"void Rdqagi(integr_fn f, void *ex, double *bound, int *inf,\n"
"\t    double *epsabs, double *epsrel,\n"
"\t    double *result, double *abserr, int *neval, int *ier,\n"
"\t    int *limit, int *lenw, int *last,\n"
"\t    int *iwork, double *work);\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:12380
msgid ""
"Only the 3rd and 4th argument differ for the two integrators; for the finite "
"range integral using @code{Rdqags}, @code{a} and @code{b} are the "
"integration interval bounds, whereas for an infinite range integral using "
"@code{Rdqagi}, @code{bound} is the finite bound of the integration (if the "
"integral is not doubly-infinite) and @code{inf} is a code indicating the "
"kind of integration range,"
msgstr ""

#
#. type: item
#: R-exts.texi:12382
#, no-wrap
msgid "inf = 1"
msgstr ""

#
#. type: table
#: R-exts.texi:12384
msgid "corresponds to (bound, +Inf),"
msgstr ""

#
#. type: item
#: R-exts.texi:12384
#, no-wrap
msgid "inf = -1"
msgstr ""

#
#. type: table
#: R-exts.texi:12386
msgid "corresponds to (-Inf, bound),"
msgstr ""

#
#. type: item
#: R-exts.texi:12386
#, no-wrap
msgid "inf = 2"
msgstr ""

#
#. type: table
#: R-exts.texi:12388
msgid "corresponds to (-Inf, +Inf),"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12400
msgid ""
"@code{f} and @code{ex} define the integrand function, see above; "
"@code{epsabs} and @code{epsrel} specify the absolute and relative accuracy "
"requested, @code{result}, @code{abserr} and @code{last} are the output "
"components @code{value}, @code{abs.err} and @code{subdivisions} of the @R{} "
"function integrate, where @code{neval} gives the number of integrand "
"function evaluations, and the error code @code{ier} is translated to @R{}'s "
"@code{integrate() $ message}, look at that function definition.  "
"@code{limit} corresponds to @code{integrate(..., subdivisions = *)}.  It "
"seems you should always define the two work arrays and the length of the "
"second one as"
msgstr ""

#
#. type: example
#: R-exts.texi:12405
#, no-wrap
msgid ""
"    lenw = 4 * limit;\n"
"    iwork =   (int *) R_alloc(limit, sizeof(int));\n"
"    work = (double *) R_alloc(lenw,  sizeof(double));\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12409
msgid ""
"The comments in the source code in @file{src/appl/integrate.c} give more "
"details, particularly about reasons for failure (@code{ier >= 1})."
msgstr ""

#
#. type: cindex
#: R-exts.texi:12413
#, no-wrap
msgid "Sort functions from C"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12418
msgid ""
"@R{} has a fairly comprehensive set of sort routines which are made "
"available to users' C code.  The following is declared in header file "
"@file{Rinternals.h}."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12419
#, no-wrap
msgid "void  R_orderVector (int* @var{indx}, int @var{n}, SEXP @var{arglist}, Rboolean @var{nalast}, Rboolean @var{decreasing})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12425
msgid ""
"This corresponds to @R{}'s @code{order(..., na.last, decreasing)}.  More "
"specifically, @code{indx <- order(x, y, na.last, decreasing)} corresponds to "
"@code{R_orderVector(indx, n, Rf_lang2(x, y), nalast, decreasing)} and for "
"three vectors, @code{Rf_lang3(x,y,z)} is used as @var{arglist}."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12430
msgid ""
"Note that @code{R_orderVector()} assumes the vector @code{indx} to be "
"allocated to length @eqn{\\ge n, >= n}.  On return, @code{indx[]} contains a "
"permutation of @code{0:(n-1)}, i.e., 0-based C indices (and not 1-based @R{} "
"indices, as @R{}'s @code{order()})."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12434
msgid ""
"All other sort routines are declared in header file @file{R_ext/Utils.h} "
"(included by @file{R.h}) and include the following."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12435
#, no-wrap
msgid "void R_isort (int* @var{x}, int @var{n})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:12436
#, no-wrap
msgid "void R_rsort (double* @var{x}, int @var{n})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:12437
#, no-wrap
msgid "void R_csort (Rcomplex* @var{x}, int @var{n})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:12438
#, no-wrap
msgid "void rsort_with_index (double* @var{x}, int* @var{index}, int @var{n})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12442
msgid ""
"The first three sort integer, real (double) and complex data respectively.  "
"(Complex numbers are sorted by the real part first then the imaginary "
"part.)  @code{NA}s are sorted last."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12445
msgid ""
"@code{rsort_with_index} sorts on @var{x}, and applies the same permutation "
"to @var{index}.  @code{NA}s are sorted last."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12447
#, no-wrap
msgid "void revsort (double* @var{x}, int* @var{index}, int @var{n})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12450
msgid ""
"Is similar to @code{rsort_with_index} but sorts into decreasing order, and "
"@code{NA}s are not handled."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12452
#, no-wrap
msgid "void iPsort (int* @var{x}, int @var{n}, int @var{k})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:12453
#, no-wrap
msgid "void rPsort (double* @var{x}, int @var{n}, int @var{k})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:12454
#, no-wrap
msgid "void cPsort (Rcomplex* @var{x}, int @var{n}, int @var{k})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12458
msgid ""
"These all provide (very) partial sorting: they permute @var{x} so that "
"@code{@var{x}[@var{k}]} is in the correct place with smaller values to the "
"left, larger ones to the right."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12461
#, no-wrap
msgid "void R_qsort   (double *@var{v}, size_t @var{i}, size_t @var{j})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:12462
#, no-wrap
msgid "void R_qsort_I (double *@var{v}, int *@var{I}, int @var{i}, int @var{j})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:12463
#, no-wrap
msgid "void R_qsort_int   (int *@var{iv}, size_t @var{i}, size_t @var{j})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:12464
#, no-wrap
msgid "void R_qsort_int_I (int *@var{iv}, int *@var{I}, int @var{i}, int @var{j})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12474
msgid ""
"These routines sort @code{@var{v}[@var{i}:@var{j}]} or @code{@var{iv}"
"[@var{i}:@var{j}]} (using 1-indexing, i.e., @code{@var{v}[1]} is the first "
"element) calling the quicksort algorithm as used by @R{}'s @code{sort(v, "
"method = \"quick\")} and documented on the help page for the @R{} function "
"@code{sort}.  The @code{..._I()} versions also return the @code{sort."
"index()} vector in @code{I}.  Note that the ordering is @emph{not} stable, "
"so tied values may be permuted."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12477
msgid ""
"Note that @code{NA}s are not handled (explicitly) and you should use "
"different sorting functions if @code{NA}s can be present."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12479
#, no-wrap
msgid "subroutine qsort4 (double precision @var{v}, integer @var{indx}, integer @var{ii}, integer @var{jj})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:12480
#, no-wrap
msgid "subroutine qsort3 (double precision @var{v}, integer @var{ii}, integer @var{jj})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12485
msgid ""
"The FORTRAN interface routines for sorting double precision vectors are "
"@code{qsort3} and @code{qsort4}, equivalent to @code{R_qsort} and "
"@code{R_qsort_I}, respectively."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12487
#, no-wrap
msgid "void R_max_col (double* @var{matrix}, int* @var{nr}, int* @var{nc}, int* @var{maxes}, int* @var{ties_meth})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12496
msgid ""
"Given the @var{nr} by @var{nc} matrix @code{matrix} in column-major "
"(``FORTRAN'')  order, @code{R_max_col()} returns in @code{@var{maxes}"
"[@var{i}-1]} the column number of the maximal element in the @var{i}-th row "
"(the same as @R{}'s @code{max.col()} function).  In the case of ties "
"(multiple maxima), @code{*ties_meth} is an integer code in @code{1:3} "
"determining the method: 1 = ``random'', 2 = ``first'' and 3 = ``last''.  See "
"@R{}'s help page @code{?max.col}."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12498
#, no-wrap
msgid "int findInterval (double* @var{xt}, int @var{n}, double @var{x}, Rboolean @var{rightmost_closed}, Rboolean @var{all_inside}, int @var{ilo}, int* @var{mflag})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12509
msgid ""
"Given the ordered vector @var{xt} of length @var{n}, return the interval or "
"index of @var{x} in @code{@var{xt}[]}, typically max(@math{i}; @eqn{1 \\le i "
"\\le @var{n}, 1 <= i <= @var{n}} & @math{@var{xt}[i]} @eqn{\\le, <=} "
"@var{x}) where we use 1-indexing as in @R{} and FORTRAN (but not C).  If "
"@var{rightmost_closed} is true, also returns @math{@var{n}-1} if @var{x} "
"equals @math{@var{xt}[@var{n}]}.  If @var{all_inside} is not 0, the result "
"is coerced to lie in @code{1:(@var{n}-1)} even when @var{x} is outside the "
"@var{xt}[] range.  On return, @code{*@var{mflag}} equals @math{-1} if "
"@var{x} < @var{xt}[1], @math{+1} if @var{x} >= @var{xt}[@var{n}], and 0 "
"otherwise."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12513
msgid ""
"The algorithm is particularly fast when @var{ilo} is set to the last result "
"of @code{findInterval()} and @var{x} is a value of a sequence which is "
"increasing or decreasing for subsequent calls."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12516
msgid ""
"There is also an @code{F77_CALL(interv)()} version of @code{findInterval()} "
"with the same arguments, but all pointers."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12520
msgid ""
"A system-independent interface to produce the name of a temporary file is "
"provided as"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12521
#, no-wrap
msgid "{char *} R_tmpnam (const char *@var{prefix}, const char *@var{tmpdir})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:12522
#, no-wrap
msgid "{char *} R_tmpnam2 (const char *@var{prefix}, const char *@var{tmpdir}, const char *@var{fileext})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12528
msgid ""
"Return a pathname for a temporary file with name beginning with @var{prefix} "
"and ending with @var{fileext} in directory @var{tmpdir}.  A @code{NULL} "
"prefix or extension is replaced by @code{\"\"}.  Note that the return value "
"is @code{malloc}ed and should be @code{free}d when no longer needed (unlike "
"the system call @code{tmpnam})."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12534
msgid ""
"There is also the internal function used to expand file names in several "
"@R{} functions, and called directly by @code{path.expand}."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12535
#, no-wrap
msgid "{const char *} R_ExpandFileName (const char *@var{fn})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12540
msgid ""
"Expand a path name @var{fn} by replacing a leading tilde by the user's home "
"directory (if defined).  The precise meaning is platform-specific; it will "
"usually be taken from the environment variable @env{HOME} if this is defined."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12548
msgid ""
"For historical reasons there are FORTRAN interfaces to functions "
"@code{D1MACH} and @code{I1MACH}.  These can be called from C code as e.g.@: "
"@code{F77_CALL(d1mach)(4)}.  Note that these are emulations of the original "
"functions by Fox, Hall and Schryer on NetLib at @uref{http://www.netlib.org/"
"slatec/src/} for IEC 60559 arithmetic (required by @R{})."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12556
msgid ""
"@R{} has its own C-level interface to the encoding conversion capabilities "
"provided by @code{iconv} because there are incompatibilities between the "
"declarations in different implementations of @code{iconv}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12558
msgid "These are declared in header file @file{R_ext/Riconv.h}."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12559
#, no-wrap
msgid "{void *} Riconv_open (const char *@var{to}, const char *@var{from})"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12563
msgid ""
"Set up a pointer to an encoding object to be used to convert between two "
"encodings: @code{\"\"} indicates the current locale."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12564
#, no-wrap
msgid "size_t Riconv (void *@var{cd}, const char **@var{inbuf}, size_t *@var{inbytesleft}, char  **@var{outbuf}, size_t *@var{outbytesleft})"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12576
msgid ""
"Convert as much as possible of @code{inbuf} to @code{outbuf}.  Initially the "
"@code{int} variables indicate the number of bytes available in the buffers, "
"and they are updated (and the @code{char} pointers are updated to point to "
"the next free byte in the buffer).  The return value is the number of "
"characters converted, or @code{(size_t)-1} (beware: @code{size_t} is usually "
"an unsigned type).  It should be safe to assume that an error condition sets "
"@code{errno} to one of @code{E2BIG} (the output buffer is full), "
"@code{EILSEQ} (the input cannot be converted, and might be invalid in the "
"encoding specified) or @code{EINVAL} (the input does not end with a complete "
"multi-byte character)."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:12577
#, no-wrap
msgid "int Riconv_close (void * @var{cd})"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12580
msgid "Free the resources of an encoding object."
msgstr ""

#
#. type: cindex
#: R-exts.texi:12584
#, no-wrap
msgid "Interrupts"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12589
msgid ""
"No port of @R{} can be interrupted whilst running long computations in "
"compiled code, so programmers should make provision for the code to be "
"interrupted at suitable points by calling from C"
msgstr ""

#
#. type: example
#: R-exts.texi:12592
#, no-wrap
msgid ""
"#include <R_ext/Utils.h>\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:12594
#, no-wrap
msgid "void R_CheckUserInterrupt(void);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12598
msgid "and from FORTRAN"
msgstr ""

#
#. type: example
#: R-exts.texi:12601
#, no-wrap
msgid "subroutine rchkusr()\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12605
msgid ""
"These check if the user has requested an interrupt, and if so branch to "
"@R{}'s error handling functions."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12609
msgid ""
"Note that it is possible that the code behind one of the entry points "
"defined here if called from your C or FORTRAN code could be interruptible or "
"generate an error and so not return to your code."
msgstr ""

#
#. type: cindex
#: R-exts.texi:12613
#, no-wrap
msgid "Version information from C"
msgstr ""

#
#. type: findex
#: R-exts.texi:12615
#, no-wrap
msgid "R_Version"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12619
msgid ""
"The header files define @code{USING_R}, which can be used to test if the "
"code is indeed being used with @R{}."
msgstr ""

#. type: Plain text
#: R-exts.texi:12631
msgid ""
"Header file @file{Rconfig.h} (included by @file{R.h}) is used to define "
"platform-specific macros that are mainly for use in other header files.  The "
"macro @code{WORDS_BIGENDIAN} is defined on big-endian@footnote{@uref{https://"
"en.wikipedia.org/@/wiki/@/Endianness}.} systems (e.g.@: most OSes on Sparc "
"and PowerPC hardware) and not on little-endian systems (such as @code{i686} "
"and @code{x86_64} on all OSes, and Linux on Alpha and Itanium).  It can be "
"useful when manipulating binary files.  The macro @code{SUPPORT_OPENMP} is "
"defined on suitable systems and can be used in conjunction with the "
"@code{SUPPORT_OPENMP_*} macros in packages that want to make use of OpenMP."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12638
msgid ""
"Header file @file{Rversion.h} (@strong{not} included by @file{R.h})  defines "
"a macro @code{R_VERSION} giving the version number encoded as an integer, "
"plus a macro @code{R_Version} to do the encoding.  This can be used to test "
"if the version of @R{} is late enough, or to include back-compatibility "
"features.  For protection against very old versions of @R{} which did not "
"have this macro, use a construction such as"
msgstr ""

#. type: group
#: R-exts.texi:12644
#, no-wrap
msgid ""
"#if defined(R_VERSION) && R_VERSION >= R_Version(3, 1, 0)\n"
"  ...\n"
"#endif\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:12651
msgid ""
"More detailed information is available in the macros @code{R_MAJOR}, "
"@code{R_MINOR}, @code{R_YEAR}, @code{R_MONTH} and @code{R_DAY}: see the "
"header file @file{Rversion.h} for their format.  Note that the minor version "
"includes the patchlevel (as in @samp{2.2})."
msgstr ""

#. type: Plain text
#: R-exts.texi:12655
msgid ""
"Packages which use @code{alloca} need to ensure it is defined: as it is "
"neither C99 nor POSIX there is no standard way to do so.  As from @R{} 3.2.2 "
"one can use"
msgstr ""

#. type: example
#: R-exts.texi:12666
#, no-wrap
msgid ""
"#include <Rconfig.h> // for HAVE_ALLOCA_H\n"
"#ifdef __GNUC__\n"
"// this covers gcc, clang, icc\n"
"# undef alloca\n"
"# define alloca(x) __builtin_alloca((x))\n"
"#elif defined(HAVE_ALLOCA_H)\n"
"// needed for native compilers on Solaris and AIX\n"
"# include <alloca.h>\n"
"#endif\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:12673
msgid ""
"(and this should be included before standard C headers such as @file{stdlib."
"h}, since on some platforms these include @file{malloc.h} which may have a "
"conflicting definition), which suffices for known @R{} platforms."
msgstr ""

#
#. type: findex
#: R-exts.texi:12676
#, no-wrap
msgid "R_INLINE"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12683
msgid ""
"The C99 keyword @code{inline} should be recognized by all compilers now used "
"to build @R{}.  Portable code which might be used with earlier versions of "
"@R{} can be written using the macro @code{R_INLINE} (defined in file "
"@file{Rconfig.h} included by @file{R.h}), as for example from package "
"@CRANpkg{cluster}"
msgstr ""

#
#. type: example
#: R-exts.texi:12691
#, no-wrap
msgid ""
"static R_INLINE int ind_2(int l, int j)\n"
"@{\n"
"...\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12701
msgid ""
"Be aware that using inlining with functions in more than one compilation "
"unit is almost impossible to do portably, see @uref{http://www.greenend.org."
"uk/@/rjk/@/2003/@/03/@/inline.html}, so this usage is for @code{static} "
"functions as in the example.  All the @R{} configure code has checked is "
"that @code{R_INLINE} can be used in a single C file with the compiler used "
"to build @R{}.  We recommend that packages making extensive use of inlining "
"include their own configure code."
msgstr ""

#
#. type: cindex
#: R-exts.texi:12704
#, no-wrap
msgid "Visibility"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12715
msgid ""
"Header @file{R_ext/Visibility} has some definitions for controlling the "
"visibility of entry points.  These are only effective when "
"@samp{HAVE_VISIBILITY_ATTRIBUTE} is defined -- this is checked when @R{} is "
"configured and recorded in header @file{Rconfig.h} (included by @file{R_ext/"
"Visibility.h}).  It is generally defined on modern Unix-alikes with a recent "
"compiler, but not supported on OS X nor Windows.  Minimizing the visibility "
"of symbols in a shared library will both speed up its loading (unlikely to "
"be significant) and reduce the possibility of linking to other entry points "
"of the same name."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12726
msgid ""
"C/C++ entry points prefixed by @code{attribute_hidden} will not be visible "
"in the shared object.  There is no comparable mechanism for FORTRAN entry "
"points, but there is a more comprehensive scheme used by, for example "
"package @pkg{stats}.  Most compilers which allow control of visibility will "
"allow control of visibility for all symbols @emph{via} a flag, and where "
"known the flag is encapsulated in the macros @samp{C_VISIBILITY} and "
"@code{F77_VISIBILITY} for C and FORTRAN compilers.  These are defined in "
"@file{etc/Makeconf} and so available for normal compilation of package "
"code.  For example, @file{src/Makevars} could include"
msgstr ""

#
#. type: example
#: R-exts.texi:12730
#, no-wrap
msgid ""
"PKG_CFLAGS=$(C_VISIBILITY)\n"
"PKG_FFLAGS=$(F77_VISIBILITY)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12737
msgid ""
"This would end up with @strong{no} visible entry points, which would be "
"pointless.  However, the effect of the flags can be overridden by using the "
"@code{attribute_visible} prefix.  A shared object which registers its entry "
"points needs only for have one visible entry point, its initializer, so for "
"example package @pkg{stats} has"
msgstr ""

#
#. type: example
#: R-exts.texi:12745
#, no-wrap
msgid ""
"void attribute_visible R_init_stats(DllInfo *dll)\n"
"@{\n"
"    R_registerRoutines(dll, CEntries, CallEntries, FortEntries, NULL);\n"
"    R_useDynamicSymbols(dll, FALSE);\n"
"...\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12753
msgid ""
"The visibility mechanism is not available on Windows, but there is an "
"equally effective way to control which entry points are visible, by "
"supplying a definitions file @file{@var{pkgnme}/src/@var{pkgname}-win.def}: "
"only entry points listed in that file will be visible.  Again using "
"@pkg{stats} as an example, it has"
msgstr ""

#
#. type: example
#: R-exts.texi:12758
#, no-wrap
msgid ""
"LIBRARY stats.dll\n"
"EXPORTS\n"
" R_init_stats\n"
msgstr ""

#
#. type: section
#: R-exts.texi:12761
#, no-wrap
msgid "Using these functions in your own C code"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12768
msgid ""
"It is possible to build @code{Mathlib}, the @R{} set of mathematical "
"functions documented in @file{Rmath.h}, as a standalone library "
"@file{libRmath} under both Unix-alikes and Windows.  (This includes the "
"functions documented in @ref{Numerical analysis subroutines} as from that "
"header file.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12773
msgid ""
"The library is not built automatically when @R{} is installed, but can be "
"built in the directory @file{src/nmath/standalone} in the @R{} sources: see "
"the file @file{README} there.  To use the code in your own C program include"
msgstr ""

#
#. type: group
#: R-exts.texi:12778
#, no-wrap
msgid ""
"#define MATHLIB_STANDALONE\n"
"#include <Rmath.h>\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12784
msgid ""
"and link against @samp{-lRmath} (and perhaps @samp{-lm}).  There is an "
"example file @file{test.c}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12787
msgid ""
"A little care is needed to use the random-number routines. You will need to "
"supply the uniform random number generator"
msgstr ""

#
#. type: example
#: R-exts.texi:12790
#, no-wrap
msgid "double unif_rand(void)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12796
msgid ""
"or use the one supplied (and with a dynamic library or DLL you will have to "
"use the one supplied, which is the Marsaglia-multicarry with an entry points"
msgstr ""

#
#. type: example
#: R-exts.texi:12799
#, no-wrap
msgid "set_seed(unsigned int, unsigned int)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12803
msgid "to set its seeds and"
msgstr ""

#
#. type: example
#: R-exts.texi:12806
#, no-wrap
msgid "get_seed(unsigned int *, unsigned int *)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12810
msgid "to read the seeds)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12817
msgid ""
"The header files which @R{} installs are in directory "
"@file{@var{R_INCLUDE_DIR}} (default @file{@var{R_HOME}/include}).  This "
"currently includes"
msgstr ""

#
#. type: item
#: R-exts.texi:12820
#, no-wrap
msgid "@file{R.h} @tab includes many other files"
msgstr ""

#
#. type: item
#: R-exts.texi:12821
#, no-wrap
msgid "@file{S.h} @tab different version for code ported from @Sl{}"
msgstr ""

#
#. type: item
#: R-exts.texi:12822
#, no-wrap
msgid "@file{Rinternals.h} @tab definitions for using @R{}'s internal"
msgstr ""

#
#. type: multitable
#: R-exts.texi:12824
msgid "structures"
msgstr ""

#
#. type: item
#: R-exts.texi:12824
#, no-wrap
msgid "@file{Rdefines.h} @tab macros for an @Sl{}-like interface to the"
msgstr ""

#
#. type: multitable
#: R-exts.texi:12826
msgid "above (no longer maintained)"
msgstr ""

#
#. type: item
#: R-exts.texi:12826
#, no-wrap
msgid "@file{Rmath.h} @tab standalone math library"
msgstr ""

#
#. type: item
#: R-exts.texi:12827
#, no-wrap
msgid "@file{Rversion.h} @tab @R{} version information"
msgstr ""

#
#. type: item
#: R-exts.texi:12828
#, no-wrap
msgid "@file{Rinterface.h} @tab for add-on front-ends (Unix-alikes only)"
msgstr ""

#
#. type: item
#: R-exts.texi:12829
#, no-wrap
msgid "@file{Rembedded.h} @tab for add-on front-ends"
msgstr ""

#
#. type: item
#: R-exts.texi:12830
#, no-wrap
msgid "@file{R_ext/Applic.h} @tab optimization and integration"
msgstr ""

#
#. type: item
#: R-exts.texi:12831
#, no-wrap
msgid "@file{R_ext/BLAS.h} @tab C definitions for BLAS routines"
msgstr ""

#
#. type: item
#: R-exts.texi:12832
#, no-wrap
msgid "@file{R_ext/Callbacks.h} @tab C (and R function) top-level task"
msgstr ""

#
#. type: multitable
#: R-exts.texi:12834
msgid "handlers"
msgstr ""

#
#. type: item
#: R-exts.texi:12834
#, no-wrap
msgid "@file{R_ext/GetX11Image.h} @tab X11Image interface used by package"
msgstr ""

#
#. type: multitable
#: R-exts.texi:12836
msgid "@pkg{trkplot}"
msgstr ""

#
#. type: item
#: R-exts.texi:12836
#, no-wrap
msgid "@file{R_ext/Lapack.h} @tab C definitions for some LAPACK routines"
msgstr ""

#
#. type: item
#: R-exts.texi:12837
#, no-wrap
msgid "@file{R_ext/Linpack.h} @tab C definitions for some LINPACK"
msgstr ""

#
#. type: multitable
#: R-exts.texi:12839
msgid "routines, not all of which are included in @R{}"
msgstr ""

#
#. type: item
#: R-exts.texi:12839
#, no-wrap
msgid "@file{R_ext/Parse.h} @tab a small part of @R{}'s parse interface:"
msgstr ""

#
#. type: multitable
#: R-exts.texi:12841
msgid "not part of the stable API."
msgstr ""

#
#. type: item
#: R-exts.texi:12841
#, no-wrap
msgid "@file{R_ext/RStartup.h} @tab for add-on front-ends"
msgstr ""

#
#. type: item
#: R-exts.texi:12842
#, no-wrap
msgid "@file{R_ext/Rdynload.h} @tab needed to register compiled code in"
msgstr ""

#
#. type: multitable
#: R-exts.texi:12844
msgid "packages"
msgstr ""

#
#. type: item
#: R-exts.texi:12844
#, no-wrap
msgid "@file{R_ext/R-ftp-http.h} @tab interface to internal method of"
msgstr ""

#
#. type: code{#1}
#: R-exts.texi:12846
msgid "download.file"
msgstr ""

#
#. type: item
#: R-exts.texi:12846
#, no-wrap
msgid "@file{R_ext/Riconv.h} @tab interface to @code{iconv}"
msgstr ""

#
#. type: item
#: R-exts.texi:12847
#, no-wrap
msgid "@file{R_ext/Visibility.h} @tab definitions controlling visibility"
msgstr ""

#
#. type: item
#: R-exts.texi:12848
#, no-wrap
msgid "@file{R_ext/eventloop.h} @tab for add-on front-ends and for"
msgstr ""

#
#. type: multitable
#: R-exts.texi:12850
msgid "packages that need to share in the @R{} event loops (on all platforms)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12854
msgid "The following headers are included by @file{R.h}:"
msgstr ""

#
#. type: item
#: R-exts.texi:12857
#, no-wrap
msgid "@file{Rconfig.h} @tab configuration info that is made available"
msgstr ""

#
#. type: item
#: R-exts.texi:12858
#, no-wrap
msgid "@file{R_ext/Arith.h} @tab handling for @code{NA}s, @code{NaN}s,"
msgstr ""

#
#. type: multitable
#: R-exts.texi:12860
msgid "@code{Inf}/@code{-Inf}"
msgstr ""

#
#. type: item
#: R-exts.texi:12860
#, no-wrap
msgid "@file{R_ext/Boolean.h} @tab @code{TRUE}/@code{FALSE} type"
msgstr ""

#
#. type: item
#: R-exts.texi:12861
#, no-wrap
msgid "@file{R_ext/Complex.h} @tab C typedefs for @R{}'s @code{complex}"
msgstr ""

#
#. type: item
#: R-exts.texi:12862
#, no-wrap
msgid "@file{R_ext/Constants.h} @tab constants"
msgstr ""

#
#. type: item
#: R-exts.texi:12863
#, no-wrap
msgid "@file{R_ext/Error.h} @tab error handling"
msgstr ""

#
#. type: item
#: R-exts.texi:12864
#, no-wrap
msgid "@file{R_ext/Memory.h} @tab memory allocation"
msgstr ""

#
#. type: item
#: R-exts.texi:12865
#, no-wrap
msgid "@file{R_ext/Print.h} @tab @code{Rprintf} and variations."
msgstr ""

#
#. type: item
#: R-exts.texi:12866
#, no-wrap
msgid "@file{R_ext/RS.h} @tab definitions common to @file{R.h} and"
msgstr ""

#
#. type: multitable
#: R-exts.texi:12868
msgid "@file{S.h}, including @code{F77_CALL} etc."
msgstr ""

#
#. type: item
#: R-exts.texi:12868
#, no-wrap
msgid "@file{R_ext/Random.h} @tab random number generation"
msgstr ""

#
#. type: item
#: R-exts.texi:12869
#, no-wrap
msgid "@file{R_ext/Utils.h} @tab sorting and other utilities"
msgstr ""

#
#. type: item
#: R-exts.texi:12870
#, no-wrap
msgid "@file{R_ext/libextern.h} @tab definitions for exports from"
msgstr ""

#
#. type: multitable
#: R-exts.texi:12872
msgid "@file{R.dll} on Windows."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12881
msgid ""
"The graphics systems are exposed in headers @file{R_ext/GraphicsEngine.h}, "
"@file{R_ext/GraphicsDevice.h} (which it includes) and @file{R_ext/"
"QuartzDevice.h}. Facilities for defining custom connection implementations "
"are provided in @file{R_ext/Connections.h}, but make sure you consult the "
"file before use."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12887
msgid ""
"Let us re-iterate the advice to include system headers before the @R{} "
"header files, especially @file{Rinternals.h} (included by @file{Rdefines.h}) "
"and @file{Rmath.h}, which redefine names which may be used in system headers "
"(fewer if @samp{R_NO_REMAP} is defined, or @samp{R_NO_REMAP_RMATH} for "
"@file{Rmath.h}, as from @R{} 3.1.0)."
msgstr ""

#
#. type: cindex
#: R-exts.texi:12890
#, no-wrap
msgid "Generic functions"
msgstr ""

#
#. type: cindex
#: R-exts.texi:12891
#, no-wrap
msgid "Method functions"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12897
msgid ""
"@R{} programmers will often want to add methods for existing generic "
"functions, and may want to add new generic functions or make existing "
"functions generic.  In this chapter we give guidelines for doing so, with "
"examples of the problems caused by not adhering to them."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12900
msgid ""
"This chapter only covers the `informal' class system copied from S3, and not "
"with the S4 (formal) methods of package @pkg{methods}."
msgstr ""

#. type: Plain text
#: R-exts.texi:12905
msgid ""
"First, a @emph{caveat}: a function named @code{@var{gen}.@var{cl}} will be "
"invoked by the generic @code{@var{gen}} for class @code{@var{cl}}, so do not "
"name functions in this style unless they are intended to be methods."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12910
msgid ""
"The key function for methods is @code{NextMethod}, which dispatches the next "
"method.  It is quite typical for a method function to make a few changes to "
"its arguments, dispatch to the next method, receive the results and modify "
"them a little.  An example is"
msgstr ""

#
#. type: group
#: R-exts.texi:12918
#, no-wrap
msgid ""
"t.data.frame <- function(x)\n"
"@{\n"
"    x <- as.matrix(x)\n"
"    NextMethod(\"t\")\n"
"@}\n"
msgstr ""

#. type: Plain text
#: R-exts.texi:12925
msgid ""
"Note that the example above works because there is a @emph{next} method, the "
"default method, not that a new method is selected when the class is changed."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12932
msgid ""
"@emph{Any} method a programmer writes may be invoked from another method by "
"@code{NextMethod}, @emph{with the arguments appropriate to the previous "
"method}.  Further, the programmer cannot predict which method "
"@code{NextMethod} will pick (it might be one not yet dreamt of), and the end "
"user calling the generic needs to be able to pass arguments to the next "
"method.  For this to work"
msgstr ""

#
#. type: emph{#1}
#: R-exts.texi:12936
msgid ""
"A method must have all the arguments of the generic, including "
"@code{@dots{}} if the generic does."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12948
msgid ""
"It is a grave misunderstanding to think that a method needs only to accept "
"the arguments it needs.  The original S version of @code{predict.lm} did not "
"have a @code{@dots{}} argument, although @code{predict} did.  It soon became "
"clear that @code{predict.glm} needed an argument @code{dispersion} to handle "
"over-dispersion.  As @code{predict.lm} had neither a @code{dispersion} nor a "
"@code{@dots{}} argument, @code{NextMethod} could no longer be used.  (The "
"legacy, two direct calls to @code{predict.lm}, lives on in @code{predict."
"glm} in @R{}, which is based on the workaround for S3 written by Venables & "
"Ripley.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12952
msgid ""
"Further, the user is entitled to use positional matching when calling the "
"generic, and the arguments to a method called by @code{UseMethod} are those "
"of the call to the generic.  Thus"
msgstr ""

#
#. type: emph{#1}
#: R-exts.texi:12956
msgid "A method must have arguments in exactly the same order as the generic."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12961
msgid ""
"To see the scale of this problem, consider the generic function "
"@code{scale}, defined as"
msgstr ""

#
#. type: group
#: R-exts.texi:12966
#, no-wrap
msgid ""
"scale <- function (x, center = TRUE, scale = TRUE)\n"
"    UseMethod(\"scale\")\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12971
msgid "Suppose an unthinking package writer created methods such as"
msgstr ""

#
#. type: example
#: R-exts.texi:12974
#, no-wrap
msgid "scale.foo <- function(x, scale = FALSE, ...) @{ @}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12978
msgid "Then for @code{x} of class @code{\"foo\"} the calls"
msgstr ""

#
#. type: group
#: R-exts.texi:12983
#, no-wrap
msgid ""
"scale(x, , TRUE)\n"
"scale(x, scale = TRUE)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12989
msgid ""
"would do most likely do different things, to the justifiable consternation "
"of the end user."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:12992
msgid ""
"To add a further twist, which default is used when a user calls "
"@code{scale(x)} in our example? What if"
msgstr ""

#
#. type: example
#: R-exts.texi:12995
#, no-wrap
msgid "scale.bar <- function(x, center, scale = TRUE) NextMethod(\"scale\")\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13002
msgid ""
"and @code{x} has class @code{c(\"bar\", \"foo\")}? It is the default "
"specified in the method that is used, but the default specified in the "
"generic may be the one the user sees.  This leads to the recommendation:"
msgstr ""

#
#. type: emph{#1}
#: R-exts.texi:13005
msgid ""
"If the generic specifies defaults, all methods should use the same defaults."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13010
msgid ""
"An easy way to follow these recommendations is to always keep generics "
"simple, e.g."
msgstr ""

#
#. type: example
#: R-exts.texi:13013
#, no-wrap
msgid "scale <- function(x, ...) UseMethod(\"scale\")\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13017
msgid ""
"Only add parameters and defaults to the generic if they make sense in all "
"possible methods implementing it."
msgstr ""

#
#. type: section
#: R-exts.texi:13020
#: R-exts.texi:13022
#: R-exts.texi:13023
#, no-wrap
msgid "Adding new generics"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13030
msgid ""
"When creating a new generic function, bear in mind that its argument list "
"will be the maximal set of arguments for methods, including those written "
"elsewhere years later.  So choosing a good set of arguments may well be an "
"important design issue, and there need to be good arguments @emph{not} to "
"include a @code{@dots{}} argument."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13039
msgid ""
"If a @code{@dots{}} argument is supplied, some thought should be given to "
"its position in the argument sequence.  Arguments which follow "
"@code{@dots{}} must be named in calls to the function, and they must be "
"named in full (partial matching is suppressed after @code{@dots{}}).  Formal "
"arguments before @code{@dots{}} can be partially matched, and so may "
"`swallow' actual arguments intended for @code{@dots{}}.  Although it is "
"commonplace to make the @code{@dots{}} argument the last one, that is not "
"always the right choice."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13046
msgid ""
"Sometimes package writers want to make generic a function in the base "
"package, and request a change in @R{}.  This may be justifiable, but making "
"a function generic with the old definition as the default method does have a "
"small performance cost.  It is never necessary, as a package can take over a "
"function in the base package and make it generic by something like"
msgstr ""

#
#. type: group
#: R-exts.texi:13051
#, no-wrap
msgid ""
"foo <- function(object, ...) UseMethod(\"foo\")\n"
"foo.default <- function(object, ...) base::foo(object)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13059
msgid ""
"Earlier versions of this manual suggested assigning @code{foo.default <- "
"base::foo}.  This is @strong{not} a good idea, as it captures the base "
"function at the time of installation and it might be changed as @R{} is "
"patched or updated."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13061
msgid ""
"The same idea can be applied for functions in other packages with namespaces."
msgstr ""

#. type: Plain text
#: R-exts.texi:13073
msgid ""
"There are a number of ways to build front-ends to @R{}: we take this to mean "
"a GUI or other application that has the ability to submit commands to @R{} "
"and perhaps to receive results back (not necessarily in a text format).  "
"There are other routes besides those described here, for example the package "
"@CRANpkg{Rserve} (from @acronym{CRAN}, see also @uref{https://www.rforge.net/"
"@/Rserve/}) and connections to Java in @samp{JRI} (part of the "
"@CRANpkg{rJava} package on @acronym{CRAN}) and the Omegahat/Bioconductor "
"package @samp{SJava}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13080
msgid ""
"Note that the APIs described in this chapter are only intended to be used in "
"an alternative front-end: they are not part of the API made available for "
"@R{} packages and can be dangerous to use in a conventional package "
"(although packages may contain alternative front-ends).  Conversely some of "
"the functions from the API (such as @code{R_alloc}) should not be used in "
"front-ends."
msgstr ""

#
#. type: node
#: R-exts.texi:13084
#: R-exts.texi:13086
#: R-exts.texi:13087
#: R-exts.texi:13238
#: R-exts.texi:13307
#: R-exts.texi:13520
#: R-exts.texi:13541
#: R-exts.texi:13629
#: R-exts.texi:13669
#, no-wrap
msgid "Embedding R under Unix-alikes"
msgstr ""

#
#. type: node
#: R-exts.texi:13084
#: R-exts.texi:13086
#: R-exts.texi:13669
#: R-exts.texi:13670
#: R-exts.texi:13682
#: R-exts.texi:13713
#: R-exts.texi:13918
#, no-wrap
msgid "Embedding R under Windows"
msgstr ""

#. type: Plain text
#: R-exts.texi:13098
msgid ""
"@R{} can be built as a shared library@footnote{In the parlance of OS X this "
"is a @emph{dynamic} library, and is the normal way to build @R{} on that "
"platform.} if configured with @option{--enable-R-shlib}.  This shared "
"library can be used to run @R{} from alternative front-end programs.  We "
"will assume this has been done for the rest of this section.  Also, it can "
"be built as a static library if configured with @option{--enable-R-static-"
"lib}, and that can be used in a very similar way (at least on Linux: on "
"other platforms one needs to ensure that all the symbols exported by "
"@file{libR.a} are linked into the front-end)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13104
msgid ""
"The command-line @R{} front-end, @file{@var{R_HOME}/bin/exec/R}, is one such "
"example, and the former @acronym{GNOME} (see package @pkg{gnomeGUI} on "
"@acronym{CRAN}'s @samp{Archive} area) and OS X consoles are others.  The "
"source for @file{@var{R_HOME}/bin/exec/R} is in file @file{src/main/Rmain.c} "
"and is very simple"
msgstr ""

#
#. type: example
#: R-exts.texi:13108
#, no-wrap
msgid ""
"int Rf_initialize_R(int ac, char **av); /* in ../unix/system.c */\n"
"void Rf_mainloop();                     /* in main.c */\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:13110
#, no-wrap
msgid ""
"extern int R_running_as_main_program;   /* in ../unix/system.c */\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:13118
#, no-wrap
msgid ""
"int main(int ac, char **av)\n"
"@{\n"
"    R_running_as_main_program = 1;\n"
"    Rf_initialize_R(ac, av);\n"
"    Rf_mainloop(); /* does not return */\n"
"    return 0;\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13125
msgid ""
"indeed, misleadingly simple.  Remember that @file{@var{R_HOME}/bin/exec/R} "
"is run from a shell script @file{@var{R_HOME}/bin/R} which sets up the "
"environment for the executable, and this is used for"
msgstr ""

#
#. type: itemize
#: R-exts.texi:13131
msgid ""
"Setting @env{R_HOME} and checking it is valid, as well as the path "
"@env{R_SHARE_DIR} and @env{R_DOC_DIR} to the installed @file{share} and "
"@file{doc} directory trees.  Also setting @env{R_ARCH} if needed."
msgstr ""

#
#. type: itemize
#: R-exts.texi:13137
msgid ""
"Setting @env{LD_LIBRARY_PATH} to include the directories used in linking "
"@R{}.  This is recorded as the default setting of @env{R_LD_LIBRARY_PATH} in "
"the shell script @file{@var{R_HOME}/etc@var{R_ARCH}/ldpaths}."
msgstr ""

#
#. type: itemize
#: R-exts.texi:13141
msgid ""
"Processing some of the arguments, for example to run @R{} under a debugger "
"and to launch alternative front-ends to provide GUIs."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13146
msgid ""
"The first two of these can be achieved for your front-end by running it "
"@emph{via} @command{R CMD}. So, for example"
msgstr ""

#
#. type: example
#: R-exts.texi:13150
#, no-wrap
msgid ""
"R CMD /usr/local/lib/R/bin/exec/R\n"
"R CMD exec/R\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13161
msgid ""
"will both work in a standard @R{} installation. (@command{R CMD} looks first "
"for executables in @file{@var{R_HOME}/bin}.  These command-lines need "
"modification if a sub-architecture is in use.) If you do not want to run "
"your front-end in this way, you need to ensure that @env{R_HOME} is set and "
"@env{LD_LIBRARY_PATH} is suitable.  (The latter might well be, but modern "
"Unix/Linux systems do not normally include @file{/usr/local/lib} (@file{/usr/"
"local/lib64} on some architectures), and @R{} does look there for system "
"components.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13169
msgid ""
"The other senses in which this example is too simple are that all the "
"internal defaults are used and that control is handed over to the @R{} main "
"loop.  There are a number of small examples@footnote{but these are not part "
"of the automated test procedures and so little tested.} in the @file{tests/"
"Embedding} directory.  These make use of @code{Rf_initEmbeddedR} in "
"@file{src/main/Rembedded.c}, and essentially use"
msgstr ""

#
#. type: example
#: R-exts.texi:13171
#, no-wrap
msgid ""
"#include <Rembedded.h>\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:13177
#, no-wrap
msgid ""
"int main(int ac, char **av)\n"
"@{\n"
"    /* do some setup */\n"
"    Rf_initEmbeddedR(argc, argv);\n"
"    /* do some more setup */\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:13180
#, no-wrap
msgid ""
"    /* submit some code to R, which is done interactively via\n"
"\trun_Rmainloop();\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:13182
#, no-wrap
msgid ""
"\tA possible substitute for a pseudo-console is\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:13187
#, no-wrap
msgid ""
"\tR_ReplDLLinit();\n"
"\twhile(R_ReplDLLdo1() > 0) @{\n"
"\t/* add user actions here if desired */\n"
"       @}\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:13193
#, no-wrap
msgid ""
"     */\n"
"    Rf_endEmbeddedR(0);\n"
"    /* final tidying up after R is shutdown */\n"
"    return 0;\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13198
msgid ""
"If you do not want to pass @R{} arguments, you can fake an @code{argv} "
"array, for example by"
msgstr ""

#
#. type: example
#: R-exts.texi:13202
#, no-wrap
msgid ""
"    char *argv[]= @{\"REmbeddedPostgres\", \"--silent\"@};\n"
"    Rf_initEmbeddedR(sizeof(argv)/sizeof(argv[0]), argv);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13207
msgid ""
"However, to make a GUI we usually do want to run @code{run_Rmainloop} after "
"setting up various parts of @R{} to talk to our GUI, and arranging for our "
"GUI callbacks to be called during the @R{} mainloop."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13211
msgid ""
"One issue to watch is that on some platforms @code{Rf_initEmbeddedR} and "
"@code{Rf_endEmbeddedR} change the settings of the FPU (e.g.@: to allow "
"errors to be trapped and to make use of extended precision registers)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13217
msgid ""
"The standard code sets up a session temporary directory in the usual way, "
"@emph{unless} @code{R_TempDir} is set to a non-NULL value before "
"@code{Rf_initEmbeddedR} is called.  In that case the value is assumed to "
"contain an existing writable directory (no check is done), and it is not "
"cleaned up when @R{} is shut down."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13221
msgid ""
"@code{Rf_initEmbeddedR} sets @R{} to be in interactive mode: you can set "
"@code{R_Interactive} (defined in @file{Rinterface.h}) subsequently to change "
"this."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13225
msgid ""
"Note that @R{} expects to be run with the locale category @samp{LC_NUMERIC} "
"set to its default value of @code{C}, and so should not be embedded into an "
"application which changes that."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13229
msgid ""
"It is the user's responsibility to attempt to initialize only once.  To "
"protect the @R{} interpreter, @code{Rf_initialize_R} will exit the process "
"if re-initialization is attempted."
msgstr ""

#
#. type: node
#: R-exts.texi:13236
#: R-exts.texi:13238
#: R-exts.texi:13239
#: R-exts.texi:13307
#, no-wrap
msgid "Compiling against the R library"
msgstr ""

#
#. type: node
#: R-exts.texi:13236
#: R-exts.texi:13238
#: R-exts.texi:13307
#: R-exts.texi:13308
#: R-exts.texi:13520
#, no-wrap
msgid "Setting R callbacks"
msgstr ""

#
#. type: node
#: R-exts.texi:13236
#: R-exts.texi:13307
#: R-exts.texi:13520
#: R-exts.texi:13521
#: R-exts.texi:13541
#, no-wrap
msgid "Registering symbols"
msgstr ""

#
#. type: node
#: R-exts.texi:13236
#: R-exts.texi:13520
#: R-exts.texi:13541
#: R-exts.texi:13542
#: R-exts.texi:13629
#, no-wrap
msgid "Meshing event loops"
msgstr ""

#
#. type: subsection
#: R-exts.texi:13236
#: R-exts.texi:13541
#: R-exts.texi:13629
#: R-exts.texi:13630
#, no-wrap
msgid "Threading issues"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13243
msgid ""
"Suitable flags to compile and link against the @R{} (shared or static)  "
"library can be found by"
msgstr ""

#
#. type: example
#: R-exts.texi:13247
#, no-wrap
msgid ""
"R CMD config --cppflags\n"
"R CMD config --ldflags\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13251
msgid "(These apply only to an uninstalled copy or a standard install.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13255
msgid ""
"If @R{} is installed, @code{pkg-config} is available and neither sub-"
"architectures nor an OS X framework have been used, alternatives for a "
"shared @R{} library are"
msgstr ""

#
#. type: example
#: R-exts.texi:13259
#, no-wrap
msgid ""
"pkg-config --cflags libR\n"
"pkg-config --libs libR\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13263
msgid "and for a static @R{} library"
msgstr ""

#
#. type: example
#: R-exts.texi:13267
#, no-wrap
msgid ""
"pkg-config --cflags libR\n"
"pkg-config --libs --static libR\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13273
msgid ""
"(This may work for an installed OS framework if @code{pkg-config} is taught "
"where to look for @file{libR.pc}: it is installed inside the framework.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13277
msgid ""
"However, a more comprehensive way is to set up a @file{Makefile} to compile "
"the front-end.  Suppose file @file{myfe.c} is to be compiled to @file{myfe}. "
"A suitable @file{Makefile} might be"
msgstr ""

#
#. type: example
#: R-exts.texi:13281
#, no-wrap
msgid ""
"include $@{R_HOME@}/etc$@{R_ARCH@}/Makeconf\n"
"all: myfe\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:13285
#, no-wrap
msgid ""
"## The following is not needed, but avoids PIC flags.\n"
"myfe.o: myfe.c\n"
"        $(CC) $(ALL_CPPFLAGS) $(CFLAGS) -c myfe.c -o $@@\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:13289
#, no-wrap
msgid ""
"## replace $(LIBR) $(LIBS) by $(STATIC_LIBR) if R was build with a static libR\n"
"myfe: myfe.o\n"
"        $(MAIN_LINK) -o $@@ myfe.o $(LIBR) $(LIBS)\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13293
msgid "invoked as"
msgstr ""

#
#. type: example
#: R-exts.texi:13297
#, no-wrap
msgid ""
"R CMD make\n"
"R CMD myfe\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13306
msgid ""
"Additional flags which @code{$(MAIN_LINK)} includes are, amongst others, "
"those to select OpenMP and @option{--export-dynamic} for the GNU linker on "
"some platforms.  In principle @code{$(LIBS)} is not needed when using a "
"shared @R{} library as @file{libR} is linked against those libraries, but "
"some platforms need the executable also linked against them."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13314
msgid ""
"For Unix-alikes there is a public header file @file{Rinterface.h} that makes "
"it possible to change the standard callbacks used by @R{} in a documented "
"way.  This defines pointers (if @code{R_INTERFACE_PTRS} is defined)"
msgstr ""

#
#. type: example
#: R-exts.texi:13339
#, no-wrap
msgid ""
"extern void (*ptr_R_Suicide)(const char *);\n"
"extern void (*ptr_R_ShowMessage)(const char *);\n"
"extern int  (*ptr_R_ReadConsole)(const char *, unsigned char *, int, int);\n"
"extern void (*ptr_R_WriteConsole)(const char *, int);\n"
"extern void (*ptr_R_WriteConsoleEx)(const char *, int, int);\n"
"extern void (*ptr_R_ResetConsole)();\n"
"extern void (*ptr_R_FlushConsole)();\n"
"extern void (*ptr_R_ClearerrConsole)();\n"
"extern void (*ptr_R_Busy)(int);\n"
"extern void (*ptr_R_CleanUp)(SA_TYPE, int, int);\n"
"extern int  (*ptr_R_ShowFiles)(int, const char **, const char **,\n"
"                               const char *, Rboolean, const char *);\n"
"extern int  (*ptr_R_ChooseFile)(int, char *, int);\n"
"extern int  (*ptr_R_EditFile)(const char *);\n"
"extern void (*ptr_R_loadhistory)(SEXP, SEXP, SEXP, SEXP);\n"
"extern void (*ptr_R_savehistory)(SEXP, SEXP, SEXP, SEXP);\n"
"extern void (*ptr_R_addhistory)(SEXP, SEXP, SEXP, SEXP);\n"
"// added in R 3.0.0\n"
"extern int  (*ptr_R_EditFiles)(int, const char **, const char **, const char *);\n"
"extern SEXP (*ptr_do_selectlist)(SEXP, SEXP, SEXP, SEXP);\n"
"extern SEXP (*ptr_do_dataentry)(SEXP, SEXP, SEXP, SEXP);\n"
"extern SEXP (*ptr_do_dataviewer)(SEXP, SEXP, SEXP, SEXP);\n"
"extern void (*ptr_R_ProcessEvents)();\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13344
msgid ""
"which allow standard @R{} callbacks to be redirected to your GUI.  What "
"these do is generally documented in the file @file{src/unix/system.txt}."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13345
#, no-wrap
msgid "void R_ShowMessage (char *@var{message})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13348
msgid ""
"This should display the message, which may have multiple lines: it should be "
"brought to the user's attention immediately."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13350
#, no-wrap
msgid "void R_Busy (int @var{which})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13354
msgid ""
"This function invokes actions (such as change of cursor) when @R{} embarks "
"on an extended computation (@code{@var{which}=1}) and when such a state "
"terminates (@code{@var{which}=0})."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13356
#, no-wrap
msgid "int R_ReadConsole (const char *@var{prompt}, unsigned char *@var{buf}, @"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13358
msgid "int @var{buflen}, int @var{hist})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:13358
#, no-wrap
msgid "void R_WriteConsole (const char *@var{buf}, int @var{buflen})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:13359
#, no-wrap
msgid "void R_WriteConsoleEx (const char *@var{buf}, int @var{buflen}, int @var{otype})"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:13360
#, no-wrap
msgid "void R_ResetConsole ()"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:13361
#, no-wrap
msgid "void R_FlushConsole ()"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:13362
#, no-wrap
msgid "void R_ClearErrConsole ()"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13365
msgid "These functions interact with a console."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13373
msgid ""
"@code{R_ReadConsole} prints the given prompt at the console and then does a "
"@code{fgets(3)}--like operation, transferring up to @var{buflen} characters "
"into the buffer @var{buf}. The last two bytes should be set to @samp{\"\\n"
"\\0\"} to preserve sanity.  If @var{hist} is non-zero, then the line should "
"be added to any command history which is being maintained.  The return value "
"is 0 is no input is available and >0 otherwise."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13382
msgid ""
"@code{R_WriteConsoleEx} writes the given buffer to the console, @var{otype} "
"specifies the output type (regular output or warning/error). Call to "
"@code{R_WriteConsole(buf, buflen)} is equivalent to "
"@code{R_WriteConsoleEx(buf, buflen, 0)}. To ensure backward compatibility of "
"the callbacks, @code{ptr_R_WriteConsoleEx} is used only if "
"@code{ptr_R_WriteConsole} is set to @code{NULL}.  To ensure that "
"@code{stdout()} and @code{stderr()} connections point to the console, set "
"the corresponding files to @code{NULL} @emph{via}"
msgstr ""

#
#. type: example
#: R-exts.texi:13385
#, no-wrap
msgid ""
"      R_Outputfile = NULL;\n"
"      R_Consolefile = NULL;\n"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13391
msgid ""
"@code{R_ResetConsole} is called when the system is reset after an error.  "
"@code{R_FlushConsole} is called to flush any pending output to the system "
"console.  @code{R_ClearerrConsole} clears any errors associated with reading "
"from the console."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13393
#, no-wrap
msgid "int R_ShowFiles (int @var{nfile}, const char **@var{file}, @"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13396
msgid ""
"const char **@var{headers}, const char *@var{wtitle}, Rboolean @var{del}, @ "
"const char *@var{pager})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13398
msgid "This function is used to display the contents of files."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13400
#, no-wrap
msgid "int R_ChooseFile (int @var{new}, char *@var{buf}, @"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13402
msgid "int @var{len})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13405
msgid ""
"Choose a file and return its name in @var{buf} of length @var{len}.  Return "
"value is 0 for success, > 0 otherwise."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13407
#, no-wrap
msgid "int R_EditFile (const char *@var{buf})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13409
msgid "Send a file to an editor window."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13411
#, no-wrap
msgid "int R_EditFiles (int @var{nfile}, const char **@var{file}, const char **@var{title}, const char *@var{editor})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13414
msgid ""
"Send @var{nfile} files to an editor, with titles possibly to be used for the "
"editor window(s)."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13416
#, no-wrap
msgid "SEXP R_loadhistory (SEXP, SEXP, SEXP, SEXP);"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:13417
#, no-wrap
msgid "SEXP R_savehistory (SEXP, SEXP, SEXP, SEXP);"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:13418
#, no-wrap
msgid "SEXP R_addhistory (SEXP, SEXP, SEXP, SEXP);"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13422
msgid ""
"@code{.Internal} functions for @code{loadhistory}, @code{savehistory} and "
"@code{timestamp}."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13425
msgid "If the console has no history mechanism these can be as simple as"
msgstr ""

#
#. type: example
#: R-exts.texi:13441
#, no-wrap
msgid ""
"SEXP R_loadhistory (SEXP call, SEXP op, SEXP args, SEXP env)\n"
"@{\n"
"    errorcall(call, \"loadhistory is not implemented\");\n"
"    return R_NilValue;\n"
"@}\n"
"SEXP R_savehistory (SEXP call, SEXP op , SEXP args, SEXP env)\n"
"@{\n"
"    errorcall(call, \"savehistory is not implemented\");\n"
"    return R_NilValue;\n"
"@}\n"
"SEXP R_addhistory (SEXP call, SEXP op , SEXP args, SEXP env)\n"
"@{\n"
"    return R_NilValue;\n"
"@}\n"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13446
msgid ""
"The @code{R_addhistory} function should return silently if no history "
"mechanism is present, as a user may be calling @code{timestamp} purely to "
"write the time stamp to the console."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13448
#, no-wrap
msgid "void R_Suicide (const char *@var{message})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13451
msgid ""
"This should abort @R{} as rapidly as possible, displaying the message.  A "
"possible implementation is"
msgstr ""

#
#. type: example
#: R-exts.texi:13460
#, no-wrap
msgid ""
"void R_Suicide (const char *message)\n"
"@{\n"
"    char  pp[1024];\n"
"    snprintf(pp, 1024, \"Fatal error: %s\\n\", s);\n"
"    R_ShowMessage(pp);\n"
"    R_CleanUp(SA_SUICIDE, 2, 0);\n"
"@}\n"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13463
#, no-wrap
msgid "void R_CleanUp (SA_TYPE @var{saveact}, int @var{status}, @"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13465
msgid "int @var{RunLast})"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13468
msgid ""
"This function invokes any actions which occur at system termination.  It "
"needs to be quite complex:"
msgstr ""

#
#. type: example
#: R-exts.texi:13472
#, no-wrap
msgid ""
"#include <Rinterface.h>\n"
"#include <Rembedded.h>    /* for Rf_KillAllDevices */\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:13492
#, no-wrap
msgid ""
"void R_CleanUp (SA_TYPE saveact, int status, int RunLast)\n"
"@{\n"
"    if(saveact == SA_DEFAULT) saveact = SaveAction;\n"
"    if(saveact == SA_SAVEASK) @{\n"
"       /* ask what to do and set saveact */\n"
"    @}\n"
"    switch (saveact) @{\n"
"    case SA_SAVE:\n"
"        if(runLast) R_dot_Last();\n"
"        if(R_DirtyImage) R_SaveGlobalEnv();\n"
"        /* save the console history in R_HistoryFile */\n"
"        break;\n"
"    case SA_NOSAVE:\n"
"        if(runLast) R_dot_Last();\n"
"        break;\n"
"    case SA_SUICIDE:\n"
"    default:\n"
"        break;\n"
"    @}\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:13495
#, no-wrap
msgid ""
"    R_RunExitFinalizers();\n"
"    /* clean up after the editor e.g. CleanEd() */\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:13497
#, no-wrap
msgid ""
"    R_CleanTempDir();\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:13501
#, no-wrap
msgid ""
"    /* close all the graphics devices */\n"
"    if(saveact != SA_SUICIDE) Rf_KillAllDevices();\n"
"    fpu_setup(FALSE);\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:13504
#, no-wrap
msgid ""
"    exit(status);\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13509
msgid ""
"These callbacks should never be changed in a running @R{} session (and hence "
"cannot be called from an extension package)."
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13510
#, no-wrap
msgid "SEXP R_dataentry (SEXP, SEXP, SEXP, SEXP);"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:13511
#, no-wrap
msgid "SEXP R_dataviewer (SEXP, SEXP, SEXP, SEXP);"
msgstr ""

#
#. type: deftypefunx
#: R-exts.texi:13512
#, no-wrap
msgid "SEXP R_selectlist (SEXP, SEXP, SEXP, SEXP);"
msgstr ""

#
#. type: deftypefun
#: R-exts.texi:13517
msgid ""
"@code{.External} functions for @code{dataentry} (and @code{edit} on matrices "
"and data frames), @code{View} and @code{select.list}.  These can be changed "
"if they are not currently in use."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13530
msgid ""
"An application embedding @R{} needs a different way of registering symbols "
"because it is not a dynamic library loaded by @R{} as would be the case with "
"a package.  Therefore @R{} reserves a special @code{DllInfo} entry for the "
"embedding application such that it can register symbols to be used with "
"@code{.C}, @code{.Call} etc.  This entry can be obtained by calling "
"@code{getEmbeddingDllInfo}, so a typical use is"
msgstr ""

#
#. type: example
#: R-exts.texi:13534
#, no-wrap
msgid ""
"DllInfo *info = R_getEmbeddingDllInfo();\n"
"R_registerRoutines(info, cMethods, callMethods, NULL, NULL);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13539
msgid ""
"The native routines defined by @code{cMethods} and @code{callMethods} should "
"be present in the embedding application.  See @ref{Registering native "
"routines} for details on registering symbols in general."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13547
msgid ""
"One of the most difficult issues in interfacing @R{} to a front-end is the "
"handling of event loops, at least if a single thread is used.  @R{} uses "
"events and timers for"
msgstr ""

#
#. type: itemize
#: R-exts.texi:13552
msgid ""
"Running X11 windows such as the graphics device and data editor, and "
"interacting with them (e.g., using @code{locator()})."
msgstr ""

#
#. type: itemize
#: R-exts.texi:13556
msgid ""
"Supporting Tcl/Tk events for the @pkg{tcltk} package (for at least the X11 "
"version of Tk)."
msgstr ""

#
#. type: itemize
#: R-exts.texi:13559
msgid "Preparing input."
msgstr ""

#
#. type: itemize
#: R-exts.texi:13563
msgid ""
"Timing operations, for example for profiling @R{} code and @code{Sys."
"sleep()}."
msgstr ""

#
#. type: itemize
#: R-exts.texi:13566
msgid "Interrupts, where permitted."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13571
msgid ""
"Specifically, the Unix-alike command-line version of @R{} runs separate "
"event loops for"
msgstr ""

#
#. type: itemize
#: R-exts.texi:13576
msgid ""
"Preparing input at the console command-line, in file @file{src/unix/sys-unix."
"c}."
msgstr ""

#
#. type: itemize
#: R-exts.texi:13584
msgid ""
"Waiting for a response from a socket in the internal functions underlying "
"FTP and HTTP transfers in @code{download.file()} and for direct socket "
"access, in files @file{src/@/modules/@/internet/@/nanoftp.c}, @file{src/@/"
"modules/@/internet/@/nanohttp.c} and @file{src/@/modules/@/internet/@/Rsock."
"c}"
msgstr ""

#
#. type: itemize
#: R-exts.texi:13589
msgid ""
"Mouse and window events when displaying the X11-based dataentry window, in "
"file @file{src/modules/X11/dataentry.c}.  This is regarded as @emph{modal}, "
"and no other events are serviced whilst it is active."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13599
msgid ""
"There is a protocol for adding event handlers to the first two types of "
"event loops, using types and functions declared in the header @file{R_ext/"
"eventloop.h} and described in comments in file @file{src/unix/sys-std.c}.  "
"It is possible to add (or remove) an input handler for events on a "
"particular file descriptor, or to set a polling interval (@emph{via} "
"@code{R_wait_usec}) and a function to be called periodically @emph{via} "
"@code{R_PolledEvents}: the polling mechanism is used by the @pkg{tcltk} "
"package."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13603
msgid ""
"It is not intended that these facilities are used by packages, but if they "
"are needed exceptionally, the package should ensure that it cleans up and "
"removes its handlers when its namespace is unloaded."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13609
msgid ""
"An alternative front-end needs both to make provision for other @R{} events "
"whilst waiting for input, and to ensure that it is not frozen out during "
"events of the second type.  This is not handled very well in the existing "
"examples.  The GNOME front-end ran a private handler for polled events by "
"setting"
msgstr ""

#
#. type: example
#: R-exts.texi:13613
#, no-wrap
msgid ""
"extern int (*R_timeout_handler)();\n"
"extern long R_timeout_val;\n"
"\n"
msgstr ""

#
#. type: example
#: R-exts.texi:13617
#, no-wrap
msgid ""
"      if (R_timeout_handler && R_timeout_val)\n"
"          gtk_timeout_add(R_timeout_val, R_timeout_handler, NULL);\n"
"      gtk_main ();\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13627
msgid ""
"whilst it is waiting for console input.  This obviously handles events for "
"Gtk windows (such as the graphics device in the @pkg{gtkDevice} package), "
"but not X11 events (such as the @code{X11()} device) or for other event "
"handlers that might have been registered with @R{}.  It does not attempt to "
"keep itself alive whilst @R{} is waiting on sockets.  The ability to add a "
"polled handler as @code{R_timeout_handler} is used by the @pkg{tcltk} "
"package."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13637
msgid ""
"Embedded @R{} is designed to be run in the main thread, and all the testing "
"is done in that context.  There is a potential issue with the stack-checking "
"mechanism where threads are involved.  This uses two variables declared in "
"@file{Rinterface.h} (if @code{CSTACK_DEFNS} is defined) as"
msgstr ""

#
#. type: example
#: R-exts.texi:13641
#, no-wrap
msgid ""
"extern uintptr_t R_CStackLimit; /* C stack limit */\n"
"extern uintptr_t R_CStackStart; /* Initial stack address */\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13647
msgid ""
"Note that @code{uintptr_t} is a C99 type for which a substitute is defined "
"in @R{}, so your code needs to define @code{HAVE_UINTPTR_T} appropriately."
msgstr ""

#. type: Plain text
#: R-exts.texi:13658
msgid ""
"These will be set@footnote{at least on platforms where the values are "
"available, that is having @code{getrlimit} and on Linux or having "
"@code{sysctl} supporting @code{KERN_USRSTACK}, including FreeBSD and OS X.} "
"when @code{Rf_initialize_R} is called, to values appropriate to the main "
"thread.  Stack-checking can be disabled by setting @code{R_CStackLimit = "
"(uintptr_t)-1} immediately after @code{Rf_initialize_R} is called, but it is "
"better to if possible set appropriate values.  (What these are and how to "
"determine them are OS-specific, and the stack size limit may differ for "
"secondary threads.  If you have a choice of stack size, at least 10Mb is "
"recommended.)"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13664
msgid ""
"You may also want to consider how signals are handled: @R{} sets signal "
"handlers for several signals, including @code{SIGINT}, @code{SIGSEGV}, "
"@code{SIGPIPE}, @code{SIGUSR1} and @code{SIGUSR2}, but these can all be "
"suppressed by setting the variable @code{R_SignalHandlers} (declared in "
"@file{Rinterface.h}) to @code{0}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13668
msgid ""
"Note that these variables must not be changed by an @R{} @strong{package}: a "
"package should not calling @R{} internals which makes use of the stack-"
"checking mechanism on a secondary thread."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13675
msgid ""
"All Windows interfaces to @R{} call entry points in the DLL @file{R.dll}, "
"directly or indirectly.  Simpler applications may find it easier to use the "
"indirect route @emph{via} @acronym{(D)COM}."
msgstr ""

#
#. type: node
#: R-exts.texi:13680
#: R-exts.texi:13682
#: R-exts.texi:13683
#: R-exts.texi:13713
#, no-wrap
msgid "Using (D)COM"
msgstr ""

#
#. type: node
#: R-exts.texi:13680
#: R-exts.texi:13682
#: R-exts.texi:13713
#: R-exts.texi:13714
#: R-exts.texi:13918
#, no-wrap
msgid "Calling R.dll directly"
msgstr ""

#
#. type: subsection
#: R-exts.texi:13680
#: R-exts.texi:13713
#: R-exts.texi:13918
#: R-exts.texi:13919
#, no-wrap
msgid "Finding R_HOME"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13693
msgid ""
"@acronym{(D)COM} is a standard Windows mechanism used for communication "
"between Windows applications.  One application (here @R{}) is run as COM "
"server which offers services to clients, here the front-end calling "
"application.  The services are described in a `Type Library' and are (more "
"or less) language-independent, so the calling application can be written in "
"C or C++ or Visual Basic or Perl or Python and so on.  The `D' in (D)COM "
"refers to `distributed', as the client and server can be running on "
"different machines."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13697
msgid ""
"The basic @R{} distribution is not a (D)COM server, but two addons are "
"currently available that interface directly with @R{} and provide a (D)COM "
"server:"
msgstr ""

#
#. type: itemize
#: R-exts.texi:13704
msgid ""
"There is a (D)COM server called @code{StatConnector} written by Thomas Baier "
"available @emph{via} @uref{http://sunsite.univie.ac.at/rcom/}, which works "
"with @R{} packages to support transfer of data to and from @R{} and remote "
"execution of @R{} commands, as well as embedding of an @R{} graphics window."
msgstr ""

#
#. type: itemize
#: R-exts.texi:13706
msgid "Recent versions have usage restrictions."
msgstr ""

#
#. type: itemize
#: R-exts.texi:13712
msgid ""
"Another (D)COM server, @code{RDCOMServer}, is available from @uref{http://"
"www.omegahat.org/}.  Its philosophy is discussed in @uref{http://www."
"omegahat.org/@/RDCOMServer/@/Docs/@/Paradigm.html} and is very different "
"from the purpose of this section."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13719
msgid ""
"The @code{R} DLL is mainly written in C and has @code{_cdecl} entry points.  "
"Calling it directly will be tricky except from C code (or C++ with a little "
"care)."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13721
msgid "There is a version of the Unix-alike interface calling"
msgstr ""

#
#. type: example
#: R-exts.texi:13725
#, no-wrap
msgid ""
"int Rf_initEmbeddedR(int ac, char **av);\n"
"void Rf_endEmbeddedR(int fatal);\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13732
msgid ""
"which is an entry point in @file{R.dll}.  Examples of its use (and a "
"suitable @file{Makefile.win}) can be found in the @file{tests/Embedding} "
"directory of the sources.  You may need to ensure that @file{@var{R_HOME}/"
"bin} is in your @env{PATH} so the @R{} DLLs are found."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13736
msgid ""
"Examples of calling @file{R.dll} directly are provided in the directory "
"@file{src/@/gnuwin32/@/front-ends}, including a simple command-line front "
"end @file{rtest.c} whose code is"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:13747
#, no-wrap
msgid ""
"#define Win32\n"
"#include <windows.h>\n"
"#include <stdio.h>\n"
"#include <Rversion.h>\n"
"#define LibExtern __declspec(dllimport) extern\n"
"#include <Rembedded.h>\n"
"#include <R_ext/RStartup.h>\n"
"/* for askok and askyesnocancel */\n"
"#include <graphapp.h>\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:13750
#, no-wrap
msgid ""
"/* for signal-handling code */\n"
"#include <psignal.h>\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:13752
#, no-wrap
msgid ""
"/* simple input, simple output */\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:13763
#, no-wrap
msgid ""
"/* This version blocks all events: a real one needs to call ProcessEvents\n"
"   frequently. See rterm.c and ../system.c for one approach using\n"
"   a separate thread for input.\n"
"*/\n"
"int myReadConsole(const char *prompt, char *buf, int len, int addtohistory)\n"
"@{\n"
"    fputs(prompt, stdout);\n"
"    fflush(stdout);\n"
"    if(fgets(buf, len, stdin)) return 1; else return 0;\n"
"@}\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:13768
#, no-wrap
msgid ""
"void myWriteConsole(const char *buf, int len)\n"
"@{\n"
"    printf(\"%s\", buf);\n"
"@}\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:13773
#, no-wrap
msgid ""
"void myCallBack(void)\n"
"@{\n"
"    /* called during i/o, eval, graphics in ProcessEvents */\n"
"@}\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:13778
#, no-wrap
msgid ""
"void myBusy(int which)\n"
"@{\n"
"    /* set a busy cursor ... if which = 1, unset if which = 0 */\n"
"@}\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:13780
#, no-wrap
msgid ""
"static void my_onintr(int sig) @{ UserBreak = 1; @}\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:13786
#, no-wrap
msgid ""
"int main (int argc, char **argv)\n"
"@{\n"
"    structRstart rp;\n"
"    Rstart Rp = &rp;\n"
"    char Rversion[25], *RHome;\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:13792
#, no-wrap
msgid ""
"    sprintf(Rversion, \"%s.%s\", R_MAJOR, R_MINOR);\n"
"    if(strcmp(getDLLVersion(), Rversion) != 0) @{\n"
"        fprintf(stderr, \"Error: R.DLL version does not match\\n\");\n"
"        exit(1);\n"
"    @}\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:13808
#, no-wrap
msgid ""
"    R_setStartTime();\n"
"    R_DefParams(Rp);\n"
"    if((RHome = get_R_HOME()) == NULL) @{\n"
"        fprintf(stderr, \"R_HOME must be set in the environment or Registry\\n\");\n"
"        exit(1);\n"
"    @}\n"
"    Rp->rhome = RHome;\n"
"    Rp->home = getRUser();\n"
"    Rp->CharacterMode = LinkDLL;\n"
"    Rp->ReadConsole = myReadConsole;\n"
"    Rp->WriteConsole = myWriteConsole;\n"
"    Rp->CallBack = myCallBack;\n"
"    Rp->ShowMessage = askok;\n"
"    Rp->YesNoCancel = askyesnocancel;\n"
"    Rp->Busy = myBusy;\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:13815
#, no-wrap
msgid ""
"    Rp->R_Quiet = TRUE;        /* Default is FALSE */\n"
"    Rp->R_Interactive = FALSE; /* Default is TRUE */\n"
"    Rp->RestoreAction = SA_RESTORE;\n"
"    Rp->SaveAction = SA_NOSAVE;\n"
"    R_SetParams(Rp);\n"
"    R_set_command_line_arguments(argc, argv);\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:13817
#, no-wrap
msgid ""
"    FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));\n"
"\n"
msgstr ""

#
#. type: smallexample
#: R-exts.texi:13834
#, no-wrap
msgid ""
"    signal(SIGBREAK, my_onintr);\n"
"    GA_initapp(0, 0);\n"
"    readconsolecfg();\n"
"    setup_Rmainloop();\n"
"#ifdef SIMPLE_CASE\n"
"    run_Rmainloop();\n"
"#else\n"
"    R_ReplDLLinit();\n"
"    while(R_ReplDLLdo1() > 0) @{\n"
"/* add user actions here if desired */\n"
"    @}\n"
"/* only get here on EOF (not q()) */\n"
"#endif\n"
"    Rf_endEmbeddedR(0);\n"
"    return 0;\n"
"@}\n"
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13837
msgid "The ideas are"
msgstr ""

#
#. type: itemize
#: R-exts.texi:13842
msgid ""
"Check that the front-end and the linked @file{R.dll} match -- other front-"
"ends may allow a looser match."
msgstr ""

#
#. type: itemize
#: R-exts.texi:13850
msgid ""
"Find and set the @R{} home directory and the user's home directory.  The "
"former may be available from the Windows Registry: it will be in "
"@code{HKEY_LOCAL_MACHINE\\Software\\R-core\\R\\InstallPath} from an "
"administrative install and @code{HKEY_CURRENT_USER\\Software\\R-core\\R"
"\\InstallPath} otherwise, if selected during installation (as it is by "
"default)."
msgstr ""

#
#. type: itemize
#: R-exts.texi:13855
msgid ""
"Define startup conditions and callbacks @emph{via} the @code{Rstart} "
"structure.  @code{R_DefParams} sets the defaults, and @code{R_SetParams} "
"sets updated values."
msgstr ""

#
#. type: itemize
#: R-exts.texi:13860
msgid ""
"Record the command-line arguments used by "
"@code{R_set_command_line_arguments} for use by the @R{} function "
"@code{commandArgs()}."
msgstr ""

#
#. type: itemize
#: R-exts.texi:13863
msgid "Set up the signal handler and the basic user interface."
msgstr ""

#
#. type: itemize
#: R-exts.texi:13866
msgid "Run the main @R{} loop, possibly with our actions intermeshed."
msgstr ""

#
#. type: itemize
#: R-exts.texi:13869
msgid "Arrange to clean up."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13877
msgid ""
"An underlying theme is the need to keep the GUI `alive', and this has not "
"been done in this example.  The @R{} callback @code{R_ProcessEvents} needs "
"to be called frequently to ensure that Windows events in @R{} windows are "
"handled expeditiously.  Conversely, @R{} needs to allow the GUI code (which "
"is running in the same process) to update itself as needed -- two ways are "
"provided to allow this:"
msgstr ""

#
#. type: itemize
#: R-exts.texi:13883
msgid ""
"@code{R_ProcessEvents} calls the callback registered by @code{Rp-"
">callback}.  A version of this is used to run package Tcl/Tk for @pkg{tcltk} "
"under Windows, for the code is"
msgstr ""

#
#. type: example
#: R-exts.texi:13892
#, no-wrap
msgid ""
"void R_ProcessEvents(void)\n"
"@{\n"
"    while (peekevent()) doevent(); /* Windows events for GraphApp */\n"
"    if (UserBreak) @{ UserBreak = FALSE; onintr(); @}\n"
"    R_CallBackHook();\n"
"    if(R_tcldo) R_tcldo();\n"
"@}\n"
msgstr ""

#
#. type: itemize
#: R-exts.texi:13898
msgid ""
"The mainloop can be split up to allow the calling application to take some "
"action after each line of input has been dealt with: see the alternative "
"code below @code{#ifdef SIMPLE_CASE}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13905
msgid ""
"It may be that no @R{} GraphApp windows need to be considered, although "
"these include pagers, the @code{windows()} graphics device, the @R{} data "
"and script editors and various popups such as @code{choose.file()} and "
"@code{select.list()}.  It would be possible to replace all of these, but it "
"seems easier to allow GraphApp to handle most of them."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13911
msgid ""
"It is possible to run @R{} in a GUI in a single thread (as @file{RGui.exe} "
"shows) but it will normally be easier@footnote{An attempt to use only "
"threads in the late 1990s failed to work correctly under Windows 95, the "
"predominant version of Windows at that time.} to use multiple threads."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13916
msgid ""
"Note that @R{}'s own front ends use a stack size of 10Mb, whereas MinGW "
"executables default to 2Mb, and Visual C++ ones to 1Mb.  The latter stack "
"sizes are too small for a number of @R{} applications, so general-purpose "
"front-ends should use a larger stack size."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13927
msgid ""
"Both applications which embed @R{} and those which use a @code{system} call "
"to invoke @R{} (as @command{Rscript.exe}, @command{Rterm.exe} or @command{R."
"exe}) need to be able to find the @R{} @file{bin} directory.  The simplest "
"way to do so is the ask the user to set an environment variable @env{R_HOME} "
"and use that, but naive users may be flummoxed as to how to do so or what "
"value to use."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13934
msgid ""
"The @R{} for Windows installers have for a long time allowed the value of "
"@code{R_HOME} to be recorded in the Windows Registry: this is optional but "
"selected by default.  @emph{Where} it is recorded has changed over the years "
"to allow for multiple versions of @R{} to be installed at once, and to allow "
"32- and 64-bit versions of @R{} to be installed on the same machine."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13946
msgid ""
"The basic Registry location is @code{Software\\R-core\\R}.  For an "
"administrative install this is under @code{HKEY_LOCAL_MACHINE} and on a 64-"
"bit OS @code{HKEY_LOCAL_MACHINE\\Software\\R-core\\R} is by default "
"redirected for a 32-bit application, so a 32-bit application will see the "
"information for the last 32-bit install, and a 64-bit application that for "
"the last 64-bit install.  For a personal install, the information is under "
"@code{HKEY_CURRENT_USER\\Software\\R-core\\R} which is seen by both 32-bit "
"and 64-bit applications and so records the last install of either "
"architecture.  To circumvent this, there are locations @code{Software\\R-core"
"\\R32} and @code{Software\\R-core\\R64} which always refer to one "
"architecture."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13954
msgid ""
"When @R{} is installed and recording is not disabled then two string values "
"are written at that location for keys @code{InstallPath} and @code{Current "
"Version}, and these keys are removed when @R{} is uninstalled.  To allow "
"information about other installed versions to be retained, there is also a "
"key named something like @code{3.0.0} or @code{3.0.0 patched} or @code{3.1.0 "
"Pre-release} with a value for @code{InstallPath}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13957
msgid ""
"So a comprehensive algorithm to search for @code{R_HOME} is something like"
msgstr ""

#
#. type: itemize
#: R-exts.texi:13965
msgid ""
"Decide which of personal or administrative installs should have precedence.  "
"There are arguments both ways: we find that with roaming profiles that "
"@code{HKEY_CURRENT_USER\\Software} often gets reverted to an earlier "
"version.  Do the following for one or both of @code{HKEY_CURRENT_USER} and "
"@code{HKEY_LOCAL_MACHINE}."
msgstr ""

#
#. type: itemize
#: R-exts.texi:13970
msgid ""
"If the desired architecture is known, look in @code{Software\\R-core\\R32} "
"or @code{Software\\R-core\\R64}, and if that does not exist or the "
"architecture is immaterial, in @code{Software\\R-core\\R}."
msgstr ""

#
#. type: itemize
#: R-exts.texi:13977
msgid ""
"If key @code{InstallPath} exists then this is @code{R_HOME} (recorded using "
"backslashes).  If it does not, look for version-specific keys like "
"@code{2.11.0 alpha}, pick the latest (which is of itself a complicated "
"algorithm as @code{2.11.0 patched > 2.11.0 > 2.11.0 alpha > 2.8.1}) and use "
"its value for @code{InstallPath}."
msgstr ""

#
#. type: Plain text
#: R-exts.texi:13983
msgid ""
"Prior to @R{} 2.12.0 @file{R.dll} and the various front-end executables were "
"in @file{R_HOME\\bin}, but they are now in @file{R_HOME\\bin\\i386} or "
"@file{R_HOME\\bin\\x64}.  So you may need to arrange to look first in the "
"architecture-specific subdirectory and then in @file{R_HOME\\bin}."
msgstr ""

R-Forge@R-project.org
ViewVC Help
Powered by ViewVC 1.0.0  
Thanks to:
Vienna University of Economics and Business University of Wisconsin - Madison Powered By FusionForge