4QD RISC OS section PD4Logo

PipeDream


Wishlist.

PipeDream is an old, established program. Trouble is, it's too versatile and does too much, so although it is used (and loved) by lots, there's little call to improve it. However, it has survived with relatively little change since the early days and the rate of change nowadays is close to the imperceptible! There is little evidence that this state can be altered, and the reasons for this reluctance have not been divulged so I am left guessing.

I do still however have a vision for PipeDream. It was so in advance of its time that most of its concepts are as valid today as they ever were - in fact maybe it is only now about to come of age? However - RISC OS has moved on, so Pipedream, which uses early OS interactions is seen by many as being 'quirky'. PipeDream really pre-dated even RISC OS and RISC OS key conventions have not settled around PipeDream but have moved on somewhat. This really need not be: with some careful though and re-design PipeDream can be given a face lift and a shining new coat of paint which should bring it bang up-to date, once again a leading RISC OS program.

This then is a list of additions I would like to see. It is (hopefully) not simply a list of the additions I personally need - to be frank, I would not personally use many of these suggestions. More it is a list of how I see PipeDream being improved to make it much more modern and much easier for new users to get into. If you have other suggestions, or wish to vote for these improvements, please contact me.

I have divided this list into two parts: those which I believe should be reasonably possible to implement, given what I know of PipeDream's program, and those which are of unknown difficulty of implementation.

@ char
Configurable @ character so that email addresses may be handled..

ASCII save
An 'ACSII space' option on the 'save' box which would output an ASCII file padded with spaces in place of TAB characters. The present ASCII is 'ASCII TAB'.

Autosave
An option for PipeDream to Autosave changed documents would be nice. However - the option should be selectable on a document by document basis, so needs to be saved with the file.

The timing of autosaves should be globally selectable, and there should be a global off switch.

Blank Slot, value of
At present PipeDream thinks a slot containing zero has the same value as a blank slot. So is you set up a small spreadsheet with A1 set to zero and A2 blank, then the three expressions A1="" A2="" and A1=A2 all equate to true.

But zero is a number and a blank is the absence of any entry so this evaluation is mathematically incorrect.

Block Snap Shot
The Block Snapshot (\BSS) should NOT remove local Printer Fonts commands.

Cell function
A new Cell (a,b) function. 
Cell(3,5) would return the contents of slot C5.
Cell(Col,Row(-1)) would return the contents of the slot above the one calling it, so would give the ability to show a running total of, for instance, a bank account and it would not matter whether rows were re-sorted as you might do to reconcile against a bank statement.

Choices: 'Save Choices'
From the Icon bar menu, there are two choices entries: Save Choices and a Choices sub menu. The 'Save Choices' should be moved to the sub-menu as it is far too easy to click on' Save choices' by accident.

Save choices saves the current document's format as a default template for future use. However the new template is only used on the next session - the current default template remains in place until PipeDream is quit and re-loaded.

In the Choices sub menu, the 'Save Choices' entry should open another sub-menu which is the save box proper, and this should contain the full path and leaf name to which Choices will be saved. This is needed because Choices is saved to the first entry in the Makro PipeDream$Path - which is set by several system variables, so may not be immediately obvious.

This should be changed: 'Save choices' should have an immediate effect without quitting and reloading PipeDream.

Choices File
The choices file is saved as a file called !PipeDream.User.Choices by default. This template is used when dropping a non PipeDrem format file on the iconbar icon or when creating a new file by Adjust Clickink on PipeDream.

If a PipeDream$UserPath has been set up, the position of this file defaults to being placed in the first directory in that path. However, the choices file contains lots of parameters and not all of these are used by PipeDream when it creates a new file. For instance, the Choices file contains Window Position. This is ignored.

All Choices in the Choices file should be obeyed when opening a new file. However - this probably implies that some choices should have a method of not being saved into the choices file. In the case of the Window position, this could be accomplished very easily by simply deleting the appropriate line from the saved file.

Close All
On the main IconBar menu there should be another entry:
'Close All'
It will have the same effect as 'Quit' - except PipeDream will still be running afterwards, i.e. it will go through the 'Quit' file saving routine, asking whether to save files, but it will not actually quit PipeDream after all have been saved/closed.

Close Window command
The present command 'Close Window' (CTRL F Q) needs an extension that will close and not save the window. It also needs an (optional) extension so that it close a named window and can thus easily be run from a command file, as a match to the 'Load Window' command.
Currently \Fq|m in a command file will, if the file has been altered, bring up a 'Save?' window. Also, if the file has dependany documents, a 'Do you want to close' window is thrown up. This severely restricts the use of this command from a command file.
If you want to save and close the window it can be done with two commands:

