OS/2 2.0 Technical Library Presentation Manager Programming Reference Volume III Part Number 1OG6272 Note Before using this information and the product it supports, be sure to read the general information under "Notices" on page vii. First Edition (March 1992) The following paragraph does not apply to the United Kingdom or any country where such provisions are inconsistent with local law: INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you. This publication could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time. It is possible that this publication may contain reference to, or information about, IBM products (machines and programs), programming, or services that are not announced in your country. Such references or information must not be construed to mean that IBM intends to announce such IBM products, programming, or services in your country. Requests for technical information about IBM products should be made to your IBM Authorized Dealer or your IBM Marketing Representative. COPYRIGHT LICENSE: This publication contains printed sample application programs in source language, which illustrate OS/2 programming techniques. You may copy and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the OS/2 application programming interface. Each copy of any portion of these sample programs or any derivative work, which is distributed to others, must include a copyright notice as follows: "(c) (your company name) (year) All Rights Reserved." (c) Copyright International Business Machines Corporation 1992. All rights reserved. Note to U.S. Government Users--Documentation related to restricted rights--Use, duplication or disclosure is subject to restrictions set forth in GSA ADP Schedule Contract with IBM Corp. Appendix D. Standard Bit-Map Formats There are four standard bit-map formats. All device drivers have to be able to translate between any of these formats and their own internal formats. The standard formats are: Bitcount Planes 1 1 4 1 8 1 24 1 These formats are chosen because they are identical or similar to all formats commonly used by raster devices. Only single-plane formats are standard, but it is very easy to convert these to any multiple-plane format used internally by a device. Bit-Map Data The pel data is stored in the bit map in the order that the coordinates appear on a display screen. That is, the pel in the lower-left corner is the first in the bit map. Pels are scanned to the right, and upward, from that position. The bits of the first pel are stored, beginning with the most significant bits of the first byte. The data for pels in each scan line is packed together tightly, but all scan lines are padded at the end, so that each one begins on a ULONG boundary. Bit-Map Information Tables Each standard-format bit map must be accompanied by a bit-map information table. Because the standard-format bit maps are intended to be traded between devices, the color indexes in the bit map are meaningless without more information; for a description of this structure, see BITMAPINFO2. Some calls use a structure that is similar to BITMAPINFO2 but does not have the color table array; for a description of this structure, see BITMAPINFOHEADER2. Wherever BITMAPINFO2 is shown, BITMAPINFO is also allowed. Similarly, wherever BITMAPINFOHEADER2 is shown, BITMAPINFOHEADER is also allowed. Bit-Map Example To make the ordering of all the bytes clear, consider this simple example of a 5-by-3 array of colored pels: Red Green Blue Red Green Blue Red Green Blue Red Green Blue Red Green Blue ULONG ExampleBitmap[] { 0x23,0x12,0x30,0x00 /* bottom line */ 0x31,0x23,0x10,0x00 /* middle line */ 0x12,0x31,0x20,0x00 /* top line */ }; #define BLACK 0X00000000L #define RED 0X00FF0000L #define GREEN 0X0000FF00L #define BLUE 0X000000FFL struct BitmapInfoTable ExampleInfo 5, /* width */ 3, /* height */ 1, /* planes */ 4, /* bitcount */ BLACK,RED,GREEN,BLUE, /* color table */ BLACK,BLACK,BLACK,BLACK, BLACK,BLACK,BLACK,BLACK, BLACK,BLACK,BLACK,BLACK }; Bit-Map File Format The operating system uses the same file format for bit maps, icons, and pointers in resource files. in the following description, "bit map" refers to bit maps, icons, and pointers unless otherwise specified. Two formats are supported. In the first, a single-size version of the bit map is defined. This is used whatever the target device. The second format allows multiple versions of the bit map to be defined, including one or more device-independent versions, and a number of device-dependent versions, each intended for use with a particular device. In the case of icons and pointers, when more than one version of the bit map exists, the preferred version is one that matches the device size of icon or pointer. Otherwise the device-independent version is used to scale a bit map to the required size. The operating system provides pointers that match the requirements of the display device in use, typically pointers are 32x32 pels, one bit per plane. Icons provided with the operating system are designed to match the requirements of the most common display devices. The following versions of each icon are included in each file: 32x32 4 bpp (16 color) 40x40 4 bpp (16 color) 32x32 1 bpp (black and white) 20x20 1 bpp (black and white) 16x16 1 bpp (black and white) The 32x32 versions are designed for VGA displays and for device-independent use. The 40x40 version is for 8514/A and XGA displays. The 20x20 and 16x16 are half-size icons designed for use as mini-icons. For general bit maps, which may be of arbitrary size, the preferred version is one matching the requested bit map size; otherwise one matching the display size is selected. If neither is available, the device-independent version is used from which to scale a bit map. For both formats, the definition consists of two sections. The first section contains general information about the type, dimensions, and other attributes of the resource. The second section contains data describing the pels that make up the bit map(s), and is in the format specified in "Bit-Map Data" on page D-1. In the multiple-version format, the first section contains an array of BITMAPARRAYFILEHEADER structures. or BITMAPARRAYFILEHEADER2 structures. The format of these is as follows: typedef struct _BITMAPARRAYFILEHEADER { /* bafh */ USHORT usType; ULONG cbSize; ULONG offNext; USHORT cxDisplay; USHORT cyDisplay; BITMAPFILEHEADER bfh; } BITMAPARRAYFILEHEADER; typedef BITMAPARRAYFILEHEADER *PBITMAPARRAYFILEHEADER; typedef struct _BITMAPARRAYFILEHEADER2 { /* bafh */ USHORT usType; ULONG cbSize; ULONG offNext; USHORT cxDisplay; USHORT cyDisplay; BITMAPFILEHEADER2 bfh2; } BITMAPARRAYFILEHEADER2; typedef BITMAPARRAYFILEHEADER2 *PBITMAPARRAYFILEHEADER2; The fields in BITMAPARRAYFILEHEADER and BITMAPARRAYFILEHEADER2 have these meanings: usType Type of structure. This is: BFT_BITMAPARRAY (X'4142'--`BA'for BITMAPARRAYFILEHEADER or BITMAPARRAYFILEHEADER2) cbSize Size of the BITMAPARRAYFILEHEADER or BITMAPARRAYFILEHEADER2 structure in bytes. offNext Offset of the next BITMAPARRAYFILEHEADER or BITMAPARRAYFILEHEADER2 structure from the start of the file cxDisplay, CyDisplay Pel dimensions of the device for which this version is intended (for example, 640 x 480 for VGA). The device-independent version must be the first BITMAPARRAYFILEHEADER or BITMAPARRAYFILEHEADER2 defined. In the single-size format, the BITMAPARRAYFILEHEADER or BITMAPARRAYFILEHEADER2 structure is not present. The definition consists of one or two BITMAPFILEHEADER or BITMAPFILEHEADER2 structures. The format of the BITMAPFILEHEADER and BITMAPFILEHEADER2 structure is: typedef struct _BITMAPFILEHEADER { /* bfh */ USHORT usType; ULONG cbSize; SHORT xHotspot; SHORT yHotspot; ULONG offBits; BITMAPINFOHEADER bmp; } BITMAPFILEHEADER; typedef BITMAPFILEHEADER *PBITMAPFILEHEADER; typedef struct _BITMAPFILEHEADER2 /* bfh2 */ USHORT usType; ULONG cbSize; SHORT xHotspot; SHORT yHotspot; ULONG offBits; BITMAPINFOHEADER2 bmp2; } BITMAPFILEHEADER2; typedef BITMAPFILEHEADER2 *PBITMAPFILEHEADER2; BITMAPINFOHEADER2 is a standard data type (see above, and also BITMAPINFOHEADER2). The fields in BITMAPFILEHEADER and BITMAPFILEHEADER2 have these meanings: usType Type of resource the file contains. The valid values are: BFT_BMAP (X'4D42'--`BM' for bit maps) BFT_ICON (X'4349'--`IC' for icons) BFT_POINTER (X'5450'--`PT' for pointers). BFT_COLORICON (X'4943'--`CI' for color icons). BFT_COLORPOINTER (X'5043'--`CP' for color pointers). cbSize Size of the BITMAPFILEHEADER or BITMAPFILEHEADER2 structure in bytes. xHotspot, yHotspot Coordinates of the hotspot for icons and pointers. This field is ignored for bit maps. offBits Offset in bytes to the beginning of the bit-map pel data in the file, from the start of the definition. For icons and pointers, the cy field in bmp is actually twice the pel height of the image that appears on the screen. This is because these types actually contain two full bit-map pel definitions. The first bit-map definition is the XOR mask, which contains invert information (0 = no invert, 1 = invert) for the pointer or icon. The second is the AND mask, which determines whether the pointer or the screen is shown (0 = black/white, 1 = screen/inverse screen). For color icons or pointers, there are two bit-maps involved: one that is black and white and consists of an AND and an XOR mask, and one that is color that defines the color content. The cy field in the BITMAPINFOHEADER2 structure for the color bit-map must be the real height, that is, half the value specified for the black and white bit-map. The cx fields must be the same. The following table shows how these two bit-maps are used for a color icon or pointer: XOR AND COLOR 1 1 x Invert screen 0 0 x Use color x 0 1 x Transparency 1 0 x Use color x For color icons or pointers, two BITMAPFILEHEADER or BITMAPFILEHEADER2 structures are therefore required: BITMAPFILEHEADER2 with ustype BFT_COLORICON or BFT-COLORPOINTER BITMAPINFOHEADER2 (part of BITMAPFILEHEADER2) Color table BITMAPFILEHEADER2 with same ustype BITMAPINFOHEADER2 (part of BITMAPFILEHEADER2) Color table ** bits for one bit-map ** ** bits for other bit-map ** The ustype for the first BITMAPFILEHEADER2 is either BFT_COLORICON or BFT_COLORPOINTER. This means that a second BITMAPFILEHEADER2 is present as part of the definition of a color icon or pointer. The first BITMAPFILEHEADER2 structure contains the information for the black and white AND and XOR masks, while the second BITMAPFILEHEADER2 structure contains the information for the color part of the pointer or icon. BITMAPFILEHEADER and BITMAPINFOHEADER can occur in place of BITMAPFILEHEADER2 and BITMAPINFOHEADER2 in this example. For the multiple version format, the file is as follows: BITMAPARRAYFILEHEADER2 for device-independent version BITMAPFILEHEADER2 (part of BITMAPARRAYFILEHEADER2) BITMAPINFOHEADER2 (part of BITMAPFILEHEADER2) Color table BITMAPFILEHEADER2 ) BITMAPINFOHEADER2 ) only if this is a color icon or pointer Color table ) BITMAPARRAYFILEHEADER2 for first device-dependent version BITMAPFILEHEADER2 (part of BITMAPARRAYFILEHEADER2) BITMAPINFOHEADER2 (part of BITMAPFILEHEADER2) Color table BITMAPFILEHEADER2 ) BITMAPINFOHEADER2 ) only if this is a color icon or pointer Color table ) Further BITMAPARRAYFILEHEADER2 groups occur here as required for additional device-dependent versions ** bits for one bit-map ** ** bits for next bit-map ** And so on for as many bit-maps as necessary. As before, BITMAPARRAYFILEHEADER, BITMAPFILEHEADER and BITMAPINFOHEADER can occur in place of BITMAPARRAYFILEHEADER2, BITMAPFILEHEADER2 and BITMAPINFOHEADER2. Appendix F. The Font-File Format The OS/2 font-file format consists of two sections. The first section contains the general attributes of the font, and describes features such as its typeface, style, and nominal size. The second section contains the actual definitions of the characters belonging to the font. The font resource is a set of self-defining records of the form: typedef struct _RECORD { ULONG ulIdentity; /* structure identity code */ ULONG ulsize; /* structure size in bytes */ . /* data */ . . } RECORD; A font starts with a special font-signature structure and ends with an ending structure. The font signature has the form: typedef struct _FONTSIGNATURE ULONG ulIdentity; ULONG ulSize; CHAR achSignature [12] } FONTSIGNATURE; where: ulIdentity = X'FFFFFFFE' ulSize = 20 achSignature = "OS/2 FONT" for an OS/2 1.x format font, or = "OS/2 FONT 2" for an OS/2 2.0 format font. A 2.0 format font includes additional font description information in the PANOSE structure. This structure will be added to the end of the .FNT file (prior to the ENDFONT record). The font end structure has the form: typedef struct _ENDFONT{ ULONG ulIdentity; ULONG ulSize; }ENDFONT where: ulIdentity = X'FFFFFFFFI ulSize = 8 All records should be in the order of their identity fields. There are three or four records in a font resource between the font signature and the font end: * The font metrics * The font character definitions * The pair kerning table. * The PANOSE description (for "OS/2 FONT 2" fonts). Following compilation, the records in the resource are in the order defined above. Metric Information Contained in Fonts This section gives an explanation of how to set the fields of the FOCAMETRIe that is similar to BITMAPINFO2 but does not have the color table array; for a description of this structure, see BITMAPINFOHEADER2. Wherever BITMAPINFO2 is shown, BITMAPINFO is also allowed. Similarly, wherever BITMAPINFOHEADER2 is shown, BITMAPINFOHEADER is also allowed. Bit-Map Example To make the ordering of all the bytes clear, consider this simple example of a 5-by-3 array of colored pels: Red Green Blue Red Green Blue Red Green Blue Red Green Blue Red Green Blue ULONG ExampleBitmap[] { 0x23,0x12,0x30,0x00 /* bottom line */ 0x31,0x23,0x10,0x00 /* middle line */ 0x12,0x31,0x20,0x00 /* top line */ }; #define BLACK 0X00000000L #define RED 0X00FF0000L #define GREEN 0X0000FF00L #define BLUE 0X000000FFL struct BitmapInfoTable ExampleInfo 5, /* width */ 3, /* height */ 1, /* planes */ 4, /* bitcount */ BLACK,RED,GREEN,BLUE, /* color table */ BLACK,BLACK,BLACK,BLACK, BLACK,BLACK,BLACK,BLACK, BLACK,BLACK,BLACK,BLACK }; Bit-Map File Format The operating system uses the same file format for bit maps, icons, and pointers in resource files. in the following description, "bit map" refers to bit maps, icons, and pointers unless otherwise specified. Two formats are supported. In the first, a single-size version of the bit map is defined. This is used whatever the target device. The second format allows multiple versions of the bit map to be defined, including one or more device-independent versions, and a number of device-dependent versions, each intended for use with a particular device. In the case of icons and pointers, when more than one version of the bit map exists, the preferred version is one that matches the device size of icon or pointer. Otherwise the device-independent version is used to scale a bit map to the required size. The operating system provides pointers that match the requirements of the display device in use, typically pointers are 32x32 pels, one bit per plane. Icons provided with the operating system are designed to match the requirements of the most common display devices. The following versions of each icon are included in each file: 32x32 4 bpp (16 color) 40x40 4 bpp (16 color) 32x32 1 bpp (black and white) 20x20 1 bpp (black and white) 16x16 1 bpp (black and white) The 32x32 versions are designed for VGA displays and for device-independent use. The 40x40 version is for 8514/A and XGA displays. The 20x20 and 16x16 are half-size icons designed for use as mini-icons. For general bit maps, which may be of arbitrary size, the preferred version is one matching the requested bit map size; otherwise one matching the display size is selected. If neither is available, the device-independent version is used from which to scale a bit map. For both formats, the definition consists of two sections. The first section contains general information about the type, dimensions, and other attributes of the resource. The second section contains data describing the pels that make up the bit map(s), and is in the format specified in "Bit-Map Data" on page D-1. In the multiple-version format, the first section contains an array of BITMAPARRAYFILEHEADER structures. or BITMAPARRAYFILEHEADER2 structures. The format of these is as follows: typedef struct _BITMAPARRAYFILEHEADER { /* bafh */ USHORT usType; ULONG cbSize; ULONG offNext; USHORT cxDisplay; USHORT cyDisplay; BITMAPFILEHEADER bfh; } BITMAPARRAYFILEHEADER; typedef BITMAPARRAYFILEHEADER *PBITMAPARRAYFILEHEADER; typedef struct _BITMAPARRAYFILEHEADER2 { /* bafh */ USHORT usType; ULONG cbSize; ULONG offNext; USHORT cxDisplay; USHORT cyDisplay; BITMAPFILEHEADER2 bfh2; } BITMAPARRAYFILEHEADER2; typedef BITMAPARRAYFILEHEADER2 *PBITMAPARRAYFILEHEADER2; The fields in BITMAPARRAYFILEHEADER and BITMAPARRAYFILEHEADER2 have these meanings: usType Type of structure. This is: BFT_BITMAPARRAY (X'4142'--`BA'for BITMAPARRAYFILEHEADER or BITMAPARRAYFILEHEADER2) cbSize Size of the BITMAPARRAYFILEHEADER or BITMAPARRAYFILEHEADER2 structure in bytes. offNext Offset of the next BITMAPARRAYFILEHEADER or BITMAPARRAYFILEHEADER2 structure from the start of the file cxDisplay, CyDisplay Pel dimensions of the device for which this version is intended (for example, 640 x 480 for VGA). The device-independent version must be the first BITMAPARRAYFILEHEADER or BITMAPARRAYFILEHEADER2 defined. In the single-size format, the BITMAPARRAYFILEHEADER or BITMAPARRAYFILEHEADER2 structure is not present. The definition consists of one or two BITMAPFILEHEADER or BITMAPFILEHEADER2 structures. The format of the BITMAPFILEHEADER and BITMAPFILEHEADER2 structure is: typedef struct _BITMAPFILEHEADER { /* bfh */ USHORT usType; ULONG cbSize; SHORT xHotspot; SHORT yHotspot; ULONG offBits; BITMAPINFOHEADER bmp; } BITMAPFILEHEADER; typedef BITMAPFILEHEADER *PBITMAPFILEHEADER; typedef struct _BITMAPFILEHEADER2 /* bfh2 */ USHORT usType; ULONG cbSize; SHORT xHotspot; SHORT yHotspot; ULONG offBits; BITMAPINFOHEADER2 bmp2; } BITMAPFILEHEADER2; typedef BITMAPFILEHEADER2 *PBITMAPFILEHEADER2; BITMAPINFOHEADER2 is a standard data type (see above, and also BITMAPINFOHEADER2). The fields in BITMAPFILEHEADER and BITMAPFILEHEADER2 have these meanings: usType Type of resource the file contains. The valid values are: BFT_BMAP (X'4D42'--`BM' for bit maps) BFT_ICON (X'4349'--`IC' for icons) BFT_POINTER (X'5450'--`PT' for pointers). BFT_COLORICON (X'4943'--`CI' for color icons). BFT_COLORPOINTER (X'5043'--`CP' for color pointers). cbSize Size of the BITMAPFILEHEADER or BITMAPFILEHEADER2 structure in bytes. xHotspot, yHotspot Coordinates of the hotspot for icons and pointers. This field is ignored for bit maps. offBits Offset in bytes to the beginning of the bit-map pel data in the file, from the start of the definition. For icons and pointers, the cy field in bmp is actually twice the pel height of the image that appears on the screen. This is because these types actually contain two full bit-map pel definitions. The first bit-map definition is the XOR mask, which contains invert information (0 = no invert, 1 = invert) for the pointer or icon. The second is the AND mask, which determines whether the pointer or the screen is shown (0 = black/white, 1 = screen/inverse screen). For color icons or pointers, there are two bit-maps involved: one that is black and white and consists of an AND and an XOR mask, and one that is color that defines the color content. The cy field in the BITMAPINFOHEADER2 structure for the color bit-map must be the real height, that is, half the value specified for the black and white bit-map. The cx fields must be the same. The following table shows how these two bit-maps are used for a color icon or pointer: XOR AND COLOR 1 1 x Invert screen 0 0 x Use color x 0 1 x Transparency 1 0 x Use color x For color icons or pointers, two BITMAPFILEHEADER or BITMAPFILEHEADER2 structures are therefore required: BITMAPFILEHEADER2 with ustype BFT_COLORICON or BFT-COLORPOINTER BITMAPINFOHEADER2 (part of BITMAPFILEHEADER2) Color table BITMAPFILEHEADER2 with same ustype BITMAPINFOHEADER2 (part of BITMAPFILEHEADER2) Color table ** bits for one bit-map ** ** bits for other bit-map ** The ustype for the first BITMAPFILEHEADER2 is either BFT_COLORICON or BFT_COLORPOINTER. This means that a second BITMAPFILEHEADER2 is present as part of the definition of a color icon or pointer. The first BITMAPFILEHEADER2 structure contains the information for the black and white AND and XOR masks, while the second BITMAPFILEHEADER2 structure contains the information for the color part of the pointer or icon. BITMAPFILEHEADER and BITMAPINFOHEADER can occur in place of BITMAPFILEHEADER2 and BITMAPINFOHEADER2 in this example. For the multiple version format, the file is as follows: BITMAPARRAYFILEHEADER2 for device-independent version BITMAPFILEHEADER2 (part of BITMAPARRAYFILEHEADER2) BITMAPINFOHEADER2 (part of BITMAPFILEHEADER2) Color table BITMAPFILEHEADER2 ) BITMAPINFOHEADER2 ) only if this is a color icon or pointer Color table ) BITMAPARRAYFILEHEADER2 for first device-dependent version BITMAPFILEHEADER2 (part of BITMAPARRAYFILEHEADER2) BITMAPINFOHEADER2 (part of BITMAPFILEHEADER2) Color table BITMAPFILEHEADER2 ) BITMAPINFOHEADER2 ) only if this is a color icon or pointer Color table ) Further BITMAPARRAYFILEHEADER2 groups occur here as required for additional device-dependent versions ** bits for one bit-map ** ** bits for next bit-map ** And so on for as many bit-maps as necessary. As before, BITMAPARRAYFILEHEADER, BITMAPFILEHEADER and BITMAPINFOHEADER can occur in place of BITMAPARRAYFILEHEADER2, BITMAPFILEHEADER2 and BITMAPINFOHEADER2. Appendix F. The Font-File Format The OS/2 font-file format consists of two sections. The first section contains the general attributes of the font, and describes features such as its typeface, style, and nominal size. The second section contains the actual definitions of the characters belonging to the font. The font resource is a set of self-defining records of the form: typedef struct _RECORD { ULONG ulIdentity; /* structure identity code */ ULONG ulsize; /* structure size in bytes */ . /* data */ . . } RECORD; A font starts with a special font-signature structure and ends with an ending structure. The font signature has the form: typedef struct _FONTSIGNATURE ULONG ulIdentity; ULONG ulSize; CHAR achSignature [12] } FONTSIGNATURE; where: ulIdentity = X'FFFFFFFE' ulSize = 20 achSignature = "OS/2 FONT" for an OS/2 1.x format font, or = "OS/2 FONT 2" for an OS/2 2.0 format font. A 2.0 format font includes additional font description information in the PANOSE structure. This structure will be added to the end of the .FNT file (prior to the ENDFONT record). The font end structure has the form: typedef struct _ENDFONT{ ULONG ulIdentity; ULONG ulSize; }ENDFONT where: ulIdentity = X'FFFFFFFFI ulSize = 8 All records should be in the order of their identity fields. There are three or four records in a font resource between the font signature and the font end: * The font metrics * The font character definitions * The pair kerning table. * The PANOSE description (for "OS/2 FONT 2" fonts). Following compilation, the records in the resource are in the order defined above. Metric Information Contained in Fonts This section gives an explanation of how to set the fields of the FOCAMETRICS structure when developing: * A bit map or outline font for general use by PM graphics applications * A description of a bit map or outline device font that is built in to a device or can be downloaded to a device. The following structure contains the physical font metrics used when creating fonts. It is defined in the file \INCLUDE\PMFONT.H. typedef struct _FOCAMETRICS { ULONG ulIdentity; ULONG ulSize; CHAR szFamilyname[321; CHAR szFacename[321; SHORT usRegistryId; SHORT usCodePage; SHORT yEmHeight; SHORT yXHeight; SHORT yMaxAscender; SHORT yMaxDescender; SHORT yLowerCaseAscent; SHORT yLowerCaseDescent; SHORT yInternalLeading; SHORT yExternalLeading; SHORT xAveCharWidth; SHORT xMaxCharInc; SHORT xEmInc; SHORT yMaxBaselineExt; SHORT sCharSlope; SHORT sInlineDir; SHORT sCharRot; USHORT usWeightClass; USHORT usWidthClass; SHORT xDeviceRes; SHORT yDeviceRes; SHORT usFirstChar; SHORT usLastChar; SHORT usDefauItChar; SHORT usBreakChar; SHORT usNominalPointSize; SHORT usMinimumPointSize; SHORT usMaximumPointSize; SHORT fsTypeFlags; SHORT fsdefn; SHORT fsSelectionFlags; SHORT fscapabilities; SHORT ySubscriptXSize; SHORT ySubscriptYSize; SHORT ySubscriptXOffset; SHORT ySubscriptYOffset; SHORT ySuperscriptXSize; SHORT ySuperscriptYSize; SHORT ySuperscriptXOffset; SHORT ySuperscriptYOffset; SHORT yUnderscoreSize; SHORT yUnderscorePosition; SHORT yStrikeoutSize; SHORT yStrikeoutPosition; SHORT usKerningPairs; SHORT sFamilyClass; PSZ pszDeviceNameOffset; } FOCAMETRICS; Note: FOCAMETRICS is a parallel structure with FONTMETRICS as returned to applications in the GpiQueryFonts and GpiQueryFontMetrics function calls. The FONTMETRICS fields are derived from FOCAMETRICS by the Presentation Manager graphics engine. Most values are passed though unchanged. The exceptions are: * The identity field. This must be 1. This field is not a part of the FONTMETRICS structure. * The Size field. This must be set to the size of the FOCAMETRICS structure. This field is not a part of the FONTMETRICS structure. * The Codepage field. Ignore the description in FONTMETRICS, and use the following: Place 850 in this field if the font is intended to support any PM supported code page. The list of Presentation Manager supported code pages is given in Chapter 34, "Code Pages" on page 34-1. Place 65400 in this field if the font has special glyphs, for example if it is a Symbol font. Place other valid code pages in this field if the font is specific to this code page. Do not place other values in this field. * FONTMETRICS fields which contain values in world coordinates. The corresponding field in FOCAMETRICS should contain pel values for bit-map fonts, and notional units for outline fonts. See FONTMETRICS on page A-56 for a detailed explanation of the fields. Font Character Definitions Two formats of font character definition are supported. These are: Image format The character glyphs are represented as pel images. Outline format The character glyphs are reprrning pair table record is not present if the _KerningPairs record in the metrics is zero. If it is present, the code points are words, not bytes. This table should be sorted by kpChar1 and kpChar2 order to allow binary searches. typedef struct_KERNPAIRTABLE ULONG ulIdentity; ULONG ulSize; CHAR cFirstpair; }KERNPAIRTABLE; typedef struct _KERNPAIRS SHORT sFirstChar; SHORT sSecondChar; SHORT sKerningAmount; }KERNINGPAIRS; where: ulIdentity = 3 ulSize = 10 sFirstChar = First character of the kerning pair sSecondChar = Second character of the kerning pair sKerningAmount = Kerning value. Positive values increase the inter-character spacing while negative values bring the characters closer together. Outline Data Format Fonts defined by outlines (vectors) may contain any of these graphics orders: * Line at given position (GLINE) * Line at current position (GCLINE) * Relative line at given position (GRLINE) * Relative line at current position (GCRLINE) * Fillet at given position (GFLT) * Fillet at current position (GCFLT) * Sharp fillet at given position (GSFLT) * Sharp fillet at current position (GCSFLT) * Bézier curve at given position (GBEZ) * Bézier curve at current position (GCBEZ) * No operation (GNOPL) * Comment (GCOMT) * End of symbol definition (GESD). The maximum length of the data in these orders is 255 bytes. The drawing order code and the length fields are not included in the length count. The size of each outline font definition must not be longer than 64KB. The Additional Metrics The additional metrics structure extends the metrics describing the font to include the PANOSE fields. The fields allow for quantitative descriptions of the visual properties of font faces. The format of the ADDITIONALMETRICS structure is: typedef struct { ULONG ulIdentity; ULONG ulSize; PANOSE panose; } ADDITIONALMETRICS; where: ulIdentity = 4 ulSize = 20 panose = The ten digit PANOSE number with two bytes of padding. The PANOSE definition consists of ten digits, each of which describes one of up to sixteen variations. The current digits are: 1. Family Kind (6 variations) 0 = Any 1 = No Fit 2 = Text and Display 3 = Script 4 = Decorative 5 = Pictorial 2. Serif Style (16 variations) 0 = Any 1 = No Fit 2 = Cove 3 = Obtuse Cove 4 = Square Cove 5 = Obtuse Square Cove 6 = Square 7 = Thin 8 = Bone 9 = Exaggerated 10 = Triangle 11 = Normal Sans 12 = Obtuse Sans 13 = Perp Sans 14 = Flared 15 = Rounded 3. Weight (12 variations) 0 = Any 1 = No Fit 2 = Very Light 3 = Light 4 = Thin 5 = Book 6 = Medium 7 = Demi 8 = Bold 9 = Heavy 10 = Black 11 = Nord 4. Proportion (10 variations) 0 = Any 1 = No Fit 2 = Old Style 3 = Modern 4 = Even Width 5 = Expanded 6 = Condensed 7 = Very Expanded 8 = Very Condensed 9 = Monospaced 5. Contrast (10 variations) 0 = Any 1 = No Fit 2 = None 3 = Very Low 4 = Low 5 = Medium Low 6 = Medium 7 = Medium High 8 = High 9 = Very High 6. Stroke Variation (9 variations) 1 = Any 2 = No Fit 3 = Gradual/Diagonal 4 = Gradual/Transitional 5 = Gradual/Vertical 6 = Gradual/Horizontal 7 = Rapid/Vertical 8 = Rapid/Horizontal 9 = Instant/Vertical 7. Arm Style (12 variations) 0 = Any 1 = No Fit 2 = Straight Arms/Horizontal 3 = Straight Arms/Wedge 4 = Straight Arms/Vertical 5 = Straight Arms/Single Serif 6 = Straight Arms/Double Serif 7 = Non-Straight Arms/Horizontal 8 = Non-Straight Arms/Wedge 9 = Non-Straight Arms/Vertical 10 = Non-Straight Arms/Single Serif 11 = Non-Straight Arms/Double Serif 8. Letterform (16 variations) 0 = Any 1 = No Fit 2 = Normal/Contact 3 = Normal/Weighted 4 = Normal/Boxed 5 = Normal/Flattened 6 = Normal/Rounded 7 = Normal/Off Center 8 = Normal/Square 9 = Oblique/Contact 10 = Oblique/Weighted 11 = Oblique/Boxed 12 = Oblique/Flattened 13 = Oblique/Rounded 14 = Oblique/Off Center 15 = Oblique/Square 9. Midline (14 variations) 0 = Any 1 = No Fit 2 = Standard/Trimmed 3 = Standard/Pointed 4 = Standard/Serifed 5 = High/Trimmed 6 = High/Pointed 7 = High/Serifed 8 = Constant/Trimmed 9 = Constant/Pointed 10 = Constant/Serifed 11 = Low/Trimmed 12 = Low/Pointed 13 = Low/Serifed 10. X-height (8 variations) 0 = Any 1 = No Fit 2 = Constant/Small 3 = Constant/Standard 4 = Constant/Large 5 = Ducking/Small 6 = Ducking/Standard 7 = Ducking/Large When using the PANOSE number to match fonts, the ordering of the PANOSE digit is the key to finding the closest match. The most significant digit is the first digit, and the least significant digit is number ten. To find matches, the digits need to be compared, in the order given. A font mapper may want to change the precedence of the digits, to give higher weightings to other font features. Font Directory This section describes the directory section of a font resource. A font resource contains a directory consisting of a set of structures each containing the metrics of a font and a pointer to the font itself This font directory is generated by the resource compiler. The format of the font directory is: typedef struct ( USHORT usHeaderSize; USHORT usnFonts; USHORT usiMETRICS; FONTENTRY fntEntry[1]; } FONTDIRECTORY; typedef struct { USHORT usIndex; FONTFILEMETRICS metrics; } FONTENTRY; Where: usHeaderSize The size of the header, in bytes. usnFonts The number of fonts in the resource. usiMetrics The size of the FOCAMETRICS structures that follow the header. Note that the set of metrics for all the fonts in the resource follow the header. usindex The index of a particular font; an identifier assigned to the font when the resource was created (defined in the RC file). metrics The font metrics structure for the font. This is identical to a FOCAMETRICS structure with the addition of the PANOSE fields to the end. Definitions of Terms Used When Describing Fonts a-space, b-space, c-space The a-space is the distance from the left of the character frame to the left edge of the character. The b-space is the width of the character. The c-space is the distance from the right edge of the character to the right of the character frame. Negative values of a and c allow adjacent character frames to overlap. See also character increment, and space default values. average char width The average horizontal distance from the left edge of one character to the left edge of the next. Contrast with max char increment. baseline The line on which the bottom of a character rests, and below which a descender extends. break char cade point The code point of the space or break character. Contrast with default char code point, first char code point, and last char code point. character increment A set.of three values (a-space, b-space, and c-space) that define the proportions of a character. The sum of the three values (a+b+c) specifies only one value for the entire character increment. See also font width and space default values. character rotation The angle by which each character is rotated around its own center, increasing clockwise from vertical. Contrast with character slope and inline direction. character slope The angle by which a character is slanted, increasing clockwise from vertical. Contrast with character rotation and inline direction. default char code point The code point of the character to be used if a code point outside the range of a font is passed to an application using that font. Contrast with break char code point, first char code point, and last char code point. em height The maximum distance above the baseline reached by an uppercase symbol. Contrast with x height. external leading The vertical distance from the bottom of one character to the top of the character below it. Contrast with internal leading and max baseline extent. first char code point The code point of the first character. All numbers between the first char code point and the last char code point must represent a character in the font. Contrast with break char code point, default char code point, and last char code point. fixed spacing The same amount of space separates each character. Contrast with proportional spacing. font weight The line-thickness of a character relative to its size. Contrast with font width. font width The relative width of a character to its height; condensed fonts are very narrow while expanded fonts are very wide. See also character increment. Contrast with font weight. Inline direction The angle of a line of type, increasing clockwise from horizontal. Contrast with character rotation and character slope. Internal leading The vertical distance from the top or bottom of a character to any accent marks that may appear with it. Contrast with external leading. last char code point The code point of the last character. All numbers between the first char code point and the last char code point must represent a character in the font. Contrast with break char code point, default char code point, and first char code point. lowercase ascent The maximum distance above the baseline reached by any part of any lowercase character. Contrast with maximum ascender and x height. lowercase descent The maximum distance below the baseline reached by any part of any lowercase character. Contrast with maximum descender. max baseline extent The maximum space occupied by the font (typically, the sum of the maximum ascender and maximum descender). Contrast with external leading and max char increment. max char increment The maximum horizontal distance from the left edge of one character to the left edge of the next character to the right. Contrast with average char width and max baseline extent. maximum ascender The maximum distance that any part of any character may extend above the x height of a font. Contrast with lowercase ascent and maximum descender. maximum descender The maximum distance that any part of any character may extend below the x height of a font. Contrast with lowercase descent and maximum ascender. maximum vert point size The maximum vertical dimensions to which a font can be resized. Contrast with minimum vert point size and nominal vert point size. minimum vert point size The minimum vertical dimensions to which a font can be resized. Contrast with maximum vert point size and nominal vert point size. nominal vert point size The normal display size of a font. Contrast with maximum vert point size and minimum vert point size. pel The smallest element of a display surface that can be independently assigned color and density. point Printer's unit of measurement. There are 72 points to an inch (approximately 3.5 points to a millimeter). proportional spacing The space that each character occupies is in proportion to its width. See also font width, Contrast with fixed spacing. Registry ID A code number that Presentation Manager uses to register a font file as a resource. space default values Values that specify the space to be left between characters. Once defined, they are used for the entire font, and do not have to be specified for each character. However, they can be changed for characters that require more or less spacing than the defaults provide, by giving values for the a Space and the c Space. See also character increment. strikeout position The distance of the strikeout character above the baseline (in pels). See also strikeout size and underscore position. strikeout size The size of the strikeout character (in points). See also strikeout position and underscore size. subscript position The distance of a subscript character of a font below the baseline (in pels). See also subscript size and superscript position. subscript size The size of a subscript character (in points). See also subscript position and superscript size. superscript position The distance of a superscript character above the baseline (in pels). See also subscript position and superscript size. superscript size The size of a superscript character (in points). See also subscript size and superscript position. target dev resolution X The number of pels per inch in the horizontal axis of a display device on which a font is to be displayed. Contrast with target dev resolution Y. target dev resolution Y The number of pels per inch in the vertical axis of a display device on which a font is to be displayed. Contrast with target dev resolution X. underscore position The distance in pels of the first underscore stroke from the baseline of a font. Successive strokes below this create a heavier underscore. See also strikeout position and underscore size. underscore size The size of the underscore character measured in single strikeout strokes. See also strikeout size and underscore position. x height The maximum distance above the baseline reached by a lowercase character. Contrast with em height and lowercase ascent. Appendix G. Format of Interchange Files A metafile is a file in which graphics are stored. The file is application-created, and it contains the graphics orders generated from those GPI calls that are valid in a metafile. Metafiled graphics can be reused by the application that created them. They can also be made available to other applications at the same, or at a different, workstation. This chapter describes the restrictions which apply when generating the metafile and gives detail of the overall structure. For the graphics orders descriptions, see Chapter 33, "Graphics Orders" on page 33-1. Metafile Restrictions The following restrictions apply to the generation of all metafiles, and also to the generation of a PM_Q-STD print file to a OD_QUEUED device: * If GpiWCBitBit or GpiBitBit is used to copy a bit map to a device context in an application, the application should not delete that bit map handle with GpiDeleteBitmap before the device context is closed (metafile is closed). * GpiSetPS must not be used. * GpiSetPageViewport is ignored. The following section lists some general rules that must be followed when creating a metafile that is to be acceptable to SAA-conforming implementations, or replayed into a presentation space that is in draw-and-retain or retain mode (see GpiSetDrawingMode). * These items must be established or defaulted before any drawing occurs to the graphics presentation space, and not changed subsequently: -- The graphics field (GpiSetGraphicsField). For an SAA-conforming metafile, the graphics field must be defaulted or set to no clipping. -- The code page for the default character set (GpiSetCp). -- The color table or palette (GpiCreateLogColorTable or GpiCreatePalette). The size of the color table must not exceed 31 KB (KB equals 1024 bytes). -- The default vdrawing occurs to the graphics presentation space, and not changed subsequently: -- The graphics field (GpiSetGraphicsField). For an SAA-conforming metafile, the graphics field must be defaulted or set to no clipping. -- The code page for the default character set (GpiSetCp). -- The color table or palette (GpiCreateLogColorTable or GpiCreatePalette). The size of the color table must not exceed 31 KB (KB equals 1024 bytes). -- The default viewing transform (GpiSetDefaultViewMatrix). -- The setting of the draw controls (GpiSetDrawControl). DCTL-DISPLAY must be defaulted or set ON. -- The default values of attributes (see GpiSetDefAttrs), viewing limits (see GpiSetDefViewingLimits), primitive tag (see GpiSetDefrag) and arc parameters (see GpiSetDefArcParams). * These calls should not be used: -- GpiBitBit -- GpiDeleteSetId (note that this means that local identifiers cannot be used again within the picture) -- GpiErase -- GpiExcludeClipRectangle -- GpilntersectClipRectangle -- GpiOffsetClipRegion -- GpiPaintRegion -- GpiResetPS -- GpiSetClipRegion -- GpiSetPel -- GpiSetPS -- DevEscape (for an escape which is metafiled). * GpiCreateLogFont must not redefine a local identifier that has previously been used within the picture. * The metafile context must not be reassociated. * If a bit map is used as the source of a GpiWCBitBit operation, or as an area-fill pattern, it must not be modified or deleted (GpiDeleteBitmap) before the metafile is closed. * Only these foreground mixes must be used (see GpiSetMix): --FM_DEFAULT --FM_OR --FM_OVERPAINT --FM_LEAVEALONE. * Only these background mixes must be used (see GpiSetBackMix): --BM_DEFAULT --BM_OVERPAINT --BM_LEAVEALONE. * If palettes are used (see GpiCreatePalette), the palette that is metafiled is the one in force when the metafile device context is dissociated from the (final) presentation space. if the palette is changed during the course of the picture (using GpiSetPaletteEntries), it must therefore only be with incremental additions. Note: There is no restriction concerning the use of primitives outside segments. These are metafiled in segment(s) with zero identifier. Metafile Data Format This section describes the format of the data in a metafile, as it would be stored in an OS/2 Version 2.0 disk file. Metafile data is stored as a sequence of structured fields. Each structured field starts with an eight-byte header consisting of a two-byte length field and a three-byte identifier field. These are followed by a one-byte flags field and a two-byte segment sequence number field. The length field contains a count of the total number of bytes in the structured field, including the length field. The identifier field uniquely identifies the type of the structured field. The flags and segment sequence number fields are always zero. Following the header are positional parameters that are optional and dependent on the particular structured field. Following the positional parameters are non-positional parameters called triplets. These are self-defining parameters and consist of a one-byte length field, followed by a one-byte identifier field, followed by the data of the parameter. The length field contains a count of the total number of bytes in the triplet, including the length and identifier fields. The identifier field identifies uniquely the type of the triplet. A metafile is structured into a number of different functional components; for example, document and graphics object. Each component comprises a number of structured fields, and is delimited by "begin-component" and "end-component" structured fields. Structured fields marked as required, inside an optional structured field bracket, are required if the containing bracket is present. The graphics orders that describe a picture occur in the graphics data structured field. See page G-17. Structured Field Formats The format of the various structured fields is given below: Begin Document Structured Field Introducer (BDT): required 0-1 Length X'n+1E' 2-4 BDT X'D3A8AB' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters 0-7 Document name C'0000 0001' 8 Architecture version X'00' 9 Document security X'00' Triplets (all required) 0 Length X'05' 1 Triplet Id X'18' 2 Interchange set type X'03' (resource document) 3-4 Base set definition X'0C00' (level 12, version 0) 0 Length X'06' 1 Triplet Id X'01' 2-5 GCID 0 Length X'n+1' 1 Triplet Id X'65' 2-n Comment, used for metafile description of up to 252 bytes. Begin Resource Group (BRG): required Structured Field Introducer 0-1 Length X'0010' 2-4 BRG X'D3ABC6' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters 0-7 Resource group name C'0000 0002' Begin Color Attribute (BCA) Table: required Structured Field Introducer 0-1 Length X'0010' 2-4 BCA X'D3AB77' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters 0-7 Color table name C'0000 0004' Color Attribute Table (CAT) required Structured Field Introducer 0-1 Length X'n+B' 2-4 CAT X'D3BO77' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters Base Part (required) 0 Flags 0 Reserved B'0' 1 Reset B'0' Do not reset to default B'1' Do reset to default 2-7 Reserved B'000000' 1 Reserved X'00' 2 LCTID X'00' Element list(s) (triple generating) are mutually-exclusive. One or other is required. Element List (repeating) 0 Length of this parameter 1 Type X'01': element list 2 Flags X'00': reserved 3 Format X'01' RGB 4-6 Starting Index (Top Byte Truncated) 7 Size of RGB component1 X'08' 8 Size of RGB component2 X'08' 9 Size of RGB component3 X'08' 10 Number of bytes in each following color triple X'04' 11-m Color triples Triple Generating 0 Length of this parameter X'OA' 1 Type X'02': bit generator 2 Flags 0 ABFlag B'0' Normal 1-7 Reserved B'0000000' 3 Format X'01' RGB 4-6 Starting index (top byte truncated) 7 Size of RGB component1 X'08' 8 Size of RGB component2 X'08' 9 Size of RGB component3 X'08' End Color Attribute (ECA) Table: required Structured Field Introducer 0-1 Length X'0010' 2-4 ECA X'D3A977' 5 Flags '00' 6-7 Segment sequence number X'0000' Parameters 0-7 Color table name C'0000 0004' Begin Image Object (BIM): optional, repeating Structured Field Introducer 0-1 Length X'0010' 2-4 BIM X'D3A8FB' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters 0-7 Image name C'xxxx xxxx' Begin Resource Group (BRG): optional Structured Field Introducer 0-1 Length X'9010' 2-4 BRG X'D3A8C6' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters 0-7 Resource group name C'xxxx xxxx' Color Attribute Table (BCA): optional Structured Field Introducer 0-1 Length X'0010' 2-4 BCA X'D3A877' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters 0-7 Color table name C'xxxx xxxx' Color Attribute Table (CAT): required Structured Field Introducer 0-1 Length 2-4 CAT X'D3B077' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters Base Part 0 Flags X'00' 1 Reserved X'00' 2 LUTID Element List (repeating) 0 Length of this parameter 1 Type X'01': element list 2 Flags X'00': reserved 3 Format X'01': RGB 4-6 Starting index (top byte truncated) 7 Size of RGB component1 X'08' 8 Size of RGB component2 X'08' 9 Size of RGB component3 X'08' 10 Number of bytes in each following color triple X'03' 11-n Color triples End Color Attribute Table (ECA): required if BCA present Structured Field Introducer 0-1 Length X'0010' 2-4 ECA X'D3A977' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters 0-7 Color Table name C'xxxx xxxx' End Resource Group (ERG): required if RG present Structured Field Introducer 0-1 Length X'0010' 2-4 ERG X'D3A9C6' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters 0-7 Resource Group name C'xxxx xxxx' Begin Object Environment Group (BOG): optional Structured Field Introducer 0-1 Length X'0010' 2-4 BOG X'D3A8C7' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters 0-7 Object environment group name C'xxxx xxxx' Map Color Attribute (MCA) Table: required Structured Field Introducer 0-1 Length X'001A' 2-4 MCA X'D3AB77' 5 Flags '00' 6-7 Segment sequence number X'0000' Parameters 9-1 Length Triplet (required) 0 Length X'0C' 1 Triplet type: fully qualified name X'02' 2 Type: ref to Begin Resource Object X'84' 3 ID X'00' 4-11 Color table name C'xxxx xxxx' lcid (required) 0 Length X'04' 1 Triplet type: resource local ID X'24' 2 Type color table resource X'07' 3 Local identifier (LUT-ID) X'01' End Object Environment Group (EOG): required if BOG present Structured Field Introducer 0-1 Length X'0010' 2-4 EOG X'D3A9C7' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters 0-7 Object Environment Group name C'xxxx xxxx' Image Data Descriptor (IDD): required Structured Field Introducer 0-1 Length X'0011' 2-4 IDD X'D3A6FB' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters 0 Unit of measure: X'00' tens of inches X'01' tens of centimeters 1-2 X resolution image points / UOM 3-4 Y resolution image points / UOM 5-6 X extent of image PS 7-8 Y extent of image PS Image Picture Data (IPD): required Structured Field Introducer 0-1 Length 2-4 IPD XID3EEFB' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters (all required and in this order, except that only one of image LUT-ID and IDE structure is present) Begin Segment 0 Type X'70': begin segment 1 Length of following X'00' Begin Image Content 0 Type X'91': Begin Image Content 1 Length of following X'01' 2 Format X'FF' Image Size 0 Type X'94': image size 1 Length of following X'09' 2 Units of measure X'02': logical 3-4 Horizontal resolution 5-6 Vertical resolution 7-8 Height in pels 9-10 Width in pels Image Encoding 0 Type X'95': image encoding 1 Length of following X'02' 2 Compression algorithm X'03': none 3 Recording algorithm X'03': bottom-to-top Image IDE-Size 0 Type X'96': image IDE-Size 1 Length of following X'0l' 2 Number of bits per element Image LUT-ID (For bit maps with other than 24 bits per pel) 0 Type X'97' Image LUT-ID 1 Length of following X'Ol' 2 LUT-ID IDE Structure (For bit maps with 24 bits per pel) 0 Type X'9B': IDE structure 1 Length of following X'08' 2 Flags: 0 ABFlag B'0' Normal (Additive) 1-7 Reserved B'0000000' 3 Format X'01' RGB 4-6 Reserved X'000000' 7 Size of element 1 8 Size of element 2 9 Size of element 3 Image Picture Data (IPD): required, repeating Structured Field Introducer 0-1 Length 2-4 IPD X'D3EEFB' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters Image Data 0-1 Type X'FE92': image data 2-3 Length of following 4-n Image data (scan lines of bit maps) End Image Content (required, only present in last Image Picture Data) 0 Type X'93': End Image Content 1 Length of following X'00' End Segment (required, only present in last Image Picture Data) 0 Type X'71': end segment 1 Length of following X'00' End Image Object (EIM): required if BIM present Structured Field Introducer 0-1 Length X'0010' 2-4 EIM X'D3A9FB' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters 0-7 Image name C'xxxx xxxx' Begin Graphics Object (BGR): required Structured Field Introducer 0-1 Length X'0010' 2-4 BGR X'D3A8BB' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters 0-7 Graphics object name C'0000 0007' Begin Object Environment Group (BOG): optional Structured Field Introducer 0-1 Length X'0016' 2-4 BOG X'D3A8C7' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters 0-7 Object Environment Group name C'0000 0007' Map Color Attribute Table (MCA): required Structured Field Introducer 0-1 Length X'0016' 2-4 MCA X'D3AB77' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters 0-1 Length Triplet (required) 0 Length X'0C' 1 Triplet type: fully qualified name X'02' 2 Type: ref to Begin Resource Object X'84' 3 ID X'00' 4-11 Color table name C'0000 0004' Map Coded Font (MCF): required, for default font Structured Field Introducer 0-1 Length X'20' 2-4 MCF X'D3AB8A' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters 0-1 Length Triplets (required) Font name 0 Length X'0C' 1 Triplet type: fully qualified name X'02' 2 Type: ref to coded font X'84' 3 ID X'00' 4-11 Coded font name: C'nnxx xxxx' where n is X'FF' lcid 0 Length X'04' 1 Triplet type: Resource Local ID X'24' 2 Type: Coded Font Resource X'05' 3 Local identifier (LCID) X'00' Font Binary GCID 0 Length X'06' 1 Triplet type: Font Binary GCID X'20' 2-5 GCID Map Coded Font (MCF): optional, repeating, for loaded fonts Structured Field Introducer 0-1 Length X'58' 2-4 MCF X'D3AB8A' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters 0-1 Length Triplets (required) Font name 0 Length X'0C' 1 Triplet type: fully qualified name X'02' 2 Type: ref to coded font X'84' 3 ID X'00' 4-11 Coded font name lcid 0 Length X'04' 1 Triplet type: Resource Local ID X'24' 2 Type: coded font resource X'05' 3 Local identifier (LCID) Font Attributes 0 Length X'14' 1 Triplet type: Font Descriptor X'IF' 2 Weight Class 3 Width Class 4-5 Font Height 6-7 Char Width 8 Descript Flags 9 Usage Codes 10 Family 11 Activity Class 12 Font Quality 13-14 CAP Height 15-16 X Height 17-18 Line Density 19 Use Flags Font Binary GCID 0 Length X'06' 1 Triplet type: Font Binary GCID X'20' 2-5 GCID Font Typeface 0 Length X'24' 1 Triplet type: fully qualified name X'02' 2 Type: ref to font typeface X'08' 3 ID X'00' 4-35 Font typeface C'xxx..xxx' Map Data Resource (MDR): optional, repeating Structured Field Introducer 0-1 Length X'lD' 2-4 MDR X'D3ABC3' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters 0-1 Length Triplets (required) Bit-map Name 0 Length X'0C' 1 Triplet type: fully qualified name X'02' 2 Type: ref to Imaqe Object X'84' 3 ID X'00' . 4-11 Image name C'xxxx xxxx' Extended Resource lcid 0 Length X'07' 1 Triplet type: Extended Resource Local ID X'22' 2 Type: Image Resource X'10' 3-6 Bit-map handle End Object Environment Group (EOG): required if BOG present Structured Field Introducer 0-1 Length X'0010' 2-4 EOG X'D3A9C7' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters 0-7 Object Environment Group name C'0000 0007' Graphics Data Descriptor (GDD): required Structured Field Introducer 0-1 Length X'nnnn' 2-4 GDD X'D3A6BB' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters (all required and in this order) 0 X'F7' Specify GVM Subset 1 Length of following data X'07' 2 X'B0' drawing order subset 3-4 X'0000' 5 X'23' Level 3.2 6 X'Ol' Version 1 7 Length of following field X'Ol' 8 Coordinate types in data X'04' Intel16 X'05' Intel32 0 X'F6' Set Picture Descriptor 1 Length of following data 2 Flags 0 B'0' Picture in 2D 1 Picture Dimensions B'0' Not absolute (PU_ARBITRARY PS) B'1' Absolute (example: PU_TWIPS PS) 2 Picture Elements B'0' Not pels B'1' Pels (PU_PELS PS) (Bit 1 must also be set) 3-7 B'00000' 3 X'00' Reserved 4 Picture frame size coordinate type X'04' Intel16 X'05' Intel32 5 UnitsOfMeasure X'00' Ten inches X'0l' Decimeter 6-11 or 6-17 (2 or 4 bytes) Resolution. GPS Units / UOM on x axis GPS Units / UOM on y axis GPS Units / UOM on z axis 12-23 or 18-41 (2 or 4 bytes) Window Size. GPS X left, X right GPS Y bottom, Y top GPS Z near, Z far 0 X'21' Set Current Defaults 1 Length of following data 2 Set Default Parameter Format X'08' 3-4 Mask X'E000' 5 Names X'8F' 6 Coordinates X'00' Picture in 2D 7 Transforms X'04' Intel16 X'05' Intel32 8 Geometrics X'04' Intel16 X'05' Intel32 0 X'21' Set Current Defaults 1 Length of following data 2 Set default viewing transform X'07' 3-4 Mask X'CC0C' 5 Names X'8F' 6-n M11, M12, M21, M22, M41, M42 Matrix elements 0 X'21' Set Current Defaults 1 Length of following data 2 Set default line attributes X'01' 3-4 Mask--OR of as many of the following bits as are required: X'8000' Line type X'4000' Line width X'2000' Line end X'1000' Line join X'0800' Stroke width X'0008' Line color X'0002' Line mix 5 Flags X'0F'Set indicated default attributes to initial values. (Data field is not present in this instance). X'8F' Set indicated default attributes to specified values. 6-n Data--data values as required, in the following order if present. No space is reserved for attributes for which the corresponding mask flag was not set. (1 byte)---Line type (1 byte)---Line width (1 byte)---Line end (1 byte)---Line join (G bytes)--Stroke width (4 bytes)--Line color (1 byte)---Line mix (G=2 or 4 depending on the Geometrics parameter of Set Default Parameter Format) 0 X'21' Set Current Defaults 1 Length of following data 2 Set Default Character Attributes X'02' 3-4 Mask--OR of as many of the following bits as are required: X'8000' Character angle X'4000' Character box X'2000' Character direction X'1000' Character precision X'0800' Character set X'0400' Character shear X'0040' Character break extra X'0020' Character extra X'O008' Character color X'0004' Character background color X'0002' Character mix X'0001' character background mix 5 Flags X'0F' Set indicated default attributes to initial values. (Data field is not present in this case). X'8F' Set indicated default attributes to specified values. 6-n Data--data values as required, in the following order if present. No space is reserved for attributes for which the corresponding Mask flag was not set. (2*G bytes) - Character angle (2*G + 4 bytes) - Character box (1 byte) - Character direction (1 byte) - Character precision (1 byte) - Character set (2*G bytes) - Character shear (4 bytes) - Character break extra (4 bytes) - Character extra (4 bytes) - Character color (4 bytes) - Character background color (1 byte) - Character mix (1 byte) - Character background mix (G=2 or 4 depending on the Geometrics parameter of Set Default Parameter Format) 0 X'21' Set Current Defaults 1 Length of following data 2 Set Default Marker Attributes X'03' 3-4 Mask--OR of as many of the following bits as are required: X'4000' Marker box X'1000' Marker precision X'0800' Marker set X'0080' Marker symbol X'0008' Marker color X'0004' Marker background color X'0002' Marker mix X'0001' Marker background mix 5 Flags X'0F' Set indicated default attributes to initial values. (Data field is not present in this instance) X'8F' Set indicated default attributes to specified values. 6-n Data--data values as required, in this order if present. No space is reserved for attributes for which the corresponding Mask flag was not set. (2*G bytes) - Marker box (1 byte) - Marker precision (1 byte) - Marker set (1 byte) - Marker symbol (4 bytes) - Marker color (4 bytes) - Marker background color (1 byte) - Marker mix (1 byte) - Marker background mix (G=2 or 4 depending on the Geometrics parameter of Set Default Parameter Format) 0 X,'21,' Set Current Defaults 1 Length of following data 2 Set Default Pattern Attributes X'04' 3-4 Mask--OR of as many of the following bits as are required: X'0800' Pattern set X'0100' Pattern symbol X'0080' Pattern reference point X'0008' Pattern color X'0004' Pattern background color X'0002' Pattern mix X'0001' Pattern background mix 5 Flags X'0F' Set indicated default attributes to initial values. (Data field is not present in this instance) X'8F' Set indicated default attributes to specified values. 6-n Data--data values as required, in this order if present. No space is reserved for attributes for which the corresponding Mask flag was not set. (1 byte) - Pattern set (1 byte) - Pattern symbol (2*G bytes) - Pattern reference point (4 bytes) - Pattern color (4 bytes) - Pattern background color (1 byte) - Pattern mix (1 byte) - Pattern background mix (G=2 or 4 depending on the Geometrics parameter of Set Default Parameter Format) 0 X'21' Set Current Defaults 1 Length of following data 2 Set Default Image Attributes X'06' 3-4 Mask--OR of as many of these bits as are required: X'0008' Image color X'0004' Image background color X'0002' Image mix X'0001' Image background mix 5 Flags X'0F' Set indicated default attributes to initial values. (Data field is not present in this instance) X'8F' Set indicated default attributes to specified values. 6-n Data--data values as required, in this order if present. No space is reserved for attributes for which the corresponding Mask flag was not set. (4 bytes) - Image color (4 bytes) - Image background color (1 byte) - Image mix (1 byte) - Image background mix 0 X'21' Set Current Defaults 1 Length of following data 2 Set Default Viewing Window X'05' 3-4 Mask--OR of as many of the following bits as are required: X'8000' x left limit X'4000' x right limit X'2000' y bottom limit X'1000' y top limit 5 Flags X'0F' Set indicated default attributes to initial values. (Data field is not present in this case). X'8F' Set indicated default attributes to specified values. 6-n Data--data values as required, in the following order if present. No space is reserved for attributes for which the corresponding Mask flag was not set. (2*G bytes) - x left limit (2*G bytes) - x right limit (2*G bytes) - y bottom limit (2*G bytes) - y top limit (G=2 or 4 depending on the Geometrics parameter of Set Default Parameter Format) 0 X'21' Set Current Defaults 1 Length of following data 2 Set Default Arc Parameters X'0B' 3-4 Mask--OR of as many of the following bits as are required: X'8000' P value X'4000' Q value X'2000' R value X'1000' S value 5 Flags X'0F' Set indicated default attributes to initial values. (Data field is not present in this case). X'8F' Set indicated default attributes to specified values. 6-n Data--data values as required, in the following order if present. No space is reserved for attributes for which the corresponding Mask flag was not set. (G bytes) - P value (G bytes) - Q value (G bytes) - R value (G bytes) - S value (G=2 or 4 depending on the Geometrics parameter of Set Default Parameter Format) 0 X'21' Set Current Defaults 1 Length of following data 2 Set Default Pick Identifier X'0C' 3-4 Mask--OR of as many of the following bits as are required: X'8000' Pick identifier 5 Flags X'0F' Set indicated default attributes to initial values. (Data field is not present in this case). X'8F' Set indicated default attributes to specified values. 6-n Data--data values as required, in the following order if present. No space is reserved for attributes for which the corresponding Mask flag was not set. (4 bytes) - Pick identifier 0 X'E7' Set Bit-map Identifier 1 Length of following data X'07' 2-3 Usage Flags X'8000' 4-7 Bit-map handle 8 Lcid Graphics Data (GAD): optional, repeating Structured Field Introducer 0-1 Length X'n+9' 2-4 GAD X'D3EEBB' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters (maximum length in one structured field is 32759) Graphics Segment (optional, repeating) Segment data (including the Begin Segment parameter) can be split at any point between successive Graphics Data structured fields. 0 X'70' Begin Segment 1 Length of following data X'0E' 2-5 Segment identifier 6 Segment attributes (1) 0 B'1' Invisible 1 B'1' Propagate invisibility 2 B'1' Detectable 3 B'1' Propagate detectability 6 B'1' Dynamic 7 B'1' Fast chaining 7 Segment attributes (2) 0 B'1' Non-chained 3 B'1' Prolog 8-9 Segment data length (low-order 2 bytes) 10-13 Reserved 14-15 Segment data length (high-order 2 bytes) 16-n Graphics orders (see page 33-1) End Graphics Object (EGR) Structured Field Introducer 0-1 Length X'0010' 2-4 EGR X'D3A9BB' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters 0-7 Graphics object name C'0000 0007' End Resource Group (ERG): required Structured Field Introducer 0-1 Length X'0010' 2-4 ERG X'D3A9C6' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters 0-7 Resource Group name C'0000 0002' End Document (EDT): required Structured Field Introducer 0-1 Length X'0010' 2-4 EDT X'D3A9A8' 5 Flags X'00' 6-7 Segment sequence number X'0000' Parameters 0-7 Document name C'0000 0001'