2009-11-21 22:37 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)

* contrib/hbwin/win_tprn.prg
  * contrib/hbwin/win_prn1.c
    + Added ::GetDocumentProperties() method.
    + Calling ::GetDocumentProperties() from ::New() to setup defaults.
    ; Patch submitted by Xavi. Thank you.

  * contrib/hbwin/win_prn2.c
    % Modified GETPRINTERS() code to use optimal array creation code, 
      use less redundancy and synced functionally similar code 
      parts with each other, deleted unnecessary code parts.
    * Greatly cleaned GETPRINTERS() code (names, layout).
    ! Fixed GETPRINTERS() code. It had fatal flaw in non-NT 
      branch, so I seriously wonder how could it work for anyone 
      in the past. It seems it wasn't even tested by submitter 
      before commited to xhb repository in year 2005.
      Someone pls test it on Win9x, I don't have any printers 
      installed there.

  * contrib/hbwin/win_prn1.c
  * contrib/hbwin/legacy.prg
    * Moved WIN_GETEXEFILENAME() to legacy function collection, 
      at the same time rewritten to simply call HB_ARGV( 0 ).

  * contrib/hbwin/win_prn1.c
    % WIN_FILLRECT(), WIN_ARC(), WIN_ELLIPSE() optimized.
This commit is contained in:
Viktor Szakats
2009-11-21 21:38:39 +00:00
parent 4def8b4d29
commit 522ef1a52c
5 changed files with 193 additions and 190 deletions

View File

@@ -17,6 +17,33 @@
past entries belonging to author(s): Viktor Szakats.
*/
2009-11-21 22:37 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* contrib/hbwin/win_tprn.prg
* contrib/hbwin/win_prn1.c
+ Added ::GetDocumentProperties() method.
+ Calling ::GetDocumentProperties() from ::New() to setup defaults.
; Patch submitted by Xavi. Thank you.
* contrib/hbwin/win_prn2.c
% Modified GETPRINTERS() code to use optimal array creation code,
use less redundancy and synced functionally similar code
parts with each other, deleted unnecessary code parts.
* Greatly cleaned GETPRINTERS() code (names, layout).
! Fixed GETPRINTERS() code. It had fatal flaw in non-NT
branch, so I seriously wonder how could it work for anyone
in the past. It seems it wasn't even tested by submitter
before commited to xhb repository in year 2005.
Someone pls test it on Win9x, I don't have any printers
installed there.
* contrib/hbwin/win_prn1.c
* contrib/hbwin/legacy.prg
* Moved WIN_GETEXEFILENAME() to legacy function collection,
at the same time rewritten to simply call HB_ARGV( 0 ).
* contrib/hbwin/win_prn1.c
% WIN_FILLRECT(), WIN_ARC(), WIN_ELLIPSE() optimized.
2009-11-21 20:28 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* config/darwin/gcc.mk
* config/darwin/icc.mk

View File

@@ -342,6 +342,9 @@ METHOD OleValueNotEqual( xArg ) CLASS TOLEAUTO
FUNCTION CreateOLEObject( ... )
RETURN __OleCreateObject( ... )
FUNCTION win_GetExeFileName()
RETURN hb_ArgV( 0 )
CREATE CLASS Win32Prn FROM WIN_PRN
ENDCLASS

View File

