yuri %!s(int64=22) %!d(string=hai) anos
pai
achega
1712c1a175
Modificáronse 1 ficheiros con 944 adicións e 2 borrados
  1. 944 2
      rtl/os2/pmgpi.pas

+ 944 - 2
rtl/os2/pmgpi.pas

@@ -4,7 +4,7 @@
 
 
                             PMGPI interface unit
                             PMGPI interface unit
                      FPC Pascal Runtime Library for OS/2
                      FPC Pascal Runtime Library for OS/2
-                   Copyright (c) 1999-2000 by Florian Klmpfl
+                   Copyright (c) 1999-2000 by Florian Klaempfl
                     Copyright (c) 1999-2000 by Ramon Bosque
                     Copyright (c) 1999-2000 by Ramon Bosque
 
 
  The Free Pascal runtime library is distributed under the Library GNU Public
  The Free Pascal runtime library is distributed under the Library GNU Public
@@ -39,6 +39,8 @@ unit pmgpi;
 
 
 interface
 interface
 
 
+{$MACRO ON}
+
 uses    os2def,pmbitmap;
 uses    os2def,pmbitmap;
 
 
 const   GPI_ERROR                           =       0;
 const   GPI_ERROR                           =       0;
@@ -699,6 +701,942 @@ type    SizeL=record
         PPolyset=^Polyset;
         PPolyset=^Polyset;
         TPolyset=Polyset;
         TPolyset=Polyset;
 
 
