[R] adding FORTRAN code to a package

Erin Hodgess erinm.hodgess at gmail.com
Tue Aug 3 14:35:31 CEST 2010


Thank you!

Now, here is the code for the FORTRAN subroutine:
      subroutine cov1(n1,na,x,z,yy,ac)
      integer n1,na
      real x(n1),ac(na+1),z,yy
      do 5 j=1,(na+1)
         do 10 i=1,(n1-j)
            if(j.eq.1)ac(j)=yy
               if(j.ne.1)ac(j)=ac(j)+(x(i)-z)*(x(i+j-1)-z)

 10            continue
 5             continue
      do 15 j=1,(na+1)
         ac(j)=ac(j)/(n1-1)
 15      continue
         end

Here is the Rcmd stuff:
c:\R\R-2.11.1\bin>Rcmd check RcmdrPlugin.push
Rcmd check RcmdrPlugin.push
* checking for working pdflatex ... OK
* using log directory 'c:/R/R-2.11.1/bin/RcmdrPlugin.push.Rcheck'
* using R version 2.11.1 (2010-05-31)
* using session charset: ISO8859-1
* checking for file 'RcmdrPlugin.push/DESCRIPTION' ... OK
* checking extension type ... Package
* this is package 'RcmdrPlugin.push' version '0.1.0'
* checking package dependencies ... OK
* checking if this is a source package ... OK
* checking for executable files ... OK
* checking whether package 'RcmdrPlugin.push' can be installed ... OK
* checking package directory ... OK
* checking for portable file names ... OK
* checking DESCRIPTION meta-information ... OK
* checking top-level files ... OK
* checking index information ... OK
* checking package subdirectories ... OK
* checking R files for non-ASCII characters ... OK
* checking R files for syntax errors ... OK
* checking whether the package can be loaded ... OK
* checking whether the package can be loaded with stated dependencies ... OK
* checking whether the package can be unloaded cleanly ... OK
* checking for unstated dependencies in R code ... OK
* checking S3 generic/method consistency ... OK
* checking replacement functions ... OK
* checking foreign function calls ... OK
* checking R code for possible problems ... NOTE
acfMod: no visible binding for global variable 'top'
acfMod : onOK: no visible binding for global variable 'top'
acfMod: no visible binding for global variable 'buttonsFrame'
aggConv: no visible binding for global variable 'top'
aggConv : onOK: no visible binding for global variable 'newDataSet'
aggConv : onOK: no visible global function definition for 'newDataSet'
aggConv : onOK: no visible binding for global variable
  'alternativeVariable'
aggConv : onOK: no visible binding for global variable
  'alternativeaVariable'
aggConv : onOK: no visible binding for global variable 'top'
aggConv: no visible binding for global variable 'alternativeFrame'
aggConv: no visible binding for global variable 'alternativeaFrame'
aggConv: no visible binding for global variable 'buttonsFrame'
Arima: no visible binding for global variable 'top'
Arima : onOK: no visible global function definition for 'newDataSet'
Arima: no visible binding for global variable 'buttonsFrame'
ArimaMod: no visible binding for global variable 'top'
ArimaMod : onOK: no visible binding for global variable
  'alternativeVariable'
ArimaMod : onOK: no visible binding for global variable 'pd2'
ArimaMod : onOK: no visible binding for global variable 'top'
ArimaMod: no visible binding for global variable 'alternativeFrame'
ArimaMod: no visible binding for global variable 'buttonsFrame'
bcMod: no visible binding for global variable 'top'
bcMod : onOK: no visible binding for global variable 'top'
bcMod: no visible binding for global variable 'buttonsFrame'
bigfore: no visible binding for global variable 'foot'
bigfore1: no visible binding for global variable 'foot'
decomaMod: no visible binding for global variable 'top'
decomaMod : onOK: no visible binding for global variable 'newDataSet'
decomaMod : onOK: no visible global function definition for
  'newDataSet'
decomaMod : onOK: no visible binding for global variable 'top'
decomaMod: no visible binding for global variable 'buttonsFrame'
decomMod: no visible binding for global variable 'top'
decomMod : onOK: no visible binding for global variable 'newDataSet'
decomMod : onOK: no visible global function definition for 'newDataSet'
decomMod : onOK: no visible binding for global variable 'top'
decomMod: no visible binding for global variable 'buttonsFrame'
decomModcom: no visible binding for global variable 'top'
decomModcom : onOK: no visible binding for global variable 'newDataSet'
decomModcom : onOK: no visible global function definition for
  'newDataSet'
