VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
END
Attribute VB_Name = "dwPrinterInfo"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
' Desaware API Class library
' Copyright (c) 1995-1997 by Desaware
' All rights reserved

' Preliminary demonstration edition

Option Explicit
Private Type PRINTER_INFO_1
        Flags As Long
        pDescription As Long
        pName As Long
        pComment As Long
End Type

Private Type PRINTER_INFO_2
        pServerName As Long
        pPrinterName As Long
        pShareName As Long
        pPortName As Long
        pDriverName As Long
        pComment As Long
        pLocation As Long
        pDevMode As Long    ' Pointer to DEVMODE
        pSepFile As String
        pPrintProcessor As Long
        pDatatype As Long
        pParameters As Long
        pSecurityDescriptor As Long ' Pointer to SECURITY_DESCRIPTOR
        Attributes As Long
        Priority As Long
        DefaultPriority As Long
        StartTime As Long
        UntilTime As Long
        Status As Long
        cJobs As Long
        AveragePPM As Long
End Type

Private Type PRINTER_INFO_3
        pSecurityDescriptor As Long ' Pointer to SECURITY_DESCRIPTOR
End Type

Private Type PRINTER_INFO_4
    pPrinterName As Long
    pServerName As Long
    Attributes As Long
End Type

Private Type PRINTER_INFO_5
        pPrinterName As Long
        pPortName As Long
        Attributes As Long
        DeviceNotSelectedTimeout As Long
        TransmissionRetryTimeout As Long
End Type

Public Flags&
Public pDescription$
Public pName$
Public pComment$
Public pServerName$
Public pPrinterName$
Public pShareName$
Public pPortName$
Public pDriverName$
Public pLocation$
Private pDevMode As DEVMODE
Public pSepFile$
Public pPrintProcessor$
Public pDatatype$
Public pParameters$
Public Attributes&
Public Priority&
Public DefaultPriority&
Public StartTime&
Public UntilTime&
Public Status&
Public cJobs&
Public AveragePPM&
Public DeviceNotSelectedTimeout&
Public TransmissionRetryTimeout&
Private pSecurityDescriptor As SECURITY_DESCRIPTOR
Public Level&   ' Level for which this object was created

Public Sub ResetContents()
    Flags = 0
    pDescription$ = ""
    pName$ = ""
    pComment$ = ""
    pServerName$ = ""
    pPrinterName$ = ""
    pShareName$ = ""
    pPortName$ = ""
    pDriverName$ = ""
    pLocation$ = ""
    pSepFile$ = ""
    pPrintProcessor$ = ""
    pDatatype$ = ""
    pParameters$ = ""
    Attributes& = 0
    Priority& = 0
    DefaultPriority& = 0
    StartTime& = 0
    UntilTime& = 0
    Status& = 0
    cJobs& = 0
    AveragePPM& = 0
    DeviceNotSelectedTimeout& = 0
    TransmissionRetryTimeout& = 0
End Sub

' Load information from a byte structure
Public Sub LoadInfo(Buf As Byte, pLevel&, x&)
    Level = pLevel
    Select Case Level
        Case 1
            LoadPrinterInfo1 Buf, x&
        Case 2
            LoadPrinterInfo2 Buf, x&
        Case 4
            LoadPrinterInfo4 Buf, x&
        Case 5
            LoadPrinterInfo5 Buf, x&
    End Select
End Sub
' Load from PRINTER_INFO_1
Public Sub LoadPrinterInfo1(Buf As Byte, x&)
    Dim pi As PRINTER_INFO_1
    Dim offset&
    Dim useaddr&
    offset& = x * Len(pi)
    useaddr& = agGetAddressForObject(Buf) + offset
    Call agCopyData(ByVal useaddr, pi, Len(pi))
    Flags = pi.Flags
    pDescription = agGetStringFromPointer(pi.pDescription)
    pName = agGetStringFromPointer(pi.pName)
    pComment = agGetStringFromPointer(pi.pComment)
End Sub

' Load from PRINTER_INFO_2
Public Sub LoadPrinterInfo2(Buf As Byte, x&)
    Dim pi As PRINTER_INFO_2
    Dim offset&
    Dim useaddr&
    offset& = x * Len(pi)
    useaddr& = agGetAddressForObject(Buf) + offset
    Call agCopyData(ByVal useaddr, pi, Len(pi))
    
    pServerName = agGetStringFromPointer(pi.pServerName)
    pPrinterName = agGetStringFromPointer(pi.pPrinterName)
    pShareName = agGetStringFromPointer(pi.pShareName)
    pPortName = agGetStringFromPointer(pi.pPortName)
    pDriverName = agGetStringFromPointer(pi.pDriverName)
    pComment = agGetStringFromPointer(pi.pComment)
    pLocation = agGetStringFromPointer(pi.pLocation)
    agCopyData ByVal pi.pDevMode, pDevMode, Len(pDevMode)
    agCopyData ByVal pi.pSecurityDescriptor, pSecurityDescriptor, Len(pSecurityDescriptor)
    pSepFile = agGetStringFromPointer(pi.pSepFile)
    pPrintProcessor = agGetStringFromPointer(pi.pPrintProcessor)
    pDatatype = agGetStringFromPointer(pi.pDatatype)
    pParameters = agGetStringFromPointer(pi.pParameters)
    Attributes = pi.Attributes
    Priority = pi.Priority
    DefaultPriority = pi.DefaultPriority
    StartTime = pi.StartTime
    UntilTime = pi.UntilTime
    Status = pi.Status
    cJobs = pi.cJobs
    AveragePPM = pi.AveragePPM
End Sub
' Load from PRINTER_INFO_4
Public Sub LoadPrinterInfo4(Buf As Byte, x&)
    Dim pi As PRINTER_INFO_4
    Dim offset&
    Dim useaddr&
    offset& = x * Len(pi)
    useaddr& = agGetAddressForObject(Buf) + offset
    Call agCopyData(ByVal useaddr, pi, Len(pi))
    pPrinterName = agGetStringFromPointer(pi.pPrinterName)
    pServerName = agGetStringFromPointer(pi.pServerName)
    Attributes = pi.Attributes
End Sub

Public Sub LoadPrinterInfo5(Buf As Byte, x&)
    Dim pi As PRINTER_INFO_5
    Dim offset&
    Dim useaddr&
    offset& = x * Len(pi)
    useaddr& = agGetAddressForObject(Buf) + offset
    Call agCopyData(ByVal useaddr, pi, Len(pi))
    pPrinterName = agGetStringFromPointer(pi.pPrinterName)
    pPortName = agGetStringFromPointer(pi.pPortName)
    Attributes = pi.Attributes
    DeviceNotSelectedTimeout = pi.DeviceNotSelectedTimeout
    TransmissionRetryTimeout = pi.TransmissionRetryTimeout
End Sub

