Annotation of ntddk/src/print/pscript/ppd.c, revision 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.