decomModcom : onOK: no visible binding for global variable '.One'
decomModcom : onOK: no visible binding for global variable '.Two'
decomModcom : onOK: no visible binding for global variable 'top'
decomModcom: no visible binding for global variable 'buttonsFrame'
editTSframe: no visible binding for global variable 'top'
editTSframe : onOK: no visible binding for global variable 'newDataSet'
editTSframe : onOK: no visible global function definition for
  'newDataSet'
editTSframe: no visible binding for global variable 'buttonsFrame'
ewMod: no visible binding for global variable 'top'
ewMod : onOK: no visible binding for global variable 'top'
ewMod: no visible binding for global variable 'buttonsFrame'
forearMod: no visible binding for global variable 'top'
forearMod : onOK: no visible binding for global variable 'top'
forearMod: no visible binding for global variable 'buttonsFrame'
forebMod: no visible binding for global variable 'top'
forebMod : onOK: no visible binding for global variable 'newDataSet'
forebMod : onOK: no visible global function definition for 'newDataSet'
forebMod: no visible binding for global variable 'buttonsFrame'
foreMod: no visible binding for global variable 'top'
foreMod: no visible binding for global variable 'buttonsFrame'
garchMod: no visible binding for global variable 'top'
garchMod : onOK: no visible binding for global variable 'top'
garchMod: no visible binding for global variable 'buttonsFrame'
HoltWintersExpoMod: no visible binding for global variable 'top'
HoltWintersExpoMod : onOK: no visible binding for global variable 'top'
HoltWintersExpoMod: no visible binding for global variable
  'buttonsFrame'
HoltWintersMod: no visible binding for global variable 'top'
HoltWintersMod : onOK: no visible binding for global variable
  'alternativeVariable'
HoltWintersMod : onOK: no visible binding for global variable 'top'
HoltWintersMod: no visible binding for global variable
  'alternativeFrame'
HoltWintersMod: no visible binding for global variable 'buttonsFrame'
HoltWintersNonMod: no visible binding for global variable 'top'
HoltWintersNonMod : onOK: no visible binding for global variable 'top'
HoltWintersNonMod: no visible binding for global variable
  'buttonsFrame'
hwexpoMod: no visible binding for global variable 'top'
hwexpoMod : onOK: no visible binding for global variable 'top'
hwexpoMod: no visible binding for global variable 'buttonsFrame'
hwnonseasMod: no visible binding for global variable 'top'
hwnonseasMod : onOK: no visible binding for global variable 'top'
hwnonseasMod: no visible binding for global variable 'buttonsFrame'
hwseasMod: no visible binding for global variable 'top'
hwseasMod : onOK: no visible binding for global variable 'top'
hwseasMod: no visible binding for global variable 'buttonsFrame'
illSelect : onOK: no visible binding for global variable
  'alternativeVariable'
illSelect: no visible binding for global variable 'top'
illSelect: no visible binding for global variable 'alternativeFrame'
illSelect: no visible binding for global variable 'buttonsFrame'
newHistPrice: no visible binding for global variable 'top'
newHistPrice : onOK: no visible binding for global variable
  'newDataSet'
newHistPrice : onOK: no visible global function definition for
  'newDataSet'
newHistPrice : onOK: no visible binding for global variable
  'alternativeVariable'
newHistPrice: no visible binding for global variable 'alternativeFrame'
newHistPrice: no visible binding for global variable 'buttonsFrame'
opMod: no visible binding for global variable 'top'
opMod : onOK: no visible binding for global variable 'top'
opMod: no visible binding for global variable 'buttonsFrame'
pacfMod: no visible binding for global variable 'top'
pacfMod : onOK: no visible binding for global variable 'top'
pacfMod: no visible binding for global variable 'buttonsFrame'
predAllModel: no visible binding for global variable 'top'
predAllModel : onOK: no visible binding for global variable
  'newDataSet'
predAllModel : onOK: no visible global function definition for
  'newDataSet'
