From f8da1ff45d22eb79859459e86a93f39d6f6fb476 Mon Sep 17 00:00:00 2001 From: Luiz Rafael Culik Date: Sun, 6 Jan 2002 11:02:08 +0000 Subject: [PATCH] See changelog 2002-01-06 09:05 UTC-0300 --- harbour/ChangeLog | 7 +++ harbour/source/lang/msgpt.c | 6 +- harbour/source/rtl/isprint.c | 110 ++++++++++++++++++++++++++++++++++- 3 files changed, 118 insertions(+), 5 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 1e96b302d8..171005af45 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -7,7 +7,14 @@ For example: 2002-12-01 23:12 UTC+0100 Foo Bar */ + * source/lang/*.c + + Added one new internal error: HB_EI_XALLOCNULLSIZE + NOTE to translators or language file maintainers: + The new string should be translated to the proper + languages from English. +2002-01-06 19:40 UTC+0700 Andi Jahja + * change definition of INIT/EXIT PROCEDURE from HB_FUNC_STATIC() to HB_FUNC_INIT()/HB_FUNC_EXIT() to avoid ambiguity * include/hbdefs.h diff --git a/harbour/source/lang/msgpt.c b/harbour/source/lang/msgpt.c index f34b05439e..d2a7fe863d 100644 --- a/harbour/source/lang/msgpt.c +++ b/harbour/source/lang/msgpt.c @@ -200,9 +200,9 @@ static HB_LANG s_lang = "Um item iria ser copiado para ele mesmo em %s", "Symbol item inv lido passado como memvar %s", "Memory buffer overflow", - "hb_xgrab requested to allocate zero byte", - "hb_xrealloc requested to resize to zero byte", - + "hb_xgrab requisitou para alocar zero bytes", + "hb_xrealloc requisitor para redimensiorar para zero byte", + /* Texts */ "DD/MM/YYYY", diff --git a/harbour/source/rtl/isprint.c b/harbour/source/rtl/isprint.c index a85862e20e..5e6d3841ca 100644 --- a/harbour/source/rtl/isprint.c +++ b/harbour/source/rtl/isprint.c @@ -78,7 +78,7 @@ JOB_INFO_2 **ppJobInfo, int *pcJobs, DWORD *pStatus); - + static BOOL DPGetDefaultPrinter(LPTSTR pPrinterName, LPDWORD pdwBufferSize); #endif BOOL hb_printerIsReady( char * pszPrinterName ) @@ -155,7 +155,16 @@ BOOL hb_printerIsReady( char * pszPrinterName ) HB_FUNC( ISPRINTER ) { - hb_retl( hb_printerIsReady( ISCHAR( 1 ) ? hb_parc( 1 ) : "LPT1" ) ); + #if defined(HB_OS_WIN_32) + { + char DefaultPrinter[ 80 ]; + DWORD pdwBufferSize = 80; + DPGetDefaultPrinter( ( LPTSTR ) &DefaultPrinter, &pdwBufferSize); + hb_retl( hb_printerIsReady( ISCHAR( 1 ) ? hb_parc( 1 ) : (char*)DefaultPrinter ) ); + } + #else + hb_retl( hb_printerIsReady( ISCHAR( 1 ) ? hb_parc( 1 ) : "LPT1" ) ); + #endif } /* The code below does the check for the printer under Win32 */ @@ -315,4 +324,101 @@ static BOOL GetJobs(HANDLE hPrinter, /* Handle to the printer. */ return TRUE; } +BOOL DPGetDefaultPrinter(LPTSTR pPrinterName, LPDWORD pdwBufferSize) +{ + BOOL bFlag; + OSVERSIONINFO osv; + TCHAR cBuffer[MAXBUFFERSIZE]; + PRINTER_INFO_2 *ppi2 = NULL; + DWORD dwNeeded = 0; + DWORD dwReturned = 0; + + /* What version of Windows are you running? */ + osv.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&osv); + + /* If Windows 95 or 98, use EnumPrinters... */ + if (osv.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) + { + /* The first EnumPrinters() tells you how big our buffer should + be in order to hold ALL of PRINTER_INFO_2. Note that this will + usually return FALSE. This only means that the buffer (the 4th + parameter) was not filled in. You don't want it filled in here... */ + EnumPrinters(PRINTER_ENUM_DEFAULT, NULL, 2, NULL, 0, &dwNeeded, &dwReturned); + if (dwNeeded == 0) + return FALSE; + + /* Allocate enough space for PRINTER_INFO_2... */ + ppi2 = (PRINTER_INFO_2 *)GlobalAlloc(GPTR, dwNeeded); + if (!ppi2) + return FALSE; + + /* The second EnumPrinters() will fill in all the current information... */ + bFlag = EnumPrinters(PRINTER_ENUM_DEFAULT, NULL, 2, (LPBYTE)ppi2, dwNeeded, &dwNeeded, &dwReturned); + if (!bFlag) + { + GlobalFree(ppi2); + return FALSE; + } + + /* If given buffer too small, set required size and fail... */ + if ((DWORD)lstrlen(ppi2->pPrinterName) >= *pdwBufferSize) + { + *pdwBufferSize = (DWORD)lstrlen(ppi2->pPrinterName) + 1; + GlobalFree(ppi2); + return FALSE; + } + + /* Copy printer name into passed-in buffer... */ + lstrcpy(pPrinterName, ppi2->pPrinterName); + + /* Set buffer size parameter to min required buffer size... */ + *pdwBufferSize = (DWORD)lstrlen(ppi2->pPrinterName) + 1; + } + + /* If Windows NT, use the GetDefaultPrinter API for Windows 2000, + or GetProfileString for version 4.0 and earlier... */ + else if (osv.dwPlatformId == VER_PLATFORM_WIN32_NT) + { +#if(WINVER >= 0x0500) + if (osv.dwMajorVersion >= 5) /* Windows 2000 or later */ + { + bFlag = GetDefaultPrinter(pPrinterName, pdwBufferSize); + if (!bFlag) + return FALSE; + } + + else /* NT4.0 or earlier */ +#endif + { + /* Retrieve the default string from Win.ini (the registry). + String will be in form "printername,drivername,portname". */ + if (GetProfileString("windows", "device", ",,,", cBuffer, MAXBUFFERSIZE) <= 0) + return FALSE; + + /* Printer name precedes first "," character... */ + strtok(cBuffer, ","); + + /* If given buffer too small, set required size and fail... */ + if ((DWORD)lstrlen(cBuffer) >= *pdwBufferSize) + { + *pdwBufferSize = (DWORD)lstrlen(cBuffer) + 1; + return FALSE; + } + + /* Copy printer name into passed-in buffer... */ + lstrcpy(pPrinterName, cBuffer); + + /* Set buffer size parameter to min required buffer size... */ + *pdwBufferSize = (DWORD)lstrlen(cBuffer) + 1; + } + } + + /* Cleanup... */ + if (ppi2) + GlobalFree(ppi2); + + return TRUE; +} + #endif