PROforma introduction


What is PROforma

PROforma is short for 'PROGS Font & Raster Manager', and it does exactly what this name suggest. It is a library of routines to manage and display vector graphics and fonts on (raster) devices like screens and printers.

The availability of a separate program to manage graphics and fonts has several advantages. It allows application developers to create output of equal quality (resolution permitting) on several devices, and they can share resources. In short this means that the PROforma library only has to be loaded once, independent of the number of applications which use it. Also fonts only have to be loaded once, and can be shared between applications.

PROforma was originally developed as the graphics library for LINEdesign. That does not mean that this is the only kind of application for which PROforma is of use. PROforma is perfectly suitable as well for desktop publishers, word processors, business graphics and all applications which want high quality output (which must be just about every application except compilers and games). Actually, even at the time of writing there are things which are possible with PROforma and can't be accessed through LINEdesign.

More recently PROforma has been redesigned to a great extent, to make it even more future proof, easier to extend (both internally, and by writing drivers). There have been some changes to make it easier to write a window manager (for ProWesS) and complete support of colour has been added.

As a library, PROforma has the form of dynamic link library (DLL) (if you don't know what that is, don't worry).

This manual

This manual is intended to explain in detail what PROforma is about, how it operates, how it should be used and how it can be extended. For some specific details like possible errors of the access routines, we would like to refer to the PROforma_ddf DATAdesign file.

We (and everybody who uses this manual) would like it very much if you could send us any comments about this manual, like

At the bottom of each page is mentioned when the HTML document was last modified. I will try to keep this date correct, however it is only meant to indicate changes in the information provided, I will not change that date when correcting spelling mistakes or HTML errors.

Present, Past and Future

PROforma is originally developed as the graphics library for LINEdesign. When we started developing LINEdesign v2, we felt that the graphics routines we used were too slow, and also too restrictive. On the other hand, LINEdesign v1 was quite greedy on memory. Therefore, we threw away all the old routines, and started writing a new, more powerful and faster set of routines. During this development, we even introduced some concepts (like the clipping path), which are not used in LINEdesign. On the other hand, the graphics library was expanded to allow efficient editing on screen.

So what do we have now ??

We have a system that can efficiently render and display fonts. All fonts can be shared among applications. A font cache is used to speed up the handling of fonts. Even the font cache and everything in it is shared amongst applications. Fonts are rendered using proper hinting (if the font includes the hints).

The system can draw lines and curves either stroked (with given accuracy and thickness), or filled (using either in/out or winding rule).

Anything can be displayed in any gray shade or colour. If wanted, everything can also be clipped by regular or irregular shapes. Transformation matrices can be applied on the page.

The user can define which part of the coordinate space is actually visible on page (or screen).

Bitmapped pictures can be directly displayed. This allows the user to include screens in his or her output.

Possibilities for the future ??

We want to improve the control over how colour is produced, allowing the user to define how the colour patterns are formed. We also want to make it possible to use a pattern (drawn using PROforma of course) to be used as "colour". Also, we want to add dashed lines, and some variations on line caps, line joins and maybe even some kinds calligraphic lines.

PROforma already contains three kinds of drivers : bitmap drivers, printer (or screen) drivers, and picture drivers. At this point the bitmap drivers are only used internally in PROforma, but we are thinking of making them accessible from outside PROforma, so that general bitmap graphics routines can be written using the primitive commands in the bitmap drivers.

Although PROforma already uses hinting when displaying the fonts, we would like to examine whether we can further improve the quality of hinted fonts at very small sizes (especially when displayed on screens, e.g. in ProWesS).

Of course we continually try to improve PROforma's speed.

Installation

PROforma is a job which makes itself available to clients in the form of a Dynamic Link Library (a thing with an efficient access method).

Some extensions have to be loaded for PROforma to run : the dynamic link library manager and syslib.

PROforma has the shape of a job, and loads its configuration file ("PROforma_cfg") when it starts. A parameter can be given to PROforma to specify the path where the configuration file can be found (e.g. "win1_pf;flp1" to search on "win1_pf_" and "flp1_" in that order). If no parameter is given or the configuration file is still not found, then first the program default and then the data default devices will be searched.

The fact that PROforma has the form of a job (and not a resident extension as most libraries like the Menu Extensions), has certain advantages. Jobs can always be loaded (if you have enough memory), and jobs can always be removed. When loading a job it is possible to pass a parameter (like where to find the configuration file), which is particularly useful. Also, no memory is wasted if PROforma is loaded while a copy was already running. So if you want to release the memory which is used by PROforma, you can just remove the job. Of course the disadvantage of this scheme is that you can accidentally remove the PROforma job, which is dangerous as all programs which use PROforma will also be removed, so you could loose data that way (in fact, as ProWesS uses PROforma, all jobs which use ProWesS would also be removed).


PROGS, Professional & Graphical Software
last edited February 13, 1996