如何从Gforth的网站上阅读原始代码?

时间:2018-02-02 16:46:03

标签: networking forth gforth

我想要一个像

这样的词
read-site ( add n buff max -- n flag )

其中'add n'是站点名称缓冲区,'buff max'是应该读取ASCII文本的缓冲区,'n'是读取的字节数,flag是真的如果操作成功。

这在Linux,Android或Windows的Gforth中是否可行?

1 个答案:

答案 0 :(得分:4)

只是方法列表

最简单的方法应该是在Forth中使用HTTP客户端库(或绑定)(如果有的话)。 Gforth存储库中似乎存在某种类型的库 - 请参阅netlib/httpclient.fs。显然它不适用于HTTPS。

下一种方法是使用适当的外部共享库,例如libcurl。它是众所周知的支持许多协议的工具(绑定和一些用法示例也可以在SP-Forth中找到)。

下一种方法是使用系统调用并生成子进程(在资源使用方面不是那么有效的方法)。 Gforth有system字样。用法示例:

S" curl http://example.com/" system

网页HTML代码将打印到stdout。不幸的是,outfile-execute的重定向在这种情况下不起作用(它看起来像system字的不完整或弱的实现。)

因此,应使用临时文件:

S" curl --silent http://example.com/ > tmp" system

之后,可以将文件内容读入给定的缓冲区。

概念性实施如下:

: read-url ( d-buffer d-txt-url -- d-txt-webpage )
  s" curl --silent {} > tmp" interpolate system
  over >r \ keep buf addr
  s" tmp" open-file throw dup >r read-file throw
  r> close-file throw
  r> swap
;

其中interpolate ( i*x d-txt1 -- d-txt2 )扩展了给定的模板。