home *** CD-ROM | disk | FTP | other *** search
/ vim.ftp.fu-berlin.de / 2015-02-03.vim.ftp.fu-berlin.de.tar / vim.ftp.fu-berlin.de / patches / 6.1.064 < prev    next >
Encoding:
Internet Message Format  |  2002-05-14  |  16.9 KB

  1. To: vim-dev@vim.org
  2. Subject: Patch 6.1.064
  3. Fcc: outbox
  4. From: Bram Moolenaar <Bram@moolenaar.net>
  5. MIME-Version: 1.0
  6. Content-Type: text/plain; charset=ISO-8859-1
  7. Content-Transfer-Encoding: 8bit
  8. ------------
  9.  
  10. Patch 6.1.064
  11. Problem:    The URLs that the netrw plugin recognized for ftp and rcp did not
  12.         conform to the standard method://[user@]host[:port]/path.
  13. Solution:   Use ftp://[user@]host[[:#]port]/path, which supports both the new
  14.         and the previous style.  Also added a bit of dav/cadaver support.
  15.         (Charles Campbell)
  16. Files:        runtime/plugin/netrw.vim
  17.  
  18.  
  19. *** ../vim61.063/runtime/plugin/netrw.vim    Fri Feb  8 16:50:03 2002
  20. --- runtime/plugin/netrw.vim    Tue May 14 21:40:49 2002
  21. ***************
  22. *** 1,13 ****
  23.   " netrw.vim: (global plugin) Handles file transfer across a network
  24. ! " Last Change:    Jan 4, 2002
  25.   " Maintainer:    Charles E. Campbell, Jr. PhD   <cec@NgrOyphSon.gPsfAc.nMasa.gov>
  26. ! " Version:    2.20
  27.   
  28.   " Credits:
  29.   "  Vim editor   by Bram Moolenaar (Thanks, Bram!)
  30.   "  rcp, ftp support by C Campbell <cec@NgrOyphSon.gPsfAc.nMasa.gov>
  31.   "  scp  support by raf            <raf@comdyn.com.au>
  32.   "  http support by Bram Moolenaar <bram@moolenaar.net>
  33.   "  inputsecret(), BufReadCmd, BufWriteCmd contributed by C Campbell
  34.   
  35.   " Debugging:
  36. --- 1,14 ----
  37.   " netrw.vim: (global plugin) Handles file transfer across a network
  38. ! " Last Change:    Apr 16, 2002
  39.   " Maintainer:    Charles E. Campbell, Jr. PhD   <cec@NgrOyphSon.gPsfAc.nMasa.gov>
  40. ! " Version:    22
  41.   
  42.   " Credits:
  43.   "  Vim editor   by Bram Moolenaar (Thanks, Bram!)
  44.   "  rcp, ftp support by C Campbell <cec@NgrOyphSon.gPsfAc.nMasa.gov>
  45.   "  scp  support by raf            <raf@comdyn.com.au>
  46.   "  http support by Bram Moolenaar <bram@moolenaar.net>
  47. + "  dav  support by C Campbell
  48.   "  inputsecret(), BufReadCmd, BufWriteCmd contributed by C Campbell
  49.   
  50.   " Debugging:
  51. ***************
  52. *** 32,54 ****
  53.   "      up the file.
  54.   
  55.   " Reading:
  56. ! " :Nread ?                give help
  57. ! " :Nread "machine:file"            uses rcp
  58. ! " :Nread "machine file"            uses ftp with <.netrc>
  59. ! " :Nread "machine id password file"    uses ftp
  60. ! " :Nread "ftp://machine[#port]/file"    uses ftp  (autodetects <.netrc>)
  61. ! " :Nread "http://[user@]machine/file"    uses http (wget)
  62. ! " :Nread "rcp://machine/file"        uses rcp
  63. ! " :Nread "scp://[user@]machine/file"    uses scp
  64.   
  65.   " Writing:
  66. ! " :Nwrite ?                give help
  67. ! " :Nwrite "machine:file"        uses rcp
  68. ! " :Nwrite "machine file"        uses ftp with <.netrc>
  69. ! " :Nwrite "machine id password file"    uses ftp
  70. ! " :Nwrite "ftp://machine[#port]/file"    uses ftp  (autodetects <.netrc>)
  71. ! " :Nwrite "rcp://machine/file"        uses rcp
  72. ! " :Nwrite "scp://[user@]machine/file"    uses scp
  73.   " http: not supported!
  74.   
  75.   " User And Password Changing:
  76. --- 33,57 ----
  77.   "      up the file.
  78.   
  79.   " Reading:
  80. ! " :Nread ?                    give help
  81. ! " :Nread "machine:file"                uses rcp
  82. ! " :Nread "machine file"                uses ftp   with <.netrc>
  83. ! " :Nread "machine id password file"        uses ftp
  84. ! " :Nread "ftp://[user@]machine[[:#]port]/file"    uses ftp   autodetects <.netrc>
  85. ! " :Nread "http://[user@]machine/file"        uses http  uses wget
  86. ! " :Nread "rcp://[user@]machine/file"        uses rcp
  87. ! " :Nread "scp://[user@]machine/file"        uses scp
  88. ! " :Nread "dav://machine[:port]/file"        uses cadaver
  89.   
  90.   " Writing:
  91. ! " :Nwrite ?                    give help
  92. ! " :Nwrite "machine:file"            uses rcp
  93. ! " :Nwrite "machine file"            uses ftp   with <.netrc>
  94. ! " :Nwrite "machine id password file"        uses ftp
  95. ! " :Nwrite "ftp://[user@]machine[[:#]port]/file"    uses ftp   autodetects <.netrc>
  96. ! " :Nwrite "rcp://[user@]machine/file"        uses rcp
  97. ! " :Nwrite "scp://[user@]machine/file"        uses scp
  98. ! " :Nwrite "dav://machine[:port]/file"        uses cadaver
  99.   " http: not supported!
  100.   
  101.   " User And Password Changing:
  102. ***************
  103. *** 111,126 ****
  104.    endif
  105.   endif
  106.   
  107. ! " Vimrc Support:
  108. ! " Auto-detection for ftp://*, rcp://*, scp://*, and http://*
  109.   " Should make file transfers across networks transparent.  Currently I haven't
  110.   " supported appends.  Hey, gotta leave something for <netrw.vim> version 3!
  111.   if version >= 600
  112.    augroup Network
  113.     au!
  114. !   au BufReadCmd        ftp://*,rcp://*,scp://*,http://* exe "Nread 0r " . expand("<afile>") | exe "doau BufReadPost " . expand("<afile>")
  115. !   au FileReadCmd    ftp://*,rcp://*,scp://*,http://* exe "Nread "     . expand("<afile>") | exe "doau BufReadPost " . expand("<afile>")
  116. !   au BufWriteCmd    ftp://*,rcp://*,scp://*         exe "Nwrite "     . expand("<afile>")
  117.    augroup END
  118.   endif
  119.   
  120. --- 114,129 ----
  121.    endif
  122.   endif
  123.   
  124. ! " Transparency Support:
  125. ! " Auto-detection for ftp://*, rcp://*, scp://*, http://*, and dav://*
  126.   " Should make file transfers across networks transparent.  Currently I haven't
  127.   " supported appends.  Hey, gotta leave something for <netrw.vim> version 3!
  128.   if version >= 600
  129.    augroup Network
  130.     au!
  131. !   au BufReadCmd        ftp://*,rcp://*,scp://*,http://*,dav://* exe "Nread 0r " . expand("<afile>") | exe "doau BufReadPost " . expand("<afile>")
  132. !   au FileReadCmd    ftp://*,rcp://*,scp://*,http://*,dav://* exe "Nread "     . expand("<afile>") | exe "doau BufReadPost " . expand("<afile>")
  133. !   au BufWriteCmd    ftp://*,rcp://*,scp://*,dav://*         exe "Nwrite "     . expand("<afile>")
  134.    augroup END
  135.   endif
  136.   
  137. ***************
  138. *** 172,184 ****
  139.      " Reconstruct Choice if choice starts with '"'
  140.      if match(choice,"?") == 0
  141.       echo "NetRead Usage:"
  142. !     echo ":Nread machine:file                  uses rcp"
  143. !     echo ':Nread "machine file"                uses ftp with <.netrc>'
  144. !     echo ':Nread "machine id password file"    uses ftp'
  145. !     echo ':Nread ftp://machine[#port]/file     uses ftp  (autodetects <.netrc>)'
  146. !     echo ":Nread http://[user@]machine/file    uses http (wget)"
  147. !     echo ":Nread rcp://machine/file            uses rcp"
  148. !     echo ":Nread scp://[user@]machine/file     uses scp"
  149.       break
  150.      elseif match(choice,"^\"") != -1
  151.   "    Decho "DBG: reconstructing choice"
  152. --- 175,188 ----
  153.      " Reconstruct Choice if choice starts with '"'
  154.      if match(choice,"?") == 0
  155.       echo "NetRead Usage:"
  156. !     echo ":Nread machine:path                      uses rcp"
  157. !     echo ':Nread "machine path"                    uses ftp   with <.netrc>'
  158. !     echo ':Nread "machine id password path"        uses ftp'
  159. !     echo ':Nread ftp://[user@]machine[:port]/path  uses ftp   autodetects <.netrc>'
  160. !     echo ":Nread http://[user@]machine/path        uses http  wget"
  161. !     echo ":Nread rcp://[user@]machine/path         uses rcp"
  162. !     echo ":Nread scp://[user@]machine/path         uses scp"
  163. !     echo ":Nread dav://machine[:port]/path         uses cadaver"
  164.       break
  165.      elseif match(choice,"^\"") != -1
  166.   "    Decho "DBG: reconstructing choice"
  167. ***************
  168. *** 291,302 ****
  169.     elseif     b:netrw_method  == 5    " read with http (wget)
  170.   "    Decho "DBG: read via http (method #5)"
  171.      if match(b:netrw_fname,"#") == -1
  172. !     exe "!wget http://" . g:netrw_machine . "/" . b:netrw_fname . " -O " . tmpfile
  173.       let result = s:NetGetFile(readcmd, tmpfile)
  174.      else
  175.       let netrw_html= substitute(b:netrw_fname,"#.*$","","")
  176.       let netrw_tag = substitute(b:netrw_fname,"^.*#","","")
  177. !     exe "!wget http://" . g:netrw_machine . "/" . netrw_html . " -O " . tmpfile
  178.       let result = s:NetGetFile(readcmd, tmpfile)
  179.       exe 'norm! 1G/<\s*a\s*name=\s*"'.netrw_tag.'"'
  180.      endif
  181. --- 295,306 ----
  182.     elseif     b:netrw_method  == 5    " read with http (wget)
  183.   "    Decho "DBG: read via http (method #5)"
  184.      if match(b:netrw_fname,"#") == -1
  185. !     exe "!wget -O " . tmpfile . " http://" . g:netrw_machine . "/" . b:netrw_fname
  186.       let result = s:NetGetFile(readcmd, tmpfile)
  187.      else
  188.       let netrw_html= substitute(b:netrw_fname,"#.*$","","")
  189.       let netrw_tag = substitute(b:netrw_fname,"^.*#","","")
  190. !     exe "!wget -O " . tmpfile . " http://" . g:netrw_machine . "/" . netrw_html
  191.       let result = s:NetGetFile(readcmd, tmpfile)
  192.       exe 'norm! 1G/<\s*a\s*name=\s*"'.netrw_tag.'"'
  193.      endif
  194. ***************
  195. *** 305,310 ****
  196. --- 309,328 ----
  197.      let b:netrw_lastfile = choice
  198.   
  199.     ".........................................
  200. +   " cadaver: Method #6
  201. +   elseif     b:netrw_method  == 6    " read with cadaver
  202. + "    Decho "DBG: read via cadaver (method #6)"
  203. +    if g:netrw_cygwin == 1
  204. +     let cygtmpfile=substitute(tmpfile,'^\(\a\):','//\1/','e')
  205. +     exe "!cadaver http://" . g:netrw_machine . "/" . b:netrw_fname . " " . cygtmpfile
  206. +    else
  207. + "    call Decho("DBG: !cadaver http://" . g:netrw_machine . "/" . b:netrw_fname . " " . tmpfile)
  208. +     exe "!cadaver http://" . g:netrw_machine . "/" . b:netrw_fname . " " . tmpfile
  209. +    endif
  210. +    let result = s:NetGetFile(readcmd, tmpfile)
  211. +    let b:netrw_lastfile = choice
  212. +   ".........................................
  213.     else " Complain
  214.      echo "***warning*** unable to comply with your request<" . choice . ">"
  215.     endif
  216. ***************
  217. *** 385,396 ****
  218.      " Reconstruct Choice if choice starts with '"'
  219.      if match(choice,"?") == 0
  220.       echo "NetWrite Usage:"
  221. !     echo ":Nwrite machine:file                  uses rcp"
  222. !     echo ":Nwrite \"machine file\"                uses ftp with <.netrc>"
  223. !     echo ":Nwrite \"machine id password file\"    uses ftp"
  224. !     echo ":Nwrite ftp://machine[#port]/file          uses ftp  (autodetects <.netrc>)"
  225. !     echo ":Nwrite rcp://machine/file          uses rcp"
  226. !     echo ":Nwrite scp://[user@]machine/file   uses scp"
  227.       break
  228.   
  229.      elseif match(choice,"^\"") != -1
  230. --- 403,415 ----
  231.      " Reconstruct Choice if choice starts with '"'
  232.      if match(choice,"?") == 0
  233.       echo "NetWrite Usage:"
  234. !     echo ":Nwrite machine:path                  uses rcp"
  235. !     echo ":Nwrite \"machine path\"                uses ftp with <.netrc>"
  236. !     echo ":Nwrite \"machine id password path\"    uses ftp"
  237. !     echo ":Nwrite ftp://machine[#port]/path          uses ftp  (autodetects <.netrc>)"
  238. !     echo ":Nwrite rcp://machine/path          uses rcp"
  239. !     echo ":Nwrite scp://[user@]machine/path   uses scp"
  240. !     echo ":Nwrite dav://[user@]machine/path   uses cadaver"
  241.       break
  242.   
  243.      elseif match(choice,"^\"") != -1
  244. ***************
  245. *** 475,480 ****
  246. --- 494,510 ----
  247.      endif
  248.      let b:netrw_lastfile = choice
  249.   
  250. +   ".........................................
  251. +   " dav: Method #6
  252. +   elseif     b:netrw_method == 6    " write with cadaver
  253. +    if g:netrw_cygwin == 1
  254. +     let cygtmpfile=substitute(tmpfile,'^\(\a\):','//\1/','e')
  255. +     exe "!cadaver " . cygtmpfile . " http://" . g:netrw_machine . "/" . b:netrw_fname
  256. +    else
  257. +     exe "!cadaver " . tmpfile . " http://" . g:netrw_machine . "/" . b:netrw_fname
  258. +    endif
  259. +    let b:netrw_lastfile = choice
  260.     else " Complain
  261.      echo "***warning*** unable to comply with your request<" . choice . ">"
  262.     endif
  263. ***************
  264. *** 513,518 ****
  265. --- 543,549 ----
  266.   "         3: ftp + machine, id, password, and [path]filename
  267.   "         4: scp
  268.   "         5: http (wget)
  269. + "         6: cadaver
  270.   function! s:NetMethod(choice)  " globals: method machine id passwd fname
  271.   "    Decho "DBG: NetMethod(a:choice<".a:choice.">) {"
  272.   
  273. ***************
  274. *** 523,550 ****
  275.    let g:netrw_port    = ""
  276.   
  277.    " Patterns:
  278. !  " mipf   : a:machine a:id password filename  Use ftp
  279. !  " mf      : a:machine filename              Use ftp + <.netrc> or g:netrw_uid g:netrw_passwd
  280. !  " ftpurm : ftp://host[#port]/filename          Use ftp + <.netrc> or g:netrw_uid g:netrw_passwd
  281. !  " rcpurm : rcp://host/filename              Use rcp
  282. !  " rcphf  : host:filename              Use rcp
  283. !  " scpurm : scp://[user@]host/filename          Use scp
  284. !  " httpurm: http://[user@]host/filename       Use wget
  285.    let mipf   = '\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)'
  286.    let mf     = '\(\S\+\)\s\+\(\S\+\)'
  287. !  let ftpurm = 'ftp://\([^/#]\{-}\)\(#\d\+\)\=/\(.*\)$'
  288. !  let rcpurm = 'rcp://\([^/]\{-}\)/\(.*\)$'
  289. !  let rcphf  = '\(\I\i*\):\(\S\+\)'
  290.    let scpurm = 'scp://\([^/]\{-}\)/\(.*\)$'
  291. !  let httpurm= 'http://\([^/]\{-}\)/\(.*\)$'
  292.   
  293.    " Determine Method
  294. !  " rcp://hostname/...path-to-file
  295.    if match(a:choice,rcpurm) == 0
  296.   "    Decho "DBG: NetMethod: rcp://..."
  297.     let b:netrw_method = 1
  298. !   let g:netrw_machine= substitute(a:choice,rcpurm,'\1',"")
  299. !   let b:netrw_fname  = substitute(a:choice,rcpurm,'\2',"")
  300.   
  301.    " scp://user@hostname/...path-to-file
  302.    elseif match(a:choice,scpurm) == 0
  303. --- 554,587 ----
  304.    let g:netrw_port    = ""
  305.   
  306.    " Patterns:
  307. !  " mipf   : a:machine a:id password filename        Use ftp
  308. !  " mf      : a:machine filename                      Use ftp + <.netrc> or g:netrw_uid g:netrw_passwd
  309. !  " ftpurm : ftp://[user@]host[[#:]port]/filename    Use ftp + <.netrc> or g:netrw_uid g:netrw_passwd
  310. !  " rcpurm : rcp://[user@]host/filename            Use rcp
  311. !  " rcphf  : [user@]host:filename            Use rcp
  312. !  " scpurm : scp://[user@]host/filename            Use scp
  313. !  " httpurm: http://[user@]host/filename            Use wget
  314. !  " davurm : dav://host[:port]/path                      Use cadaver
  315.    let mipf   = '\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)'
  316.    let mf     = '\(\S\+\)\s\+\(\S\+\)'
  317. !  let ftpurm = 'ftp://\([^/@]@\)\=\([^/#:]\{-}\)\([#:]\d\+\)\=/\(.*\)$'
  318. !  let rcpurm = 'rcp://\([^/@]@\)\=\([^/]\{-}\)/\(.*\)$'
  319. !  let rcphf  = '\([^@]\{-}@\)\=\(\I\i*\):\(\S\+\)'
  320.    let scpurm = 'scp://\([^/]\{-}\)/\(.*\)$'
  321. !  let httpurm= 'http://\([^/]\{-}\)\(/.*\)\=$'
  322. !  let davurm = 'dav://\([^/]\{-}\)/\(.*\)\=$'
  323.   
  324.    " Determine Method
  325. !  " rcp://user@hostname/...path-to-file
  326.    if match(a:choice,rcpurm) == 0
  327.   "    Decho "DBG: NetMethod: rcp://..."
  328.     let b:netrw_method = 1
  329. !   let userid         = substitute(a:choice,rcpurm,'\1',"")
  330. !   let g:netrw_machine= substitute(a:choice,rcpurm,'\2',"")
  331. !   let b:netrw_fname  = substitute(a:choice,rcpurm,'\3',"")
  332. !   if userid != ""
  333. !    let g:netrw_uid= userid
  334. !   endif
  335.   
  336.    " scp://user@hostname/...path-to-file
  337.    elseif match(a:choice,scpurm) == 0
  338. ***************
  339. *** 553,573 ****
  340.     let g:netrw_machine= substitute(a:choice,scpurm,'\1',"")
  341.     let b:netrw_fname  = substitute(a:choice,scpurm,'\2',"")
  342.   
  343. !  " http://hostname/...path-to-file
  344.    elseif match(a:choice,httpurm) == 0
  345.   "    Decho "DBG: NetMethod: http://..."
  346.     let b:netrw_method = 5
  347.     let g:netrw_machine= substitute(a:choice,httpurm,'\1',"")
  348.     let b:netrw_fname  = substitute(a:choice,httpurm,'\2',"")
  349.   
  350. !  " ftp://hostname/...path-to-file
  351.    elseif match(a:choice,ftpurm) == 0
  352.   "    Decho "DBG: NetMethod: ftp://..."
  353. !   let g:netrw_machine= substitute(a:choice,ftpurm,'\1',"")
  354. !   let g:netrw_port   = substitute(a:choice,ftpurm,'\2',"")
  355. !   let b:netrw_fname  = substitute(a:choice,ftpurm,'\3',"")
  356.     if g:netrw_port != ""
  357. !     let g:netrw_port = substitute(g:netrw_port,"#","","")
  358.     endif
  359.     if exists("g:netrw_uid") && exists("g:netrw_passwd")
  360.      let b:netrw_method = 3
  361. --- 590,620 ----
  362.     let g:netrw_machine= substitute(a:choice,scpurm,'\1',"")
  363.     let b:netrw_fname  = substitute(a:choice,scpurm,'\2',"")
  364.   
  365. !  " http://user@hostname/...path-to-file
  366.    elseif match(a:choice,httpurm) == 0
  367.   "    Decho "DBG: NetMethod: http://..."
  368.     let b:netrw_method = 5
  369.     let g:netrw_machine= substitute(a:choice,httpurm,'\1',"")
  370.     let b:netrw_fname  = substitute(a:choice,httpurm,'\2',"")
  371. +  
  372. +  " dav://hostname[:port]/..path-to-file..
  373. +  elseif match(a:choice,davurm) == 0
  374. +   let b:netrw_method= 6
  375. +   let g:netrw_machine= substitute(a:choice,davurm,'\1',"")
  376. +   let b:netrw_fname  = substitute(a:choice,davurm,'\2',"")
  377.   
  378. !  " ftp://[user@]hostname[[:#]port]/...path-to-file
  379.    elseif match(a:choice,ftpurm) == 0
  380.   "    Decho "DBG: NetMethod: ftp://..."
  381. !   let userid         = substitute(a:choice,ftpurm,'\1',"")
  382. !   let g:netrw_machine= substitute(a:choice,ftpurm,'\2',"")
  383. !   let g:netrw_port   = substitute(a:choice,ftpurm,'\3',"")
  384. !   let b:netrw_fname  = substitute(a:choice,ftpurm,'\4',"")
  385.     if g:netrw_port != ""
  386. !     let g:netrw_port = substitute(g:netrw_port,"[#:]","","")
  387. !   endif
  388. !   if userid != ""
  389. !    let g:netrw_uid= userid
  390.     endif
  391.     if exists("g:netrw_uid") && exists("g:netrw_passwd")
  392.      let b:netrw_method = 3
  393. ***************
  394. *** 589,596 ****
  395.    elseif match(a:choice,rcphf) == 0
  396.   "    Decho "DBG: NetMethod: (rcp) host:file"
  397.     let b:netrw_method = 1
  398. !   let g:netrw_machine= substitute(a:choice,rcphf,'\1',"")
  399. !   let b:netrw_fname  = substitute(a:choice,rcphf,'\2',"")
  400.     if has("win32")
  401.      " don't let PCs try <.netrc>
  402.      let b:netrw_method = 3
  403. --- 636,647 ----
  404.    elseif match(a:choice,rcphf) == 0
  405.   "    Decho "DBG: NetMethod: (rcp) host:file"
  406.     let b:netrw_method = 1
  407. !   let userid         = substitute(a:choice,rcphf,'\1',"")
  408. !   let g:netrw_machine= substitute(a:choice,rcphf,'\2',"")
  409. !   let b:netrw_fname  = substitute(a:choice,rcphf,'\3',"")
  410. !   if userid != ""
  411. !    let g:netrw_uid= userid
  412. !   endif
  413.     if has("win32")
  414.      " don't let PCs try <.netrc>
  415.      let b:netrw_method = 3
  416. *** ../vim61.063/src/version.c    Sun May 12 18:48:10 2002
  417. --- src/version.c    Wed May 15 20:31:14 2002
  418. ***************
  419. *** 608,609 ****
  420. --- 608,611 ----
  421.   {   /* Add new patch number below this line */
  422. + /**/
  423. +     64,
  424.   /**/
  425.  
  426. -- 
  427. hundred-and-one symptoms of being an internet addict:
  428. 13. You refer to going to the bathroom as downloading.
  429.  
  430.  ///  Bram Moolenaar -- Bram@moolenaar.net -- http://www.moolenaar.net  \\\
  431. ///   Creator of Vim -- http://vim.sf.net -- ftp://ftp.vim.org/pub/vim   \\\
  432. \\\           Project leader for A-A-P -- http://www.a-a-p.org           ///
  433.  \\\  Help me helping AIDS orphans in Uganda - http://iccf-holland.org  ///
  434.