Annotation of ntddk/src/print/pscript/ppd.c, revision 1.1.1.1

1.1       root        1: //--------------------------------------------------------------------------
                      2: //
                      3: // Module Name:  PPD.C
                      4: //
                      5: // Brief Description:  This module contains the PSCRIPT driver's PPD
                      6: // Compiler.
                      7: //
                      8: // Author:  Kent Settle (kentse)
                      9: // Created: 20-Mar-1991
                     10: //
                     11: // Copyright (c) 1991 Microsoft Corporation
                     12: //
                     13: // This module contains routines which will take an Adobe PPD (printer
                     14: //--------------------------------------------------------------------------
                     15: 
                     16: #include "string.h"
                     17: #include "pscript.h"
                     18: 
                     19: // declarations of routines residing within this module.
                     20: 
                     21: PNTPD GetNTPD(PDEVDATA, PWSTR);
                     22: 
                     23: // external declarations.
                     24: 
                     25: extern VOID InitNTPD(PNTPD);
                     26: extern VOID ParsePPD(PNTPD, PTMP_NTPD, PPARSEDATA);
                     27: extern VOID BuildNTPD(PNTPD, PTMP_NTPD);
                     28: extern DWORD SizeNTPD(PNTPD, PTMP_NTPD);
                     29: 
                     30: extern TABLE_ENTRY KeywordTable[];
                     31: extern TABLE_ENTRY SecondKeyTable[];
                     32: extern TABLE_ENTRY FontTable[];
                     33: 
                     34: //--------------------------------------------------------------------------
                     35: // PNTPD GetNTPD(pdev, pwstrPPDFile)
                     36: // PDEVDATA    pdev;
                     37: // PWSTR        pwstrPPDFile;
                     38: //
                     39: // This is the routine which does all the work.  It Parses the PPD file
                     40: // a line at a time, looking for keywords, then acting appropriately.
                     41: //
                     42: // Returns:
                     43: //   This routine returns TRUE for success, FALSE otherwise.
                     44: //
                     45: // History:
                     46: //   04-Aug-1992    -by-    Kent Settle     (kentse)
                     47: //  Integrated into driver, rather than stand alone exe.
                     48: //   22-Mar-1991    -by-    Kent Settle    (kentse)
                     49: //  Wrote it.
                     50: //--------------------------------------------------------------------------
                     51: 
                     52: PNTPD GetNTPD(pdev, pwstrPPDFile)
                     53: PDEVDATA    pdev;
                     54: PWSTR        pwstrPPDFile;
                     55: {
                     56:     PNTPD       pntpd, pstub;
                     57:     PTMP_NTPD   ptmp;
                     58:     PPARSEDATA  pdata;
                     59:     NTPD        ntpdStub;
                     60:     DWORD       dwSize;
                     61: 
                     62:     // allocate some memory for parsing data structure.
                     63: 
                     64:     if (!(pdata = (PPARSEDATA)HeapAlloc(pdev->hheap, 0, sizeof(PARSEDATA))))
                     65:     {
                     66:         RIP("PSCRIPT!GetNTPD:  HeapAlloc for pdata failed.\n");
                     67:         return((PNTPD)NULL);
                     68:     }
                     69: 
                     70:     memset(pdata, 0, sizeof(PARSEDATA));
                     71: 
                     72:     // open PPD file for input.
                     73: 
                     74:     pdata->fEOF = FALSE;
                     75:     pdata->hFile = CreateFile(pwstrPPDFile, GENERIC_READ,
                     76:                           FILE_SHARE_READ, NULL, OPEN_EXISTING,
                     77:                           FILE_ATTRIBUTE_NORMAL, NULL);
                     78: 
                     79:     if (pdata->hFile == INVALID_HANDLE_VALUE)
                     80:     {
                     81:         RIP("PSCRIPT!GetNTPD:  failed to open PPD file.\n");
                     82:         return((PNTPD)NULL);
                     83:     }
                     84: 
                     85:     // allocate some memory to build the TMP_NTPD structure.
                     86: 
                     87:     if (!(ptmp = (PTMP_NTPD)HeapAlloc(pdev->hheap, 0, sizeof(TMP_NTPD))))
                     88:     {
                     89:         CloseHandle(pdata->hFile);
                     90:         RIP("PSCRIPT!GetNTPD: GlobalAlloc for ptmp failed.\n");
                     91:         return((PNTPD)NULL);
                     92:     }
                     93: 
                     94:     memset(ptmp, 0, sizeof(TMP_NTPD));
                     95: 
                     96:     // now parse the PPD file, building the TMP_NTPD structure.
                     97: 
                     98:     pstub = &ntpdStub;
                     99:     memset(pstub, 0, sizeof(ntpdStub));
                    100: 
                    101:     InitNTPD(pstub);
                    102: 
                    103:     ParsePPD(pstub, ptmp, pdata);
                    104: 
                    105:     // we are done with the PPD file, so close it.
                    106: 
                    107:     CloseHandle(pdata->hFile);
                    108:     HeapFree(pdev->hheap, 0, (PVOID)pdata);
                    109: 
                    110:     // find out how big the NTPD structure will be for this printer.
                    111: 
                    112:     if (!(dwSize = SizeNTPD(pstub, ptmp)))
                    113:     {
                    114:         HeapFree(pdev->hheap, 0, (PVOID)ptmp);
                    115:         RIP("PSCRIPT!GetNTPD: SizeNTPD failed.\n");
                    116:         return((PNTPD)NULL);
                    117:     }
                    118: 
                    119:     // allocate some memory to build the NTPD structure in.
                    120: 
                    121:     if (!(pntpd = (PNTPD)HeapAlloc(pdev->hheap, 0, dwSize)))
                    122:     {
                    123:         HeapFree(pdev->hheap, 0, (PVOID)ptmp);
                    124:         RIP("PSCRIPT!GetNTPD: HeapAlloc for pntpd failed.\n");
                    125:         return((PNTPD)NULL);
                    126:     }
                    127: 
                    128:     // ParsePPD will have filled in the NTPD stub structure, so copy
                    129:     // it to the real NTPD structure, then call BuildNTPD to add to
                    130:     // it.
                    131: 
                    132:     memcpy(pntpd, pstub, sizeof(ntpdStub));
                    133: 
                    134:     // now move data from the TMP_NTPD structure, into the more compact
                    135:     // NTPD structure.
                    136: 
                    137:     BuildNTPD(pntpd, ptmp);
                    138: 
                    139:     // free up temporary memory.
                    140: 
                    141:     HeapFree(pdev->hheap, 0, (PVOID)ptmp);
                    142: 
                    143:     return(pntpd);  // success
                    144: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.