| 1 | The Straylight Source Distribution |
| 2 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 3 | |
| 4 | |
| 5 | For a long while now, I've been pontificating in comp.sys.acorn.programmer |
| 6 | about how clever I am, and how I know how to do things properly. Most |
| 7 | of the regular readers should now be thinking something along the lines |
| 8 | of `This [mdw] chap seems to know what he's doing, although I've never |
| 9 | seen any of his work. He's been going on about these libraries and |
| 10 | things but we've never seen them or seen any software which uses them. |
| 11 | It all seems a bit fishy.' Well, now's my time to put my money where my |
| 12 | mouth is. Straylight is releasing all of its source code. Well, the |
| 13 | interesting bits. |
| 14 | |
| 15 | The next question ought to be `why?' Why am I doing this? Well, there |
| 16 | are two reasons, although they're both associated with Linux. The first |
| 17 | reason is that I've `seen the light' of Free software, and want to do |
| 18 | something about my heretical past as a Software Hoarder. I want to give |
| 19 | my small contribution to the world, as Freely as the GNU and Linux teams |
| 20 | are doing. And I want to show off a bit, too. The second reason is |
| 21 | that I'm not doing much Acorn work at all any more. Akasha (my RiscPC) |
| 22 | spends most of her time turned off now, in favour of Excessus (my Linux |
| 23 | PC), and I don't have the time or the inclination to maintain this |
| 24 | rather large chunk of source code any more, so I'm giving it all to the |
| 25 | community which inspired it. It feels slightly like a sort of a swan |
| 26 | song as I leave the Acorn world. |
| 27 | |
| 28 | I'll be releasing the code in dribs and drabs over the coming weeks, |
| 29 | hopefully in a sensible order, so that all the software can be built |
| 30 | with the parts already available. Unfortunately, most of it was never |
| 31 | designed to be source distributed, so there's no guarantees against |
| 32 | mutual dependencies. We'll work it out as we go along, hopefully. The |
| 33 | main components are: |
| 34 | |
| 35 | * Some simple header files and libraries for assembling the code, and |
| 36 | some trivial utilities used in the build processes. |
| 37 | |
| 38 | * BAS -- the Basic Assembler Supplement, which allows Basic programs |
| 39 | to generate AOF object code. This is required for some of the other |
| 40 | build tools. |
| 41 | |
| 42 | * SDLS -- the Straylight Dynamic Linking System. This is already well |
| 43 | known, but not well used, I think. Maybe the sources will be |
| 44 | interesting to someone. |
| 45 | |
| 46 | * Dynamite -- our dynamic-area heap manager module. Again, well known |
| 47 | software, so maybe the sources will provide some interest. |
| 48 | |
| 49 | * Sculptrix -- Straylight's 3D border rendering module. I'm very |
| 50 | proud of this code. Provided also is the source to version 1, which |
| 51 | was a horrible hack made worse by poor modifications. Version 2 |
| 52 | does more, at the same speed, in less space, and more maintainably. |
| 53 | |
| 54 | * STEEL -- the Straylight Extensive Event-driven Library. This is a |
| 55 | grandiose name for a RISC_OSLib more-or-less rewrite. There are |
| 56 | Issues involved here, which I'll try to resolve -- some of the |
| 57 | source files aren't `pure' Straylight code, which could cause |
| 58 | problems. I recommend against anyone using STEEL -- it's just |
| 59 | needed by Glass, which is a jolly good piece of software. |
| 60 | |
| 61 | * Glass -- Straylight's template editor. It's actually the second |
| 62 | template editor I've written, although I'm thoroughly ashamed of the |
| 63 | first one. It's been around for ages, quietly circulating around a |
| 64 | slowly increasing coterie of friends. I suspect many readers |
| 65 | already have copies of Glass they shouldn't have. Well, as of this |
| 66 | announcement, those copies become legal. I'd be interested in |
| 67 | hearing how far this informal distribution had reached. |
| 68 | |
| 69 | * A pile of silly utilities. There's a mouse speed changer which |
| 70 | tries to read the current speed using underhand methods (i.e., |
| 71 | peeking around OS workspace). There's a rudimentary debugger Tim |
| 72 | wrote which might be the start of something useful. |
| 73 | |
| 74 | * Sprinkle -- a little module exactly 256 bytes long which supports |
| 75 | linked lists of sprite areas. |
| 76 | |
| 77 | * Constrain -- constrain the mouse pointer to a circle. This is used |
| 78 | in one of Sapphire's custom controls. |
| 79 | |
| 80 | * Sapphire -- not an acronym, but a weak pun on STEEL. This is |
| 81 | STEEL's successor. It's a comprehensive (I think) run-time support |
| 82 | system and RISC OS library for applications written in assembler. |
| 83 | |
| 84 | There are a number of bits of Sapphire which are incomplete: |
| 85 | |
| 86 | -- There's a scripting language, SAIL, which is based on the work |
| 87 | Straylight did on the Termite language. There may be |
| 88 | complications on this code. |
| 89 | |
| 90 | -- There's an interface for C programs, but it's very messy. Many |
| 91 | bits of Sapphire require more expressive syntax for declaring |
| 92 | data structures than C provides. |
| 93 | |
| 94 | -- There was going to be a wonderful colour selector, but it never |
| 95 | really got finished. The good bits in the current version are |
| 96 | the RGB selector window (which is fully functional -- the |
| 97 | RGB colour square custom control is my favourite bit) and the |
| 98 | HSV colour circle, with its circular mouse constraint. |
| 99 | |
| 100 | -- The threading code needs to be rewritten, and the rest of the |
| 101 | library ought to be properly multithreaded or locked. |
| 102 | |
| 103 | My favourite innovations are: |
| 104 | |
| 105 | -- The way filters work in the event manager. We never needed to |
| 106 | change the way events got dispatched, because we got it right |
| 107 | the first time. |
| 108 | |
| 109 | -- Custom controls in the dialogue box system. This one was my |
| 110 | idea. |
| 111 | |
| 112 | -- The menu system. I like the way the same menu blocks can be |
| 113 | used for normal and tearoff menus. (We designed the system |
| 114 | together over a pub lunch, but Tim did all the implementation |
| 115 | so lots of kudos for him.) |
| 116 | |
| 117 | -- The viewer code, and the background-redrawing gallery stuff. |
| 118 | This was mine, although Tim had already done the listbox code |
| 119 | on which it was based. |
| 120 | |
| 121 | There are a lot of good ideas in here (in my expert opinion) and |
| 122 | some clever tricks too. I think that anyone maintaining a RISC OS |
| 123 | library should look in here. It is, I hope, like Glass: an example |
| 124 | of the benefits of the Second System Effect. |
| 125 | |
| 126 | * Sapphire example programs. There's a small number of these, to show |
| 127 | how we expected people to write Sapphire programs. They're all |
| 128 | lovingly crafted and perfectly formed. Oh, yes. |
| 129 | |
| 130 | Documentation for all of these is going to be patchy at best. The |
| 131 | libraries are sort-of documented by their header files, and by the |
| 132 | examples provided. |
| 133 | |
| 134 | That's all there'll be. |
| 135 | |
| 136 | On the matter of licensing: I'll apply the GNU Library General Public |
| 137 | License to as much as I can, and the full General Public License to |
| 138 | everything else. Software which is already OFFICIALLY available under a |
| 139 | different licence may continue to be licenced under those terms; |
| 140 | however, the existing licences only cover unmodified binaries, so if you |
| 141 | make modifications to the software, you're bound by all the restrictions |
| 142 | of the GPL. |
| 143 | |
| 144 | Well, thanks for taking the time to read all of this. It's been great |
| 145 | working with RISC OS, but I think I've been doing it for too long. I'll |
| 146 | still hang around Acorn newsgroups and flame people whom I think are |
| 147 | being stupid. I will keep porting to RISC OS in mind as I continue to |
| 148 | write, but as far as developing specifically for Acorn is concerned, |
| 149 | that's all you get. |
| 150 | |
| 151 | It's 10:30 at night, I'm cold, and I've been typing this for too long. |
| 152 | Goodbye. It's been great. |