The new command (presumably \Fqz|m) should close the window without saving.

Column colours
Most beginners find PipeDream's column boundaries difficult. This could be eased hugely by shading columns in different colours. The colours would not actually show up in any slot until that slot actually contained something. And of course the end of the shading would also show the current wrap width.

To explain this idea, PipeDream's screen is analogous to a series of transparent sheets overlayed, with each overlayed sheet being opaque only where the slot is not empty. This suggestion would effectively shade the 'opaque' bits.

A corollary of this is that 'select' should cause the caret to land up in the correct place, in the cell of the colour clicked on. This will probably happen anyway for the most part but needs to be considered.

Since this is the exact coloration behaviour already given by a 'protected slot' PipeDream already contains all the mechanisms for doing this, so the change should not be huge and would dramatically simplify the user interface.

Whilst we're thinking of colours, cells with formulae in should show up in a different colour from text cells.

Column Headers
PipeDream has facilities to define page headers of up to three lines: each line can have three components, ranged left, centre and right respectively. But what you cannot do is to define one (or more) rows to define as column headers for each printed page.

So the proposal is for a new command to be added to the Layout menu, similar to the \Lfr command (Layout Fix Rows) which which would be \Lch (Layout Column Header). All the column data in that row would be printed as column headers in any printout. Screen display is not so necessary.

Command Files
When executing a command file, PD freezes if an 'Alert', 'Input' or error window opens. The error window is not displayed. A fix would be nice.

Conditional file loading
One of PipeDream's early strengths was that it pre-loaded all linked documents into memory before using them, and all documents had to be in memory before calculation started. But hardware has got a lot faster: a feature which is a strength is, on some respects, now a limitation. So PipeDream should acquire the ability to load a file as a result of an if() calculation. That way, rarely used files would not clutter the screen and could be conditionally loaded as and when they were needed.

This could be partially accomplished via the proposed OSCLI command, see below.

Full implementation of conditional file loading would require a different sort of call to such external files. At present any external file is named in square brackets with a slot reference, e.g. [external]A1. I suppose a new file reference could be, for instance: {external}A1. PipeDream would then not pre-load any such named file when it found a reference to it.

However, the most likely use for conditionally loaded files would probably be as a method of inputting data to the main sheet. This could easily de done by the CLF using set_value(slotref,value) to write so the full implementation would probably be of less use - in which case the proposed OSCLI command would suffice.

Document headers
It is currently not possible to use fonts other than the main document body font, in a header. This should be implemented.

Embedded Images
PipeDream can display Sprite and Drawfiles when theu are dragged to it. It should not be difficult to extend PipeDream's abilities so that other filetypes (e.g. GIF and JPEG) can be dragged to it and will be displayed properly, since these are handled by RISC OS.

Calculated File Names
PipeDream has an ability to display the leafname of the current file by embedding '@L@' within a cell: this expands to the text of the leafname. However you cannot directly pass @L@ to a function. This is not a particular problem as you simply put @L@ in one slot and pass the slot reference to the function.

However what you CANNOT do is, for instance, pass the leafname to a custom function and use that in the function to write back to the file calling the function. The example file leaf name illustrates this. It should write back 'fred' to slot B1. Instead it returns an error.

Error Messages
PipeDream's error messages are in general excellent. However the error reports only occur in the slot where the error exists. Any slots where this error is propagated simply say 'propagated' - most unhelpful if you have a large system.

It would be far better if the 'Propagated' error actually said 'Error [filename]slot' so one could go directly back to the cause of the original error.

Error Message: Value not defined
If you are using named values, for instance, in a set of linked files, if one value is not defined then PipeDream helpfully pops up an error box saying 'Value not defined'.

Unfortunately, the error box does not name the value which is not defined, nor does it name the file where it the value should be defined. Id does not even mention the name or cell of the calling slot which tried to read the undefined value! Since PipeDream must know all of these, it should not be a major task to make it divulge them to the user, resulting in a much more helpful error message. PipeDream's present behaviour is highly secretive!

File Markers
PipeDream needs the facility of being able to accept 'markers'. Maybe these could be named cell references. They would be used in conjunction with the 'Caret -> Go To Slot' command. Markers would be saved with the file.

This would be very useful in conjunction with Command files. Currently you can easily go to the start of the file, or to the end of the file and these two 'markers' are of course independent if the length of the file. But if the file is of a standard format, but of variable length, it is currently impossible to go to a place in the centre, as you do not know its cell number or how far it is from top or bottom of the file.

