Jelajahi Sumber

+ Dynamic jobs properties added

yuri 22 tahun lalu
induk
melakukan
635280c5d2
1 mengubah file dengan 753 tambahan dan 19 penghapusan
  1. 753 19
      rtl/os2/pmdev.pas

+ 753 - 19
rtl/os2/pmdev.pas

@@ -17,7 +17,7 @@
 
 {Warning: This code is alfa. Future versions
  of this unit might not be compatible.}
- 
+
 unit pmdev;
 
 interface
@@ -44,16 +44,16 @@ const
   CAPS_IO_CAPS                    =1;
   CAPS_TECHNOLOGY                 =2;
   CAPS_DRIVER_VERSION             =3;
-  CAPS_WIDTH                      =4;  //pels            
-  CAPS_HEIGHT                     =5;  //pels            
+  CAPS_WIDTH                      =4;  //pels
+  CAPS_HEIGHT                     =5;  //pels
   CAPS_WIDTH_IN_CHARS             =6;
   CAPS_HEIGHT_IN_CHARS            =7;
-  CAPS_HORIZONTAL_RESOLUTION      =8;  //pels per meter  
-  CAPS_VERTICAL_RESOLUTION        =9;  //pels per meter  
-  CAPS_CHAR_WIDTH                 =10; //pels            
-  CAPS_CHAR_HEIGHT                =11; //pels            
-  CAPS_SMALL_CHAR_WIDTH           =12; //pels            
-  CAPS_SMALL_CHAR_HEIGHT          =13; //pels            
+  CAPS_HORIZONTAL_RESOLUTION      =8;  //pels per meter
+  CAPS_VERTICAL_RESOLUTION        =9;  //pels per meter
+  CAPS_CHAR_WIDTH                 =10; //pels
+  CAPS_CHAR_HEIGHT                =11; //pels
+  CAPS_SMALL_CHAR_WIDTH           =12; //pels
+  CAPS_SMALL_CHAR_HEIGHT          =13; //pels
   CAPS_COLORS                     =14;
   CAPS_COLOR_PLANES               =15;
   CAPS_COLOR_BITCOUNT             =16;
@@ -67,8 +67,8 @@ const
   CAPS_WINDOW_BYTE_ALIGNMENT      =22;
   CAPS_BITMAP_FORMATS             =23;
   CAPS_RASTER_CAPS                =24;
-  CAPS_MARKER_HEIGHT              =25; //pels            
-  CAPS_MARKER_WIDTH               =26; //pels            
+  CAPS_MARKER_HEIGHT              =25; //pels
+  CAPS_MARKER_WIDTH               =26; //pels
   CAPS_DEVICE_FONTS               =27;
   CAPS_GRAPHICS_SUBSET            =28;
   CAPS_GRAPHICS_VERSION           =29;
@@ -82,13 +82,13 @@ const
   CAPS_DEVICE_FONT_SIM            =39;
   CAPS_LINEWIDTH_THICK            =40;
   CAPS_DEVICE_POLYSET_POINTS      =41;
-  
+
 //Constants for CAPS_IO_CAPS
   CAPS_IO_DUMMY                   =1;
   CAPS_IO_SUPPORTS_OP             =2;
   CAPS_IO_SUPPORTS_IP             =3;
   CAPS_IO_SUPPORTS_IO             =4;
-  
+
 //Constants for CAPS_TECHNOLOGY
   CAPS_TECH_UNKNOWN               =0;
   CAPS_TECH_VECTOR_PLOTTER        =1;
@@ -96,7 +96,7 @@ const
   CAPS_TECH_RASTER_PRINTER        =3;
   CAPS_TECH_RASTER_CAMERA         =4;
   CAPS_TECH_POSTSCRIPT            =5;
-  
+
 //Constants for CAPS_COLOR_TABLE_SUPPORT
   CAPS_COLTABL_RGB_8              =1;
   CAPS_COLTABL_RGB_8_PLUS         =2;
@@ -182,7 +182,7 @@ type
     ybottom: Longint;
     xright: Longint;
     ytop: Longint;
-  end;            
+  end;
 
 //return codes for DevEscape
 const
@@ -236,7 +236,6 @@ const
 
 //string types for DevQueryDeviceNames
 type
-  Str8 = Array[0..7] of Char;
   Str16= Array[0..15] of Char;
   Str32= Array[0..31] of Char;
   Str64= Array[0..63] of Char;
