home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / mod201j.zip / modula2.exe / os2api / gpibitma.def < prev    next >
Text File  |  1994-07-06  |  21KB  |  482 lines

  1. DEFINITION MODULE GPIBITMAPS;
  2.  
  3. (************************************************************************
  4.   OS/2 2.0 interface for Presentation Manager
  5.            GPI Bitmaps and Pel Operations.
  6.  
  7.   Copyright (c) 1992 by Juergen Neuhoff
  8. *************************************************************************)
  9.  
  10. (*$XL+       Modula-2 language extensions: '_' allowed for symbol names *)
  11. (*$CDECL+    C-style procedures                                         *)
  12. (*$A         default alignment for record fields                        *)
  13.  
  14. IMPORT SYSTEM;
  15. FROM   OS2DEF   IMPORT HPS, HBITMAP, HMODULE, POINTL, TYPEPREFIX;
  16. FROM   GPIDEF   IMPORT SIZEL;
  17.  
  18.  
  19. CONST (* raster operations defined for GpiBitBlt *)
  20.   ROP_SRCCOPY                        = 00CCH;
  21.   ROP_SRCPAINT                       = 00EEH;
  22.   ROP_SRCAND                         = 0088H;
  23.   ROP_SRCINVERT                      = 0066H;
  24.   ROP_SRCERASE                       = 0044H;
  25.   ROP_NOTSRCCOPY                     = 0033H;
  26.   ROP_NOTSRCERASE                    = 0011H;
  27.   ROP_MERGECOPY                      = 00C0H;
  28.   ROP_MERGEPAINT                     = 00BBH;
  29.   ROP_PATCOPY                        = 00F0H;
  30.   ROP_PATPAINT                       = 00FBH;
  31.   ROP_PATINVERT                      = 005AH;
  32.   ROP_DSTINVERT                      = 0055H;
  33.   ROP_ZERO                           = 0000H;
  34.   ROP_ONE                            = 00FFH;
  35.  
  36. CONST (* Blt options for GpiBitBlt *)
  37.   BBO_OR                             = 0;
  38.   BBO_AND                            = 1;
  39.   BBO_IGNORE                         = 2;
  40.   BBO_PAL_COLORS                     = 4;
  41.   BBO_NO_COLOR_INFO                  = 8;
  42.  
  43. CONST (* Fill options for GpiFloodFill *)
  44.   FF_BOUNDARY                        = 0;
  45.   FF_SURFACE                         = 1;
  46.  
  47. CONST (* error return for GpiSetBitmap *)
  48.   HBM_ERROR                          = HBITMAP( -1 );
  49.  
  50.  
  51. (*** bitmap and pel functions *)
  52.  
  53. PROCEDURE GpiBitBlt
  54. ( TargetPresSpaceHandle              : HPS;
  55.   SourcePresSpaceHandle              : HPS;
  56.   Count                              : LONGINT;
  57.   VAR Points                         : ARRAY OF POINTL;
  58.   Rop                                : LONGINT;
  59.   Options                            : LONGCARD
  60. )                                    : LONGINT;
  61.  
  62. PROCEDURE GpiDeleteBitmap
  63. ( BitMapHandle                       : HBITMAP
  64. )                                    : BOOLEAN;
  65.  
  66. PROCEDURE GpiLoadBitmap
  67. ( PresSpaceHandle                    : HPS;
  68.   ResourceHandle                     : HMODULE;
  69.   BitMapId                           : LONGCARD;
  70.   Width                              : LONGINT;
  71.   Height                             : LONGINT
  72. )                                    : HBITMAP;
  73.  
  74. PROCEDURE GpiSetBitmap
  75. ( PresSpaceHandle                    : HPS;
  76.   BitMapHandle                       : HBITMAP
  77. )                                    : HBITMAP;
  78.  
  79. PROCEDURE GpiWCBitBlt
  80. ( TargetPresSpaceHandle              : HPS;
  81.   SourceBitMapHandle                 : HBITMAP;
  82.   Count                              : LONGINT;
  83.   VAR Points                         : ARRAY OF POINTL;
  84.   Rop                                : LONGINT;
  85.   Options                            : LONGCARD
  86. )                                    : LONGINT;
  87.  
  88.  
  89. (*
  90.  *  This is the file format structure for Bit Maps, Pointers and Icons
  91.  *  as stored in the resource file of a PM application.
  92.  *
  93.  *  Notes on file format:
  94.  *
  95.  *  Each BITMAPFILEHEADER entry is immediately followed by the color table
  96.  *  for the bit map bits it references.
  97.  *  Icons and Pointers contain two BITMAPFILEHEADERs for each ARRAYHEADER
  98.  *  item.  The first one is for the ANDXOR mask, the second is for the
  99.  *  COLOR mask.  All offsets are absolute based on the start of the FILE.
  100.  *
  101.  *  For OS/2 Version 2.0 and later BITMAPFILEHEADER2 and the other '2'
  102.  *  versions of each structure are recommended. Use the non-2 versions
  103.  *  of each structure if compatibility with OS/2 Version 1.X is required.
  104.  *)
  105.  
  106. TYPE (* bitmap parameterization used by GpiCreateBitmap and others *)
  107.   BITMAPINFOHEADER  = RECORD  (* bmp *)
  108.     CASE              : TYPEPREFIX OF
  109.     | TRUE            :
  110.       cbFix           : LONGCARD;
  111.       cx              : CARDINAL;
  112.       cy              : CARDINAL;
  113.       cPlanes         : CARDINAL;
  114.       cBitCount       : CARDINAL;
  115.     | FALSE           :
  116.       FixSize         : LONGCARD;
  117.       xSize           : CARDINAL;
  118.       ySize           : CARDINAL;
  119.       Planes          : CARDINAL;
  120.       BitCount        : CARDINAL;
  121.     END;              END;
  122.   PBITMAPINFOHEADER = POINTER TO BITMAPINFOHEADER;
  123.  
  124. TYPE (* RGB data for _BITMAPINFO struct *)
  125.   RGB               = RECORD   (* rgb *)
  126.     CASE              : TYPEPREFIX OF
  127.     | TRUE            :
  128.       bBlue           : SHORTCARD;
  129.       bGreen          : SHORTCARD;
  130.       bRed            : SHORTCARD;
  131.     | FALSE           :
  132.       Blue            : SHORTCARD;
  133.       Green           : SHORTCARD;
  134.       Red             : SHORTCARD;
  135.     END;              END;
  136.   PRGB              = POINTER TO RGB;
  137.  
  138. TYPE (* bitmap data used by GpiSetBitmapBits and others *)
  139.   BITMAPINFO        = RECORD    (* bmi *)
  140.     CASE              : TYPEPREFIX OF
  141.     | TRUE            :
  142.       cbFix           : LONGCARD;
  143.       cx              : CARDINAL;
  144.       cy              : CARDINAL;
  145.       cPlanes         : CARDINAL;
  146.       cBitCount       : CARDINAL;
  147.       argbColor       : ARRAY [0..0] OF RGB;
  148.     | FALSE           :
  149.       FixSize         : LONGCARD;
  150.       xSize           : CARDINAL;
  151.       ySize           : CARDINAL;
  152.       Planes          : CARDINAL;
  153.       BitCount        : CARDINAL;
  154.       Color           : ARRAY [0..0] OF RGB;
  155.     END;              END;
  156.   PBITMAPINFO       = POINTER TO BITMAPINFO;
  157.  
  158. CONST (* Constants for compression/decompression command *)
  159.   CBD_COMPRESSION   = 1;
  160.   CBD_DECOMPRESSION = 2;
  161.   CBD_BITS          = 0;
  162.  
  163. CONST (* Flags for compression/decompression option *)
  164.   CBD_COLOR_CONVERSION         = 00000001H;
  165.  
  166. CONST (* Compression scheme in the ulCompression field of the bitmapinfo structure *)
  167.   BCA_UNCOMP        = 0;
  168.   BCA_HUFFMAN1D     = 3;
  169.   BCA_RLE4          = 2;
  170.   BCA_RLE8          = 1;
  171.   BCA_RLE24         = 4;
  172.   BRU_METRIC        = 0;
  173.   BRA_BOTTOMUP      = 0;
  174.   BRH_NOTHALFTONED  = 0;
  175.   BRH_ERRORDIFFUSION= 1;
  176.   BRH_PANDA         = 2;
  177.   BRH_SUPERCIRCLE   = 3;
  178.   BCE_PALETTE       = -1;
  179.   BCE_RGB           = 0;
  180.  
  181. TYPE
  182.   BITMAPINFOHEADER2 = RECORD      (* bmp2  *)
  183.     CASE              : TYPEPREFIX OF
  184.     | TRUE            :
  185.       cbFix           : LONGCARD; (* Length of structure                  *)
  186.       cx              : LONGCARD; (* Bit-map width in pels                *)
  187.       cy              : LONGCARD; (* Bit-map height in pels               *)
  188.       cPlanes         : CARDINAL; (* Number of bit planes                 *)
  189.       cBitCount       : CARDINAL; (* Number of bits per pel within a plane*)
  190.       ulCompression   : LONGCARD; (* Compression scheme used to store the bitmap *)
  191.       cbImage         : LONGCARD; (* Length of bit-map storage data in bytes*)
  192.       cxResolution    : LONGCARD; (* x resolution of target device        *)
  193.       cyResolution    : LONGCARD; (* y resolution of target device        *)
  194.       cclrUsed        : LONGCARD; (* Number of color indices used         *)
  195.       cclrImportant   : LONGCARD; (* Number of important color indices    *)
  196.       usUnits         : CARDINAL; (* Units of measure                     *)
  197.       usReserved      : CARDINAL; (* Reserved                             *)
  198.       usRecording     : CARDINAL; (* Recording algorithm                  *)
  199.       usRendering     : CARDINAL; (* Halftoning algorithm                 *)
  200.       cSize1          : LONGCARD; (* Size value 1                         *)
  201.       cSize2          : LONGCARD; (* Size value 2                         *)
  202.       ulColorEncoding : LONGCARD; (* Color encoding                       *)
  203.       ulIdentifier    : LONGCARD; (* Reserved for application use         *)
  204.     | FALSE           :
  205.       FixSize         : LONGCARD; (* Length of structure                  *)
  206.       xSize           : LONGCARD; (* Bit-map width in pels                *)
  207.       ySize           : LONGCARD; (* Bit-map height in pels               *)
  208.       Planes          : CARDINAL; (* Number of bit planes                 *)
  209.       BitCount        : CARDINAL; (* Number of bits per pel within a plane*)
  210.       Compression     : LONGCARD; (* Compression scheme used to store the bitmap *)
  211.       ImageSize       : LONGCARD; (* Length of bit-map storage data in bytes*)
  212.       xResolution     : LONGCARD; (* x resolution of target device        *)
  213.       yResolution     : LONGCARD; (* y resolution of target device        *)
  214.       UsedColors      : LONGCARD; (* Number of color indices used         *)
  215.       ImportantColors : LONGCARD; (* Number of important color indices    *)
  216.       Units           : CARDINAL; (* Units of measure                     *)
  217.       Reserved        : CARDINAL; (* Reserved                             *)
  218.       Recording       : CARDINAL; (* Recording algorithm                  *)
  219.       Rendering       : CARDINAL; (* Halftoning algorithm                 *)
  220.       Size1           : LONGCARD; (* Size value 1                         *)
  221.       Size2           : LONGCARD; (* Size value 2                         *)
  222.       ColorEncoding   : LONGCARD; (* Color encoding                       *)
  223.       Identifier      : LONGCARD; (* Reserved for application use         *)
  224.     END;              END;
  225.   PBITMAPINFOHEADER2 = POINTER TO BITMAPINFOHEADER2;
  226.  
  227. TYPE
  228.   RGB2              = RECORD       (* rgb2 *)
  229.     CASE              : TYPEPREFIX OF
  230.     | TRUE            :
  231.       bBlue           : SHORTCARD; (* Blue component of the color def. *)
  232.       bGreen          : SHORTCARD; (* Green component of the color def.*)
  233.       bRed            : SHORTCARD; (* Red component of the color def.  *)
  234.       fcOptions       : SHORTCARD; (* Reserved, must be zero           *)
  235.     | FALSE           :
  236.       Blue            : SHORTCARD; (* Blue component of the color def. *)
  237.       Green           : SHORTCARD; (* Green component of the color def.*)
  238.       Red             : SHORTCARD; (* Red component of the color def.  *)
  239.       Options         : SHORTCARD; (* Reserved, must be zero           *)
  240.     END;              END;
  241.   PRGB2             = POINTER TO RGB2;
  242.  
  243. TYPE
  244.   BITMAPINFO2       = RECORD   (* bmi2 *)
  245.     CASE              : TYPEPREFIX OF
  246.     | TRUE            :
  247.       cbFix           : LONGCARD; (* Length of fixed portion of structure  *)
  248.       cx              : LONGCARD; (* Bit-map width in pels                 *)
  249.       cy              : LONGCARD; (* Bit-map height in pels                *)
  250.       cPlanes         : CARDINAL; (* Number of bit planes                  *)
  251.       cBitCount       : CARDINAL; (* Number of bits per pel within a plane *)
  252.       ulCompression   : LONGCARD; (* Compr.scheme used to store the bitmap *)
  253.       cbImage         : LONGCARD; (* Length of bit-map storage data in bytes*)
  254.       cxResolution    : LONGCARD; (* x resolution of target device         *)
  255.       cyResolution    : LONGCARD; (* y resolution of target device         *)
  256.       cclrUsed        : LONGCARD; (* Number of color indices used          *)
  257.       cclrImportant   : LONGCARD; (* Number of important color indices     *)
  258.       usUnits         : CARDINAL; (* Units of measure                      *)
  259.       usReserved      : CARDINAL; (* Reserved                              *)
  260.       usRecording     : CARDINAL; (* Recording algorithm                   *)
  261.       usRendering     : CARDINAL; (* Halftoning algorithm                  *)
  262.       cSize1          : LONGCARD; (* Size value 1                          *)
  263.       cSize2          : LONGCARD; (* Size value 2                          *)
  264.       ulColorEncoding : LONGCARD; (* Color encoding                        *)
  265.       ulIdentifier    : LONGCARD; (* Reserved for application use          *)
  266.       argbColor       : ARRAY [0..0] OF RGB2; (* Color definition record   *)
  267.     | FALSE           :
  268.       FixSize         : LONGCARD; (* Length of fixed portion of structure  *)
  269.       xSize           : LONGCARD; (* Bit-map width in pels                 *)
  270.       ySize           : LONGCARD; (* Bit-map height in pels                *)
  271.       Planes          : CARDINAL; (* Number of bit planes                  *)
  272.       BitCount        : CARDINAL; (* Number of bits per pel within a plane *)
  273.       Compression     : LONGCARD; (* Compr.scheme used to store the bitmap *)
  274.       ImageSize       : LONGCARD; (* Length of bit-map storage data in bytes*)
  275.       xResolution     : LONGCARD; (* x resolution of target device         *)
  276.       yResolution     : LONGCARD; (* y resolution of target device         *)
  277.       UsedColors      : LONGCARD; (* Number of color indices used          *)
  278.       ImportantColors : LONGCARD; (* Number of important color indices     *)
  279.       Units           : CARDINAL; (* Units of measure                      *)
  280.       Reserved        : CARDINAL; (* Reserved                              *)
  281.       Recording       : CARDINAL; (* Recording algorithm                   *)
  282.       Rendering       : CARDINAL; (* Halftoning algorithm                  *)
  283.       Size1           : LONGCARD; (* Size value 1                          *)
  284.       Size2           : LONGCARD; (* Size value 2                          *)
  285.       ColorEncoding   : LONGCARD; (* Color encoding                        *)
  286.       Identifier      : LONGCARD; (* Reserved for application use          *)
  287.       Color           : ARRAY [0..0] OF RGB2; (* Color definition record   *)
  288.     END;              END;
  289.   PBITMAPINFO2      = POINTER TO BITMAPINFO2;
  290.  
  291. TYPE
  292.   BITMAPFILEHEADER  = RECORD   (* bfh *)
  293.     CASE              : TYPEPREFIX OF
  294.     | TRUE            :
  295.       usType          : CARDINAL;
  296.       cbSize          : LONGCARD;
  297.       xHotspot        : CARDINAL;
  298.       yHotspot        : CARDINAL;
  299.       offBits         : LONGCARD;
  300.       bmp             : BITMAPINFOHEADER;
  301.     | FALSE           :
  302.       Type            : CARDINAL;
  303.       Size            : LONGCARD;
  304.       xHotSpot        : CARDINAL;
  305.       yHotSpot        : CARDINAL;
  306.       BitsOffset      : LONGCARD;
  307.       BitMapInfoHdr   : BITMAPINFOHEADER;
  308.     END;              END;
  309.   PBITMAPFILEHEADER = POINTER TO BITMAPFILEHEADER;
  310.  
  311. TYPE
  312.   BITMAPARRAYFILEHEADER  = RECORD  (* bafh *)
  313.     CASE                   : TYPEPREFIX OF
  314.     | TRUE                 :
  315.       usType               : CARDINAL;
  316.       cbSize               : LONGCARD;
  317.       offNext              : LONGCARD;
  318.       cxDisplay            : CARDINAL;
  319.       cyDisplay            : CARDINAL;
  320.       bfh                  : BITMAPFILEHEADER;
  321.     | FALSE                :
  322.       Type                 : CARDINAL;
  323.       Size                 : LONGCARD;
  324.       NextOffset           : LONGCARD;
  325.       xDisplaySize         : CARDINAL;
  326.       yDisplaySize         : CARDINAL;
  327.       BitMapFileHdr        : BITMAPFILEHEADER;
  328.     END;                   END;
  329.   PBITMAPARRAYFILEHEADER = POINTER TO BITMAPARRAYFILEHEADER;
  330.  
  331. TYPE
  332.   BITMAPFILEHEADER2      = RECORD   (* bfh2 *)
  333.     CASE                   : TYPEPREFIX OF
  334.     | TRUE                 :
  335.       usType               : CARDINAL;
  336.       cbSize               : LONGCARD;
  337.       xHotspot             : CARDINAL;
  338.       yHotspot             : CARDINAL;
  339.       offBits              : LONGCARD;
  340.       bmp2                 : BITMAPINFOHEADER2;
  341.     | FALSE                :
  342.       Type                 : CARDINAL;
  343.       Size                 : LONGCARD;
  344.       xHotSpot             : CARDINAL;
  345.       yHotSpot             : CARDINAL;
  346.       BitsOffset           : LONGCARD;
  347.       BitMapInfoHdr2       : BITMAPINFOHEADER2;
  348.     END;                   END;
  349.   PBITMAPFILEHEADER2     = POINTER TO BITMAPFILEHEADER2;
  350.  
  351. TYPE
  352.   BITMAPARRAYFILEHEADER2  = RECORD    (* bafh2 *)
  353.     CASE                    : TYPEPREFIX OF
  354.     | TRUE                  :
  355.       usType                : CARDINAL;
  356.       cbSize                : LONGCARD;
  357.       offNext               : LONGCARD;
  358.       cxDisplay             : CARDINAL;
  359.       cyDisplay             : CARDINAL;
  360.       bfh2                  : BITMAPFILEHEADER2;
  361.     | FALSE                 :
  362.       Type                  : CARDINAL;
  363.       Size                  : LONGCARD;
  364.       NextOffset            : LONGCARD;
  365.       xDisplaySize          : CARDINAL;
  366.       yDisplaySize          : CARDINAL;
  367.       BitMapFileHdr2        : BITMAPFILEHEADER2;
  368.     END;                    END;
  369.   PBITMAPARRAYFILEHEADER2 = POINTER TO BITMAPARRAYFILEHEADER2;
  370.  
  371. CONST
  372.   (*************************************************************************
  373.   * These are the identifying values that go in the usType field of the
  374.   * BITMAPFILEHEADER(2) and BITMAPARRAYFILEHEADER(2).
  375.   * (BFT_ => Bit map File Type)
  376.   *************************************************************************)
  377.   BFT_ICON           = 4349H; (* 'IC' *)
  378.   BFT_BMAP           = 4D42H; (* 'BM' *)
  379.   BFT_POINTER        = 5450H; (* 'PT' *)
  380.   BFT_COLORICON      = 4943H; (* 'CI' *)
  381.   BFT_COLORPOINTER   = 5043H; (* 'CP' *)
  382.   BFT_BITMAPARRAY    = 4142H; (* 'BA' *)
  383.  
  384.  
  385. CONST (* usage flags for GpiCreateBitmap *)
  386.   CBM_INIT                           = 0004H;
  387.  
  388. CONST (* error return code for GpiSet/QueryBitmapBits *)
  389.   BMB_ERROR                          = 1;
  390.  
  391.  
  392. (*** bitmap and pel functions *)
  393.  
  394. PROCEDURE GpiCreateBitmap
  395. ( PresSpaceHandle                    : HPS;
  396.   VAR NewBitMapInfoHeader            : BITMAPINFOHEADER2;
  397.   Options                            : LONGCARD;
  398.   Data                               : SYSTEM.ADDRESS;
  399.   BitMapInfoTable                    : PBITMAPINFO2
  400. )                                    : HBITMAP;
  401.  
  402. PROCEDURE GpiSetBitmapBits
  403. ( PresSpaceHandle                    : HPS;
  404.   ScanStart                          : LONGINT;
  405.   Scans                              : LONGINT;
  406.   VAR Buffer                         : ARRAY OF SYSTEM.BYTE;
  407.   VAR BitMapInfoTable                : BITMAPINFO2
  408. )                                    : LONGINT;
  409.  
  410. PROCEDURE GpiSetBitmapDimension
  411. ( BitMapHandle                       : HBITMAP;
  412.   VAR BitMapDimension                : SIZEL
  413. )                                    : BOOLEAN;
  414.  
  415. PROCEDURE GpiSetBitmapId
  416. ( PresSpaceHandle                    : HPS;
  417.   BitMapHandle                       : HBITMAP;
  418.   LocalId                            : LONGINT
  419. )                                    : BOOLEAN;
  420.  
  421. PROCEDURE GpiQueryBitmapBits
  422. ( PresSpaceHandle                    : HPS;
  423.   ScanStart                          : LONGINT;
  424.   Scans                              : LONGINT;
  425.   VAR Buffer                         : ARRAY OF SYSTEM.BYTE;
  426.   VAR BitMapInfoTable                : BITMAPINFO2
  427. )                                    : LONGINT;
  428.  
  429. PROCEDURE GpiQueryBitmapDimension
  430. ( BitMapHandle                       : HBITMAP;
  431.   VAR BitMapDimension                : SIZEL
  432. )                                    : BOOLEAN;
  433.  
  434. PROCEDURE GpiQueryBitmapHandle
  435. ( PresSpaceHandle                    : HPS;
  436.   LocalId                            : LONGINT
  437. )                                    : HBITMAP;
  438.  
  439. PROCEDURE GpiQueryBitmapParameters
  440. ( BitMapHandle                       : HBITMAP;
  441.   VAR Data                           : BITMAPINFOHEADER
  442. )                                    : BOOLEAN;
  443.  
  444. PROCEDURE GpiQueryBitmapInfoHeader
  445. ( BitMapHandle                       : HBITMAP;
  446.   VAR Data                           : BITMAPINFOHEADER2
  447. )                                    : BOOLEAN;
  448.  
  449. PROCEDURE GpiQueryDeviceBitmapFormats
  450. ( PresSpaceHandle                    : HPS;
  451.   Count                              : LONGINT;
  452.   VAR DataArray                      : ARRAY OF LONGINT
  453. )                                    : BOOLEAN;
  454.  
  455. PROCEDURE GpiSetPel
  456. ( PresSpaceHandle                    : HPS;
  457.   VAR Point                          : POINTL
  458. )                                    : LONGINT;
  459.  
  460. PROCEDURE GpiQueryPel
  461. ( PresSpaceHandle                    : HPS;
  462.   VAR Point                          : POINTL
  463. )                                    : LONGINT;
  464.  
  465. PROCEDURE GpiFloodFill
  466. ( PresSpaceHandle                    : HPS;
  467.   Options                            : LONGINT;
  468.   Color                              : LONGINT
  469. )                                    : LONGINT;
  470.  
  471. PROCEDURE GpiDrawBits
  472. ( PresSpaceHandle                    : HPS;
  473.   VAR Bits                           : ARRAY OF SYSTEM.BYTE;
  474.   VAR BitMapInfoTable                : BITMAPINFO2;
  475.   Count                              : LONGINT;
  476.   VAR Points                         : ARRAY OF POINTL;
  477.   Rop                                : LONGINT;
  478.   Options                            : LONGCARD
  479. )                                    : LONGINT;
  480.  
  481. END GPIBITMAPS.
  482.