gopher client: fix several memory leaks

FossilOrigin-Name: 4e3a2d630e9a13faa8f57549d4da576f700f64ef555f9122da83829484543c83
This commit is contained in:
crc 2019-02-01 21:58:43 +00:00
parent 7c7c89ef6c
commit c3c3e1fda2

View file

@ -1,17 +1,16 @@
This is a tiny Gopher client written in RETRO. It's only for the iOS implementation, but could be adapted for others with a little reworking of the file I/O code. This is a tiny Gopher client.
It's intentionally kept minimal, handling only text files and directories. The interface is line oriented. It's intentionally kept minimal, handling only text files and directories. The interface is line oriented.
# General Configuration # General Configuration
`GOPHER-DATA` is the name of the file to store the last downloaded content into. `TARGET` is the name of the buffer to store the last downloaded content into.
`WrapPoint` holds the number of characters to display before wrapping output. `WrapPoint` holds the number of characters to display before wrapping output.
There is also a `Results` variable which will point to the data set being displayed. There is also a `Results` variable which will point to the data set being displayed.
~~~ ~~~
'GopherData.txt 'GOPHER-DATA s:const
#34 'WrapPoint var<n> #34 'WrapPoint var<n>
'Results var 'Results var
'TARGET d:create #1024 #64 * allot 'TARGET d:create #1024 #64 * allot
@ -83,9 +82,9 @@ The next word is `display`. This will tokenize a line and display the `type` and
~~~ ~~~
:display (s-) :display (s-)
#0 !Displayed &Heap [ #0 !Displayed
ASCII:HT s:tokenize #0 set:nth fetch ASCII:HT s:tokenize #0 set:nth fetch
fetch-next type s:put<w/wrap> ; fetch-next type s:put<w/wrap> ] v:preserve ;
~~~ ~~~
~~~ ~~~
@ -96,19 +95,21 @@ And finally, tie everything together. This will display an index.
~~~ ~~~
:display:index (-) :display:index (-)
&TARGET ASCII:LF s:tokenize !Results &Heap [
&TARGET ASCII:LF s:tokenize !Results
@Results fetch #2 - @Results store @Results fetch #2 - @Results store
#0 @Results #0 @Results
[ over line display nl n:inc ] [ over line display nl n:inc ]
set:for-each drop ; set:for-each drop
] v:preserve ;
}} }}
~~~ ~~~
# Text Viewer # Text Viewer
Text files are really easy. We just read the downloaded file into a buffer and display it. Text files are really easy. We just display the contents of the download buffer.
~~~ ~~~
:display:text (-) :display:text (-)
@ -138,13 +139,14 @@ The last bit is `g`, which is used to navigate a directory. Pass it the line num
~~~ ~~~
:g (n-) :g (n-)
@Results swap set:nth fetch &Heeap [ @Results swap set:nth fetch
ASCII:HT s:tokenize ASCII:HT s:tokenize
dup #0 set:nth fetch fetch [ dup #0 set:nth fetch fetch [
[ #2 set:nth fetch ] [ #2 set:nth fetch ]
[ #3 set:nth fetch s:chop s:to-number ] [ #3 set:nth fetch s:chop s:to-number ]
[ #1 set:nth fetch ] tri grab [ #1 set:nth fetch ] tri grab
] dip display-by-type ; ] dip display-by-type
] v:preserve ;
~~~ ~~~
The final thing to do is just call `home` to get started. The final thing to do is just call `home` to get started.
@ -152,4 +154,3 @@ The final thing to do is just call `home` to get started.
~~~ ~~~
home home
~~~ ~~~