Huw Davies : wineps.drv: Convert the page size list to a standard Wine list .

Alexandre Julliard julliard at wine.codeweavers.com
Thu Mar 8 15:35:54 CST 2007


Module: wine
Branch: master
Commit: 277f47445150665b0e7a7fa0369a43e9366b6371
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=277f47445150665b0e7a7fa0369a43e9366b6371

Author: Huw Davies <huw at codeweavers.com>
Date:   Thu Mar  8 14:16:43 2007 +0000

wineps.drv: Convert the page size list to a standard Wine list.

---

 dlls/wineps.drv/driver.c |   38 +++++++++++++++++++++++++-------------
 dlls/wineps.drv/init.c   |    2 +-
 dlls/wineps.drv/ppd.c    |   31 +++++++++++++------------------
 dlls/wineps.drv/ps.c     |    2 +-
 dlls/wineps.drv/psdrv.h  |    6 ++++--
 5 files changed, 44 insertions(+), 35 deletions(-)

diff --git a/dlls/wineps.drv/driver.c b/dlls/wineps.drv/driver.c
index 124070e..f833486 100644
--- a/dlls/wineps.drv/driver.c
+++ b/dlls/wineps.drv/driver.c
@@ -67,7 +67,7 @@ void PSDRV_MergeDevmodes(PSDRV_DEVMODEA *dm1, PSDRV_DEVMODEA *dm2,
     if(dm2->dmPublic.dmFields & DM_PAPERSIZE) {
         PAGESIZE *page;
 
-	for(page = pi->ppd->PageSizes; page; page = page->next) {
+	LIST_FOR_EACH_ENTRY(page, &pi->ppd->PageSizes, PAGESIZE, entry) {
 	    if(page->WinPage == dm2->dmPublic.u1.s1.dmPaperSize)
 	        break;
 	}
@@ -208,11 +208,13 @@ static INT_PTR CALLBACK PSDRV_PaperDlgProc(HWND hwnd, UINT msg,
     di = (PSDRV_DLGINFO*)((PROPSHEETPAGEA*)lParam)->lParam;
     SetWindowLongPtrW(hwnd, DWLP_USER, (LONG_PTR)di);
 
-    for(ps = di->pi->ppd->PageSizes, i = 0; ps; ps = ps->next, i++) {
+    i = 0;
+    LIST_FOR_EACH_ENTRY(ps, &di->pi->ppd->PageSizes, PAGESIZE, entry) {
       SendDlgItemMessageA(hwnd, IDD_PAPERS, LB_INSERTSTRING, i,
 			  (LPARAM)ps->FullName);
       if(di->pi->Devmode->dmPublic.u1.s1.dmPaperSize == ps->WinPage)
 	Cursel = i;
+      i++;
     }
     SendDlgItemMessageA(hwnd, IDD_PAPERS, LB_SETCURSEL, Cursel, 0);
     
@@ -242,8 +244,11 @@ static INT_PTR CALLBACK PSDRV_PaperDlgProc(HWND hwnd, UINT msg,
     case IDD_PAPERS:
       if(HIWORD(wParam) == LBN_SELCHANGE) {
 	Cursel = SendDlgItemMessageA(hwnd, LOWORD(wParam), LB_GETCURSEL, 0, 0);
-	for(i = 0, ps = di->pi->ppd->PageSizes; i < Cursel; i++, ps = ps->next)
-	  ;
+        i = 0;
+	LIST_FOR_EACH_ENTRY(ps, &di->pi->ppd->PageSizes, PAGESIZE, entry) {
+            if(i >= Cursel) break;
+            i++;
+        }
 	TRACE("Setting pagesize to item %d Winpage = %d\n", Cursel,
 	      ps->WinPage);
 	di->dlgdm->dmPublic.u1.s1.dmPaperSize = ps->WinPage;
@@ -461,9 +466,12 @@ DWORD PSDRV_DeviceCapabilities(LPSTR lpszDriver, LPCSTR lpszDevice, LPCSTR lpszP
       WORD *wp = (WORD *)lpszOutput;
       int i = 0;
 
-      for(ps = pi->ppd->PageSizes; ps; ps = ps->next, i++)
+      LIST_FOR_EACH_ENTRY(ps, &pi->ppd->PageSizes, PAGESIZE, entry)
+      {
+        i++;
 	if(lpszOutput != NULL)
 	  *wp++ = ps->WinPage;
+      }
       return i;
     }
 
@@ -473,12 +481,15 @@ DWORD PSDRV_DeviceCapabilities(LPSTR lpszDriver, LPCSTR lpszDevice, LPCSTR lpszP
       POINT16 *pt = (POINT16 *)lpszOutput;
       int i = 0;
 
-      for(ps = pi->ppd->PageSizes; ps; ps = ps->next, i++)
+      LIST_FOR_EACH_ENTRY(ps, &pi->ppd->PageSizes, PAGESIZE, entry)
+      {
+        i++;
 	if(lpszOutput != NULL) {
 	  pt->x = ps->PaperDimension->x * 254.0 / 72.0;
 	  pt->y = ps->PaperDimension->y * 254.0 / 72.0;
 	  pt++;
 	}
+      }
       return i;
     }
 
@@ -488,11 +499,14 @@ DWORD PSDRV_DeviceCapabilities(LPSTR lpszDriver, LPCSTR lpszDevice, LPCSTR lpszP
       char *cp = lpszOutput;
       int i = 0;
 
-      for(ps = pi->ppd->PageSizes; ps; ps = ps->next, i++)
+      LIST_FOR_EACH_ENTRY(ps, &pi->ppd->PageSizes, PAGESIZE, entry)
+      {
+        i++;
 	if(lpszOutput != NULL) {
 	  lstrcpynA(cp, ps->FullName, 64);
 	  cp += 64;
 	}
+      }
       return i;
     }
 
@@ -576,15 +590,14 @@ DWORD PSDRV_DeviceCapabilities(LPSTR lpszDriver, LPCSTR lpszDevice, LPCSTR lpszP
   case DC_MAXEXTENT:
     {
       PAGESIZE *ps;
-      int i;
       POINT ptMax;
       ptMax.x = ptMax.y = 0;
 
       if(lpszOutput == NULL)
 	return -1;
 
-      i = 0;
-      for(ps = pi->ppd->PageSizes; ps; ps = ps->next, i++) {
+      LIST_FOR_EACH_ENTRY(ps, &pi->ppd->PageSizes, PAGESIZE, entry)
+      {
 	if(ps->PaperDimension->x > ptMax.x)
 	  ptMax.x = ps->PaperDimension->x;
 	if(ps->PaperDimension->y > ptMax.y)
@@ -597,15 +610,14 @@ DWORD PSDRV_DeviceCapabilities(LPSTR lpszDriver, LPCSTR lpszDevice, LPCSTR lpszP
   case DC_MINEXTENT:
     {
       PAGESIZE *ps;
-      int i;
       POINT ptMax;
       ptMax.x = ptMax.y = 0;
 
       if(lpszOutput == NULL)
 	return -1;
 
-      i = 0;
-      for(ps = pi->ppd->PageSizes; ps; ps = ps->next, i++) {
+      LIST_FOR_EACH_ENTRY(ps, &pi->ppd->PageSizes, PAGESIZE, entry)
+      {
 	if(ps->PaperDimension->x > ptMax.x)
 	  ptMax.x = ps->PaperDimension->x;
 	if(ps->PaperDimension->y > ptMax.y)
diff --git a/dlls/wineps.drv/init.c b/dlls/wineps.drv/init.c
index 23b6cfd..3ff0def 100644
--- a/dlls/wineps.drv/init.c
+++ b/dlls/wineps.drv/init.c
@@ -176,7 +176,7 @@ static void PSDRV_UpdateDevCaps( PSDRV_PDEVICE *physDev )
     INT width = 0, height = 0;
 
     if(physDev->Devmode->dmPublic.dmFields & DM_PAPERSIZE) {
-        for(page = physDev->pi->ppd->PageSizes; page; page = page->next) {
+        LIST_FOR_EACH_ENTRY(page, &physDev->pi->ppd->PageSizes, PAGESIZE, entry) {
 	    if(page->WinPage == physDev->Devmode->dmPublic.u1.s1.dmPaperSize)
 	        break;
 	}
diff --git a/dlls/wineps.drv/ppd.c b/dlls/wineps.drv/ppd.c
index a5aea3b..0c893e7 100644
--- a/dlls/wineps.drv/ppd.c
+++ b/dlls/wineps.drv/ppd.c
@@ -469,23 +469,17 @@ static BOOL PSDRV_PPDGetNextTuple(FILE *fp, PPDTuple *tuple)
  */
 static PAGESIZE *PSDRV_PPDGetPageSizeInfo(PPD *ppd, char *name)
 {
-    PAGESIZE *page = ppd->PageSizes, *lastpage;
+    PAGESIZE *page;
 
-    if(!page) {
-       page = ppd->PageSizes = HeapAlloc( PSDRV_Heap,
-					    HEAP_ZERO_MEMORY, sizeof(*page) );
-       return page;
-    } else {
-        for( ; page; page = page->next) {
-	    if(!strcmp(page->Name, name))
-	         return page;
-	    lastpage = page;
-	}
-
-	lastpage->next = HeapAlloc( PSDRV_Heap,
-					   HEAP_ZERO_MEMORY, sizeof(*page) );
-	return lastpage->next;
+    LIST_FOR_EACH_ENTRY(page, &ppd->PageSizes, PAGESIZE, entry)
+    {
+        if(!strcmp(page->Name, name))
+            return page;
     }
+
+    page = HeapAlloc( PSDRV_Heap,  HEAP_ZERO_MEMORY, sizeof(*page) );
+    list_add_tail(&ppd->PageSizes, &page->entry);
+    return page;
 }
 
 /**********************************************************************
@@ -573,6 +567,7 @@ PPD *PSDRV_ParsePPD(char *fname)
     }
 
     ppd->ColorDevice = CD_NotSpecified;
+    list_init(&ppd->PageSizes);
 
     /*
      *	The Windows PostScript drivers create the following "virtual bin" for
@@ -868,7 +863,7 @@ PPD *PSDRV_ParsePPD(char *fname)
     ppd->DefaultPageSize = NULL;
     if(default_pagesize) {
 	PAGESIZE *page;
-	for(page = ppd->PageSizes; page; page = page->next) {
+	LIST_FOR_EACH_ENTRY(page, &ppd->PageSizes, PAGESIZE, entry) {
             if(!strcmp(page->Name, default_pagesize)) {
                 ppd->DefaultPageSize = page;
                 TRACE("DefaultPageSize: %s\n", page->Name);
@@ -878,7 +873,7 @@ PPD *PSDRV_ParsePPD(char *fname)
         HeapFree(PSDRV_Heap, 0, default_pagesize);
     }
     if(!ppd->DefaultPageSize) {
-        ppd->DefaultPageSize = ppd->PageSizes;
+        ppd->DefaultPageSize = LIST_ENTRY(list_head(&ppd->PageSizes), PAGESIZE, entry);
         TRACE("Setting DefaultPageSize to first in list\n");
     }
 
@@ -911,7 +906,7 @@ PPD *PSDRV_ParsePPD(char *fname)
 	for(fn = ppd->InstalledFonts; fn; fn = fn->next)
 	    TRACE("'%s'\n", fn->Name);
 
-	for(page = ppd->PageSizes; page; page = page->next) {
+	LIST_FOR_EACH_ENTRY(page, &ppd->PageSizes, PAGESIZE, entry) {
 	    TRACE("'%s' aka '%s' (%d) invoked by '%s'\n", page->Name,
 	      page->FullName, page->WinPage, page->InvocationString);
 	    if(page->ImageableArea)
diff --git a/dlls/wineps.drv/ps.c b/dlls/wineps.drv/ps.c
index e4fee13..9f80693 100644
--- a/dlls/wineps.drv/ps.c
+++ b/dlls/wineps.drv/ps.c
@@ -365,7 +365,7 @@ INT PSDRV_WriteHeader( PSDRV_PDEVICE *physDev, LPCSTR title )
 	}
     }
 
-    for(page = physDev->pi->ppd->PageSizes; page; page = page->next) {
+    LIST_FOR_EACH_ENTRY(page, &physDev->pi->ppd->PageSizes, PAGESIZE, entry) {
         if(page->WinPage == physDev->Devmode->dmPublic.u1.s1.dmPaperSize) {
 	    if(page->InvocationString) {
 	        PSDRV_WriteFeature(physDev->job.hJob, "*PageSize", page->Name,
diff --git a/dlls/wineps.drv/psdrv.h b/dlls/wineps.drv/psdrv.h
index e6b6edc..fcdc78d 100644
--- a/dlls/wineps.drv/psdrv.h
+++ b/dlls/wineps.drv/psdrv.h
@@ -29,6 +29,8 @@
 #include "wine/wingdi16.h"
 #include "winspool.h"
 
+#include "wine/list.h"
+
 typedef struct {
     INT		    index;
     LPCSTR	    sz;
@@ -131,13 +133,13 @@ typedef struct {
 /* Solaris kludge */
 #undef PAGESIZE
 typedef struct _tagPAGESIZE {
+    struct list         entry;
     char		*Name;
     char		*FullName;
     char		*InvocationString;
     IMAGEABLEAREA	*ImageableArea;
     PAPERDIMENSION	*PaperDimension;
     WORD		WinPage; /*eg DMPAPER_A4. Doesn't really belong here */
-    struct _tagPAGESIZE *next;
 } PAGESIZE;
 
 
@@ -211,7 +213,7 @@ typedef struct {
     char		*JCLEnd;
     char		*DefaultFont;
     FONTNAME		*InstalledFonts; /* ptr to a list of FontNames */
-    PAGESIZE		*PageSizes;
+    struct list         PageSizes;
     PAGESIZE            *DefaultPageSize;
     OPTION		*InstalledOptions;
     CONSTRAINT		*Constraints;




More information about the wine-cvs mailing list