+// ===========================================================================
+//*
+//* The orders fall into 4 categories :-
+//*
+//* 1) 1-byte orders
+//*
+//* 2) 2-byte orders    - second byte contains the value
+//*
+//* 3) Long orders      - second byte gives the order length, subsequent bytes
+//*                       contain the values (up to 256 bytes long)
+//*
+//* 4) Very long orders - third and fourth bytes gives the order length,
+//*                       subsequent bytes contain the values (up to 64K long)
+//*
+//* ===========================================================================
+
+//#pragma pack(1)      /* pack on byte boundary */
+
+//***************************************************************************\
+//*
+//* Miscellaneous structures used in this file
+//*
+//***************************************************************************/
+
+// form of RECTL with shorts instead of longs
+type
+  RECT1S=record        // rcs
+    xLeft: Integer;
+    yBottom: Integer;
+    xRight: Integer;
+    yTop: Integer;
+  end;
+
+// form of POINTL with 1 byte offsets instead of longs
+  ODPOINT=record          // odpt
+    dx: Char;
+    dy: Char;
+  end;
+
+// form of SIZEL with shorts instead of longs
+  SIZES=record            // sizs
+    cx: Integer;
+    cy: Integer;
+  end;
+
+// unsigned two-byte swapped integer
+  SWPUSHORT=record        // swpus
+    HiByte: Byte;
+    LoByte: Byte;
+  end;
+
+//***************************************************************************\
+//*
+//* 1-byte orders
+//*
+//***************************************************************************/
+
+// macro to tell whether this is a 1-byte order
+{$define BYTE_ORDER(oc):=((oc)=OCODE_GNOP1 or (oc)=OCODE_GESD)}
+
+// 1-byte order codes
+const
+  OCODE_GNOP1    =$00;            // No-operation
+  OCODE_GESD     =$FF;            // End symbol definition
+
+//***************************************************************************\
+//
+// 2-byte orders
+//
+//***************************************************************************/
+
+// definitions to help determine whether an order code is a 2-byte order
+const
+  OCODE2_1       =$80;
+  OCODE2_2       =$88;
+
+{$define SHORT_ORDER(oc):=((((oc) xor OCODE2_1) and OCODE2_2)=OCODE2_2)}
+
+// General 2-byte order structure
+type
+  ORDER=record        // ord
+    idCode: Byte;
+    uchData: Byte;
+  end;
+
+// 2-byte order codes
+const
+  OCODE_GBAR     =$68;           // Begin area
+  OCODE_GCFIG    =$7D;           // Close figure
+  OCODE_GEEL     =$49;           // End element
+  OCODE_GEPTH    =$7F;           // End path
+  OCODE_GEPROL   =$3E;           // End prologue
+  OCODE_GPOP     =$3F;           // Pop
+  OCODE_GSBMX    =$0D;           // Set background mix
+  OCODE_GPSBMX   =$4D;           // Push & set b/g mix
+  OCODE_GSCD     =$3A;           // Set char direction
+  OCODE_GPSCD    =$7A;           // Push & set char direction
+  OCODE_GSCR     =$39;           // Set char precision
+  OCODE_GPSCR    =$79;           // Push & set char precision
+  OCODE_GSCS     =$38;           // Set char set
+  OCODE_GPSCS    =$78;           // Push & set char set
+  OCODE_GSCOL    =$0A;           // Set color
+  OCODE_GPSCOL   =$4A;           // Push & set color
+  OCODE_GSLE     =$1A;           // Set line end
+  OCODE_GPSLE    =$5A;           // Push & set line end
+  OCODE_GSLJ     =$1B;           // Set line join
+  OCODE_GPSLJ    =$5B;           // Push & set line join
+  OCODE_GSLT     =$18;           // Set line type
+  OCODE_GPSLT    =$58;           // Push & set line type
+  OCODE_GSLW     =$19;           // Set line width
+  OCODE_GPSLW    =$59;           // Push & set line width
+  OCODE_GSMP     =$3B;           // Set marker precision
+  OCODE_GPSMP    =$7B;           // Push & set marker precision
+  OCODE_GSMS     =$3C;           // Set marker set
+  OCODE_GPSMS    =$7C;           // Push & set marker set
+  OCODE_GSMT     =$29;           // Set marker symbol
+  OCODE_GPSMT    =$69;           // Push & set marker symbol
+  OCODE_GSMX     =$0C;           // Set mix
+  OCODE_GPSMX    =$4C;           // Push & set mix
+  OCODE_GSPS     =$08;           // Set pattern set
+  OCODE_GPSPS    =$48;           // Push & set pattern set
+  OCODE_GSPT     =$28;           // Set pattern symbol
+  OCODE_GPSPT    =$09;           // Push & set pattern symbol
+
+// constants for 2-byte orders
+
+// Begin area
+const
+  GBAR_RESERVED   =$80;
+  GBAR_BOUNDARY   =$C0;
+  GBAR_NOBOUNDARY =$80;
+  GBAR_WINDING    =$A0;
+  GBAR_ALTERNATE  =$80;
+
+// Set Character Precision
+const
+  GSCR_PRECISION  =$0F;
+
+//***************************************************************************\
+//*
+//* Long orders
+//*
+//***************************************************************************/
+
+// definitions to help determine whether an order code is a long order
+const
+  OCODE_VLONG    =$FE;
+
+{$define LONG_ORDER(oc):=(not((oc)=OCODE_VLONG or BYTE_ORDER(oc) or SHORT_ORDER(oc)))}
+
+// long order structure
+const
+  LORDER_ML=253;
+
+type
+  LORDER=record           // lord
+    idCode: Byte;
+    uchLength: Byte;
+    uchData: Array[0..LORDER_ML-1] of Byte;
+  end;
+
+// Long orders for which the length of data is normally zero
+const
+  OCODE_GEAR     =$60;            // End Area
+  OCODE_GEIMG    =$93;            // End Image
+
+// Long orders for which the data is contained in a type already defined
+
+// Character String
+const
+  OCODE_GCCHST  = $83;            // char string at curr posn
+  GCCHST_MC     = 255;            // Max len of string in bytes
+
+  OCODE_GCHST   = $C3;            // char string at given pos
+  GCHST_SMC     = 251;             // Max len of string (S)
+  GCHST_LMC     = 247;             // Max len of string (L)
+
+// Character String Move
+  OCODE_GCCHSTM = $B1;            // char string move at c.p.
+  GCCHSTM_MC    = 255;             // Max len of string in byte
+
+  OCODE_GCHSTM  = $F1;            // char string move at g.p.
+  GCHSTM_SMC    = 251;             // Max len of string (S)
+  GCHSTM_LMC    = 247;             // Max len of string (L)
+
+// Comment
+  OCODE_GCOMT   = $01;            // Comment
+  GCOMT_ML      = 255;             // Maximum len of comment data
+
+// Image
+  OCODE_GIMD    = $92;            // Image data
+  GIMD_ML       = 255;             // Maximum len of image data
+
+// Full Arc
+  OCODE_GCFARC  = $87;            // full arc at current posn
+  OCODE_GFARC   = $C7;            // full arc at given posn
+
+// Label
+  OCODE_GLABL   = $D3;            // Label
+
+// Set Current Position
+  OCODE_GSCP    = $21;            // Set current position
+  OCODE_GPSCP   = $61;            // Push and set curr posn
+
+// Bezier spline
+  OCODE_GCBEZ   = $A5;            // Bezier spline at curr pos
+  GCBEZ_SMB     = 21;              // Max number of splines (S)
+  GCBEZ_LMB     = 10;              // Max number of splines (L)
+
+  OCODE_GBEZ    = $E5;            // Bezier spline at given pos
+  GBEZ_SMB      = 20;              // Max number of splines (S)
+  GBEZ_LMB      = 10;              // Max number of splines (L)
+
+// Fillet
+  OCODE_GCFLT   = $85;            // fillet at current posn
+  GCFLT_SMP     = 63;              // Max number of points (S)
+  GCFLT_LMP     = 31;              // Max number of points (L)
+
+  OCODE_GFLT    = $C5;            // fillet at given position
+  GFLT_SMP      = 62;              // Max number of points (S)
+  GFLT_LMP      = 30;              // Max number of points (L)
+
+// Polyline
+  OCODE_GCLINE  = $81;            // polyline at current posn
+  GCLINE_SMP    = 63;              // Max number of points (S)
+  GCLINE_LMP    = 31;              // Max number of points (L)
+
+  OCODE_GLINE   = $C1;            // polyline at given posn
+  GLINE_SMP     = 62;              // Max number of points (S)
+  GLINE_LMP     = 30;              // Max number of points (L)
+
+// Polymarker
+  OCODE_GCMRK   = $82;            // marker at current posn
+  GCMRK_SMP     = 63;              // Max number of points (S)
+  GCMRK_LMP     = 31;              // Max number of points (L)
+
+  OCODE_GMRK    = $C2;            // marker at given posn
+  GMRK_SMP      = 62;              // Max number of points (S)
+  GMRK_LMP      = 30;              // Max number of points (L)
+
+// Relative Line
+  OCODE_GCRLINE  =$A1;            // Relative line at curr pos
+  GCRLINE_MP     =127;             // Max number of points
+
+  OCODE_GRLINE  = $E1;            // Relative line at givn pos
+  GRLINE_SMP    = 125;             // Max number of points (S)
+  GRLINE_LMP    = 123;             // Max number of points (L)
+
+// Set Background Color
+  OCODE_GSBCOL  = $25;            // Set background color
+  OCODE_GPSBCOL = $65;            // Push and set b/g color
+
+// Set Extended Color
+  OCODE_GSECOL  = $26;            // Set extended color
+  OCODE_GPSECOL = $66;            // Push and set ext color
+
+// Extended Color values
+  SECOL_DEFAULT0  =$0000;
+  SECOL_DEFAULT1  =$FF00;
+  SECOL_NEUTRAL   =$FF07;
+  SECOL_RESET     =$FF08;
+
+// Set Character Angle
+  OCODE_GSCA    = $34;            // Set character angle
+  OCODE_GPSCA   = $74;            // Push and set char angle
+
+// Set Character Shear
+  OCODE_GSCH    = $35;            // Set character shear
+  OCODE_GPSCH   = $75;            // Push and set char shear
+
+// Set Fractional Line Width
+  OCODE_GSFLW   = $11;            // Set fractional line width
+  OCODE_GPSFLW  = $51;            // Push and set frac l width
+
+// Set Pick Identifier
+  OCODE_GSPIK   = $43;            // Set pick identifier
+  OCODE_GPSPIK  = $23;            // Push and set pick id
+
+
+// Long Orders for which a structure can be defined for the data
+
+// Arc
+  OCODE_GCARC   = $86;            // Arc at Current Position
+  OCODE_GARC    = $C6;            // Arc at Given Position
+
+type
+  ORDERS_GCARC=record     // osgcarc
+    ptInter: POINTS;
+    ptEnd: POINTS;
+  end;
+
+  ORDERL_GCARC=record     // olgcarc
+    ptInter: POINTL;
+    ptEnd: POINTL;
+  end;
+
+// Begin Element
+const
+  OCODE_GBEL    = $D2;            // Begin Element
+
+  GBEL_DL       = 251;
+
+type
+  ORDER_GBEL=record       // ogbel
+    lElementType: Longint;
+    achDesc: Array[0..GBEL_DL-1] of Char;
+  end;
+
+// Begin Image
+const
+  OCODE_GCBIMG  = $91;            // Begin Image at curr posn
+  OCODE_GBIMG   = $D1;            // Begin Image at given posn
+
+type
+  ORDER_GCBIMG=record     // ogbimg
+    uchFormat: Byte;
+    uchReserved: Byte;
+    cx: SWPUSHORT;
+    cy: SWPUSHORT;
+  end;
+
+// Begin Path
+const
+  OCODE_GBPTH   = $D0;            // Begin Path
+
+type
+  ORDER_GBPTH=record      // ogbpth
+    usReserved: Word;
+    idPath: Longint;
+  end;
+
+// Box
+const
+  OCODE_GCBOX    =$80;            // Box at current position
+  OCODE_GBOX     =$C0;            // Box at given position
+
+type
+  ORDERS_GCBOX=record     // osgcbox
+    fbFlags: Byte;
+    uchReserved: Byte;
+    ptCorner: POINTS;
+    hAxis: Integer;
+    vAxis: Integer;
+  end;
+
+  ORDERL_GCBOX=record     // olgcbox
+    fbFlags: Byte;
+    uchReserved: Byte;
+    ptCorner: POINTL;
+    hAxis: Longint;
+    vAxis: Longint;
+  end;
+
+const
+  GCBOX_FILL     =$40;
+  GCBOX_BOUNDARY =$20;
+
+// Call Segment
+  OCODE_GCALLS   =$07;            // call segment
+
+type
+  ORDER_GCALLS=record     // ogcalls
+    sReserved: Word;
+    idSegment: Longint;
+  end;
+
+// Fill Path
+const
+  OCODE_GFPTH   =$D7;            // Fill path
+
+type
+  ORDER_GFPTH=record     // ogfpth
+    fbFlags: Byte;
+    uchReserved: Byte;
+    idPath: Longint;
+  end;
+
+const
+  GFPTH_ALTERNATE =$00;
+  GFPTH_WINDING   =$40;
+  GFPTH_MODIFY    =$20;
+
+// Outline Path
+  OCODE_GOPTH    =$D4;            // Outline Path
+
+type
+  ORDER_GOPTH=record     // ogopth
+    fbFlags: Byte;
+    uchReserved: Byte;
+    idPath: Longint;
+  end;
+
+// Modify Path
+const
+  OCODE_GMPTH =$D8;               // modify path
+
+type
+  ORDER_GMPTH=record      // ogmpth
+    uchMode: Byte;
+    uchReserved: Byte;
+    idPath: Longint;
+  end;
+
+const
+  GMPTH_STROKE   =$06;
+
+// Partial Arc
+  OCODE_GCPARC   =$A3;            // Partial arc at curr posn
+  OCODE_GPARC    =$E3;            // Partial arc at given posn
+
+type
+  ORDERS_GCPARC=record    // osgcparc
+    ptCenter: POINTS;
+    ufx88Multiplier: FIXED88;
+    usStartAngle: Longint;
+    usSweepAngle: Longint;
+  end;
+
+  ORDERL_GCPARC=record    // olgcparc
+    ptCenter: POINTL;
+    ufxMultiplier: FIXED;
+    usStartAngle: Longint;
+    usSweepAngle: Longint;
+  end;
+
+// Set Clip Path
+const
+  OCODE_GSCPTH   =$B4;            // Set clip path
+
+type
+  ORDER_GSCPTH=record     // ogscpth
+    fbFlags: Byte;
+    uchReserved: Byte;
+    idPath: Longint;
+  end;
+
+const
+  GSCPTH_ALTERNATE =$00;
+  GSCPTH_WINDING   =$40;
+  GSCPTH_RESET     =$00;
+  GSCPTH_INTERSECT =$20;
+
+// Set Arc Parameters
+  OCODE_GSAP     =$22;            // Set arc parameters
+  OCODE_GPSAP    =$62;            // Push and set arc params
+
+type
+  ORDERS_GSAP=record      // osgsap
+    p: Integer;
+    q: Integer;
+    r: Integer;
+    s: Integer;
+  end;
+
+  ORDERL_GSAP=record      // olgsap
+    p: Longint;
+    q: Longint;
+    r: Longint;
+    s: Longint;
+  end;
+
+// Set Background Indexed Color
+const
+  OCODE_GSBICOL  =$A7;            // Set b/g indexed color
+  OCODE_GPSBICOL =$E7;            // Push and set b/g ind color
+  OCODE_GSICOL   =$A6;            // Set indexed color
+  OCODE_GPSICOL  =$E6;            // Push and set indexd color
+
+
+type
+  ORDER_GSBICOL=record    // ogbicol
+    fbFlags: Byte;
+    auchColor: Array[0..3-1] of Byte;
+  end;
+
+const
+  SICOL_SPECIFY  =$00;
+  SICOL_SPECIAL  =$40;
+  SICOL_DEFAULT  =$80;
+  SICOL_BLACK    =1;
+  SICOL_WHITE    =2;
+  SICOL_ONES     =4;
+  SICOL_ZEROES   =5;
+
+// Set Character Cell
+  OCODE_GSCC     =$33;            // Set character cell
+  OCODE_GPSCC    =$03;            // Push and set char cell
+
+type
+  ORDERS_GSCC=record      // osgscc
+    cxInt: Integer;
+    cyInt: Integer;
+    cxFract: Word;
+    cyFract: Word;
+    fbFlags: Byte;
+    uchReserved: Byte;
+  end;
+
+  ORDERL_GSCC=record      // olgscc
+    cxInt: Longint;
+    cyInt: Longint;
+    cxFract: Word;
+    cyFract: Word;
+    fbFlags: Byte;
+    uchReserved: Byte;
+  end;
+
+const
+  GSCC_ZERODEF   =$00;
+  GSCC_ZEROZERO  =$80;
+
+// Set Marker Cell
+  OCODE_GSMC     =$37;            // Set marker cell
+  OCODE_GPSMC    =$77;            // Push and set marker cell
+
+type
+  ORDERS_GSMC=record      // osgsmc
+    cx: Integer;
+    cy: Integer;
+    fbFlags: Byte;
+    uchReserved: Byte;
+  end;
+
+  ORDERL_GSMC=record      // olgsmc
+    cx: Longint;
+    cy: Longint;
+    fbFlags: Byte;
+    uchReserved: Byte;
+  end;
+
+const
+  GSMC_ZERODEF   =$00;
+  GSMC_ZEROZERO  =$80;
+
+// Set Pattern Reference Point
+  OCODE_GSPRP    =$A0;            // Set pattern ref point
+  OCODE_GPSPRP   =$E0;            // Push and set patt ref pt
+
+type
+  ORDERS_GSPRP=record     // osgsprp
+    fbFlags: Byte;
+    uchReserved: Byte;
+    ptPos: POINTS;
+  end;
+
+  ORDERL_GSPRP=record     // olgsprp
+    fbFlags: Byte;
+    uchReserved: Byte;
+    ptPos: POINTL;
+  end;
+
+const
+  GSPRP_DEFAULT  =$80;
+  GSPRP_SPECIFY  =$00;
+
+
+// Set Individual Attribute
+  OCODE_GSIA     =$14;            // Set individual attribute
+  OCODE_GPSIA    =$54;            // Push and set ind attr
+
+  GSIA_VL=3;
+
+type
+  ORDER_GSIA=record       // ogsia
+    uchAttrType: Byte;
+    uchPrimType: Byte;
+    fbFlags: Byte;
+    auchValue: Array[0..GSIA_VL-1] of Byte;
+  end;
+
+const
+  GSIA_COLOR     =$01;
+  GSIA_BCOLOR    =$02;
+  GSIA_MIX       =$03;
+  GSIA_BMIX      =$04;
+  GSIA_LINE      =$01;
+  GSIA_CHAR      =$02;
+  GSIA_MARKER    =$03;
+  GSIA_PATTERN   =$04;
+  GSIA_IMAGE     =$05;
+  GSIA_SPECIFY   =$00;
+  GSIA_SPECIAL   =$40;
+  GSIA_DEFAULT   =$80;
+  GSIA_BLACK     =1;
+  GSIA_WHITE     =2;
+  GSIA_ONES      =4;
+  GSIA_ZEROES    =5;
+
+
+// Set Model /Viewing Transform
+  OCODE_GSTM     =$24;            // Set model transform
+  OCODE_GPSTM    =$64;            // Push and set model tfm
+
+  OCODE_GSTV     =$31;            // Set Viewing Transform
+
+  GSTM_ML        =16;
+
+type
+  ORDERS_GSTM=record       // osgstm
+    uchReserved: Byte;
+    fbFlags: Byte;
+    fsMask: Word;
+    asMatrix: Array[0..GSTM_ML-1] of Integer;
+  end;
+
+  ORDERL_GSTM=record       // olgstm
+    uchReserved: Byte;
+    fbFlags: Byte;
+    fsMask: Word;
+    alMatrix: Array[0..GSTM_ML-1] of Longint;
+  end;
+
+const
+  GSTM_M11     =$8000;
+  GSTM_M12     =$4000;
+  GSTM_M13     =$2000;
+  GSTM_M14     =$1000;
+  GSTM_M21     =$0800;
+  GSTM_M22     =$0400;
+  GSTM_M23     =$0200;
+  GSTM_M24     =$0100;
+  GSTM_M31     =$0080;
+  GSTM_M32     =$0040;
+  GSTM_M33     =$0020;
+  GSTM_M34     =$0010;
+  GSTM_M41     =$0008;
+  GSTM_M42     =$0004;
+  GSTM_M43     =$0002;
+  GSTM_M44     =$0001;
+
+  GSTM_UNITY     =$00;
+  GSTM_AFTER     =$01;
+  GSTM_BEFORE    =$02;
+  GSTM_OVERWRITE =$03;
+
+  GSTV_OVERWRITE =$00;
+  GSTV_AFTER     =$04;
+
+// Set Segment Boundary, Viewing Window
+  OCODE_GSSB     =$32;            // Set segment boundary
+  OCODE_GSVW     =$27;            // Set viewing window
+  OCODE_GPSVW    =$67;            // Push and set view window
+
+  GSSB_ML        =4;
+
+type
+  ORDERS_GSSB=record      // osgssb
+    fbFlags: Byte;
+    fbMask: Byte;
+    alMatrix: Array[0..GSSB_ML-1] of Integer;
+  end;
+
+  ORDERL_GSSB=record      // olgssb
+    fbFLags: Byte;
+    fbMask: Byte;
+    alMatrix: Array[0..GSSB_ML-1] of Longint;
+  end;
+
+const
+  GSSB_XLEFT     =$20;
+  GSSB_XRIGHT    =$10;
+  GSSB_YBOTTOM   =$08;
+  GSSB_YTOP      =$04;
+
+  GSVW_INTERSECT =$00;
+  GSVW_REPLACE   =$80;
+
+// Set Segment Characteristics
+  OCODE_GSGCH    =$04;            // Set segment characteristics
+
+  GSGCH_ML       =254;
+
+type
+  ORDER_GSGCH=record      // ogsgch
+    uchIdent: Byte;
+    auchData: Array[0..GSGCH_ML-1] of Byte;
+  end;
+
+// Set Stroke Line Width
+const
+  OCODE_GSSLW    =$15;            // Set stroke line width
+  OCODE_GPSSLW   =$55;            // Push and set strk l width
+
+type
+  ORDERS_GSSLW=record     // osgsslw
+    fbFlags: Byte;
+    uchReserved: Byte;
+    LineWidth: Integer;
+  end;
+
+type
+  ORDERL_GSSLW=record     // olgsslw
+    fbFlags: Byte;
+    uchReserved: Byte;
+    LineWidth: Longint;
+  end;
+
+const
+  GSSLW_DEFAULT  =$80;
+  GSSLW_SPECIFY  =$00;
+
+// Sharp Fillet at Current Position
+  OCODE_GCSFLT   =$A4;            // Sharp fillet at curr pos
+  OCODE_GSFLT    =$E4;            // Sharp fillet at given pos
+
+  GCSFLT_SMF     =21;
+  GSFLT_SMF      =20;
+
+type
+  ORDERS_GCSFLT=record    // osgcsflt
+    apt: Array[0..2*GCSFLT_SMF-1] of POINTS;
+    afxSharpness: Array[0..GCSFLT_SMF-1] of FIXED;
+  end;
+
+const
+  GCSFLT_LMF    = 12;
+  GSFLT_LMF     = 12;
+
+type
+  ORDERL_GCSFLT=record    // olgcsflt
+    apt: Array[0..2*GCSFLT_SMF-1] of POINTL;
+    afxSharpness: Array[0..GCSFLT_SMF-1] of FIXED;
+  end;
+
+// Bitblt
+const
+  OCODE_GBBLT    =$D6;            // Bitblt
+
+type
+  ORDERS_GBBLT=record      // osgbblt
+    fsFlags: Word;
+    usMix: Word;
+    hbmSrc: HBITMAP;
+    lOptions: Longint;
+    rcsTargetRect: RECT1S;
+    rclSourceRect: RECTL;
+  end;
+
+  ORDERL_GBBLT=record      // olgbblt
+    fsFlags: Word;
+    usMix: Word;
+    hbmSrc: HBITMAP;
+    lOptions: Longint;
+    rclTargetRect: RECTL;
+    rclSourceRect: RECTL;
+  end;
+
+// Char & break extra
+const
+  OCODE_GSCE     =$17;            // Set char extra
+  OCODE_GPSCE    =$57;            // Push and set char extra
+  OCODE_GSCBE    =$05;            // Set char break extra
+  OCODE_GPSCBE   =$45;            // Push and set char break extra
+
+type
+  ORDER_GSCBE=record       // osgsce
+    fbFlags: Byte;
+    uchReserved: Byte;
+    ufxextra: FIXED;
+  end;
+  ORDER_GSCE=ORDER_GSCBE;
+  ORDER_GPSCE=ORDER_GSCBE;
+  ORDER_GPSCBE=ORDER_GSCBE;
+
+// Escape
+const
+  OCODE_GESCP    =$D5;            // Escape
+
+
+//* type describes type of escape order, identifier gives the escape
+//* order if the type is registered
+const
+  GESCP_ML      = 253;
+
+type
+  ORDER_GESCP=record      // ogescp
+    uchType: Byte;
+    uchIdent: Byte;
+    auchData: Array[0..GESCP_ML-1] of Byte;           // Escape data
+  end;
+
+const
+  GESCP_REG      =$80;            // identifier is registered
+
+// Escape (Bitblt)
+const
+  GEBB_REGID     =$02;            // uchIdent - Bitblt
+
+  ETYPE_GEBB     =$800200D5;
+
+  GEBB_LMP       =29;
+
+type
+  ORDERL_GEBB=record      // olgebb
+    fbFlags: Byte;
+    usMix: Word;
+    cPoints: Byte;
+    hbmSrc: HBITMAP;
+    lReserved: Longint;
+    lOptions: Longint;
+    aptPoints: Array[0..GEBB_LMP-1] of POINTL;
+  end;
+
+// Escape (Set Pel)
+const
+  GEPEL_REGID    =$01;            // uchIdent - Set Pel
+
+  ETYPE_GEPEL         =$800100D5;
+
+// Escape (DrawBits)
+  GEDB_REGID     =$04;          // uchIdent - DrawBits
+
+  ETYPE_GEDB          =$800400D5;
+
+type
+  ORDERL_GEDB=record      // olgedb
+    fsFlags: Word;
+    usMix: Word;
+    pBits: Pointer;
+    pbmi: PBITMAPINFO2;
+    lOptions: Longint;
+    rclTargetRect: RECTL;
+    rclSourceRect: RECTL;
+  end;
+
+// Escape (FloodFill)
+const
+  GEFF_REGID     =$03;          // uchIdent - FloodFill
+
+  ETYPE_GEFF          =$800300D5;
+
+type
+  ORDERL_GEFF=record      // olgeff
+    fsFlags: Byte;
+    auchColor: Array[0..3-1] of Byte;
+  end;
+
+// Element Types for attribute bundles
+const
+  ETYPE_LINEBUNDLE    =$0000FD01;
+  ETYPE_CHARBUNDLE    =$0000FD02;
+  ETYPE_MARKERBUNDLE  =$0000FD03;
+  ETYPE_AREABUNDLE    =$0000FD04;
+  ETYPE_IMAGEBUNDLE   =$0000FD05;
+
+//***************************************************************************\
+//*
+//* Very long orders
+//*
+//***************************************************************************/
+
+// macro to tell whether this is a very long order
+{$define VLONG_ORDER(oc):=((oc)=OCODE_VLONG)}
+
+// Very long order structure
+const
+  VORDER_ML =65531;
+
+type
+  VORDER=record           // vord
+    idCode: Byte;
+    uchQualifier: Byte;
+    uchLength: SWPUSHORT;
+    uchData: Array[0..VORDER_ML-1] of Byte;
+  end;
+
+// Character String Extended
+const
+  OCODEQ_GCCHSTE  =$B0;           // Qualifier - current posn
+  OCODEQ_GCHSTE   =$F0;           // Qualifier - given position
+  OCODEQ_GTCHSPA  =$F4;           // Tabbed Char String At
+
+  ETYPE_GCCHSTE       =$0000FEB0;
+  ETYPE_GCHSTE        =$0000FEF0;
+
+type
+  ORDERS_GCCHSTE=record    // osgcchste
+    fbFlags: Byte;
+    uchReserved: Byte;
+    ptRect: Array[0..2-1] of POINTS;
+    cchString: SWPUSHORT;
+    achString: Array[0..1-1] of Char;
+    adx: Array[0..1-1] of Integer;
+  end;
+
+  ORDERL_GCCHSTE=record    // olgcchste
+    fbFlags: Byte;
+    uchReserved: Byte;
+    ptRect: Array[0..2-1] of POINTL;
+    cchString: SWPUSHORT;
+    achString: Array[0..1-1] of Char;
+    adx: Array[0..1-1] of Longint;
+  end;
+
+  ORDERL_GTCHSPA=record   // olgcchspa
+    fbFlags: Byte;
+    uchReserved: Byte;
+    ptRect: Array[0..2-1] of POINTL;
+    cchString: SWPUSHORT;
+    achString: Array[0..1-1] of Char;
+    adx: Array[0..2-1] of Longint;
+    tabs: Array[0..1-1] of Longint;
+  end;
+
+const
+  GCCHSTE_DRAWRECT      =$80;
+  GCCHSTE_NORECT        =$00;
+  GCCHSTE_CLIP          =$40;
+  GCCHSTE_NOCLIP        =$00;
+  GCCHSTE_DEEMPHASIZE   =$20;            // Reserved
+  GCCHSTE_NODEEMPHASIZE =$00;
+  GCCHSTE_LEAVEPOS      =$10;
+  GCCHSTE_MOVEPOS       =$00;
+  GCCHSTE_UNDERSCORE    =$08;
+  GCCHSTE_NOUNDERSCORE  =$00;
+  GCCHSTE_STRIKEOUT     =$04;
+  GCCHSTE_NOSTRIKEOUT   =$00;
+  GTCHSPA_STARTPOS      =$02;
+  GTCHSPA_NOSTARTPOS    =$00;
+
+// Extended Escape
+  OCODEQ_GEESCP   =$D5;           // Qualifier - extended escape
+
+  GEESCP_ML      =65533;
+
+type
+  ORDER_GEESCP=record     // ogeescp
+    uchType: Byte;
+    uchIdent: Byte;
+    auchData: Array[0..GEESCP_ML-1] of Byte;
+  end;
+
+//#pragma pack()    /* reset to default packing */
+
+
+
 function GpiCreatePS(hab,hdc : cardinal;var psizlSize : SIZEL;flOptions : cardinal) : cardinal;cdecl;
 function GpiCreatePS(hab,hdc : cardinal;var psizlSize : SIZEL;flOptions : cardinal) : cardinal;cdecl;
 function GpiDestroyPS(hps : cardinal) : longbool;cdecl;
 function GpiDestroyPS(hps : cardinal) : longbool;cdecl;
 function GpiAssociate(hps,hdc : cardinal) : longbool;cdecl;
 function GpiAssociate(hps,hdc : cardinal) : longbool;cdecl;
@@ -1226,9 +2164,13 @@ function GpiSetDefViewingLimits(hps : cardinal;var prclLimits : RECTL) : longboo
 function GpiPolygons(hps,ulCount : cardinal;var paplgn : POLYGON;flOptions,flModel : cardinal) : longint; cdecl; external 'pmgpi' index 650;
 function GpiPolygons(hps,ulCount : cardinal;var paplgn : POLYGON;flOptions,flModel : cardinal) : longint; cdecl; external 'pmgpi' index 650;
 
 
 end.
 end.
+
 {
 {
   $Log$
   $Log$
-  Revision 1.4  2002-11-02 13:26:36  hajny
+  Revision 1.5  2003-03-27 18:11:23  yuri
+  Orders added
+
+  Revision 1.4  2002/11/02 13:26:36  hajny
     * Gpi*Palette* parameters corrected
     * Gpi*Palette* parameters corrected
 
 
   Revision 1.3  2002/09/07 16:01:25  peter
   Revision 1.3  2002/09/07 16:01:25  peter