predAllModel : onOK: no visible binding for global variable 'top'
predAllModel: no visible binding for global variable 'buttonsFrame'
predARModel: no visible binding for global variable 'top'
predARModel : onOK: no visible binding for global variable 'top'
predARModel: no visible binding for global variable 'buttonsFrame'
runbulk: no visible binding for global variable 'top'
runbulk : onOK: no visible binding for global variable 'top'
runbulk: no visible binding for global variable 'buttonsFrame'
runbulkg: no visible binding for global variable 'top'
runbulkg : onOK: no visible binding for global variable 'top'
runbulkg: no visible binding for global variable 'buttonsFrame'
selectActiveARModel: no visible binding for global variable 'top'
selectActiveARModel: no visible binding for global variable
  'buttonsFrame'
specMod: no visible binding for global variable 'top'
specMod : onOK: no visible binding for global variable 'top'
specMod: no visible binding for global variable 'buttonsFrame'
subewMod: no visible binding for global variable 'top'
subewMod : onOK: no visible binding for global variable 'top'
subewMod: no visible binding for global variable 'buttonsFrame'
subMod: no visible binding for global variable 'top'
subMod : onOK: no visible binding for global variable 'top'
subMod: no visible binding for global variable 'buttonsFrame'
tsConv: no visible binding for global variable 'top'
tsConv : onOK: no visible binding for global variable 'top'
tsConv: no visible binding for global variable 'buttonsFrame'
* checking Rd files ... OK
* checking Rd metadata ... OK
* checking Rd cross-references ... OK
* checking for missing documentation entries ... WARNING
Undocumented code objects:
  bigfore bigfore1 eplot3 ewMod forearMod illSelect subewMod
All user-level objects in a package should have documentation entries.
See the chapter 'Writing R documentation files' in manual 'Writing R
Extensions'.
* checking for code/documentation mismatches ... OK
* checking Rd \usage sections ... OK
* checking Rd contents ... OK
* checking data for non-ASCII characters ... OK
* checking line endings in C/C++/Fortran sources/headers ... WARNING
Found the following sources/headers with CR or CRLF line endings:
  src/cov1.f
Some Unix compilers require LF line endings.
* checking line endings in Makefiles ... OK
* checking for portable use of $BLAS_LIBS ... OK
* checking examples ... NONE
* checking PDF version of manual ... OK

WARNING: There were 2 warnings, see
  c:/R/R-2.11.1/bin/RcmdrPlugin.push.Rcheck/00check.log
for details


c:\R\R-2.11.1\bin>Rcmd build RcmdrPlugin.push
Rcmd build RcmdrPlugin.push
* checking for file 'RcmdrPlugin.push/DESCRIPTION' ... OK
* preparing 'RcmdrPlugin.push':
* checking DESCRIPTION meta-information ... OK
* cleaning src
* checking whether 'INDEX' is up-to-date ... NO
* use '--force' to overwrite the existing 'INDEX'
* removing junk files
* checking for LF line-endings in source and make files
    file 'RcmdrPlugin.push/src/cov1.f' had non-LF line endings
* checking for empty or unneeded directories
* building 'RcmdrPlugin.push_0.1.0.tar.gz'


c:\R\R-2.11.1\bin>Rcmd INSTALL RcmdrPlugin.push_0.1.0.tar.gz
Rcmd INSTALL RcmdrPlugin.push_0.1.0.tar.gz
* installing to library 'c:/R/R-2.11.1/library'
* installing *source* package 'RcmdrPlugin.push' ...
** libs
  making DLL ...
gfortran     -O3  -c cov1.f -o cov1.o
gcc -shared -s -static-libgcc -o RcmdrPlugin.push.dll tmp.def cov1.o
-lgfortran -Lc:/R/R-2.11.1/bin -lR
installing to c:/R/R-2.11.1/library/RcmdrPlugin.push/libs
  ... done
** R
** data
** inst
** preparing package for lazy loading
Loading required package: tcltk
Loading Tcl/Tk interface ... done
Loading required package: car
Loading required package: MASS
Loading required package: nnet
Loading required package: leaps
Loading required package: survival
Loading required package: splines
The Commander GUI is launched only in interactive sessions

Attaching package: 'Rcmdr'

The following object(s) are masked from 'package:tcltk':

    tclvalue

Loading required package: quadprog
Loading required package: zoo
Package 'qcc', version 2.0.1
Type 'citation("qcc")' for citing this R package in publications.