This suggestion arises because we use PipeDream for raising orders. These are of standard format, header and footer are always laid out the same, but the number of lines in the centre vary.

I'm sure the feature would have many uses once introduced and should not be at all difficult from the programming point of view.

File Save (on quit)
The 'Save File' box which opens on quitting Pipedream should be changed. At present is asks 'Do you want to save edited file ' and states the path and leaf name, with two click boxes 'Yes' and 'No'.

This should be changed so that the path and leaf name is a writable icon in which the current pathname is shown. If you wish to alter the name, you can re-write here. The two click boxes should then be 'Discard' and 'Save'. There should also be a file icon to do a drag and drop save.

This is more intuitive and more in line with most modern applications - as well as saving a lot of clicks when quitting with multiple files loaded.

Also, the 'save' windows should not move between mouse clicks as at present!

File Status
PipeDream jobs can consists of lots of interlocking files. There can be several data files and several custom function files. Closing down a complex system can be a nightmare, because supporting documents may have stored temporary data within themselves, so are technically changed. PipeDream will therefore ask whether these are to be saved as they are closed - so it is not possible to write, for instance, a command file to close a selection of documents.

Having a File Status option, attached to every file and saved with that file, would overcome this.

Possible statuses are

When a file is closed either by a command \Fc|m or by clicking on its close window, it should close according to its pre-defined status. The default status would of course be 'Ask'.

Filer path names
Dragging a file into a PipeDream window with Shift (or some other key held down) should insert the full pathname of the file into the active cell. At the moment Pipedream looks at the file type only to decide what to do and will insert the path is it is file such as a drawfile, that PipeDream can display.

This is the action of Edit, StrongEd and Zap. But I would propose two 'hotkeys'. One will insert the full pathname, the other just the leafname.

This new feature would, I am sure, have many uses but one that I can see is for instance, to insert the name of an ArcFax file containing an order in a slot against the order details so the customer's original order could always be located - without having to pin a printout to the paperwork!

Such pathnames would simply be displayed as text the full path name, or the leafname only (with a different hot key). Pipedream would make no effort to display these.

Formula Edit Line
You can drag and drop text into this (from, for instance, !Prophet), but it isn't properly incorporated into the cell when return is pressed. You have to click in the FEL before initiating a drag and drop into it.

Goto Slot
PipeDream has a 'Caret Goto Slot' command. However the slot named has to be named in full. It would be nice if a wildcard feature could be added, so that is the slot to go to was named as A* the caret would go to column A in the same row that it was in when the command was issued. Similately if the cell named was *50 it would stay in the same column but go to row 50.
This feature is particularly needed in macros which are used with sheets which have columns fixed (\Lfc). In these sheets, if the caret is moved far to the right the sheet 'folds' so that the low lettered columns 'slide under' the fixed section. In this folded state the command \Cnc (Caret - Next column) goes to the next visible column rather than the next physical column, so the command's effect depends on the current view of the sheet - not at all what you require in a command macro!
HTML
PD4 could be expanded to be more compatible with HTML. For instance, it could recognize links to other cells and could react to clicks on them.

It has struck me that PipeDream's own internal structure is in many respects similar to HTML. For instance its cell references are similar to HTML anchors. It can have names cells which has an HTML parallel and it references external files (e.g. Drawfiles) in a way very similar to HTML. Some consideration of these similarities could be useful and may extend PipeDream's interest by giving it a limited facility to export html.

Clearly HTML compatibility is a big ball-park and full compatibility would be a huge undertaking. But PD4 already includes mechanisms for cell referencing, and this mechanism could presumably be expanded to include a 'jump to cell' command, which would effectively be a hypertext link. This feature would greatly help in tracing program flow through custom functions!

Iconised Windows
PipeDream should save in every the file whether or not the window is iconised. An Iconised window should never gain the input focus until it is re-expanded to full size and manually prompted by clicking in it.

Currently when one PipeDream window is closed, the input focus is transferred to the next window. PipeDream (pre-dating Iconising of windows) pays no heed to the Iconised state on the window, so Iconised windows tend to spring open when other windows are closed.

Named supporting Documents
It should be possible, in any document, for the user to list other documents that support it and which should be closed automatically when the main document is closed.
This is because it can be very difficult doing a close down of a complex job when you have 20 or more PipeDream files loaded. It would aid such a task greatly if supporting documents were be named within a calling document. So the options for the named supporting documents are:

OSCLI
The equivalent of BASIC's OSCLI command: this would enable PipeDream to pass *commands to the OS, thus giving conditional file loading, the ability to run a Macro from a function and even the ability to boil the kettle and make a cuppa, subject to the correct hardware being available.

