--- src/xt/HLV_print.old.cc	Wed Mar  5 11:33:30 1997
+++ src/xt/HLV_print.cc	Wed Mar  5 14:22:27 1997
@@ -125,7 +125,7 @@
   if (portName) delete[] portName;
 }
 
-Bool wxPrintDialog::Show(Bool flag)
+Bool wxPrintDialog::Show(Bool flag, wxPrinter *printer, wxPrintout *printout)
 {
   if (!flag)
     return FALSE;
@@ -168,7 +168,9 @@
     }
     else
     {
-      wxGenericPrintDialog *genericPrintDialog = new wxGenericPrintDialog(dialogParent, printData);
+      wxGenericPrintDialog *genericPrintDialog = 
+	new wxGenericPrintDialog(dialogParent, printData,
+				 printer,printout);
       genericPrintDialog->Show(TRUE);
       if (wxGenericPrintDialog::printDialogCancelled)
       {
@@ -812,16 +814,77 @@
 #endif
 }
 
-Bool wxPrinter::Print(wxWindow *parent, wxPrintout *printout, Bool prompt)
+Bool wxPrinter::RecalculatePages(wxPrintout *printout)
 {
-  abortIt = FALSE;
-  abortWindow = NULL;
+  wxDC *dc=NULL;
+#ifdef wx_msw
+  if (WINDOWS_PRINTING)
+    dc = new wxPrinterDC(NULL, NULL, NULL, FALSE);
+  else
+#endif
+#if !(defined(wx_msw) && !USE_POSTSCRIPT_ARCHITECTURE_IN_MSW)
+    {
+      dc = new wxPostScriptDC(wxThePrintSetupData->GetPrinterFile(), 
+			      FALSE, NULL);
+    }
+#else
+  return FALSE;
+#endif
+  int logPPIScreenX = 0;
+  int logPPIScreenY = 0;
+  int logPPIPrinterX = 0;
+  int logPPIPrinterY = 0;
+  
+#ifdef wx_msw
+  if (WINDOWS_PRINTING)
+    {
+      HDC hdc = ::GetDC(NULL);
+      logPPIScreenX = ::GetDeviceCaps(hdc, LOGPIXELSX);
+      logPPIScreenY = ::GetDeviceCaps(hdc, LOGPIXELSY);
+      ::ReleaseDC(NULL, hdc);
+      
+      logPPIPrinterX = ::GetDeviceCaps(dc->cdc, LOGPIXELSX);
+      logPPIPrinterY = ::GetDeviceCaps(dc->cdc, LOGPIXELSY);
+    }
+  else
+#endif
+    {
+      // Correct values for X/PostScript?
+      logPPIScreenX  = 75;	// The problem with PPI is, that it depends
+      logPPIScreenY  = 75;	// on the screen size and the resolution
+      logPPIPrinterX = 72;	// usually there are 75dpi
+      logPPIPrinterY = 72;	// postscript is 72 dpi
+    }
+  
+  printout->SetPPIScreen(logPPIScreenX, logPPIScreenY);
+  printout->SetPPIPrinter(logPPIPrinterX, logPPIPrinterY);
+  
+  // Set printout parameters  
+  printout->SetDC(dc);
+  
+  float w, h;
+  dc->GetSize(&w, &h);
+  printout->SetPageSizePixels((int)w, (int)h);
+  dc->GetSizeMM(&w, &h);
+  printout->SetPageSizeMM((int)w, (int)h);
+  
+  printout->OnBeginDocument(printData.GetFromPage(),printData.GetToPage());
+  printout->OnBeginPrinting();
+  dc->StartPage();
+  printout->OnPreparePrinting();
+  dc->EndPage();
+  //printout->OnEndDocument();
+  delete dc;
+  dc=NULL;
+  printout->SetDC(dc);
+  return TRUE;
+}
 
-  if (!printout)
+Bool wxPrinter::SetPageInfoDialog(wxPrintout *printout)
+{
+  // Recalculate the number of pages
+  if (RecalculatePages(printout)==FALSE) 
     return FALSE;
-    
-  printout->SetIsPreview(FALSE);
-  printout->OnPreparePrinting();
 
   // Get some parameters from the printout, if defined
   int fromPage, toPage;
@@ -851,14 +914,34 @@
       printData.SetToPage(printData.GetMinPage());
   }
   else
-    printData.EnablePageNumbers(FALSE);
+    {
+      printData.EnablePageNumbers(FALSE);
+    }
+  return TRUE;
+}
+
+
+Bool wxPrinter::Print(wxWindow *parent, wxPrintout *printout, Bool prompt)
+{
+  abortIt = FALSE;
+  abortWindow = NULL;
+
+  if (!printout)
+    return FALSE;
+    
+  printout->SetIsPreview(FALSE);
+
+  if (SetPageInfoDialog(printout)==FALSE)
+    return FALSE;
   
   // Create a suitable device context  
-  wxDC *dc = NULL;
+  wxDC *dc=NULL;
+
   if (prompt)
   {
     wxPrintDialog dialog(parent, &printData);
-    if (dialog.Show(TRUE))
+    
+    if (dialog.Show(TRUE,this,printout))
     {
       dc = dialog.GetPrintDC();
       printData = dialog.GetPrintData();
@@ -1829,9 +1912,13 @@
 
 IMPLEMENT_CLASS(wxGenericPrintDialog, wxDialogBox)
 
-wxGenericPrintDialog::wxGenericPrintDialog(wxWindow *parent, wxPrintData& data):
+wxGenericPrintDialog::wxGenericPrintDialog(wxWindow *parent, wxPrintData& data,
+					   wxPrinter *printer,
+					   wxPrintout *printout):
   wxDialogBox(parent, "Print", TRUE, 0, 0, 600, 600)
 {
+  printPrinter=printer;
+  printPrintout=printout;
   printData = data;
   printDialogCancelled = FALSE;
   
@@ -1909,11 +1996,19 @@
     // to copy the printData.
 
     delete genericPrintSetupDialog;
+    ValuesToDialog();
   }
 }
 
 void wxGenericPrintDialog::ValuesToDialog(void)
 {
+  
+  // check pages
+  if ((printPrinter)&&(printPrintout))
+    {
+      printPrinter->SetPageInfoDialog(printPrintout);
+    }
+
   char buf[10];
   if (printData.GetEnablePageNumbers())
   {
--- src/xt/HLV_print.old.h	Wed Mar  5 15:09:23 1997
+++ include/xt/HLV_print.h	Wed Mar  5 14:19:33 1997
@@ -148,7 +148,9 @@
   ~wxPrintDialog(void);
 
   Bool Create(wxWindow *parent, wxPrintData *data = NULL);
-  virtual Bool Show(Bool flag);
+  virtual Bool Show(Bool flag, 
+		    wxPrinter *printer=NULL, 
+		    wxPrintout *printout=NULL);
 
   virtual wxPrintData& GetPrintData(void) { return printData; }
   virtual wxDC *GetPrintDC(void);
@@ -182,6 +184,8 @@
   virtual void ReportError(wxWindow *parent, wxPrintout *printout, char *message);
   virtual wxPrintData &GetPrintData(void);
   virtual inline Bool Abort(void) { return abortIt; }
+  virtual Bool RecalculatePages(wxPrintout *printout);
+  virtual Bool SetPageInfoDialog(wxPrintout *printout);
 };
 
 /*
@@ -434,9 +438,13 @@
   wxCheckBox *collateCopiesCheckBox;
 
   static Bool printDialogCancelled;
-  
+
   wxPrintData printData;
-  wxGenericPrintDialog(wxWindow *parent, wxPrintData& data);
+  wxPrinter   *printPrinter;
+  wxPrintout  *printPrintout;
+  wxGenericPrintDialog(wxWindow *parent, wxPrintData& data,
+		       wxPrinter *printer=NULL,
+		       wxPrintout *printout=NULL);
   ~wxGenericPrintDialog(void);
 
   Bool OnClose(void);