Attaching package: 'qcc'

The following object(s) are masked from 'package:TeachingDemos':

    limits.g, sd.g, stats.g

Loading required package: lattice
Loading required package: yaImpute
stl2 1.0 loaded
** help
*** installing help indices
** building package indices ...
** testing if installed package can be loaded

* DONE (RcmdrPlugin.push)

c:\R\R-2.11.1\bin>

But here is what happens when I try to run:

> bigfore1(x=x.TotalILI.d$zoo)
begin
Error in .Fortran("cov1.o", n1 = as.integer(n1), na = as.integer(na),  :
  Fortran symbol name "cov1.o" not in DLL for package "RcmdrPlugin.push"
>

What am I missing, please?
Should I have a statement in the .First.lib section, please?

Thanks,
Erin





2010/8/3 Uwe Ligges <ligges at statistik.tu-dortmund.de>:
> I assume you will need
>
> .Fortran("cov1", ......, PACKAGE="RcmdrPlugin.push")
>
> if the fortran code is in your package.
>
> Best,
> Uwe Ligges
>
>
> On 03.08.2010 05:54, Erin Hodgess wrote:
>>
>> Dear R People:
>>
>> Hello!
>>
>> I'm putting together another RcmdrPlugin package and need to add a
>> FORTRAN subroutine to speed things up a bit.
>>
>> I've never added compiled code to a package.
>>
>> Anyhow, I put my code into a /src directory.
>>
>> Here are the statements:
>> * using log directory 'c:/R/R-2.11.1/bin/RcmdrPlugin.push.Rcheck'
>> * using R version 2.11.1 (2010-05-31)
>> * using session charset: ISO8859-1
>> * checking for file 'RcmdrPlugin.push/DESCRIPTION' ... OK
>> * checking extension type ... Package
>> * this is package 'RcmdrPlugin.push' version '0.1.0'
>> * checking package dependencies ... OK
>> * checking if this is a source package ... OK
>> * checking for executable files ... OK
>> * checking whether package 'RcmdrPlugin.push' can be installed ... OK
>> * checking package directory ... OK
>> * checking for portable file names ... OK
>> * checking DESCRIPTION meta-information ... OK
>> * checking top-level files ... OK
>> * checking index information ... OK
>> * checking package subdirectories ... OK
>> * checking R files for non-ASCII characters ... OK
>> * checking R files for syntax errors ... OK
>> * checking whether the package can be loaded ... OK
>> * checking whether the package can be loaded with stated dependencies ...
>> OK
>> * checking whether the package can be unloaded cleanly ... OK
>> * checking for unstated dependencies in R code ... OK
>> * checking S3 generic/method consistency ... OK
>> * checking replacement functions ... OK
>> * checking foreign function calls ... WARNING
>> Foreign function calls without 'PACKAGE' argument:
>> .Fortran("cov1", ...)
>> See the chapter 'System and foreign language interfaces' of the 'Writing R
>> Extensions' manual.
>> * checking R code for possible problems ... NOTE
>> acfMod: no visible binding for global variable 'top'
>> acfMod : onOK: no visible binding for global variable 'top'
>> acfMod: no visible binding for global variable 'buttonsFrame'
>> aggConv: no visible binding for global variable 'top'
>> aggConv : onOK: no visible binding for global variable 'newDataSet'
>> aggConv : onOK: no visible global function definition for 'newDataSet'
>> aggConv : onOK: no visible binding for global variable
>>   'alternativeVariable'
>> aggConv : onOK: no visible binding for global variable
>>   'alternativeaVariable'
>> aggConv : onOK: no visible binding for global variable 'top'
>> aggConv: no visible binding for global variable 'alternativeFrame'
>> aggConv: no visible binding for global variable 'alternativeaFrame'
>> aggConv: no visible binding for global variable 'buttonsFrame'
>> Arima: no visible binding for global variable 'top'
>> Arima : onOK: no visible global function definition for 'newDataSet'
>> Arima: no visible binding for global variable 'buttonsFrame'
>> ArimaMod: no visible binding for global variable 'top'
>> ArimaMod : onOK: no visible binding for global variable
>>   'alternativeVariable'
>> ArimaMod : onOK: no visible binding for global variable 'pd2'
>> ArimaMod : onOK: no visible binding for global variable 'top'
>> ArimaMod: no visible binding for global variable 'alternativeFrame'
>> ArimaMod: no visible binding for global variable 'buttonsFrame'
>> bcMod: no visible binding for global variable 'top'
>> bcMod : onOK: no visible binding for global variable 'top'
>> bcMod: no visible binding for global variable 'buttonsFrame'
>> bigfore: no visible binding for global variable 'foot'
>> bigfore1: no visible binding for global variable 'foot'
>> decomaMod: no visible binding for global variable 'top'
>> decomaMod : onOK: no visible binding for global variable 'newDataSet'
>> decomaMod : onOK: no visible global function definition for
>>   'newDataSet'
>> decomaMod : onOK: no visible binding for global variable 'top'
>> decomaMod: no visible binding for global variable 'buttonsFrame'
>> decomMod: no visible binding for global variable 'top'
>> decomMod : onOK: no visible binding for global variable 'newDataSet'
>> decomMod : onOK: no visible global function definition for 'newDataSet'
>> decomMod : onOK: no visible binding for global variable 'top'
>> decomMod: no visible binding for global variable 'buttonsFrame'
>> decomModcom: no visible binding for global variable 'top'
>> decomModcom : onOK: no visible binding for global variable 'newDataSet'
>> decomModcom : onOK: no visible global function definition for
>>   'newDataSet'
>> decomModcom : onOK: no visible binding for global variable '.One'
>> decomModcom : onOK: no visible binding for global variable '.Two'
>> decomModcom : onOK: no visible binding for global variable 'top'
>> decomModcom: no visible binding for global variable 'buttonsFrame'
>> editTSframe: no visible binding for global variable 'top'
>> editTSframe : onOK: no visible binding for global variable 'newDataSet'
>> editTSframe : onOK: no visible global function definition for
>>   'newDataSet'
>> editTSframe: no visible binding for global variable 'buttonsFrame'
>> ewMod: no visible binding for global variable 'top'
>> ewMod : onOK: no visible binding for global variable 'top'
>> ewMod: no visible binding for global variable 'buttonsFrame'
>> forearMod: no visible binding for global variable 'top'
>> forearMod : onOK: no visible binding for global variable 'top'
>> forearMod: no visible binding for global variable 'buttonsFrame'
>> forebMod: no visible binding for global variable 'top'
>> forebMod : onOK: no visible binding for global variable 'newDataSet'
>> forebMod : onOK: no visible global function definition for 'newDataSet'
>> forebMod: no visible binding for global variable 'buttonsFrame'
>> foreMod: no visible binding for global variable 'top'
>> foreMod: no visible binding for global variable 'buttonsFrame'
>> garchMod: no visible binding for global variable 'top'
>> garchMod : onOK: no visible binding for global variable 'top'
>> garchMod: no visible binding for global variable 'buttonsFrame'
>> HoltWintersExpoMod: no visible binding for global variable 'top'
>> HoltWintersExpoMod : onOK: no visible binding for global variable 'top'
>> HoltWintersExpoMod: no visible binding for global variable
>>   'buttonsFrame'
>> HoltWintersMod: no visible binding for global variable 'top'
>> HoltWintersMod : onOK: no visible binding for global variable
>>   'alternativeVariable'
>> HoltWintersMod : onOK: no visible binding for global variable 'top'
>> HoltWintersMod: no visible binding for global variable
>>   'alternativeFrame'
>> HoltWintersMod: no visible binding for global variable 'buttonsFrame'
>> HoltWintersNonMod: no visible binding for global variable 'top'
>> HoltWintersNonMod : onOK: no visible binding for global variable 'top'
>> HoltWintersNonMod: no visible binding for global variable
>>   'buttonsFrame'
>> hwexpoMod: no visible binding for global variable 'top'
>> hwexpoMod : onOK: no visible binding for global variable 'top'
>> hwexpoMod: no visible binding for global variable 'buttonsFrame'
>> hwnonseasMod: no visible binding for global variable 'top'
>> hwnonseasMod : onOK: no visible binding for global variable 'top'
>> hwnonseasMod: no visible binding for global variable 'buttonsFrame'
>> hwseasMod: no visible binding for global variable 'top'
>> hwseasMod : onOK: no visible binding for global variable 'top'
>> hwseasMod: no visible binding for global variable 'buttonsFrame'
>> illSelect : onOK: no visible binding for global variable
>>   'alternativeVariable'
>> illSelect: no visible binding for global variable 'top'
>> illSelect: no visible binding for global variable 'alternativeFrame'
>> illSelect: no visible binding for global variable 'buttonsFrame'
>> newHistPrice: no visible binding for global variable 'top'
>> newHistPrice : onOK: no visible binding for global variable
>>   'newDataSet'
>> newHistPrice : onOK: no visible global function definition for
>>   'newDataSet'
>> newHistPrice : onOK: no visible binding for global variable
>>   'alternativeVariable'
>> newHistPrice: no visible binding for global variable 'alternativeFrame'
>> newHistPrice: no visible binding for global variable 'buttonsFrame'
>> opMod: no visible binding for global variable 'top'
>> opMod : onOK: no visible binding for global variable 'top'
>> opMod: no visible binding for global variable 'buttonsFrame'
>> pacfMod: no visible binding for global variable 'top'
>> pacfMod : onOK: no visible binding for global variable 'top'
>> pacfMod: no visible binding for global variable 'buttonsFrame'
>> predAllModel: no visible binding for global variable 'top'
>> predAllModel : onOK: no visible binding for global variable
>>   'newDataSet'
>> predAllModel : onOK: no visible global function definition for
>>   'newDataSet'
>> predAllModel : onOK: no visible binding for global variable 'top'
>> predAllModel: no visible binding for global variable 'buttonsFrame'
>> predARModel: no visible binding for global variable 'top'
>> predARModel : onOK: no visible binding for global variable 'top'
>> predARModel: no visible binding for global variable 'buttonsFrame'
>> runbulk: no visible binding for global variable 'top'
>> runbulk : onOK: no visible binding for global variable 'top'
>> runbulk: no visible binding for global variable 'buttonsFrame'
>> runbulkg: no visible binding for global variable 'top'
>> runbulkg : onOK: no visible binding for global variable 'top'
>> runbulkg: no visible binding for global variable 'buttonsFrame'
>> selectActiveARModel: no visible binding for global variable 'top'
>> selectActiveARModel: no visible binding for global variable
>>   'buttonsFrame'
>> specMod: no visible binding for global variable 'top'
>> specMod : onOK: no visible binding for global variable 'top'
>> specMod: no visible binding for global variable 'buttonsFrame'
>> subewMod: no visible binding for global variable 'top'
>> subewMod : onOK: no visible binding for global variable 'top'
>> subewMod: no visible binding for global variable 'buttonsFrame'
>> subMod: no visible binding for global variable 'top'
>> subMod : onOK: no visible binding for global variable 'top'
>> subMod: no visible binding for global variable 'buttonsFrame'
>> tsConv: no visible binding for global variable 'top'
>> tsConv : onOK: no visible binding for global variable 'top'
>> tsConv: no visible binding for global variable 'buttonsFrame'
>> * checking Rd files ... OK
>> * checking Rd metadata ... OK
>> * checking Rd cross-references ... OK
>> * checking for missing documentation entries ... WARNING
>> Undocumented code objects:
>>   bigfore bigfore1 eplot3 ewMod forearMod illSelect subewMod
>> All user-level objects in a package should have documentation entries.
>> See the chapter 'Writing R documentation files' in manual 'Writing R
>> Extensions'.
>> * checking for code/documentation mismatches ... OK
>> * checking Rd \usage sections ... OK
>> * checking Rd contents ... OK
>> * checking data for non-ASCII characters ... OK
>> * checking line endings in C/C++/Fortran sources/headers ... WARNING
>> Found the following sources/headers with CR or CRLF line endings:
>>   src/cov1.f
>> Some Unix compilers require LF line endings.
>> * checking line endings in Makefiles ... OK
>> * checking for portable use of $BLAS_LIBS ... OK
>> * checking examples ... NONE
>> * checking PDF version of manual ... OK
>>
>>
>> I see that there is a problem dealing with the PACKAGE statement.
>>
>> Any help would be much appreciated.
>>
>> Thanks,
>> Erin
>>
>>
>



-- 
Erin Hodgess
Associate Professor
Department of Computer and Mathematical Sciences
University of Houston - Downtown
mailto: erinm.hodgess at gmail.com



More information about the R-help mailing list