@@ -266,6 +265,703 @@ type
     flAttributes: Longint;
   end;
 
+    { -----------------------------------------------------------------
+          Tuple Item used for QUERYSIZE
+        }
+    { djpQRT  }
+    { I - Property                       }
+    { I - type (DJP_ALL or DJP_CURRENT)  }
+    {                                                                }
+
+    type
+
+       TdjpQueryTuple = record
+            ulProperty : Cardinal;
+            lType : Longint;
+         end;
+       TQUERYTUPLE = TdjpQueryTuple;
+       TPQUERYTUPLE = ^TdjpQueryTuple;
+    { -----------------------------------------------------------------
+          Query Size Structure for DEVESC_QUERYSIZE
+        }
+    { djpQRS  }
+    { I - Size of entire structure       }
+    { O - Size returned;                 }
+    { I - Start of tuple list            }
+    {                                 use DJP_NONE for end of list   }
+
+       TdjpQuerySize = record
+            cb : Cardinal;
+            ulSizeNeeded : Cardinal;
+            aTuples : array[0..0] of TQUERYTUPLE;
+         end;
+       TQUERYSIZE = TdjpQuerySize;
+       TPQUERYSIZE = ^TdjpQuerySize;
+    { was #define dname def_expr }
+//    function QUERYSIZE_HEADER_SIZE : longint;
+        { return type might be wrong }
+
+    { -----------------------------------------------------------------
+          Dynamic Job Property Item
+        }
+    { djpITM  }
+    { I/O - sizeof DJP_ITEM structure    }
+    { I   - Which property               }
+    { I/O - DJP_ALL or DJP_CURRENT.      }
+    {                                   DJP_ERROR_XXX if error.      }
+    { O   - How many elements have been  }
+    {                                   returned                     }
+    { O   - Variably sized based on      }
+    {                                   ulProperty.  The smallest    }
+    {                                   is a ULONG in size           }
+
+    type
+
+       TdjpItem = record
+            cb : Cardinal;
+            ulProperty : Cardinal;
+            lType : Longint;
+            ulNumReturned : Cardinal;
+            ulValue : Cardinal;
+         end;
+       TDJP_ITEM = TdjpItem;
+       TPDJP_ITEM = ^TdjpItem;
+    { was #define dname def_expr }
+//    function DJP_HEADER_SIZE : longint;
+        { return type might be wrong }
+
+    { was #define dname(params) para_def_expr }
+    { argument types are unknown }
+//    function DJP_NEXT_STRUCTP(p : longint) : TPDJP_ITEM;
+
+    { was #define dname(params) para_def_expr }
+    { argument types are unknown }
+//    function DJP_ELEMENTP(s,t : longint) : ^Tt;
+
+(* error
+   #define DJP_SET_ELEMENT(s,t,e) ( *DJP_ELEMENTP (s,t) = (e))
+in define line 83 *)
+    { -----------------------------------------------------------------
+          Types of Dynamic Job Properties
+
+          To see if the driver is enabled use,
+              DevEscape      (DEVESC_QUERYESCSUPPORT,
+                              DEVESC_STARTDOC_WPROP, ...)
+          and DevQueryDevice (DEVQRY_QUERYSUPPORT,
+                              DEVESC_QUERYJOBPROPERTIES, ...)
+
+          NOTE: The C/S in the defines indicate the complexity or size of
+                the information.  If it is s, then the size is ULONG sized
+                and no special processing for the next element needs to be
+                done.
+                The J/P in the defines indicate the class.  J stands for job
+                properties and P stands for printer properties.
+        }
+    { also End Of List marker  }
+
+    const
+       DJP_NONE = 0;
+       DJP_SJ_ORIENTATION = 1;
+       DJP_CJ_RESOLUTION = 2;
+       DJP_SJ_BITSPERPEL = 3;
+       DJP_SJ_COLOR = 4;
+       DJP_SJ_PRINTQUALITY = 5;
+       DJP_SJ_PAPERSIZE = 6;
+       DJP_SJ_TRAYTYPE = 7;
+       DJP_SJ_MEDIA = 8;
+       DJP_SJ_MEDIA_COLOR = 9;
+       DJP_CJ_FORM = 10;
+       DJP_CJ_MIXEDFORMS = 11;
+       DJP_SJ_FONTDOWNLOADING = 12;
+       DJP_SJ_DUPLEX = 13;
+       DJP_SJ_COLLATE = 14;
+       DJP_SJ_FEED = 15;
+       DJP_SJ_COPIES = 16;
+       DJP_SJ_SCALING = 17;
+       DJP_SJ_FORMFEEDCONTROL = 18;
+       DJP_SJ_N_UP = 19;
+       DJP_CJ_OUTPUTBIN = 20;
+       DJP_CJ_TRAYNAME = 21;
+    { Types for DEVESC_QUERYJOBPROPERTIES / DEVESC_SETJOBPROPERTIES
+        }
+    { enumerate the property  }
+       DJP_ALL = 1;
+    { from job properties     }
+       DJP_CURRENT = 2;
+    { Errors for DEVESC_QUERYJOBPROPERTIES / DEVESC_SETJOBPROPERTIES
+        }
+    { driver doesnt support that property  }
+       DJP_ERROR_NOT_SUPPORTED = -(1);
+    { not in the valid range               }
+       DJP_ERROR_OUT_OF_RANGE = -(2);
+    { not enumerateable                    }
+       DJP_ERROR_NOT_ENUM = -(3);
+    { field not proper value               }
+       DJP_ERROR_INV_PARMS = -(4);
+    { -----------------------------------------------------------------
+          DJP_SJ_ORIENTATION
+        }
+       DJP_ORI_PORTRAIT = 1;
+       DJP_ORI_LANDSCAPE = 2;
+       DJP_ORI_REV_PORTRAIT = 3;
+       DJP_ORI_REV_LANDSCAPE = 4;
+
+    type
+
+       TDJPT_ORIENTATION = Cardinal;
+
+       TPDJPT_ORIENTATION = Cardinal;
+    { -----------------------------------------------------------------
+          DJP_CJ_RESOLUTION
+        }
+    { djpRES  }
+    { X resolution (in dots per inch)  }
+    { Y resolution (in dots per inch)  }
+
+       TdjpResolution = record
+            usXResolution : Word;
+            usYResolution : Word;
+         end;
+       TDJPT_RESOLUTION = TdjpResolution;
+       TPDJPT_RESOLUTION = ^TdjpResolution;
+    { -----------------------------------------------------------------
+          DJP_SJ_BITSPERPEL
+        }
+
+       TDJPT_BITSPERPEL = Cardinal;
+
+       TPDJPT_BITSPERPEL = Cardinal;
+    { -----------------------------------------------------------------
+          DJP_SJ_COLOR
+        }
+
+    const
+       DJP_CLR_MONOCHROME = 1;
+       DJP_CLR_COLOR = 2;
+
+    type
+
+       TDJPT_COLOR = Cardinal;
+
+       TPDJPT_COLOR = Cardinal;
+    { -----------------------------------------------------------------
+          DJP_SJ_PRINTQUALITY
+
+          Note: DJP_PQL_DRAFT is the worst quality.  In the future, there
+                may be better qualities (such as DJP_PQL_ULTRA_HIGH) which
+                will be numerically greater than DJP_PQL_HIGH.
+        }
+
+    const
+       DJP_PQL_DRAFT = 1;
+       DJP_PQL_LOW = 2;
+       DJP_PQL_MEDIUM = 3;
+       DJP_PQL_HIGH = 4;
+       DJP_PQL_LAST = DJP_PQL_HIGH;
+
+    type
+
+       TDJPT_PRINTQUALITY = Cardinal;
+
+       TPDJPT_PRINTQUALITY = Cardinal;
+    { -----------------------------------------------------------------
+          DJP_SJ_PAPERSIZE
+
+          Note: it is recommended to use DJP_CJ_FORM to chage the papersize.
+                                                        approximate size
+        }
+    {  inches       millimeters  }
+
+    const
+       DJP_PSI_NONE = 0;
+    {  8.5  x 11    216 x 279    }
+       DJP_PSI_LETTER = 1;
+    {  8.5  x 14    216 x 356    }
+       DJP_PSI_LEGAL = 2;
+    { 13.58 x 11    345 x 279    }
+       DJP_PSI_WIDE = 3;
+    { 17    x 22    431 x 558    }
+       DJP_PSI_CSHEET = 4;
+    { 22    x 34    558 x 863    }
+       DJP_PSI_DSHEET = 5;
+    { 34    x 44    863 x 1117   }
+       DJP_PSI_ESHEET = 6;
+    {                            }
+       DJP_PSI_LETTERSMALL = 7;
+    { 11    x 17    279 x 431    }
+       DJP_PSI_TABLOID = 8;
+    { 17    x 11    431 x 279    }
+       DJP_PSI_LEDGER = 9;
+    {  5.5  x  8.5  139 x 216    }
+       DJP_PSI_STATEMENT = 10;
+    {  7.25 x 10.5  184 x 266    }
+       DJP_PSI_EXECUTIVE = 11;
+    { 33.11 x 46.81 841 x 1189   }
+       DJP_PSI_A0 = 12;
+    { 23.39 x 33.11 594 x 841    }
+       DJP_PSI_A1 = 13;
+    { 16.54 x 23.39 420 x 594    }
+       DJP_PSI_A2 = 14;
+    { 11.7  x 16.54 297 x 420    }
+       DJP_PSI_A3 = 15;
+    {  8.3  x 11.7  210 x 297    }
+       DJP_PSI_A4 = 16;
+    {                            }
+       DJP_PSI_A4_SMALL = 17;
+    {  5.83 x  8.27 148 x 210    }
+       DJP_PSI_A5 = 18;
+    {  9.84 x 13.94 250 x 354    }
+       DJP_PSI_B4 = 19;
+    {  7.17 x 10.12 182 x 257    }
+       DJP_PSI_B5 = 20;
+    {  8.5  x 13    216 x 330    }
+       DJP_PSI_FOLIO = 21;
+    {  8.46 x 10.83 215 x 275    }
+       DJP_PSI_QUATRO = 22;
+    { 10    x 14    254 x 355    }
+       DJP_PSI_10X14 = 23;
+    { 11    x 17    279 x 431    }
+       DJP_PSI_11X17 = 24;
+    {                            }
+       DJP_PSI_NOTE = 25;
+    {                            }
+       DJP_PSI_ENV_9 = 26;
+    {                            }
+       DJP_PSI_ENV_10 = 27;
+    {                            }
+       DJP_PSI_ENV_11 = 28;
+    {                            }
+       DJP_PSI_ENV_12 = 29;
+    {                            }
+       DJP_PSI_ENV_14 = 30;
+    {                            }
+       DJP_PSI_ENV_DL = 31;
+    {                            }
+       DJP_PSI_ENV_A2 = 32;
+    {                            }
+       DJP_PSI_ENV_C3 = 33;
+    {                            }
+       DJP_PSI_ENV_C4 = 34;
+    {                            }
+       DJP_PSI_ENV_C5 = 35;
+    {                            }
+       DJP_PSI_ENV_C6 = 36;
+    {                            }
+       DJP_PSI_ENV_C65 = 37;
+    {                            }
+       DJP_PSI_ENV_C9 = 38;
+    {                            }
+       DJP_PSI_ENV_C10 = 39;
+    {                            }
+       DJP_PSI_ENV_B4 = 40;
+    {                            }
+       DJP_PSI_ENV_B5 = 41;
+    {                            }
+       DJP_PSI_ENV_B6 = 42;
+    {                            }
+       DJP_PSI_ENV_ITALY = 43;
+    {                            }
+       DJP_PSI_ENV_MONARCH = 44;
+    {                            }
+       DJP_PSI_ENV_PERSONAL = 45;
+    {                            }
+       DJP_PSI_FANFOLD_US = 46;
+    {                            }
+       DJP_PSI_FANFOLD_STD_GERMAN = 47;
+    {                            }
+       DJP_PSI_FANFOLD_LGL_GERMAN = 48;
+    {                            }
+       DJP_PSI_ARCHITECT_BSHEET = 49;
+    {                            }
+       DJP_PSI_ARCHITECT_CSHEET = 50;
+    {                            }
+       DJP_PSI_ARCHITECT_DSHEET = 51;
+    {                            }
+       DJP_PSI_ARCHITECT_ESHEET = 52;
+    {                            }
+       DJP_PSI_CARD_A6 = 53;
+    {                            }
+       DJP_PSI_CARD_4X6 = 54;
+    {                            }
+       DJP_PSI_CARD_5X8 = 55;
+    {                            }
+       DJP_PSI_CARD_HAGAKI = 56;
+    {  1.10 x 3.50   28 x 89     }
+       DJP_PSI_LABEL_STANDARD = 57;
+    {  3.98 x 2.13  101 x 54     }
+       DJP_PSI_LABEL_SHIPPING = 58;
+    {  2.76 x 2.13   70 x 54     }
+       DJP_PSI_LABEL_DISK = 59;
+    {  3.50 x 1.42   89 x 36     }
+       DJP_PSI_LABEL_EURO = 60;
+    {                            }
+       DJP_PSI_CARD_OUFUKU_HAGAKI = 61;
+    {                            }
+       DJP_PSI_B0 = 62;
+    {                            }
+       DJP_PSI_B1 = 63;
+    {                            }
+       DJP_PSI_B2 = 64;
+    {                            }
+       DJP_PSI_B3 = 65;
+    {                            }
+       DJP_PSI_B6 = 66;
+    {                            }
+       DJP_PSI_B7 = 67;
+    {                            }
+       DJP_PSI_B8 = 68;
+    {                            }
+       DJP_PSI_B9 = 69;
+    {                            }
+       DJP_PSI_B10 = 70;
+    {                            }
+       DJP_PSI_B0_JIS = 71;
+    {                            }
+       DJP_PSI_B1_JIS = 72;
+    {                            }
+       DJP_PSI_B2_JIS = 73;
+    {                            }
+       DJP_PSI_B3_JIS = 74;
+    {                            }
+       DJP_PSI_B4_JIS = 75;
+    {                            }
+       DJP_PSI_B5_JIS = 76;
+    {                            }
+       DJP_PSI_B6_JIS = 77;
+    {                            }
+       DJP_PSI_B7_JIS = 78;
+    {                            }
+       DJP_PSI_B8_JIS = 79;
+    {                            }
+       DJP_PSI_B9_JIS = 80;
+    {                            }
+       DJP_PSI_B10_JIS = 81;
+       DJP_PSI_LAST = DJP_PSI_B10_JIS;
+
+    type
+
+       TDJPT_PAPERSIZE = Longint;
+
+       TPDJPT_PAPERSIZE = Longint;
+    { -----------------------------------------------------------------
+          DJP_SJ_TRAYTYPE
+
+          Note: it is recommended to use DJP_CJ_FORM to chage the tray type.
+        }
+
+    const
+       DJP_TRY_NONE = 0;
+       DJP_TRY_UPPER = 1;
+       DJP_TRY_ONLYONE = DJP_TRY_UPPER;
+       DJP_TRY_LOWER = 2;
+       DJP_TRY_MIDDLE = 3;
+       DJP_TRY_MANUAL = 4;
+       DJP_TRY_ENVELOPE = 5;
+       DJP_TRY_ENVMANUAL = 6;
+       DJP_TRY_AUTO = 7;
+       DJP_TRY_TRACTOR = 8;
+       DJP_TRY_SMALLFMT = 9;
+       DJP_TRY_LARGEFMT = 10;
+       DJP_TRY_LARGECAPACITY = 11;
+       DJP_TRY_CASSETTE = 12;
+       DJP_TRY_LAST = DJP_TRY_CASSETTE;
+
+    type
+
+       TDJPT_TRAYTYPE = Cardinal;
+
+       TPDJPT_TRAYTYPE = Cardinal;
+    { -----------------------------------------------------------------
+          DJP_SJ_MEDIA
+
+          Note: it is recommended to use DJP_CJ_FORM to chage the media type.
+        }
+
+    const
+       DJP_MED_NONE = 0;
+       DJP_MED_PLAIN = 1;
+       DJP_MED_TRANSPARENCY = 2;
+       DJP_MED_GLOSSY = 3;
+       DJP_MED_SPECIAL = 4;
+       DJP_MED_COATED = 5;
+       DJP_MED_BACKPRINT = 6;
+       DJP_MED_CLOTH = 7;
+       DJP_MED_THICK = 8;
+       DJP_MED_STATIONARY = 9;
+       DJP_MED_ENVELOPE = 10;
+       DJP_MED_CONTINUOUS_LONG = 11;
+       DJP_MED_CONTINUOUS_SHORT = 12;
+       DJP_MED_TAB_STOCK = 13;
+       DJP_MED_MULTI_PART_FORM = 14;
+       DJP_MED_LABELS = 15;
+       DJP_MED_LAST = DJP_MED_LABELS;
+
+    type
+
+       TDJPT_MEDIA = Cardinal;
+
+       TPDJPT_MEDIA = Cardinal;
+    { -----------------------------------------------------------------
+          DJP_SJ_MEDIA_COLOR
+
+          Select the media color (for the same media types).
+        }
+
+    const
+       DJP_MDC_BLUE = 1;
+       DJP_MDC_BLUFF = 2;
+       DJP_MDC_GOLDENROD = 3;
+       DJP_MDC_GREEN = 4;
+       DJP_MDC_PINK = 5;
+       DJP_MDC_TRANSPARENT = 6;
+       DJP_MDC_WHITE = 7;
+       DJP_MDC_YELLOW = 8;
+       DJP_MDC_LAST = DJP_MDC_YELLOW;
+
+    type
+
+       TDJPT_MEDIA_COLOR = Cardinal;
+
+       TPDJPT_MEDIA_COLOR = Cardinal;
+    { -----------------------------------------------------------------
+          DJP_CJ_FORM
+
+          Setting will match all three fields.  If szTrayname or szMedianame
+             is null then it will be defaulted to the first one found.
+
+          Querying will return all fields filled in.
+        }
+    { djpFRM  }
+    { System Form name                   }
+    { System Tray name                   }
+    { System Media name                  }
+    {                      v-= Informational only =-v                           }
+    { Corresponding hard copy info       }
+    { Display Form name  (translated)    }
+    { Display Tray name  (translated)    }
+    { Display Media name (translated)    }
+    { Simple form id  (if not DJP_NONE)  }
+    { Simple tray id  (if not DJP_NONE)  }
+    { Simple media id (if not DJP_NONE)  }
+
+       TdjpForm = record
+            szFormname : array[0..31] of Char;
+            szTrayname : array[0..31] of Char;
+            szMedianame : array[0..31] of Char;
+            ahcInfo : HCINFO;
+            szDisplayFormname : array[0..63] of Char;
+            szDisplayTrayname : array[0..63] of Char;
+            szDisplayMedianame : array[0..63] of Char;
+            djppsFormID : TDJPT_PAPERSIZE;
+            djpttTrayID : TDJPT_TRAYTYPE;
+            djpmdMediaID : TDJPT_MEDIA;
+         end;
+       TDJPT_FORM = TdjpForm;
+       TPDJPT_FORM = ^TdjpForm;
+    { -----------------------------------------------------------------
+          DJP_CJ_MIXEDFORMS
+
+          This is unique in that both setting and querying can have multiple
+          elements.  Both the first page and the last page are DJP_MXF_INFINITY
+          (which is the separator for individual elements).
+          Some examples are:
+
+          - Only one form (form1) for the entire job.
+            (DJP_MXF_INFINITY, DJP_MXF_INFINITY, form1)
+
+          - Page 1 has form1, then pages 2 ... n have form2.
+            (DJP_MXF_INFINITY, 1, form1) (2, DJP_MXF_INFINITY, form2)
+
+          - Even pages have form1 and odd pages have form2
+            (DJP_MXF_INFINITY, DJP_MXF_ODD, form1) (DJP_MXF_EVEN, DJP_MXF_INFINITY, form2)
+            or (DJP_MXF_INFINITY, DJP_MXF_EVEN, form2) (DJP_MXF_ODD, DJP_MXF_INFINITY, form1)
+
+          - First page has form1, even pages have form2 and odd pages have form3
+            (DJP_MXF_INFINITY, 1, form1) (DJP_MXF_ODD, DJP_MXF_ODD, form1) (DJP_MXF_EVEN, DJP_MXF_INFINITY, form2)
+            or (DJP_MXF_INFINITY, 1, form1) (DJP_MXF_EVEN, DJP_MXF_EVEN, form2) (DJP_MXF_ODD, DJP_MXF_INFINITY, form1)
+
+        }
+
+    const
+       DJP_MXF_INFINITY = -(1);
+       DJP_MXF_ODD = -(2);
+       DJP_MXF_EVEN = -(3);
+    { djpMXF  }
+    { Starting page number            }
+    { Ending page number              }
+    { Form associated with the range  }
+
+    type
+
+       TdjpMixedForms = record
+            lStartRange : Longint;
+            lEndRange : Longint;
+            djpfmForm : TDJPT_FORM;
+         end;
+       TDJPT_MIXEDFORMS = TdjpMixedForms;
+       TPDJPT_MIXEDFORMS = ^TdjpMixedForms;
+    { -----------------------------------------------------------------
+          DJP_SJ_FONTDOWNLOADING
+        }
+    { Device does not support downloading }
+
+    const
+       DJP_FDL_NONE = 0;
+    { Download fonts to printer           }
+       DJP_FDL_DOWNLOAD = 1;
+    { Rasterize fonts                     }
+       DJP_FDL_BITMAP = 2;
+    { Substitute device fonts for system  }
+       DJP_FDL_SUBSTITUTE = 3;
+
+    type
+
+       TDJPT_FONTDOWNLOADING = Cardinal;
+
+       TPDJPT_FONTDOWNLOADING = Cardinal;
+    { -----------------------------------------------------------------
+          DJP_SJ_DUPLEX
+        }
+    { Device does not support duplex      }
+
+    const
+       DJP_DUP_NONE = 0;
+    { Duplex is turned off                }
+       DJP_DUP_OFF = 1;
+       DJP_DUP_BOOK = 2;
+       DJP_DUP_FLIP = 3;
+
+    type
+
+       TDJPT_DUPLEX = Cardinal;
+
+       TPDJPT_DUPLEX = Cardinal;
+    { -----------------------------------------------------------------
+          DJP_SJ_COLLATE
+        }
+    { Device does not support collation   }
+
+    const
+       DJP_COL_NONE = 0;
+       DJP_COL_OFF = 1;
+       DJP_COL_ON = 2;
+    { more for printer dialogs than       }
+       DJP_COL_PRINTER_SETTING = 3;
+    { programmatic control.  Use          }
+    { the setting on the printer panel.   }
+
+    type
+
+       TDJPT_COLLATE = Cardinal;
+
+       TPDJPT_COLLATE = Cardinal;
+    { -----------------------------------------------------------------
+          DJP_SJ_FEED
+        }
+
+    const
+       DJP_FED_MANUAL = 1;
+       DJP_FED_AUTOMATIC = 2;
+
+    type
+
+       TDJPT_FEED = Cardinal;
+
+       TPDJPT_FEED = Cardinal;
+    { -----------------------------------------------------------------
+          DJP_SJ_COPIES
+
+          This is the number of copies on a per page basis.  This is not
+          enumerateable.
+        }
+
+       TDJPT_COPIES = Cardinal;
+
+       TPDJPT_COPIES = Cardinal;
+    { -----------------------------------------------------------------
+          DJP_SJ_SCALING
+
+          This is a percentage value.  This is not enumerateable.
+        }
+
+       TDJPT_SCALING = Longint;
+
+       TPDJPT_SCALING = Longint;
+    { -----------------------------------------------------------------
+          DJP_SJ_FORMFEEDCONTROL
+
+          This is a property that effects raw data jobs (print from the
+          command line, DOS print jobs, Windows print jobs). This checks
+          the very last byte of the data stream to see if it is a form
+          feed control character.
+        }
+    { Never add         }
+
+    const
+       DJP_FFC_NONE = 1;
+    { Add if not seen   }
+       DJP_FFC_CONDITIONAL = 2;
+    { Always add        }
+       DJP_FFC_COMPULSORY = 3;
+
+    type
+
+       TDJPT_FORMFEEDCONTROL = Cardinal;
+
+       TPDJPT_FORMFEEDCONTROL = Cardinal;
+    { -----------------------------------------------------------------
+          DJP_SJ_N_UP
+
+          Number of logical pages per physical page (ex: 2-up, 4-up)
+        }
+
+       TDJPT_NUP = Longint;
+
+       TPDJPT_NUP = Longint;
+    { -----------------------------------------------------------------
+          DJP_CJ_OUTPUTBIN
+
+          Setting will only use szBinname.
+
+          Querying will return all fields filled in.
+        }
+    { djpOBN  }
+    { System Bin name                    }
+    {                      v-= Informational only =-v                           }
+    { Display Bin name  (translated)     }
+    { Bin id # (-1 for no id)            }
+
+       TdjpOutputBin = record
+            szBinname : array[0..31] of Char;
+            szDisplayBinname : array[0..63] of Char;
+            lBinId : Longint;
+         end;
+       TDJPT_OUTPUTBIN = TdjpOutputBin;
+       TPDJPT_OUTPUTBIN = ^TdjpOutputBin;
+    { -----------------------------------------------------------------
+          DJP_CJ_TRAYNAME
+
+          Setting will match only szTrayname.  The perfered way to set which
+          tray to use is DJP_CJ_FORM.  Otherwise, you are not guaranteed a
+          unique match for all three form, tray, and media possibilities.
+
+          Querying will return all fields filled in.
+        }
+    { djpTry  }
+    { System Tray name                   }
+    {                      v-= Informational only =-v                           }
+    { Display Tray name  (translated)    }
+    { Simple tray id  (if not DJP_NONE)  }
+
+       TdjpInputTray = record
+            szTrayname : array[0..31] of Char;
+            szDisplayTrayname : array[0..63] of Char;
+            djpttTrayID : TDJPT_TRAYTYPE;
+         end;
+       TDJPT_TRAYNAME = TdjpInputTray;
+       TPDJPT_TRAYNAME = ^TdjpInputTray;
+
+
 function DevOpenDC(ahab: HAB; lType: Longint; pszToken: PChar; lCount: Longint; var pdopData: DevOpenStruc; hdcComp: cardinal): cardinal; cdecl;
 function DevCloseDC(ahdc: cardinal): cardinal; cdecl;
 function DevEscape(ahdc: cardinal; lCode, lInCount: Longint; var pbInData; var plOutCount: Longint; var pbOutData): Longint; cdecl;
@@ -273,7 +969,7 @@ function DevQueryCaps(ahdc: cardinal; lStart, lCount: Longint; var alArray: Long
 function DevQueryDeviceNames(ahab: HAB; pszDriverName: PChar; var pldn: Longint; aDeviceName: Str32; aDeviceDesc: Str64; var pldt: Longint; aDataType: Str16): Longbool; cdecl;
 function DevQueryHardcopyCaps(ahdc: cardinal; lStartForm, lForms: Longint; var phciHcInfo: HCInfo): Longint; cdecl;
 function DevPostDeviceModes(ahab: HAB; var pdrivDriverData: DrivData; pszDriverName, pszDeviceName, pszName: PChar; flOptions: cardinal): Longint; cdecl;
-                  
+
 implementation
 
 function DevOpenDC(ahab: HAB; lType: Longint; pszToken: PChar; lCount: Longint; var pdopData: DevOpenStruc; hdcComp: cardinal): cardinal; cdecl;
@@ -290,13 +986,51 @@ function DevQueryHardcopyCaps(ahdc: cardinal; lStartForm, lForms: Longint; var p
     external 'PMGPI' index 608;
 function DevPostDeviceModes(ahab: HAB; var pdrivDriverData: DrivData; pszDriverName, pszDeviceName, pszName: PChar; flOptions: cardinal): Longint; cdecl;
     external 'PMGPI' index 609;
-                    
+
+    { was
+   #define QUERYSIZE_HEADER_SIZE  (sizeof (QUERYSIZE) - sizeof (((PQUERYSIZE)NULL)->aTuples))
+    }
+//    function QUERYSIZE_HEADER_SIZE : longint;
+//        { return type might be wrong }
+//        begin
+//           QUERYSIZE_HEADER_SIZE:=(sizeof(QUERYSIZE)) - (sizeof((TPQUERYSIZE(NULL))^.aTuples));
+//        end;
+
+//   #define DJP_HEADER_SIZE        (sizeof (DJP_ITEM) - sizeof (((PDJP_ITEM)NULL)->ulValue))
+//   #define DJP_NEXT_STRUCTP(p)    ((PDJP_ITEM)((PBYTE)(p) + (p)->cb))
+//   #define DJP_ELEMENTP(s,t)      ((t*)&((s).ulValue))
+//   #define DJP_SET_ELEMENT(s,t,e) (*DJP_ELEMENTP (s,t) = (e))
+
+    { was #define dname def_expr }
+//    function DJP_HEADER_SIZE : longint;
+//        { return type might be wrong }
+//        begin
+//           DJP_HEADER_SIZE:=(sizeof(DJP_ITEM)) - (sizeof((TPDJP_ITEM(NULL))^.ulValue));
+//        end;
+
+    { was #define dname(params) para_def_expr }
+    { argument types are unknown }
+//    function DJP_NEXT_STRUCTP(p : longint) : TPDJP_ITEM;
+//      begin
+//         DJP_NEXT_STRUCTP:=TPDJP_ITEM((TPBYTE(p)) + (p^.cb));
+//      end;
+
+    { was #define dname(params) para_def_expr }
+    { argument types are unknown }
+//    function DJP_ELEMENTP(s,t : longint) : ^Tt;
+//      begin
+//         DJP_ELEMENTP:=^Tt(@(s.ulValue));
+//      end;
+
 end.
 
 {
 
 $Log$
-Revision 1.1  2002-10-18 18:08:52  hajny
+Revision 1.2  2003-04-10 15:48:27  yuri
++ Dynamic jobs properties added
+
+Revision 1.1  2002/10/18 18:08:52  hajny
   + first version