The problem with using this to implment contional file loading is that the usefulnessof the conditionally loaded file would be one way: the CLF could write to any existing file, but could not be called from a loaded file, or it would have already been loaded!

Printing
PipeDream has its own printer handling system: in many respects this pre-dates much of the modern OS printer handling and some of PipeDream's usefulness and speed lies in its internal printing handling, so changes here need to be carefully considered.

However - PipeDream has problems with embedded drawfiles. The RISC-OS system is that printing these is passed to an OS module (Drawfile) which does all the rendering. This module did not exist when PipeDream was designed, so PipeDream has its own draw file printing routines. These do not work properly with modern printers. In particular, PipeDream does not properly print fonts in draw files with any PostScript printing system.

Search and replace
If as searched string is in a protected slot, PipeDream will not go to it, but gives the error 'Protected Slot'. It should only give this error if the replace icon is ticked (and only then as it tries to do the replace). Ideally a tick box should be shown at this point saying 'Protected Slot'. 'Replace', 'Next'.

Set_type
A new function Set_type(slot,type) would be extremely useful. This could be used to change the contents of the slot from, for instance, text to number.

A third, optional, argument would be useful. If present the this argument would tell the function what contents to set the slot to. For instance Set_type(A1,number,1) or Set_type(A1,text,1). The argument could, of course, be calculated.

Set_value (text)
The function set_value(slot,value) can write text but only as a formula: the text is written to the slot as a calculation, in double inverted commas. This probably isn't surprising as the function is a set value command. However, it is often required to set a slot contents to text proper and at the moment, the set_value result has to be snap-shotted to do this.

It should be possible to write pure text into a slot! This requirement is probably interactive with the proposed set_type(slot,type) function, which may well accomplish this.

Type Function
Pipedream has a function 'Type' which allows it to differentiate between number, text, array, reference or date types.

However, this function does not differentiate between number and formula. It should. Thus the function returns:
Slot contentsType
4Number
4+2Number

This is also bound up with the 'Deref' function. But there appear to be no way to determine that the contemts of a slot contains a formula and so cannot be overwritten. This can be neccessary in, for instance, a custom function which is updating many slots. There should be a way of checking the slot for writability without writting to it and geting an error!

Window handling
Pipedream's itself dates back to the early Archimedes computer and it's window handling (and probably many other OS interactions) do not used today's preferred OS calls, so it works adversely with virtual desktop programs, MouseAxess and similar window manipulation tools.

Window Default Position
At the moment, each PipeDream window remembers its position when saved. It should only save a 'Default position' and some means of setting the default position is required.

In the 'Save' window (or may be in a separate 'Window Position' box) you would have two sets of window numbers, 'Current' and 'Default'. There would be Icons

The behaviour of Iconised Pipedream windows currently is not good: see Iconised Windows.


Unknown ease of implementation

Speak
PipeDream should be able to work with Jonathan Duddington's !Speak application.

SQL
PipeDream should be made to support SQL database query language.

Display of pictures
PipeDream stores pictures as a path and file name reference to the original picture, rather than embedding the file. This is a parallel method to HTML and works well. However, as soon as the cell containing the picture's filename moves off screen, Pipedream stops displaying the picture, even though part of the picture is really still on screen. It would be nice if PipeDream properly displayed the on-screen section of the picture.
It is possible that this will add significantly to the response time: if so it should be re-considered as one of PipeDream's favourite features is its speed of operation.

Wishes that are said to involve too radical a change

PipeDream is an old, well established program. Some features are too well embedded in its basic structure to be simply incorporated and nobody has a wish to compromise PipeDream's well proven stability!
Empty Cell format
Templates such as invoices are likely to have empty cells. So that, for instance, if you sell 2 widgits at £1.50 each and write an invoice to a template file, the invoice row will get written
2.00 Widgits 1.50 3.00

If empty cells retained a format, this would be written correctly as
2 Widgits £1.50 £3.00


Wishes that have been incorporated.

File Names
This was added with version 4.50/23
There was a feature in PipeDream so that filenames longer than 10 characters were not saved if the name was allocated before saving. However they will correctly load and save files with long names. Probably something to do with the 'end of name string' de-limiter character, perhaps. Interestingly, if a file was saved a second time with the long name, it saved OK!

This page's URL: http://www.4qd.co.uk/ro/pd4/wish.html


© 4QD 2000
Designed by Richard Torrens using RISC OS hardware and HTML³
Last updated 19th September, 2000.