new example: using pipes and curl to make network requests
FossilOrigin-Name: 4ee196650050b118929e3c2af90a3145321f7cb76e57a9c9e8b8b49f5354a0a3
This commit is contained in:
parent
a0b61dcee9
commit
25e9758a29
2 changed files with 35 additions and 1 deletions
|
@ -18,13 +18,14 @@
|
|||
## Interfaces
|
||||
|
||||
- use strlcpy, strlcat instead of strcpy and strcat
|
||||
- include copies of the above for users of glibc
|
||||
- add retro-compiler
|
||||
|
||||
### retro
|
||||
|
||||
### retro-compiler
|
||||
|
||||
- new interface for creating turnkey executables
|
||||
- new interface for creating turnkey executables on bsd, linux
|
||||
|
||||
### retro-ri
|
||||
|
||||
|
@ -48,5 +49,6 @@
|
|||
- add DisplayNames.forth
|
||||
- add KeyValueStore.forth
|
||||
- switch to dvorak key bindings in Roo.forth
|
||||
- add net_fetch.forth
|
||||
|
||||
## Final Notes
|
||||
|
|
32
example/net_fetch.forth
Normal file
32
example/net_fetch.forth
Normal file
|
@ -0,0 +1,32 @@
|
|||
# net:fetch
|
||||
|
||||
This is a simple wrapper over `curl` (https://curl.haxx.se). It
|
||||
uses the `unix:popen` word to initiate a pipe to curl and stores
|
||||
the returned data into a buffer.
|
||||
|
||||
This takes in three values:
|
||||
|
||||
- the URL to fetch
|
||||
- the destination buffer
|
||||
- a maximum number of bytes to read
|
||||
|
||||
The buffer should be at least one cell longer than the max to
|
||||
allow for the NULL termination.
|
||||
|
||||
## The Code
|
||||
|
||||
~~~
|
||||
:net:fetch (san-n)
|
||||
[ [ buffer:set
|
||||
'curl_-s_%s s:format file:R unix:popen ] dip
|
||||
[ dup file:read 0; buffer:add ] times unix:pclose
|
||||
buffer:start s:length ] buffer:preserve ;
|
||||
~~~
|
||||
|
||||
## Test Case
|
||||
|
||||
```
|
||||
'Data d:create #256001 allot
|
||||
'https://www.osnews.com Data #300009 net:fetch
|
||||
'%n_bytes_read\n s:format s:put
|
||||
```
|
Loading…
Reference in a new issue