═══ 1. Introduction to PmDraw ═══ Welcome to PmDraw! PmDraw is a presentation graphics/foils package which is designed to take advantage of the Power of OS/2 in a friendly, streamlined way. It is a WYSIWYG (what-you-see-is-what-you-get) graphics editor, which means that except for differences in resolution, your hardcopy should look just like what you see on the screen. While PmDraw has been kept as simple as possible on the surface, it is a VERY powerful application - make a habit of looking in Help frequently when you don't see how something can be done when you are first starting. The index section is especially useful. PmDraw uses Presentation Manager's Help facility to present context-sensitive assistance for the user. This assistance is cross-referenced so you can easily get information on related topics. The primary introductory areas of interest are listed below, and can be accessed by using the cursor to highlight the desired keyword and pressing Enter, or by double-clicking directly on the keyword with the mouse. o PmDraw overview o Application window layout o User interface and Mouse Implementation. ═══ 2. Welcome! ═══ Welcome to PmDraw! PmDraw is a presentation graphics/foils package which is designed to take advantage of the Power of OS/2 in a friendly, streamlined way. It is a WYSIWYG (what-you-see-is-what-you-get) graphics editor, which means that except for differences in resolution, your hardcopy should look just like what you see on the screen. While PmDraw has been kept as simple as possible on the surface, it is a VERY powerful application - make a habit of looking in Help frequently when you don't see how something can be done when you are first starting. The index section is especially useful. PmDraw uses Presentation Manager's Help facility to present context-sensitive assistance for the user. This assistance is cross-referenced so you can easily get information on related topics. The primary introductory areas of interest are listed below, and can be accessed by using the cursor to highlight the desired keyword and pressing Enter, or by double-clicking directly on the keyword with the mouse. o PmDraw overview o Application window layout o User interface and Mouse Implementation. ═══ 2.1. Overview ═══ PmDraw is a what-you-see-is-what-you-get (WYSIWYG) object-oriented, graphics tool that has been developed under OS/2 Presentation Manager. It has been designed so that a wide variety of objects (text, lines, ellipses,... or groups of them) can be created on screen and manipulated in an intuitive fashion. 64 colors out of 16.7 million are available on-screen, but hardcopy is limited by your final-output capabilities. Information within PmDraw files is organized into pages, which are viewed one at a time. These pages can be output for hardcopy or even cross-referenced so that a change on one page shows up automatically on other pages. A file can therefore be thought of as a folder or a collection of related pages, as for a particular presentation. These pages are generally independent, having their own sizes, orientations and object attributes. ═══ 2.2. Application Window Layout ═══ PmDraw is layed out with a number of application areas or windows, some standard and some less so. The titlebar has the file name, followed by the current page (in parentheses) and which page it is in the file (eg. 2 of 4). If the file has had any changes since it was last changed, the file name on the titlebar will be followed by an asterix (*). Below the titlebar is the menu bar where major groups of actions are accessed. The pulldown menu items are: File Data load/save, export, hardcopy, exit. Edit Marking and manipulation editing actions. Modify Object-specific editing actions. Pages Page-related actions. Change, rename or delete, etc. Options Alignment grid, draft mode, personalization, save config, etc. Help General information and details regarding operation of PmDraw. Within the app's main client window, there are 5 less-standard areas. The primary area is the Drawing window which displays the current visible area of the current page. In addition to any graphics that are shown, ticmarks and grid pts may be visible. It is in this area that objects may be created and edited as will be explained below. Scroll bars are provided for moving the visible area around on the presentation page without change of magnification or window size, and are even available in the middle of object creation or editing operations. With this feature you can, for example, fix the first box corner and scroll to a different area on the page before setting the second corner. Above the Drawing window is a Prompt window which shows a one-line, context-sensitive indication of what action(s) are available to the user from within the Drawing window. For example, if creating a Box, this line might read "Position first box corner" indicating that the program expects the user to select the position within the Drawing window for the first corner of a new box. The user can either do this or use Menu options to perform an entirely different action or simply change object type (eg. ellipse). To one side (left or right, configurable), there are several windows or areas. The topmost is an Info window which displays the current Drawing window magnification (0.5 means 1/2 life size) and the current cursor coordinates. Coordinates are in inches or centimeters (user configurable), and will follow the cursor as you move it in either the Drawing window, or in the Mini-view window (described below). Next is the the object/selection window. This window contains radio buttons with which the user specifies what object to create (Box, ellipse, etc.) or an object Mark or selection state. For the former, any button actions in the Drawing area will be used to specify points for a new object (such as box corners), whereas when Mark is highlighted the user can use the mouse to select what objects to perform editing actions upon. The Insert key will toggle between Mark and the curren new object type. Beside the Mark button, there is an Unmark ("U") button which will only be enabled if objects are Marked on the current page. Pressing it will unmark any marked objects on the current page. This window is scrollable and will be reduced in size if the main frame is too short to display all side-panel windows. Control buttons are below this, containing: R Redraw the Drawing area + Zoom in (magnify) Drawing area - Zoom out (reduce) Drawing area The last panel area is the Mini-view window. This window shows a miniature view of the current page and can be used to zoom in directly on a specific area. In addition, there are two attribute dialogs whose visibility is controlled with switches on the Options pulldown: Text and Drawing dialogs. They display the current settings for the various object attributes and are used to change those for new and existing objects. ═══ 2.2.1. PmDraw Graphics Files ═══ PmDraw graphics can saved to disk and retrieved for later use through options available on the File menu. These options are: Old Retrieve a previously-saved file Save Store the workspace to disk with the current name Save As Prompts for a filename before saving In addition, New Clears the current workspace ═══ 2.2.2. PmDraw File Dialog ═══ PmDraw utilizes a standard file dialog box for specifying disk file names for load and save operations. It includes and entry field where a filespec or filename may be entered directly, and two listboxes, for files (in the current directory) and drive/directory selection. Only those files in the displayed directory that match the filespec in the entry field will be displayed in the Files listbox - change the filespec to display a different subset of files. The current drive/directory may be changed by clicking on the appropriate listbox entry. A file may be selected by clicking and selecting OK, or by double-clicking. After clicking on a filename, it is placed in the entry field, and may be edited in the usual fashion. Once a file has been saved or loaded successfully, the path and extension are returned to PmDraw and may be saved as defaults for that file type using Save Configuration, under Options. ═══ 2.2.3. Presentation Pages ═══ Information within PmDraw is organized into pages, which are viewed one at a time. These pages can be output for hardcopy or included in other pages as a cross-reference (Hyperlink) and handled as a single graphic object (moved, scaled, etc.). A file can therefore be thought of as a folder or a collection of related pages, as for a particular presentation. There is no limit on the number of pages in a file or workspace. When starting a new file, the workspace is initialized with one page (named Main), which is blank. From the Pages menu option, one can then: o Create a new page (add one to the list) o Rename the current page o Erase the current page (delete all items, reverse by Un-delete) o Copy the current page (must enter a name for the new page) Once more pages have been added, you can also: o View another page o Overlay another page (temporary, removed by a REFRESH) o Reorder it relative to other pages in the file. o Delete the current page Note that Delete for pages is irreversible! ═══ 2.2.4. Page Templates ═══ A page template is simply a starting point for creating a new page. It is a "sample" page who's size, orientation and background color will be used when creating a new page using it as a template. In addition, any objects on the template page will be copied onto the new page as well! This lets you set up a template page for a standard layout that you use frequently, which may contain a bounding box, a sample heading string, and footer info with your name, the date, etc. (text variables are EXTREMELY useful here). PmDraw allows you to access page templates easily when creating a new page. The template is selected from the dropdown list on the NewPage dialog. This list will contain all of the pages in your currently-defined template file, and an entry (New File) which lets you select the template file. Selecting "None" from this list will result in a blank page with details specified in your custom configuration (these can be changed using Personalize, New Objects). A starting template file is provided with the PmDraw package, called TEMPLATE.PMD. You can add or change pages in this file or use an entirely different file for your templates. ═══ 2.2.4.1. Page Indexing ═══ Using the Create Index entry on the main Pages menu, you can direct PmDraw to automatically create an index which shows all pages in the current file. The pages will be displayed in a row/column array of hyperlinks which phyisically point to the pages they represent, so that if the pages are modified the changes will show up in the index automatically. If there are more than 24 pages in the file, a multi-page index will be created with enough pages to show all actual pages in the file. The index will NOT reflect any changes due to page additions or deletions, nor will show any reordering. If these operations are performed, it is best to simply re-generate the index pages. If you select Create Index and index pages are already at the front of the file, you will be given the option of having them removed automatically before the new index is produced. ═══ 2.2.4.2. Page Maintenance Dialog ═══ This dialog lets the user Rename, Delete, or Re-order the pages in the current file. Multiple pages may be selected at once, by either pressing the mouse button and dragging it down the list, or by using the Ctl shift key to toggle individual pages. To Rename pages, mark them and press the Rename button and the naming dialog will be displayed for eached marked page in sequence. If you only want to Rename the currently viewed page without displaying this dialog, use the Ctl+N accelerator. To Delete pages, mark them and press the Delete button and all marked pages will be removed for the list. Note that once you leave the Maintenance dialog, delete operation are NOT REVERSIBLE. If you only want to Delete the currently viewed page without displaying this dialog, use the Ctl+K (kill?!) accelerator. To Re-order pages, you must first mark one or more consecutive pages and then use the second mouse button to grab and drag the pages to a new location in the list. As you drag the pages along, you will see a "pages icon" showing one or more pages attached to the cursor. If you try to drop them in an invalid location, you will hear a beep and no reordering will take place. ═══ 2.3. User interface and mouse implementation ═══ PmDraw's user interface has been organized and enabled with CUA (Consistent User Access) in mind. File, Edit and Help menu items are standard, and windows, menus and buttons behave as one familiar with OS/2 PM would expect. Context sensitive help for the main window and all dialogs is available using PF1. Within the Drawing area, the mouse can be used to create and manipulate graphic objects. In many cases, such actions require specifying 3 or more points (such as for an Arc or Polyline), so for consistency each point is specified by a single button click. Alternatively, to assist in aligning and connecting objects a keyboard assist keystroke can be used in place of a mouse click. In general, pressing the Enter key is equivalent to clicking MB1, and means to enter a point at the current cursor position and go to the next step in whatever the user is doing. Conversely, Esc is equivalent to MB2 and means to back up and redo the last point in the current action. "Drag" operations, where the first point is specified by a button press and the second by its release, are generally avoided because: o It is inconsistent o It is inherently limited to pel resolution o It requires that the user physically holds the button down and keeps the focus with the application until the action is complete. All operations in PmDraw have the drag-less behavior as the primary modus operandi, including Move and Copy where a starting and ending point must be specified. CUA specifies a mouse model for object selection and direct manipulation. When Mark is highlighted, objects may be selected for editing by clicking on them with mouse button 1 (MB1). As per the "multiple-select" model, each click will toggle an item's marked state on and off (as indicated by highlight marks on the object). In addition, CUA specs several drag operations for selection and manipulation: Drag MB1 Area select - toggles the marked state of all objects completely within the bounding rectangle. Drag MB2 Direct manipulation Move of all marked objects. Ctl+Drag MB2 Direct manipulation Copy of all marked objects (Ctl key pressed at START of drag). ═══ 3. Object Creation ═══ When one of the object types on the side panel is selected, such as Box or Ellipse, any button clicks (button 1) in the main Drawing area are interpreted as entered points for creating an object of that type. Primary objects include: o BOXES and SQUARES o POLYLINES o LINES o ELLIPSES and CIRCLES o ARCS o FILLETS o SPLINES o Freehand SKETCH o TEXT STRINGS and BLOCKS o HYPERLINKS A graph is a collection of such objects used to display data from a variety of sources. A group is a set of objects that have been locked together, and is formed and disolved using the Modify pulldown. Bitmaps are also graphic objects, and can be read from disk or pulled in from the clipboard. The process of creating an object typically requires several steps, and once initiated (typically by specifying a point in the Drawing window), must be completed before doing other actions within PmDraw. When created, graphic objects assume the current attribute values as displayed in the Text and Drawing Attribute dialogs. These attributes (color, linestyle, etc.) and object shapes and positions can be easily modified using object editing ═══ 3.1. Object Attributes ═══ Object attributes contol the details of the appearance of different objects. These attributes, such as color and linetype, are stored for each object, so each one can be different if desired. PmDraw maintains a "current set" which are applied to newly-created objects and which can be viewed and changed using the associated popup. These popups are accessed through the Attributes item on the main menu bar; within them, the current attribute value is indicated by highlighting and can be changed by clicking on a new value. Once an object has been created, its attributes can be changed by editing. For graphic objects, attributes include color, line-type, arrowhead (type, ends and size), marker (type and size) and fill pattern. For text strings, attributes include color, font, height and alignment. ═══ 3.2. Boxes and Squares ═══ BOXes are (possibly) filled rectangles that are created by specifying 2 corner points. It is stored as a set of points, so by editing you can skew a BOX into an arbitrary parallelagram. SQUAREs can be created by holding down the SHIFT key while positioning the second corner point. Associated attributes are color, linetype and fill pattern. ═══ 3.3. Polylines ═══ POLYLINEs are objects with multiple, connected, straight line segments, and when edited, all segments are affected. During creation, segments are added by pressing MB1 (or ENTER) or any of the cursor positioning keys Entering the same point twice or double clicking will end creation of a given polyline. During creation, pressing MB2 will "back up", and let you redo the last point entered. The attributes include color and linestyle for individual segments of a POLYLINE. In addition the polyline may be filled, with the final point automatically connected to the first and the enclosed area filled with the current fill pattern. If it is not filled, arrowheads may be added to one or both ends depending on the arrowhead attribute's value. The arrowhead attribute includes values for style, placement and size, and is accessed directly from the Attributes menu. Finally, markers may be drawn at each of a polyline's points. There are a number of marker types, some of which may be filled, as well as a marker size. Holding down the SHIFT key while positioning end points constrains individual segments to be either horizontal or vertical. ═══ 3.4. Lines ═══ A LINE is a single, straight line segment. Two endpoints must be specified during creation, and keyboard asstist keys may be used to position points precisely, connecting to other endpoints, curves, etc. Pressing MB2 (or ESC) aborts creation of a line that has been started. As for all objects, LINE's are created using the current specified attributes. Note that even if a set of LINE's are connected, they can be edited independently (unlike a POLYLINE's segments). The attributes include color, linestyle and arrowhead. Holding down the SHIFT key while positioning end points constrains LINEs to be either horizontal or vertical. ═══ 3.5. Ellipses and Circles ═══ ELLIPSE's are created by setting 2 points: the centroid and then the bounding box corner. ELLIPSES are created with axes parallel to page boundaries, but may be rotated during editing to arbitrary angles. Associated attributes are color, linestyle and fill pattern. Using the SHIFT key while setting the second point (bounding box) constrains the ELLIPSE to a CIRCLE. ═══ 3.6. Arcs ═══ An ARC is created as a piece of a circle, and upon scaling and rotation can become a piece of an arbitrarily oriented ellipse. For creation, you must specify 3 points: the center of the circle of which the ARC is a piece, start point (and thereby, the radius) and the end-point (to specify the total swept angle). Associated attributes are color, linestyle and fill pattern, and if filled yields a pie slice shape. Using the SHIFT key while setting the second point constrains the starting arc angle to multiples of 15 degrees from the horizontal (radius is not affected). With the last point, it constrains the total angle to multiples of 15 degrees. ═══ 3.7. Fillets ═══ A FILLET is a mathematical curve specified by 3 points, 2 being end-points and the 3rd being a "control" point. It is best understood visually; create one and see what it looks like. Attributes for FILLETs are color, linestyle, fill pattern and arrowhead. If filled, the arrowhead attribute is ignored (as for polylines), and the area is bounded by the fillet curve and a line connecting its endpoints. There are no SHIFT key assists for FILLETs. ═══ 3.8. Spline ═══ A spline is a smooth curve which passes through a set of control points. As a spline is created, you will see its shape change as the cursor is moved. Points are added and removed in the usual fashion, with the end signalled by repeating a point twice in a row with the cursor or keyboard. If a spline is "closed" on itself, it will automagically smooth the join. Attributes for SPLINEs are color, linestyle, fill pattern and arrowhead. If filled, the arrowhead attribute is ignored (as for polylines), and the area is bounded by the spline curve and a line connecting its endpoints. There are no SHIFT key assists for SPLINEs. ═══ 3.9. Freehand sketch ═══ This allows the user to enter a POLYLINE with a dense set of points by sketching freehand with the mouse. After entering the starting point, the curve will follow the cursor until MB1 is pressed again. You can connect to the start of the sketched curve using the "e" keyboard assist. Once created, a sketched curve is like any other polyline. ═══ 3.10. Groups ═══ A GROUP is simply a set of objects on a page which have been "locked together" for convenience. Once you have created a set of objects which will maintain fixed relative positions, select them all and form a GROUP. The group can then be selected and manipulated as if it were a single object. Whenever selected, a Group will be outlined by its bounding box. If you wish to add or delete items from a group, it can be broken apart using the appropriate entry from the Edit pulldown. The attributes of objects within a group ARE affected by attribute editing. There are NO attributes associated with groups themselves, objects within a group have their own attributes. There are no SHIFT key assists for groups. ═══ 3.11. Bitmaps ═══ A bitmap is a two dimensional array of pels forming an image. The icons representing applications on the PM desktop are special examples of a bitmap. PmDraw allows the user to import bitmaps for inclusion in a graphics page along with the usual vector-based objects such as boxes and ellipses. When importing bitmaps, the user must first specify the file name or alternatively tell PmDraw to pull a bitmap from the clipboard (after having been placed there by an application). You must then position and size the bitmap in the normal manner, first positioning a corner and then setting the size with the rubber box. Note that PmDraw also supports the export of graphics as bitmaps (images), either to disk or to the PM clipboard. Two apps which are highly recommended for use with bitmaps are SCRAP for capturing images from your PM desktop, and UBU which has powerful half-toning and browsing capability supporting a variety of formats including BMP and GIF files. Both apps are available on OS2TOOLS. LIMITATIONS: Bitmaps cannot be exported to PostScript (directly) or to CGM. The only hardcopy route is using Print and going through PM's Print Manager. In addition, bitmaps CANNOT be rotated. Besides limiting the on-page manipulation, this means that when printing, the PmDraw page containing a bitmap must be oriented the same way (landscape vs. portrait) as the printer page to get correct results. There are NO attributes associated with bitmaps. Use the SHIFT key when sizing a bitmap to maintain its original aspect ratio. ═══ 3.11.1. Clipboard Copy ═══ This action lets the user place PmDraw graphics on the PM clipboard. Three data types are supported, PM metafile, text and bitmap (1.1 format). by default all are selected when the dialog is presented. The user can de-select any formats not desired. This is particularly useful when putting data on the clipboard for subsequent use by an application which uses its own (incorrect) logic to decide which format to take from the clipboard. You can force it to take the correct format by only placing that one on the clipboard. In addition, selecting only the desired format will let the operation complete sooner. PM metafile will be a pic of the entire current page. Text will include only MARKED strings, and will be disabled if no text is marked. Bitmaps will depict the current window area on the current page. An alternative route for bitmaps is to use Export (under File), where you can explicitly set the bitmap resolution and color format, and then place it on the Clipboard from the File dialog. ═══ 3.11.2. Clipboard Paste ═══ PmDraw lets you pull either text or bitmap data in from the clipboard. If only one type is available it is pulled in immediately. If both types are available, this dialog lets the user select the desired format. ═══ 3.12. Clip art ═══ Clipart pics can be imported to easily enhance your graphics using the entry under Import on the File pulldown. Selecting this option will present the file dialog for selecting the source file for the artwork. Once the clipart file is selected, a list of clipart pictures is displayed - select by marking the desired pic and pressing OK or by double-clicking on the pic's name. A bounding box will be displayed on the page for positioning and sizing the clipart in the usual fashion. First button click will fix the first corner, second will set the size and shape. As usual, the SHIFT key can be used to insure that the aspect ratio remains correct. In addition, once the first corner has been positioned you can press "m" and enter an explicit magnification factor (such as 1.0). Clipart is simply a collection of PmDraw objects, and so can be easily edited. At present, clipart is stored in standard PMD format with one picture per page, so the user may produce his own and access it through clipart easily. In the future, this will be enhanced by including a bitmap of the clipart so the user can select objects visually as well as by name. ═══ 3.13. Text blocks ═══ Text blocks are objects which allow powerful WYSISYG editing and formatting of text which is presented in multiple lines on the page. Margins are set by standard manipulation on screen, and the text is entered in an MLE (multi-line-edit control) in the main block-text dialog. As an aid to formatting, a distinction between lines and paragraphs is made: a PARAGRAPH is denoted by a "hard break" in the MLE-entered text produced by pressing Enter there. As one types, the text in a given paragraph will be word wrapped in the MLE. Similarly, the text in that paragraph will be wrapped according to the user-specified margins on page (this wrapping will NOT be the same as that in the MLE because of font differences), and each string produced by this wrapping is a separate LINE. Line spacing will then denote the gap between consecutive lines in a given paragraph, while paragraph spacing gives the space between those. Depending upon the formatting details, your text can be formatted in a variety of ways - schemes are provided as a way to change this overall look easily. In addition, the concept of paragraph levels enables sophisticated bullet charts, outlines or standard text formatting to be performed. Justification of text is where words on a line are spread out so that both the left and right margins are uniform - this function is not yet enabled. The MLE into which text is entered is fully clipboard-enabled, and uses the CUA-defined Copy and Paste actions via Ctl+Insert and Shift+Insert. For Copy, only text which is selected will be put on the clipboard. For Paste, if any text is already selected it will be replaced with that on the clipboard; otherwise the clipboard text will be inserted at the cursor. Note that text pasted in from the clipboard will frequently have extraneous "hard-breaks" at the end of each line that you will need to delete to get proper wrapping and formatting. ═══ 3.14. Text blocks ═══ Text block schemes are formatting details for a particular layout style. PmDraw provides a standard scheme for bullet charts, one for text formatting for paragraphs, and also allows the user to produce their own custom scheme and save it for general use. The scheme dialog lets the user select any of these three schemes and apply it to the text block being edited. Access to the four formatting levels is provided through pushbuttons on the right side of the dialog, and an Undo function is provided. The formatting of the current text block can be saved in the user's configuration data using the Save custom button. ═══ 3.15. Text block LEVELS ═══ Text blocks allow for several formatting levels. These levels are denote by none, one, two or three ';' characters at the beginning of a paragraph. If there are NO ;'s, the paragraph is formatted using the details for the top level, and so forth. Each level retains its own values for text attributes (color, font, etc.) and for formatting details such as margins and indent. Level details include: Indent Lateral spacing for the start of the first line of a paragraph. A positive value will cause the first line to be shifted to the right (for left-justified text), and a negative value will give a first line that is flush left and all subsequent lines in the paragraph will be indented. Latter is good for bullets. For numbering, positive, negative and zero indent all produce useful variations in alignment to the leading number. ALL CAPS This causes all text in the level to capitalized. Underline Underlines all text in the level. NOT YET IMPLEMENTED... Bullets This causes a leader to be inserted at the beginning of a paragraph. Three different types of leaders are available: a symbol bullet is a polyline marker (box, circle, etc.); a char is any ascii character found in the level's font; and several numbering schemes. Numbering includes Roman and Arabic numberals, as well as letters, for outlining or lists. ═══ 3.16. Text strings ═══ Text strings are also handled within PmDraw as graphic objects, and are limited to a single row of up to 255 characters. They may be manipulated by all of the usual Editing operations, and have the attributes color, font, alignment and size. Positioning is performed using the cursor, with keyboard assist keys for precise positioning and alignment. Once a location on the screen has been specified, the text-entry dialog is displayed for entering the string. The text can then be typed in manually or pulled in from the Clipboard and will then be displayed on screen. These text objects will be individual lines, with the current size, font, alignment and default line spacing. Two separate font technologies are supported in PmDraw, each with their own strengths and weaknesses. These are the o Hershey fonts o Outline fonts ═══ 3.17. Text Entry/Edit ═══ This dialog box allows the user to enter new text for string objects, pull in a block of text from the Clipboard (to produce any number of text objects), or to edit an existing text object on the current page. When adding new text, the dialog will be displayed with no text in the entry field. Text may be typed in directly, or pulled in from the Clipboard using that button. If clipboard text is pulled in, the text objects are automatically created and displayed, and the dialog box is removed. If text is entered manually, one has the option of entering a single string (by pressing OK button) or continuing to the next string with a linefeed positioning adjustment. Whichever method is used for entering text, the current text attributes of Font, Alignment and Size will be applied to the new text objects. A reference table for the Greek/math characters is available and can be displayed or hidden using the Ref. Table button in the text entry dialog. ═══ 3.17.1. Hershey Fonts ═══ For lack of a better choice, a set of public-domain HERSHEY stroke fonts have been employed (which are also used in GDDM graphics). The advantage of the HERSHEY fonts is that they are rendered as simple line-drawing commands and are thus device independent. This enables us to provide a variety of text formatting capabilities, including: o Greek/math symbols o Superscripts/subscripts o Underlining o Special characters The disadvantages are that o They are designed to be "stroked" rather than filled and so are not as pretty at larger scales. o There is no foriegn language character support in the current fonts. o When exported, string information is "lost" so that if you are importing into another application, it will be able to display but not edit any text strings (except as line segments...). The HERSHEY font set used at present includes one mono-spaced font: Roman Simplex Mono and the following proportionally-spaced fonts: Roman Simplex Roman Complex Roman Duplex Roman Triplex Italic Simplex Italic Complex Script Simplex Script Complex Gothic English Gothic English Gothic English ═══ 3.17.2. Outline fonts ═══ Outline fonts are now available for use within PmDraw. These fonts give excellent resolution at all scales and provide built-in (mostly!) National Language Support. They do NOT at present support the formatting capability that is covered with the Hershey fonts, and cannot yet be properly be rendered using CGM export... Otherwise, they are interchangable with the Hershey fonts, providing high quality rendering of the following font families (under OS/2 1.2 and greater): Courier Helvetica Times Roman Each of these is available in normal, bold, italic and bold-italic forms. In addition, under OS/2 1.3 and greater, any installed Adobe font will be available to the user. These fonts are specified using the VFONT item in the Attributes menu. ═══ 3.17.3. Text Alignment ═══ A text string also has an associated reference point on the presentation page. The orientation attribute determines how the text string is aligned relative to its reference point, allowing horizontal alignments of left, right or centered, and vertical alignments of top, bottom or centered (9 possible combinations). As an aid in entering aligned strings, after a string is entered and displayed, the cursor is automatically shifted down for a "line feed". Pressing ENTER again (or MB1) selects the new reference point and proceeds to entry of the next text string. ═══ 3.17.4. Greek/math symbols ═══ Greek letters and a variety of math symbols may be embedded in strings and will be displayed in simplex or complex, appropriate to the string's font. These symbols are designated by normal characters delimited by ! marks, so that the typed string fav!o!rite would display as favorite, with a Greek omega instead of an o. !O! produces an infinity symbol. A reference table showing the correspondence between typed characters and Greek or math symbols is available under the Attributes menu. If one wants to embed an ! in a string, it must be preceeded by a \ (backslash). If an ! is not paired with another in the typed string, all characters following it are translated to Greek/math symbols. ═══ 3.17.5. Underlining ═══ Underlining is delimited by & characters - all characters between paired &'s (or following an un-paired one) will have a connected horizontal line underneath. The typed string "&Ray& \& &Alan&" will display as "Ray & Alan". In order to display an &, precede it with a \. ═══ 3.17.6. Superscripts/subscripts ═══ For fancier formatting and equations, sub- and superscripts may be embedded in text strings. The subscript operator is _ (underscore), and the superscript operator is ^ (caret). In order to enable nesting of xscripts, they are not delimitted - rather, any "single thing" following an operator is xscripted, where a "single thing" is either a character or a group of characters delimited by { } (curly braces). As a result, 2 10^2a displays as 10 a , while 2a 10^{2a} displays as 10 . Similarly, a 2 10^{2^a} would give 10 . Subscripts work in an analogous fashion, and the two may be mixed arbitrarily. As with other special text characters, ^ and _ must be preceeded by \ to be displayed. ═══ 3.17.7. Special characters ═══ In PmDraw text formatting, a number of characters have "special" meanings. In order to include them for display in a text string, they must be preceeded by a \ ( \\ displays only \ ). At present, there are: \ Display special character ! Greek/math (delimits) ^ Superscript _ Subscript & Underline (delimit) { } Grouping delimiters (for xscripts) ═══ 3.17.8. Text VARIABLES ═══ You can use text variables to insert text into strings for TIME, DATE, and other things that can be generated automatically. Text variables are denoted by a '%' char, and at present include: %d Date (mm/dd/yy at present) %t Time (hh:mm am/pm) %p Page name %f Brief filename %F Full filename %n Page number %N Total pages For example, a string that includes "Page %p (%n of %N)" might display and print as "Page Main (1 of 14)". Text variables are particularly useful when placed in page templates, for header and footer details. ═══ 3.18. Hyperlinks ═══ A hyperlink is a link between an area on one page (source), and another area on the same or different page in the same file (target) so that any objects that fall completely within the source area are displayed automatically in the target area. If modifications are performed within a hyperlink source area, all links to it will show these modifications. If you double-click on a hyperlink PmDraw will switch to its source page, which is useful for editing the source objects, or in making jump-buttons for interactive presentations. Hyperlinks may be "nested", in that a hyperlink source area may contain another hyperlink, that contains another hyperlink... and so on. There is no limit to this nesting level, and no restric- tion on source and target overlap areas - EXCEPT that objects shown in a hyperlink will only be displayed ONCE (preventing infinite loops). Hyperlinks may be moved, scaled, rotated or copied in their entirety. Objects displayed through a hyperlink though MUST be edited on the actual SOURCE page on which they reside. If you want to sever the hyperlink and copy the objects locally so they can be modified, use the fracture option under the Arrange menu. Hyperlinks are created in three steps. When the user presses the hyperlink button, a listbox is displayed with names of the all pages in the current file. Once chosen, the hyperlink source page is displayed and the user specifies the box which defines the source area. Objects must be COMPLETELY within this box to be displayed. Finally, the original page is re-displayed and the user specifies the target area into which the hyperlink is to be placed (again with a box). While placing the first corner, a tracking box will indicate the size and shape of the source area (at 1:1 scale). Once positioned, the cursor snaps to the opposite corner allowing easy 1:1 sizing. Alternatively, the user can specify an arbitrary size and scaling or, using the SHFT key, scale the hyperlink isotropically. When the second target corner is placed, the hyperlink is displayed. In addition to the general editing functions (edit, scale, etc.), a hyperlink may be modified using Control Point editing. If the hyperlink is CP marked (Alt+click), you can resize it by dragging on one or the other of its open corner boxes. If you want to modify the source area of the hyperlink, hold down the Alt shift key when you first start dragging on a corner - you will see the prompt text indicate that you are performing this action instead of a normal re-shape operation. ═══ 3.19. Jump-buttons ═══ A "jump-button" is a hyperlink or a group containing a hyperlink, such that if you are in Mark (Select) mode, double-clicking on the object will cause PmDraw to change to source page for the hyperlink. This is extremely useful for interactive presentations where you would like to be able to move easily between different sections of the presentation rather than step sequentially (using PgUp/PgDn). The advantage of a Group jump-button is that you can make a picture of a button (use the clipart button in SHAPES.PMD!) along with an appropriate text string or picture, add a hyperlink to the target page that you want the button to jump TO (the hyperlink need not even contain any objects), and GROUP them together. Double-clicking on this group will then cause a JUMP. Once you have created a jump-button, you can copy it easily onto other pages using clipboard Copy/Paste operations. If you want to change the Jump destination, you will have to fracture the Group, delete the hyperlink, create a new hyperlink pointing to the correct page, and re-Group the objects. A sample file showing how jump-buttons work is provided in the samples as HYPRLINK.PMD. ═══ 3.20. Interactive presentations ═══ You can display the pages in your file full screen in a fullscreen mode for free running or interactive presentations. PF8 (View/Fullscreen) will let you toggle between fullscreen and normal modes for interactive use. A pagesize of "VGA screen" is particularly useful for developing pages which will fill the screen completely when in fullscreen mode. Once in fullscreen mode, you can navigate using the normal PgUp/PgDn keys on the keyboard. In addition, if you incorporate jump buttons you can provide a means to move around in your set of pages in an arbitrary (pre-defined) fashion rather than sequentially. In addition, you can use PmDraw to perform free-running (stand alone) slide sequences or presentations run under control of the mouse (View/Screenshow). ═══ 4. Editing objects ═══ In order to change existing objects on a PmDraw page, you must first select, or mark the objects to edit. Once the desired objects have been selected, general manipulation actions can be initiated using actions from the Edit pulldown: o MOVE o COPY o Array copy o SCALE o ROTATE o DELETE o UNDO In addition, object attributes may be edited directly, and additional actions become avaiable via the Modify pulldown: o Text editing o Form group o Break up group o Fracture x-refs o Z-order: Bring to front o Z-order: Put in back Finally, objects can be re-shaped using control-point editing. ═══ 4.1. Marking objects ═══ When editing, only those objects which have been "marked" can be affected, whether by physical manipulation such as MOVEs or SCALEs, or by Attribute changes. This marking is indicated by highlighted points on the objects themselves which will be marked with a small box that can be either filled or empty. Marking can be performed in several ways, with the simplest being to use the cursor directly, clicking on each object. When using the cursor to mark specific objects, distances are calculated to the nearest point on each object (unless "keyboard assist" is used), and the nearest object is toggled between marked and unmarked. Normal marking is indicated by a filled box highlighting one or two points on an object. This occurs when Mark is selected and the object is clicked on with MB1. A "single-mark" can be made by double-clicking on an object, which will mark the nearest object and unmark all others. In addition, all control points of that object will be marked with hollow boxes indicating that these control points may be moved to re-shape the object. At present, when a new object is created this single-mark action occurs automatically. Additionally, marking actions are provided in the Edit pulldown for changing the marked state of a group of objects. Mark area toggles the marked state of all objects within a box that the user specifies with the cursor. Mark all and Unmark all are self-explanatory. The keyboard assist keys can be used to mark objects of a specific type, either when objects overlap and are difficult to mark with the cursor, or for greater speed. The "t" key, for selecting the nearest TEXT object is particularly useful. ═══ 4.2. Re-shape objects ═══ When an object on the current page is "single-selected" (open boxes at control points), it may be re-shaped by moving these points individually. If CUA manip is enabled, the user may simply click within the cp box with MB2 and drag the point to a new position. Alternatively, the action may be started by selecting Move from the Edit pulldown and clicking within the cp box for the starting point. When either of these is done, the cursor is snapped EXACTLY onto the control point (not pel limited) so the user can position it as desired. If dragging, it is placed by releasing MB2 or by pressing a keyboard assist key. If via Move, it is by a normal second point positioning. Use Esc to abort the action. In general, the re-shaping action will respect the perspective view of the object being edited. If the object had been rotated and scaled so as to appear skewed in three dimensions, the re-shaping will maintain that perspective. For objects with aspect ratios, the SHIFT key can be used to maintain that aspect. When re-shaping text, the size indicator in the Text Attributes dialog will dynamically indicate the height of the text on the page. ═══ 4.3. Move ═══ MOVE lets you reposition objects on a PmDraw page. A move operation acts only on marked objects, and can be performed in one of two ways: CUA Simply click and drag objects on the page using the right mouse button. Precision Select MOVE from the Arrange menu or press Ctl+m to start. Then enter a start point and end point on the page using either left mouse button clicks or keyboard assist key presses. Great for moving an endpoint or center to a precise location. Holding the SHIFT key down constrains the move to either horizontal or vertical displacement. To move objects between different pages (or different PmDraw sessions), use the clipboard copy and paste actions (under Edit) to copy the marked objects and then delete the originals. ═══ 4.4. Scale/Resize Objects ═══ SCALE allows the user to change the size and aspect ratio (X/Y) of selected objects. Three points are required: a reference point which will remain fixed on the page, second corner for the starting box, and second corner for final (destination) box. All marked objects will be scaled by the ratio of the box sizes, and may be mirrored or flipped. Note that in general, objects will be moved as well as sized, so that if you SCALE several objects at once, their relative positioning will remain fixed. If you wish to maintain the original aspect ratio, hold down the SHIFT key while sizing the final box size, its shape will remain the same as the starting box's. ═══ 4.5. Rotate ═══ Rotate lets you spin all marked objects around a center point. When you begin a rotate operation, a "spin circle" will be displayed. Drag the center point (right mouse button) to change the center of rotation; drag the perimeter point to rotate the objects. An "odometer" in the lower left of the screen will show the current rotation angle. Using the SHIFT key constrains the rotatIon angle to even 15 degree steps. This makes it easy to rotate exactly right angles (90 deg) and so forth. Alternatively, once the "spin circle" is displayed you can press 'a' (for angle) and enter a precise rotation angle directly. Use ESC to abort a rotate operation. ═══ 4.6. Copy ═══ COPY creates duplicates of the marked objects on the current page. These duplicates must then be position on the page. Like a MOVE operation, there are two methods: CUA Simply hold the Ctrl key down, then click and drag objects on the page using the right mouse button. Precision Select COPY from the Arrange menu or press Ctl+c to start. Then enter a start point and end point on the page using either left mouse button clicks or keyboard assist key presses. If the same point is entered twice, the duplicates will overlay the originals EXACTLY. Using the SHIFT key during copy constrains the displacement to horizontal or vertical, and helps the user to align copies precisely. To copy objects between different pages (or different PmDraw sessions), use the clipboard copy and paste actions (under Edit). ═══ 4.7. Delete ═══ DELETE removes the marked objects from the presentation page. This can be performed by selecting Delete from the Edit menu, or by pressing the Delete key. Un-delete is obtained using Undo (under Edit). ═══ 4.8. Undo ═══ UNDO sequentially backs up through the most recent editing actions you have performed on the current page. Such actions include creating new objects, moving, scaling, changing colors, and even changing marking selections. The default number of steps retained for each page is 5 - this can be changed at the user's option using Personalize (under Options). ═══ 4.9. Flip ═══ FLIP allows you to flip all marked objects left-to-right or top-to-bottom. Selecting one or the other will display a "divider" line either horizontal or vertical across which the objects will be flipped. Use the mouse or keyboard assists as usual to specify the location of the mirroring axis, MB2 will abort the action. ═══ 4.10. Fit to page ═══ This option causes all MARKED objects to be rescaled so that they fit entirely within the page. The scaling is uniform (not stretched), and if there is excess space in one or the other direction the objects are centered. ═══ 4.11. Snap to grid ═══ This option causes all MARKED objects to be moved and reshaped so that their control points fall on grid points. ═══ 4.12. Invert B/W ═══ This editing action swaps black for white on a PmDraw graphics page. It has no effect on objects that are not black or white. If objects are marked, black and white are swapped for only those objects. If there are no marked objects, all objects on the page and the page background itself are inverted. ═══ 4.13. Editing Attributes ═══ Attributes of all existing objects can be changed with ease. While Mark is selected, select the objects to be altered (by marking). Once marked, any relevant attribute can be changed using the Text and Drawing attribute dialogs. Click on the attribute of interest and a list of possible choices will be presented. Select the new attribute and it will be applied to the Marked object(s). Only "appropriate" objects will be changed correspondingly - if you have a polyline marked and you change the text font, the polyline will not be affected... Using these techniques, one can create a full page with default attributes, and then go back and "touch it up", setting fonts, linestyles, colors and so forth. ═══ 4.14. Text editing ═══ Text strings may be edited as well. Select the string(s) to be edited and use the "text Edit" option in the Edit menu. Each marked string will, in turn, be placed in the text entry dialog to be edited as desired. Pressing CANCEL from the text editing dialog will leave the string unchanged. ═══ 4.15. Fracture x-refs ═══ An x-ref is actually a pointer to graphic objects on another page in the current PmDraw workspace. As such, the attributes of individual pieces may not be changed, but the x-ref may be manipulated as a single object (attributes can, of course, be changed on their source page - these changes will then be seen everywhere the objects are referenced in x-refs). In order to edit pieces of an x-ref, it must be fractured so that the individual pieces are actually copied into the current page. This action is performed by Marking the X-ref(s) to be fractured, and selecting Fracture under the Modify pulldown. Since the action is irreversible, the user will be prompted for confirmation for each marked subcell before the action is performed. ═══ 4.16. Z-order: Front ═══ If objects overlap on the presentation page, the ones that appear to be on top are the ones that are drawn last. This action takes marked objects and moves them in front of unmarked objects on the page. Note that with IBM's plotter drivers, all objects will be drawn completely - so filled overlapping objects will almost certainly not be rendered "correctly". ═══ 4.17. Z-order: Back ═══ If objects overlap on the presentation page, the ones that appear to be underneath are the ones that are drawn first. This action takes marked objects and moves them behind unmarked objects on the page. Note that with IBM's plotter drivers, all objects will be drawn completely - so filled overlapping objects will almost certainly not be rendered "correctly". ═══ 5. Graphics export ═══ Data from PmDraw graphics may be exported in a variety of formats for eventual hardcopy or import into other applications. The export functions store the data to files which, by default, have extensions corresponding to the format being written. For non-image formats (CGM, MET, etc.), multiple pages can be exported simultaneously. Select the pages to be exported from the left listbox, and the export format from the right listbox. Pressing the export button will initiate an export using the file spec at the bottom of this dialog (which may be edited directly); alternatively, when exporting only one file export as will cause the standard file dialog to be displayed for file/path entry. If installed, the Image Toolkit enables the import and export of a variety of image formats, such as standard OS/2 bitmaps (bmp files), CompuServe GIF files, etc. When the export dialog is opened, the toolkit is queried and all known image formats are added to the type listbox for possible selection. At present, bitmap exports are restricted to current view of the current page ONLY. Checkboxes are included for control over export details - one allows black and white color inversion, while the other controls whether the page background fill is included in the export file. ═══ 6. Graphics import ═══ Import allows one to pull graphics in from files on disk into the current PmDraw workspace. These graphics may be imported onto the current page as additional objects, or onto new pages (page name is derived from the import filename). At present, graphics may be imported from CGM and various image formats, as well as from other PMD files. If importing onto the current page, the data is scanned for size and a bounding box is displayed for positioning and sizing on page. Importing graphics from a page of a PMD file this way is called clipart, and can be performed quickly using its accelerator (Ctl+c). After specifying the clipart file, a list of objects (pmd pages) are displayed for selection. Pages including x-refs may NOT be used as clipart - such pages will be marked with a "*" in the list. If installed, the Image Toolkit enables "smart" loading, in that it will determine the filetype, and if known import it into PmDraw. ═══ 7. Image toolkit ═══ This is a dll-based toolkit that allows one to load and save a variety of image formats, such as standard OS/2 bitmaps, CompuServe GIF files, etc. The toolkit is installed and managed using ITKINSTA.EXE. Image "handlers" can be registered in your system which are then available for applications like PmDraw for loading and saving images. When exporting to an image format, the toolkit is queried (if installed) and all available image formats are added to the appropriate listbox for possible selection. When importing, "intellegent" handling is used whereby the user selects any image file and the toolkit is used to determine the file type and load it (if known). ═══ 8. Printing ═══ Workstation based hardcopy is supported in PmDraw by a, spooling through the PM Print Manager and b, direct copying to PostScript printers (Direct PostScript). The Print Manager enables spooled output so that, to a large extent, it occurs in the background and allows the user to continue doing other things (like producing more graphics!). From the File menu item, Print access the primary print-dialog from which one can select pages to be printed, specify the target printer, set printing options, and start the print job. In addition, a single page at a time may be layed out (formatted) within the print page, or exported to PostScript or HP/GL plotter compatible files. The other printing option within PmDraw is to let PmDraw generate its own PostScript representation of your graphics and copy it directly to an LPT to which a PostScript printer is attached - Direct PostScript. ═══ 8.1. Print dialog ═══ This dialog lets the user select pages to be printed, specify printer and options, and start a print job. The Pages listbox is where the user specifies the pages to be printed. Multiple pages can be highlighted to be printed as a single job. Note that multiple pages can only be Printed, only one page at a time can be Formatted or Exported through the Print Manager. Options allows the user to specify certain printing details. Query job properties causes the printing driver being used to display its configuration dialog at the start of the print job. Fit to margins will force your page to be scaled to fall completely within the margins of the printer's defined page form. Autorotate tells PmDraw to rotate your output automatically if the aspect ratio is different between your page(s) and the printer page. Next is the Printer area. The printer description is displayed here, as well as buttons for invoking the Change printer and printer Information dialogs. Print actually starts the print job. A copy of your workspace is produced and a background thread is started to process all of the pages you have specified. Since the spooling is done from a separate copy, the user is free to return to the main application and make editing changes or load an entirely new file while the print job is running. If you attempt to end PmDraw while this printing thread is running, a warning dialog will be displayed. Print will be disabled if either the selected printer is not connected to a physical port, or if no pages are selected. Format starts up PmDraw's Fantastic Print Formatter (FPF) with the selected page and printer. Export is enabled if the selected printer is a PostScript or plotter type of printer. When selected, PmDraw will prompt the user for a filename and will route the selected page through the Print Manager's printer driver and produce a compatible file on disk. ═══ 8.2. Printer Information ═══ This dialog displays information relevant to the currently selected printer. It shows which physical port the printer is "attached" to, and whether the associated driver is capable of writing its output directly to a file (Export-able). It also lists the current form name, its dimensions and margins. ═══ 8.3. Format print ═══ The "fantastic print formatter" enables powerful control over the layout of PmDraw graphics on your output device. To do this, the current page is written to a metafile (in memory) and the formatter window is displayed. The formatter shows both this metafile (as source, on left) and the printer output page (as target, on right). The source page will reflect the size and orientation of the PmDraw page; the target page will reflect the current "form" for the current printer. Using the formatting options and mouse, the user can lay out his picture as desired. Then from the File menu, he can start the print job, export the formatted output to a file (if enabled), or change printer. Note that once the formatter has been started up with a pic, you can return to PmDraw without closing and do further work (changes will NOT become part of the formatter's pic). You cannot, however, send something new to the formatter without first terminating it. Close the formatter down using the Quit menu option. ═══ 8.3.1. Formatting ═══ Formatting consists of a) selecting the area of the presentation page to print, and b) specifying where on the output page you want it to be put. On the output page, if the current "form" has margins defined they will be greyed-out so that the user can see exactly what area is printable. Options are available for maintaing aspect ratio (the default), rotation and "Mirror clip" (a mystery...), but the primary modus operandi is to set a box on the source area to delineate what will be printed (may be the whole page), and also a target box on the printer page. These boxes are specified in the same manner as boxes in PmDraw (MB1 click for first and second corners). A bounding box is optionally printed depending on the Include-box setting (indicated by a check). ═══ 8.3.2. Selecting printer/driver ═══ *** Changing printer *** This option allows you to specify any printer/driver combination defined in Print Manager as the hardcopy destination. When Change-printer is selected, a dialog is displayed with 2 listboxes. The left box displays all of the printers currently defined, while the right listbox displays the drivers available for the selected (highlighted) printer. Each device driver has a "current form" which specifies the page size, margins, etc. Pressing the Info button displays a dialog with this information, as well as whether the printer is connected to a physical device and if it is export-capable. Selecting Ok changes to the highlighted printer/driver combination, while Cancel leaves the settings unchanged. ═══ 8.3.3. Routing to a file ═══ Using the Print Formatter and either the PSCRIPT or PLOTTERS drivers, PmDraw output can be exported to PostScript or HP/GL format ascii files. Such output is produced by the drivers and is subject to any bugs or quirks they may have, but for some cases may be advantageous - an example is that the PSCRIPT driver has a more sophisticated color-to-greyscale mapping than that built into PmDraw. Perform export routing by formatting your printer output as desired, and selecting Export from the File menu. If Export is disabled, the current driver is not capable of producing such ascii files. ═══ 8.4. Direct PostScript printing ═══ PmDraw supports direct PostScript printing to any PostScript-capable printer that has been associated with an LPT port. This association can be made via a local attachment to the workstation, or via a NET USE of a printer connected over a LAN. Before printing can occur, PmDraw must be informed of the printer's information regarding the connection and its page orientation. This is done via the Direct PostScript -> Setup dialog. After specifying the port and orientation, selecting Save will store the info in the PmDraw INI file (so that it need not be done next time you run the program). Alternatively, selecting OK will setup the printer information, but it will only be valid as long as PmDraw remains active. Important! The orientation specified during Setup is the setting for the printer itself. Your output page will be rotated automatically (if necessary) to match that of the printer. ═══ 9. Miscellaneous features ═══ In addition to its major aspects, there a number of miscellaneous features which greatly enhance the working environment in PmDraw. Among these are: o File handling o Mini-view window o Alignment grid o Tics o Page size/orientation o Popup positioning o Saved configuration (customization) ═══ 9.1. Mini-view window ═══ The Mini-view window displays a view of the entire current page and allows direct specification of the visible area in the Drawing window. This Drawing area will be depicted as a red box in the Mini-view window, and can be changed by defining a new box with the cursor (exactly as boxes are created in PmDraw drawing). Note that the aspect ratio is locked to that which is visible in the Drawing window. An additional feature is that if the graphics in the Mini-view window are "messed up" from improper refresh, it can be refreshed by clicking MB2 with the cursor in its margin area. ═══ 9.2. Alignment grid ═══ A rectangular grid is available in PmDraw to assist in accurately drawing and aligning objects. The grid spacing is customizable via the Options menu, as is its visibility. When "snap" is turned on (via its menu option Snap On), using the cursor and an MB1 click or ENTER to set a point will cause the cursor (and the entered point) to be snapped to the nearest grid point automatically. Whether or not "snap" is turned on, you can always move the cursor to the nearest grid point using the keyboard assist key "g". ═══ 9.3. Tic marks ═══ *** Tic marks *** Tic marks can be displayed to assist the user in scaling and positioning her graphics. Since the mouse coordinates are visible in the Info window tics are not strictly necessary, but they are useful for visualizing the final-output scale. Default is for the grid to be visible, and have tics every 1/2 inch - both of these are customizable. ═══ 9.4. Page size/orientation ═══ Page sizes at present are 8 1/2 by 11 inches (portrait or landscape), or 6 by 6 inches. All dimensions are specified in inches (or thousandths). The page size for a given presentation page is specified in the Options menu, and upon reloading the visible window will be set appropriately. If scaling to other hardcopy page sizes is desired, the best solution at present is to use the print formatter. ═══ 9.5. Attribute popups ═══ Popups for object attributes may be placed anywhere on the Desktop, and their visibility is controlled through the relevant items under the Options drop-down on the main action bar. Position and visibility are stored in the configuration (using Save window positions) as described under customization. There are two windows for attributes, for Drawing and Text. These windows display the current values of each attribute; clicking on these attribute displays will pop up a dialog box or a menu from which a new setting can be selected. If any objects are marked, changing the value of an attribute in the dialogs will change that for the marked object(s). If one marks an object, the attribute dialogs will change their values to indicate those for the newly marked object. They will return to default settings when going back to create a new object (say, by clicking on Box). ═══ 9.5.1. Text attributes ═══ The curren font is displayed at the top. Clicking in its window will pop up the font-change dialog. An array of radio buttons allows you to set the alignment of text strings relative to their reference points. This allows the user to specify lower-left alignment, centered text, etc. The text size is displayed in a normal button with dimensions in English, metric or Point units. Clicking on this button will pop up the textsize-change dialog. ═══ 9.5.2. Font selection ═══ This dialog is displayed by clicking on the current font window in the text attributes dialog. It displays a list of the Hershey and Outline fonts available on your system. Clicking once on an entry will cause that font to be displayed in the preview window, double-clicking or pressing OK will cause the selected font to be made the current font. If any text strings are marked, they will have the selected font applied. ═══ 9.5.3. Text sizing ═══ This dialog is displayed by clicking on the text size button in the text attributes dialog. It contains an entryfield in which the size can be typed in the current units, as well as radio buttons for changing the text size units between Points and either English or metric (depending upon which has been selected in the Options pull-down). ═══ 9.5.4. Generic sizing dialog ═══ This dialog allows the user to specify a size in the current units (English or metric) for Grid spacing, Ruler division spacing, and for Markers and Arrow heads. ═══ 9.5.5. Array copy ═══ This dialog allows the user to copy all marked items in a rectangular array. The number of rows and columns and their spacings must be entered. ═══ 9.5.6. Fast Hershey ═══ This switch toggles the setting for scaled stroking of the Hershey fonts on-screen. If it is un-checked, the fonts will be scaled as they will be for export and printing - but the performance will be SLOW. For speed check this and the text on-screen will be drawn with the correct font, but MUCH FASTER. ═══ 9.5.7. Window zoom (magnification) ═══ You can control the viewing area in the Drawing area in a number of ways: o Ctl+z will zoom to full page view o Scroll bars and miscellaneous accelerators will move the current drawing window around on the page without changing its size. o The +/- buttons on the side panel can be used to zoom in and out by roughly 60% increments. ═══ 9.5.8. Draft view ═══ Draft view is for increasing the drawing speed on-screen and pre-viewing pages. It causes text to be rendered in the fastest font (Hershey Simplex), lines to be drawn with default width (one pel), and fill patterns to be ignored. At preset, the Draft setting will also affect output through metafile export and Quick and Format print. Text sizing is NOT precise in Draft view! It is only intended as an approximation to what will be seen in normal view. ═══ 9.5.9. Metric units ═══ This Options pull-down selection allows the user to specify whether English or metric units are preferred. The selection will affect the coordinates display in the Info window, and all sizing units. ═══ 9.5.10. CUA mouse model ═══ This Options pull-down selection allows the user to specify whether the CUA model for object selection and manipulation is in effect. It currently applies only to editing operations: Clicking MB1 causes only the nearest object to be selected. Adding the SHIFT key causes the nearest object's state to be toggled and all other objects left un-changed. This lets you add or subtract specific objects to the marked set. Dragging MB1 allows an area mark to be performed, marking all objects within the desired area. Using the SHIFT key causes the marked state of all surrounded objects to be toggled, leaves other objects in their current state. Dragging with MB2 causes a MOVE operation to commence. Using the CTRL key changes the operation to a COPY. (Using the SHIFT key constrains the movement to horizontal or vertical). ═══ 9.5.11. Overwrite confirmation ═══ This Options pull-down selection allows the user to specify whether confirmation is required before overwriting an existing file on a file save. If it is on (checked), a popup will query the user whether the save is to be continued or aborted. ═══ 9.5.12. Drawing attributes ═══ For all attributes, clicking on their display area will pop up a dialog or menu offering a selection for changing the value. Line attributes include Color, style and width. The color affects all outline drawings and borders, as well as text colors. If the line and fill colors are the same and the line color is changed, the fill color will be changed to match. If they are different, the fill color will be left alone. It should be noted that limitations in PM prevent wide, patterened lines from being displayed - if such a combination is selected, the line will display on screen at the proper width with an arbitrary fill pattern (indicating that it is not a SOLID line). These lines CAN be exported to Postscript and CGM with the desired appearance, although at present the line style repeat length is not scaled with line width... Fill patterns include color and style. Current limitation is that direct or exported Postscript maps fill patterns other than SOLID to grey shades. Marker attributes include style and size. Markers are "fancy" now... Arrow attributes include "ends", style and size. The left arrow will cause the arrow head to be drawn at the BEGINNING of a line or curve, the right arrow at the end. Arrow head styles are fancier now as well. ═══ 9.6. Saving configuration ═══ The default configuration for PmDraw is extremely customizable. Under the Options menu item you will find Personalize which opens up a primary dialog for setting various parameters. Some values are set directly in this dialog, while some groups of settings (like default options for print/export, for example) are set from sub-dialogs to the main Personalize dialog. Once parameters have been set, you have the option of saving them so that they are in effect automatically when you start a PmDraw session, or you can "try them out" in which case they are only in effect as long as you have that session running. If you decide to make those settings "permanent", you can re-enter Personalize and Save them. ═══ 9.6.1. Personalize dialog ═══ From this dialog, you can directly set default values controlling a number of options within PmDraw as well as access several sub-dialogs for various configuration areas: o Print/export options o File I/O controls and paths o New-object defaults In addition to the above dialogs, settings for a number of options can be made directly from the Personalize dialog. Unit can be set to either English or Metric, and all dialogs asking for lengths will use these units. The side panels which hold object buttons and mini-view window can be placed either to the left or right of the drawing area at the users preference. Rulers visiblity and tic spacing can be set, as well as the number of Undo steps for each page. Finally the location of the config file which holds this info can be specified - the default path is c:\os2. In addition to these, a Save will also make your current settings in the Options pulldown permanent, for the alignment grid and various viewing controls. Once settings have been made, you can either Save them as your standard defaults, or try them out in which case they will only be in effect for the current session. If you wish to make them permanent later, you can re-enter Personalize and Save them. ═══ 9.6.2. Print/Export options ═══ Use this dialog to set the default values for various controls that affect Printing and Export jobs. Query job props will make PM display a dialog for a print job appropriate to the driver you are sending a print job to. Invert black/white will do exactly that. If you prefer to work with a black background and white text, you will need to invert them when doing normal printing (this is the default). You also have the option of having the background color written into a print or export job. If you wish, you can work on a page background of blue but still have it clear when printed. Finally there are settings for default layout. Fit to margins will scale your page to fit exactly within the margins of the current form for a print job. Auto-rotate will cause the output to be automatically rotated if the aspect ratio dictates it. A landscape page will be automatically rotated if the target is Portrait, for example. Blowup lets you specify a magnification factor for printing larger views of your page (posters!). Default mag is 2X which will cause a standard A or A4 page to be blown up and printed on 4 sheets. Selecting Ok sets these values for the current session - you must select Save from the Personalize dialog to make them permanent. Note that these settings are simply defaults - you still have the option of changing them for individual print and export jobs. ═══ 9.6.3. Files/paths configuration ═══ The two checkboxes in this dialog control file saving behavior. Confirm file overwrite will prompt the user for confirmation when a file save (or export) would overwrite an existing file. Verify saved data will force a re-read of a saved PMD file to verify that it was written correctly. Turning this on will result in slower speed during saves, but will result in greater data integrity. In addition, you can set the default path for all of the filetypes that PmDraw recognizes. Select a file type and the path will be displayed in the edit window. If you change it and press Set, your changes will be retained. Note that you must use SAVE from the main Personalize dialog to retain these values as your permanent defaults. ═══ 9.6.4. New object defaults ═══ Here you can set default attributes and behavior when creating new objects. Page size, orientation and background colors will be the values first applied when you create a new page within PmDraw. Individual page settings can then be changed using the Pages pulldown on the main menu. The "X" button allows you to set your default user page size. Line spacing is a multiplying factor. 1.5 will result in a 50% greater spacing between lines when entering multiple lines from the text dialog or pasting text from the clipboard. New object marking sets the default behavior for marking objects on the page when a new one is created. The three options should be self-explanatory. ═══ 9.6.5. Configuration file ═══ Use this dialog to specify the file and path that you want to keep your PmDraw configuration information in. The default is C:\OS2\PMDRAW.INI. ═══ 9.6.6. Set page size ═══ Use this dialog to set the height and width of a page. If called from Re-size in the Pages pulldown, it will affect the size of the current page (you might find it necessary to then Mark-all and Fit-to-page). If called from the Personalize dialogs, this dialog sets the default height and width of a new (User page size) page. ═══ 9.6.7. Slideshow ═══ Slideshow lets you put PmDraw in a mode where it will flip through pages in a loaded PMD file continuously. Using the setup dialog, you can specify the last page in the file to be cycled through, and the time that each page is displayed before going to the next page. Using the Last Page setting allows you to have clipart and hyperlink source pages at the end of the file which are skipped during the slideshow cycle. Start a slideshow by loading a multi-page PMD file and selecting Slideshow under View on the main menu. This menu option will only be enabled if a multi-page file is loaded. Once you've confirmed the timestep and last page to be shown, the slideshow begins and will run until interrupted. While running you can use the mouse or keyboard to control the show. Pressing Btn 1 or Enter will pause the show or pressing Btn 2 or Esc will end the show. Once paused, pressing Btn 1 will resume the slideshow, while pressing Btn 2 will back up to the previous panel. ═══ 9.7. Graph initialization ═══ Graphs and charts are used to present data or information in an organized fashion. There are a number of standard formats, including xy plots, bar and pie charts. At present, PmDraw supports xy plots and Pie charts. When creating a new graph, you must specify the graph type and specify the source of the data. The graph types are listed in the top listbox and presently include xy plots and pie charts. In addition, variants of these main types are selectable from the pulldown list below the listbox, including for example, 2D, 3D drop-shadow and 3D block pie chart styles. These styles simply set up defaults for the creation of the chart, and can easily be changed from one to another after the chart has been started. Chart sizing is based on the area of the DATA part of the chart, namely the databox for xy charts and the pie itself for piecharts. If Auto-size is checked a default centered graph location will be used, which is not very intelligent in terms of handling non-standard page sizes and layouts. If you aren't centering a chart on a portrait 8.5x11 page, you will probably want to position the chart manually - uncheck the Auto-size checkbox before pressing Ok from the init dialog. Note that automatic positioning is also useful in overlaying 2 charts exactly... Finally, you must specify the source of the starting data for the chart you are creating. The easiest at present is to import data from an ascii file you've created using a standard text editor. For xy charts, the data format is multiple columns of data values where each column is an x or y data set. For piecharts, data is expected with one row per slice, where the numeric value associated with the slice is at the beginning, and anything following is taken as an associated text label. The share amounts can be any real or integer numbers and need not add up to 100 - slices will be apportioned accordingly. ═══ 9.7.1. XY Graph ═══ At present, PmDraw only support xy plots. A standard xy plot has numeric axes with data represented by polylines with any combination of line and marker styles. PmDraw allows multiple curves and even multiple axes. For example, you can have different y scales displayed on the left and right side of a graph with displayed curves associated with each (e.g. "x1" vs. "y1" and "x1" vs. "y2"). Data within PmDraw is named, so that a set of x values and y values have a name which is used when plotting them against each other. Data can derive from a variety of sources - at present you can either read in data from a file on disk (ascii format, as from a standard text editor), or supply an equation from which it is calculated. You can even include in the same graph data from a file, and a curve from an equation which theoretically matches the data. Eventually, you will be able to perform fitting of your data so that PmDraw determines the best match of the data with a specified function through least squares fitting. Spreadsheet manual entry of data is not yet supported. When creating a new graph, you must specify the graph type and specify the source of the data. If Auto-size is checked a default centered graph location will be used, otherwise you must specify where on the page you want the graph to be located. The box you give will be the DATA bounding area - any scales and labels will fall outside this. This method allows you to overlay two graphs by making their data areas coincident. ═══ 9.7.2. Graph edit dialog ═══ The primary graph add/edit dialog consists mainly of a list of graph items and buttons for a variety of possible actions. The graph type, such as "XY plot", is shown in the upper right of the dialog. Below that is the list of graph items. Next is a text display which shows a suggested action or details regarding a selected item. Graph items are listed in order in the main listbox. In displaying the graph, these items are handled sequentially so that the current axes at any point in the list are the last x and y axes encountered in traversing the list. Items usually correspond to displayed objects in the graph, such as Title, and by selecting the relevant graph item in the list the attributes of the associated objects can be edited using the standard text and drawing attribute dialogs. Multiple graph items can be selected by holding MB1 down while dragging through the list, or by using the Ctrl shift key while clicking on items. Once selected, items may be Edited Modified using a dialog Inserted New graph item created and placed in the list Deleted Removed from the list Copied Duplicated with the new object immediately edited Fractured Removed from the graph item list, but with the visible objects left on the page as normal PmDraw objects Reordered Using drag/drop with MB2 ═══ 9.7.3. Graph data load ═══ Data can be imported into a graph from an ascii data file on disk. When editing or creating a dataload item, a file name must first be given. The file is then read and the dataload dialog is displayed. The dataload dialog contains a listbox with an entry for each column of data found in the file. These entries have a column number and space for the data column name. To specify a name, select the listbox item, type in the name in the entryfield below the listbox, and click on the item again to verify the name. When first creating a graph with data from such a file, the first two columns will be given the names "x1" and "y1" by default - these may be edited as desired. Selecting New File allows one to change the name of the file from which data is to be loaded. Selecting Reload will cause the currently selected file to be re-checked in case you've edited it. Data is only loaded for those columns that you have named. If you've edited the file and added a column of data, pressing "?" will cause the file to be re-scanned and an entry for the new column added to the listbox for naming and subsequent loading. NOT YET ENABLED... ═══ 9.7.4. Graph data calculation ═══ Calculated data is represented by a set of x values given by a range and a number of evenly spaced values within it, and y values which are calculated from the associated x values. Both the x and y datasets must be given names, and the entered equation should be a function of x. For example, an x min of 0, max of 1 and divisions of 10 would result in the x values of 0.0, 0.1, 0.2, ... 0.9, 1.0. Then, an equation of 2*x+3 would result in y values of 3.0, 3.2, 3.4, ... 4.8, 5.0. Once you have calculated the x and y data, it can be used to produce a curve. ═══ 9.7.5. XY plot curves ═══ This causes a selected, (named) x and y dataset to be plotted against each other using the current axes in effect. The list of selectable names for x and y will include all available names at the point at which the curve occurs in the list of graph items. ═══ 9.7.6. Graph axes ═══ X and Y axes are specified using individual axis graph items. They are used to define the scaling for the graph, and to produce labels and tic marks for the axes. In the primary dialog, one specifies the axis type (linear, log, function), and the axis range. One may specify the range explicitly, or determine it automatically from one of the named datasets. For example, if dataload has been used to bring in named x1 and y1, the x axis can be "locked to" x1 so that data can always be displayed with a "nice" axis data range. If the x1 data is subsequently changed, the graph axis will be modified accordingly and all graphed objects updated accordingly. If a named dataset is selected but "Lock to" is NOT checked, Rescale will find a reasonable min and max but not lock you to it. Details allows you to modify exactly how the graph axis is presented. ═══ 9.7.7. Axis details ═══ Using this dialog, one can specify details regarding the presentation of a graph axis. It allows you to display a grid, or to control the display of ticmarks. Ticmark details include positioning and length specs - if x ranges from -1 to 1, one can use interior to place an axis INSIDE the graph at 0 by checking Interior and giving a Loc(ation) of 0 in the y axis details. Division spacing and number of minor ticmarks are specified explicitly. Finally, axis numbering can be controlled. If tics are to the left and right, for example, you have the choice as to which side to place the numbers. A multiplier can be specified - if the axis ranges from 0 to 1000 and a multiplier of 0.001 is given, the axis numbering will range from 0 to 1.0. Spacing controls how far from the edge of the graph the numbers are positioned. ═══ 9.7.8. Graph labels ═══ ═══ 9.7.9. Graph item INSERT ═══ ═══ 9.7.10. Pie Charts ═══ This is the central dialog for creating and modifying piechart graphs It displays the principal slice data and has buttons for Edit, Add and Delete actions to be performed on marked slices. Re-ordering slices is performed directly by marking and using drag-drop in the slice-data listbox. Below that is a set of buttons that allow the user to display and/or change the source data that was used in creating the chart. At present, the file editor is hard-coded to be EPM - this will become a configurable setting in the future. If you have modified the data in the original source file, you can quickly update it by pressing the Reload button, and if you want to change source files entirely, use New File. Finally, there are buttons across the bottom of the dialog which allow you to modify the graph viewing details such as tilt and shadowing, as well as to create and modify the Title and Legend for the chart. ═══ 9.7.11. Pie Chart Details ═══ This dialog provides means for modifying the general appearance of the piechart, and for modifying global defaults for the pie slice labels. Tilt is self-explanatory - if you have a tilt of 0 degrees you will get a simple 2D pie chart. Thickness is a fraction of the pie radius that controls the distance the "back" of the pie is shifted from the front in a 3D pie chart (has no effect if tilt is 0). Solid controls whether a 3D pie chart has a drop-shadow, or is a "block" piechart.Finally, the usual layout has the first slice starting at 0 degrees (3 o'clock) around the pie - Rotation lets you spin this starting location to an arbitrary angle. The Slice Labels settings let you specify defaults for the presentation of the label text attached directly to slices. Radius specifies the distance from the center that the text should be located as a fraction of the radius. If the value is greater than 100, the labels will fall outside the pie and a line will be added pointing to each slice. This global default can be changed for individual slices using the slice edit dialog. Angle controls whether the text is layed out horizontally or radially. Lastly, Text lets you specify whether there ARE labels on each slice (none), and whether the slice % share is displayed, its actual data value, or its text label. This category will be applied to all slices. ═══ 9.7.12. Pie Slice Editing ═══ This dialog lets you specify details for an individual slice. You can modify its Share data value or its text label directly. You can also control the pieslice Explode value which is a radial distance expressed as a fraction of the pie radius. Lastly, you can modify the label positioning for the individual slice, as a modification of the global value set in the piechart Details dialog. ═══ 9.7.13. Legend ═══ PmDraw will also produce a Legend for you automatically. This dialog lets you control details of its positioning and appearance. Two checkboxes are provided for specifying whether the legend is visible or has a bounding box. Text parameters control what text is shown in the legend (currently defaulted to the slice text strings) and the line to line spacings. Patches let you select the shape of the colored patch that matches a legend entry to a pie slice, whether the patches are left or right of the text, and the amount of gap between patch and text. At present, positioning of the legend is controlled by entering the xy values for the upper left corner of the piechart as a fraction of the pie radius. In the future, you will position the legend by dragging it around directly. ═══ 10. Keyboard assists/accelerators ═══ Within PmDraw, the keyboard can be used in place of the mouse to perform a number of actions and to assist in the precise entry of points for creating and editing objects. Menu accelerators are given beside the associated menu item; other accelerators include: o Cursor positioning keys o Miscellaneous accelerators ═══ 10.1. Menu accelerators ═══ Ctl+a Toggle grid AUTOSNAP function Ctl+c Clipart import Ctl+d Direct PostScript print Ctl+g Toggle grid visibility Ctl+i Help Index Ctl+k Help Keys Ctl+n New PMD file Ctl+o Open existing file Ctl+p Format Print Ctl+q Quick Print Ctl+s Save PMD file (with same name) Ctl+v View another PMD page ═══ 10.2. Edit accelerators ═══ In general, editing actions will just affect marked items: Alt+a mark ALL Alt+b Put object in BACK Alt+c COPY Alt+e ERASE current page (reverse with Ctl+Del) Alt+f Bring object to Front Alt+g Form Group Alt+m MOVE Alt+r ROTATE Alt+s SCALE Alt+t Text string edit Alt+u Un-mark all Delete usual edit action for marked items Ctrl+Delete un-delete editing action ═══ 10.3. Cursor positioning keys ═══ Positioning keyboard assists: e move to the nearest object "end point" t move to the nearest text reference point c move to the nearest object "center" (box, arc, ellipse, subcell) g snap to the nearest grid point l move to the nearest point on the nearest line segment r move to the closest point on the nearest curve (arc, ellipse, fillet) s move to the closest subcell corner Additional keyboard assists are: arrow keys moves the cursor a pixel at a time (useful for fine positioning) Ctl+arrows fast keyboard-controlled cursor movement SHFT in conjunction with Add/Edit actions offers an assisting constraint. For example, with Rotate, SHIFT constrains angles to multiples of 15 degrees. Creating an ellipse, SHIFT constrains the shape to a CIRCLE. Details are given in descriptions for individual Add/Edit actions. Under Add, works with all but fillet, under Edit works with Move, Scale, Rotate and Copy (Move part). When you specify points and objects by using the cursor and clicking MB1 (or pressing Enter), the accuracy is limited by the conversion of the cursor's position on the screen (in pels) to page coordinates. To circumvent this limitation, a number of cursor assist keys have been implemented which assist the user in precisely positioning the cursor, connecting EXACTLY to existing objects, and SELECTING objects (when Marking). ═══ 10.4. Miscellaneous accelerators ═══ Insert toggle between Mark and current object buttons Alt+F6 CUA switch between PmDraw windows Ctl+z ZOOM out to full page view Ctl+r REFRESH main drawing window + INCREASE MAGnification of current view - DECREASE MAGnification of current view Alt + cut the grid spacing in half Alt - double the grid spacing PgUp/PgDn change page in workspace (also Ctl+) Home/End move window around on page (also Ctl+) ═══ 10.5. Color selection ═══ PmDraw uses a palette of 64 colors for each file, out of a possible 16.7 million (24-bit RGB). A default palette is supplied which provides a uniform spread of colors, but you may create your own to emphasize a particular range or perhaps give a dense grayscale set. In the main color dialog, the current palette is displayed and the currently-selected color is boxed. In addition, it is displayed on the right in a large patch and its RGB values are shown. Pressing Edit will allow you to change the RGB values for this color. The Palette button will display a dialog that will allow you to change the palette for the file, or save a modified palette as your "Custom palette". To select quickly, you can double-click on your color selection. ═══ 10.6. Color edit ═══ This dialog lets you change the RGB values for a particular color index in your palette. Use the sliders to independently vary the Red, Green and Blue (RGB) values. Undo will reset the color to the values it had when the Edit dialog was entered. ═══ 10.7. Color palettes ═══ This dialog lets you change the color palette for the current file. If you have saved a custom palette and it is different from the current palette, that button will be enabled. If the current palette is different from the default palette, THAT button will be displayed. The next version of PmDraw will allow import of a color palette from another PMD file, but this option is not yet enabled... Pressing Save custom will cause the current palette to be saved in your config data for later use. Using Personalize/New Objects, you can specify which palette you want applied to a new PmDraw file upon creation. ═══ 11. PMDraw Extended Help ═══ PmDraw is a CORE presentation graphics utility aimed at page-format, WYSIWYG foil layout under OS/2 Presentation Manager. The primary design emphasis is on ease-of-use, and it is oriented toward scientific presentation graphics. Help is available for the following areas: o Introduction o Creating objects o Editing objects o Data Import/Export o Hardcopy o Miscellaneous features o Keyboard assists/shortcuts ═══ 12. PMDraw Authors ═══ PmDraw! VERSION 1.96 25 November, 1992 Developed by Alan Warren, with help from Ray Wang, Allan Bednowitz, Genarro Cuomo, Jason Crawford and Larry Salomon. IBM T.J. Watson Research Center Yorktown Heights, NY 10598