October 3, 2017 --------------------------------------------------------------- Blocks are a traditional part of Forth. While not very common now, they are still useful as a means of organizing source into small modules and on targets without a conventional filesystem. Traditional Forth blocks are 1K in size: 16 lines with 64 characters per line. Various editors (both visual and line oriented) have been written. In the past, Retro included a line based editor called *red* (for *retro editor*) and later a visual superset called *rem* (*retro editor for mortals*). With Retro 12 I haven't done a full block editor yet. This is on my list of desired interfaces, but my earlier work towards this wasn't going as well as I had hoped, so I decided to focus on improving the core of the language and to revisit blocks at a later time. That time has now come. Retro 12 will have a block based editor UI before the end of the year. This will be a visual editor (following on VIBE.fs and REM), with deep hooks into Retro itself. And it'll have a twist: my block storage will be network based. As part of the work towards this, I wrote a block storage system that uses the Gopher protocol. This allows for viewing and updating blocks across the network by sending carefully chosen selectors to the server. And the server itself is written in Retro. I've been pleased with the server side portion (currently serving blocks from Pygmy Forth). The main directory listing shows all of the blocks and requesting them reformats them to text and sends it as a text file. There are also specific selectors (/r/) to return the raw block and to update(/s//text) the block contents. By using a server for the persistant store I can have some advantages: - a huge number of blocks (lots of storage on the server) - all my retro+editor instances can share the same block set - i can allow others to access the server and work on a project with me For now I'm getting things ready to begin work on the editor itself. I have added the necessary bits to Retro (`gopher:get` and `s:evaluate`) to make it feasible to do this with the network backend, so I'll hopefully have more to share on this soon. The block server ("tuporo") is available at: - gopher://forthworks.com/projects/tuporo - http://forthworks.com/projects/tuporo