@@ -470,6 +470,47 @@ HB_FUNC( WIN_SETDOCUMENTPROPERTIES )
hb_retl( Result );
}
HB_FUNC( WIN_GETDOCUMENTPROPERTIES )
{
BOOL Result = FALSE;
HANDLE hPrinter;
const char * pszPrinterName = hb_parc( 1 );
LPTSTR lpPrinterName = pszPrinterName ? HB_TCHAR_CONVTO( pszPrinterName ) : NULL;
if( OpenPrinter( lpPrinterName, &hPrinter, NULL ) )
{
PDEVMODE pDevMode = NULL;
LONG lSize = DocumentProperties( 0, hPrinter, lpPrinterName, pDevMode, pDevMode, 0 );
if( lSize > 0 )
{
pDevMode = ( PDEVMODE ) hb_xgrab( lSize );
if( pDevMode )
{
DocumentProperties( 0, hPrinter, lpPrinterName, pDevMode, pDevMode, DM_OUT_BUFFER );
hb_stornl( pDevMode->dmPaperSize, 2 );
hb_storl( pDevMode->dmOrientation == 2, 3 );
hb_stornl( pDevMode->dmCopies, 4 );
hb_stornl( pDevMode->dmDefaultSource, 5 );
hb_stornl( pDevMode->dmDuplex, 6 );
hb_stornl( pDevMode->dmPrintQuality, 7 );
Result = TRUE;
hb_xfree( pDevMode );
}
}
ClosePrinter( hPrinter );
}
if( lpPrinterName )
HB_TCHAR_FREE( lpPrinterName );
hb_retl( Result );
}
/* Functions for Loading & Printing bitmaps */
HB_FUNC( WIN_LOADBITMAPFILE )
@@ -582,15 +623,6 @@ HB_FUNC( WIN_ENUMFONTS )
}
}
HB_FUNC( WIN_GETEXEFILENAME )
{
unsigned char pBuf[ 1024 ];
GetModuleFileName( NULL, ( LPTSTR ) pBuf, 1023 );
hb_retc( ( char * ) pBuf );
}
HB_FUNC( WIN_SETCOLOR )
{
HDC hDC = win_HDC_par( 1 );
@@ -627,17 +659,13 @@ HB_FUNC( WIN_SETPEN )
HB_FUNC( WIN_FILLRECT )
{
HDC hDC = win_HDC_par( 1 );
int x1 = hb_parni( 2 );
int y1 = hb_parni( 3 );
int x2 = hb_parni( 4 );
int y2 = hb_parni( 5 );
HBRUSH hBrush = CreateSolidBrush( ( COLORREF ) hb_parnl( 6 ) );
RECT rct;
rct.top = y1;
rct.left = x1;
rct.bottom = y2;
rct.right = x2;
rct.left = hb_parni( 2 );
rct.top = hb_parni( 3 );
rct.right = hb_parni( 4 );
rct.bottom = hb_parni( 5 );
FillRect( hDC, &rct, hBrush );
@@ -675,24 +703,24 @@ HB_FUNC( WIN_RECTANGLE )
HB_FUNC( WIN_ARC )
{
HDC hDC = win_HDC_par( 1 );
int x1 = hb_parni( 2 );
int y1 = hb_parni( 3 );
int x2 = hb_parni( 4 );
int y2 = hb_parni( 5 );
hb_retl( Arc( hDC, x1, y1, x2, y2, 0, 0, 0, 0 ) );
hb_retl( Arc( win_HDC_par( 1 ) /* hDC */,
hb_parni( 2 ) /* x1 */,
hb_parni( 3 ) /* y1 */,
hb_parni( 4 ) /* x2 */,
hb_parni( 5 ) /* y2 */,
0,
0,
0,
0 ) );
}
HB_FUNC( WIN_ELLIPSE )
{
HDC hDC = win_HDC_par( 1 );
int x1 = hb_parni( 2 );
int y1 = hb_parni( 3 );
int x2 = hb_parni( 4 );
int y2 = hb_parni( 5 );
hb_retl( Ellipse( hDC, x1, y1, x2, y2 ) );
hb_retl( Ellipse( win_HDC_par( 1 ) /* hDC */,
hb_parni( 2 ) /* x1 */,
hb_parni( 3 ) /* y1 */,
hb_parni( 4 ) /* x2 */,
hb_parni( 5 ) /* y2 */ ) );
}
HB_FUNC( WIN_SETBKMODE )

View File

@@ -104,12 +104,11 @@ BOOL hb_PrinterExists( LPCSTR pPrinterName )
pPrinterEnum4 = buffer4 = ( PRINTER_INFO_4 * ) hb_xgrab( needed );
if( EnumPrinters
( Flags, NULL, 4, ( LPBYTE ) pPrinterEnum4, needed, &needed, &returned ) )
if( EnumPrinters( Flags, NULL, 4, ( LPBYTE ) pPrinterEnum4, needed, &needed, &returned ) )
{
ULONG a;
for( a = 0; !Result && a < returned; a++, pPrinterEnum4++ )
for( a = 0; ! Result && a < returned; ++a, pPrinterEnum4++ )
{
Result = strcmp( ( const char * ) pPrinterName,
( const char * ) pPrinterEnum4->pPrinterName ) == 0;
@@ -358,11 +357,12 @@ HB_FUNC( XISPRINTER )
DWORD pdwBufferSize = sizeof( szDefaultPrinter );
const char * pszPrinterName = hb_parc( 1 );
if( !pszPrinterName )
if( ! pszPrinterName )
{
hb_GetDefaultPrinter( szDefaultPrinter, &pdwBufferSize );
pszPrinterName = szDefaultPrinter;
}
hb_retnl( hb_printerIsReadyn( pszPrinterName ) );
}
@@ -386,7 +386,7 @@ BOOL hb_GetPrinterNameByPort( char * pPrinterName, LPDWORD pdwBufferSize,
{
ULONG a;
for( a = 0; a < returned && !bFound; a++, pPrinterEnum++ )
for( a = 0; a < returned && ! bFound; ++a, ++pPrinterEnum )
{
char * szPortName = HB_TCHAR_CONVFROM( pPrinterEnum->pPortName );
@@ -430,10 +430,10 @@ HB_FUNC( PRINTERPORTTONAME )
# define BIG_PRINT_BUFFER (1024*32)
LONG hb_PrintFileRaw( const char * cPrinterName, const char * cFileName, const char * cDocName )
long hb_PrintFileRaw( const char * cPrinterName, const char * cFileName, const char * cDocName )
{
HANDLE hPrinter;
LONG Result;
long Result;
LPTSTR lpPrinterName = HB_TCHAR_CONVTO( cPrinterName );
if( OpenPrinter( lpPrinterName, &hPrinter, NULL ) != 0 )
@@ -493,7 +493,7 @@ LONG hb_PrintFileRaw( const char * cPrinterName, const char * cFileName, const c
HB_FUNC( PRINTFILERAW )
{
LONG Result = -1;
long Result = -1;
if( HB_ISCHAR( 1 ) && HB_ISCHAR( 2 ) )
Result = hb_PrintFileRaw( hb_parc( 1 ) /* cPrinterName */,
@@ -503,111 +503,90 @@ HB_FUNC( PRINTFILERAW )
hb_retnl( Result );
}
#define HB_WINPRN_NAME 1
#define HB_WINPRN_PORT 2
#define HB_WINPRN_TYPE 3
#define HB_WINPRN_DRIVER 4
#define HB_WINPRN_LEN_ 4
HB_FUNC( GETPRINTERS )
{
HANDLE hPrinter;
DWORD Flags = PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS;
BOOL bPrinterNamesOnly = TRUE;
BOOL bLocalPrintersOnly;
PRINTER_INFO_4 * buffer4, * pPrinterEnum4;
PRINTER_INFO_5 * buffer, * pPrinterEnum;
PRINTER_INFO_2 * pPrinterInfo2;
BOOL bPrinterNamesOnly = HB_ISLOG( 1 ) ? ! hb_parl( 1 ) : TRUE;
BOOL bLocalPrintersOnly = hb_parl( 2 );
ULONG needed = 0, returned = 0, a;
PHB_ITEM SubItems, File, Port, Net, Driver, ArrayPrinter;
PHB_ITEM SubItems = hb_itemNew( NULL );
PHB_ITEM pPrinterName = hb_itemNew( NULL );
PHB_ITEM ArrayPrinter = hb_itemNew( NULL );
char * pszData;
ArrayPrinter = hb_itemNew( NULL );
SubItems = hb_itemNew( NULL );
File = hb_itemNew( NULL );
Port = hb_itemNew( NULL );
Net = hb_itemNew( NULL );
Driver = hb_itemNew( NULL );
hb_arrayNew( ArrayPrinter, 0 );
buffer = NULL;
HB_TRACE( HB_TR_DEBUG, ( "GETPRINTERS()" ) );
EnumPrinters( Flags, NULL, 4, ( LPBYTE ) NULL, 0, &needed, &returned );
if( HB_ISLOG( 1 ) )
bPrinterNamesOnly = ! hb_parl( 1 );
bLocalPrintersOnly = hb_parl( 2 );
if( hb_iswinnt() )
if( needed )
{
EnumPrinters( Flags, NULL, 4, ( LPBYTE ) NULL, 0, &needed, &returned );
if( needed )
if( hb_iswinnt() )
{
pPrinterEnum4 = buffer4 = ( PRINTER_INFO_4 * ) hb_xgrab( needed );
PRINTER_INFO_4 * pPrinterEnumBak;
PRINTER_INFO_4 * pPrinterEnum = pPrinterEnumBak = ( PRINTER_INFO_4 * ) hb_xgrab( needed );
if( EnumPrinters
( Flags, NULL, 4, ( LPBYTE ) pPrinterEnum4, needed, &needed, &returned ) )
if( EnumPrinters( Flags, NULL, 4, ( LPBYTE ) pPrinterEnum, needed, &needed, &returned ) )
{
if( bPrinterNamesOnly )
for( a = 0; a < returned; ++a, ++pPrinterEnum )
{
for( a = 0; a < returned; a++, pPrinterEnum4++ )
if( ! bLocalPrintersOnly || pPrinterEnum->Attributes & PRINTER_ATTRIBUTE_LOCAL )
{
if( ! bLocalPrintersOnly
|| pPrinterEnum4->Attributes & PRINTER_ATTRIBUTE_LOCAL )
if( bPrinterNamesOnly )
{
pszData = HB_TCHAR_CONVFROM( pPrinterEnum4->pPrinterName );
hb_itemPutC( File, pszData );
pszData = HB_TCHAR_CONVFROM( pPrinterEnum->pPrinterName );
hb_itemPutC( pPrinterName, pszData );
HB_TCHAR_FREE( pszData );
hb_arrayAddForward( ArrayPrinter, File );
hb_arrayAddForward( ArrayPrinter, pPrinterName );
}
}
}
else
{
for( a = 0; a < returned; a++, pPrinterEnum4++ )
{
if( ! bLocalPrintersOnly
|| pPrinterEnum4->Attributes & PRINTER_ATTRIBUTE_LOCAL )
else
{
if( OpenPrinter( pPrinterEnum4->pPrinterName, &hPrinter, NULL ) )
if( OpenPrinter( pPrinterEnum->pPrinterName, &hPrinter, NULL ) )
{
GetPrinter( hPrinter, 2, NULL, 0, &needed );
if( needed )
{
pPrinterInfo2 = ( PRINTER_INFO_2 * ) hb_xgrab( needed );
if( pPrinterInfo2 )
hb_arrayNew( SubItems, HB_WINPRN_LEN_ );
pszData = HB_TCHAR_CONVFROM( pPrinterEnum->pPrinterName );
hb_arraySetC( SubItems, HB_WINPRN_NAME, pszData );
HB_TCHAR_FREE( pszData );
{
pszData = HB_TCHAR_CONVFROM( pPrinterEnum4->pPrinterName );
hb_itemPutC( File, pszData );
HB_TCHAR_FREE( pszData );
hb_arrayNew( SubItems, 0 );
PRINTER_INFO_2 * pPrinterInfo2 = ( PRINTER_INFO_2 * ) hb_xgrab( needed );
if( GetPrinter( hPrinter, 2, ( LPBYTE ) pPrinterInfo2, needed, &needed ) )
{
pszData = HB_TCHAR_CONVFROM( pPrinterInfo2->pPortName );
hb_itemPutC( Port, pszData );
hb_arraySetC( SubItems, HB_WINPRN_PORT, pszData );
HB_TCHAR_FREE( pszData );
pszData = HB_TCHAR_CONVFROM( pPrinterInfo2->pDriverName );
hb_itemPutC( Driver, pszData );
hb_arraySetC( SubItems, HB_WINPRN_DRIVER, pszData );
HB_TCHAR_FREE( pszData );
}
else
{
hb_itemPutC( Port, "Error" );
hb_itemPutC( Driver, "Error" );
hb_arraySetC( SubItems, HB_WINPRN_PORT, "Error" );
hb_arraySetC( SubItems, HB_WINPRN_DRIVER, "Error" );
}
if( pPrinterEnum4->Attributes & PRINTER_ATTRIBUTE_LOCAL )
hb_itemPutC( Net, "LOCAL" );
else if( pPrinterEnum4->Attributes & PRINTER_ATTRIBUTE_NETWORK )
hb_itemPutC( Net, "NETWORK" );
else
hb_itemPutC( Net, "ERROR" );
hb_arrayAddForward( SubItems, File );
hb_arrayAddForward( SubItems, Port );
hb_arrayAddForward( SubItems, Net );
hb_arrayAddForward( SubItems, Driver );
hb_arrayAddForward( ArrayPrinter, SubItems );
hb_xfree( pPrinterInfo2 );
}
if( pPrinterEnum->Attributes & PRINTER_ATTRIBUTE_LOCAL )
hb_arraySetC( SubItems, HB_WINPRN_TYPE, "LOCAL" );
else if( pPrinterEnum->Attributes & PRINTER_ATTRIBUTE_NETWORK )
hb_arraySetC( SubItems, HB_WINPRN_TYPE, "NETWORK" );
else
hb_arraySetC( SubItems, HB_WINPRN_TYPE, "ERROR" );
hb_arrayAddForward( ArrayPrinter, SubItems );
}
}
CloseHandle( hPrinter );
@@ -615,118 +594,82 @@ HB_FUNC( GETPRINTERS )
}
}
}
hb_xfree( buffer4 );
hb_xfree( pPrinterEnumBak );
}
}
else
{
EnumPrinters( Flags, NULL, 5, ( LPBYTE ) buffer, 0, &needed, &returned );
if( needed )
else
{
pPrinterEnum = buffer = ( PRINTER_INFO_5 * ) hb_xgrab( needed );
if( EnumPrinters( Flags, NULL, 5, ( LPBYTE ) buffer, needed, &needed, &returned ) )
PRINTER_INFO_5 * pPrinterEnumBak;
PRINTER_INFO_5 * pPrinterEnum = pPrinterEnumBak = ( PRINTER_INFO_5 * ) hb_xgrab( needed );
if( EnumPrinters( Flags, NULL, 5, ( LPBYTE ) pPrinterEnum, needed, &needed, &returned ) )
{
for( a = 0; a < returned; a++, pPrinterEnum++ )
for( a = 0; a < returned; ++a, ++pPrinterEnum )
{
if( !bLocalPrintersOnly || pPrinterEnum->Attributes & PRINTER_ATTRIBUTE_LOCAL )
if( ! bLocalPrintersOnly || pPrinterEnum->Attributes & PRINTER_ATTRIBUTE_LOCAL )
{
if( bPrinterNamesOnly )
{
pszData = HB_TCHAR_CONVFROM( pPrinterEnum->pPrinterName );
hb_itemPutC( File, pszData );
hb_itemPutC( pPrinterName, pszData );
HB_TCHAR_FREE( pszData );
hb_arrayAddForward( ArrayPrinter, File );
hb_arrayAddForward( ArrayPrinter, pPrinterName );
}
else
{
/* Tony (ABC) 11/1/2005 1:40PM. */
for( a = 0; a < returned; a++, pPrinterEnum++ )
if( OpenPrinter( pPrinterEnum->pPrinterName, &hPrinter, NULL ) )
{
if( ! bLocalPrintersOnly
|| pPrinterEnum->Attributes & PRINTER_ATTRIBUTE_LOCAL )
GetPrinter( hPrinter, 2, NULL, 0, &needed );
if( needed )
{
if( OpenPrinter( pPrinterEnum->pPrinterName, &hPrinter, NULL ) )
hb_arrayNew( SubItems, HB_WINPRN_LEN_ );
pszData = HB_TCHAR_CONVFROM( pPrinterEnum->pPrinterName );
hb_arraySetC( SubItems, HB_WINPRN_NAME, pszData );
HB_TCHAR_FREE( pszData );
{
GetPrinter( hPrinter, 2, NULL, 0, &needed );
if( needed )
PRINTER_INFO_2 * pPrinterInfo2 = ( PRINTER_INFO_2 * ) hb_xgrab( needed );
if( GetPrinter( hPrinter, 2, ( LPBYTE ) pPrinterInfo2, needed, &needed ) )
{
pPrinterInfo2 = ( PRINTER_INFO_2 * ) hb_xgrab( needed );
if( pPrinterInfo2 )
{
hb_arrayNew( SubItems, 0 );
pszData = HB_TCHAR_CONVFROM( pPrinterEnum->pPrinterName );
hb_itemPutC( File, pszData );
HB_TCHAR_FREE( pszData );
if( GetPrinter( hPrinter, 2, ( LPBYTE ) pPrinterInfo2, needed, &needed ) )
{
pszData = HB_TCHAR_CONVFROM( pPrinterInfo2->pPortName );
hb_itemPutC( Port, pszData );
HB_TCHAR_FREE( pszData );
pszData = HB_TCHAR_CONVFROM( pPrinterInfo2->pDriverName );
hb_itemPutC( Driver, pszData );
HB_TCHAR_FREE( pszData );
}
else
{
hb_itemPutC( Port, "Error" );
hb_itemPutC( Driver, "Error" );
}
if( pPrinterEnum->Attributes & PRINTER_ATTRIBUTE_LOCAL )
hb_itemPutC( Net, "LOCAL" );
else if( pPrinterEnum->Attributes & PRINTER_ATTRIBUTE_NETWORK )
hb_itemPutC( Net, "NETWORK" );
else
hb_itemPutC( Net, "ERROR" );
hb_arrayAddForward( SubItems, File );
hb_arrayAddForward( SubItems, Port );
hb_arrayAddForward( SubItems, Net );
hb_arrayAddForward( SubItems, Driver );
hb_arrayAddForward( ArrayPrinter, SubItems );
hb_xfree( pPrinterInfo2 );
}
pszData = HB_TCHAR_CONVFROM( pPrinterInfo2->pPortName );
hb_arraySetC( SubItems, HB_WINPRN_PORT, pszData );
HB_TCHAR_FREE( pszData );
pszData = HB_TCHAR_CONVFROM( pPrinterInfo2->pDriverName );
hb_arraySetC( SubItems, HB_WINPRN_DRIVER, pszData );
HB_TCHAR_FREE( pszData );
}
else
{
hb_arraySetC( SubItems, HB_WINPRN_PORT, "Error" );
hb_arraySetC( SubItems, HB_WINPRN_DRIVER, "Error" );
}
hb_xfree( pPrinterInfo2 );
}
CloseHandle( hPrinter );
if( pPrinterEnum->Attributes & PRINTER_ATTRIBUTE_LOCAL )
hb_arraySetC( SubItems, HB_WINPRN_TYPE, "LOCAL" );
else if( pPrinterEnum->Attributes & PRINTER_ATTRIBUTE_NETWORK )
hb_arraySetC( SubItems, HB_WINPRN_TYPE, "NETWORK" );
else
hb_arraySetC( SubItems, HB_WINPRN_TYPE, "ERROR" );
hb_arrayAddForward( ArrayPrinter, SubItems );
}
}
/* Tony (ABC) 11/1/2005 1:40PM. Old Code... Justo in case. */
#if 0
hb_arrayNew( SubItems, 0 );
hb_itemPutC( File, pPrinterEnum->pPrinterName );
hb_itemPutC( Port, pPrinterEnum->pPortName );
if( pPrinterEnum->Attributes & PRINTER_ATTRIBUTE_LOCAL)
hb_itemPutC( Net,"LOCAL" );
else if( pPrinterEnum->Attributes & PRINTER_ATTRIBUTE_NETWORK)
hb_itemPutC( Net, "NETWORK" );
else
hb_itemPutC( Net, "ERROR" );
hb_arrayAddForward( SubItems, File );
hb_arrayAddForward( SubItems, Port );
hb_arrayAddForward( SubItems, Net );
hb_arrayAddForward( ArrayPrinter, SubItems );
#endif
CloseHandle( hPrinter );
}
}
}
}
hb_xfree( buffer );
hb_xfree( pPrinterEnumBak );
}
}
hb_itemReturnForward( ArrayPrinter );
hb_itemReturnRelease( ArrayPrinter );
hb_itemRelease( ArrayPrinter );
hb_itemRelease( pPrinterName );
hb_itemRelease( SubItems );
hb_itemRelease( File );
hb_itemRelease( Port );
hb_itemRelease( Net );
hb_itemRelease( Driver );
}
#endif

View File

@@ -205,6 +205,8 @@ ENDCLASS
METHOD New( cPrinter ) CLASS WIN_PRN
::PrinterName := iif( Empty( cPrinter ), GetDefaultPrinter(), cPrinter )
/* Initialized with the current properties of the printer [jarabal] */
::GetDocumentProperties()
RETURN Self
METHOD Create() CLASS WIN_PRN