package winspool_drv;

use strict;

require Exporter;

use wine;
use vars qw(@ISA @EXPORT @EXPORT_OK);

@ISA = qw(Exporter);
@EXPORT = qw();
@EXPORT_OK = qw();

my $module_declarations = {
    "AddFormA" => ["long",  ["long", "long", "ptr"]],
    "AddFormW" => ["long",  ["long", "long", "ptr"]],
    "AddJobA" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
    "AddJobW" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
    "AddMonitorA" => ["long",  ["str", "long", "ptr"]],
    "AddPrinterA" => ["long",  ["str", "long", "ptr"]],
    "AddPrinterDriverA" => ["long",  ["str", "long", "ptr"]],
    "AddPrinterDriverW" => ["long",  ["wstr", "long", "ptr"]],
    "AddPrinterW" => ["long",  ["wstr", "long", "ptr"]],
    "ClosePrinter" => ["long",  ["long"]],
    "DeleteFormA" => ["long",  ["long", "str"]],
    "DeleteFormW" => ["long",  ["long", "wstr"]],
    "DeleteMonitorA" => ["long",  ["str", "str", "str"]],
    "DeletePortA" => ["long",  ["str", "long", "str"]],
    "DeletePrinter" => ["long",  ["long"]],
    "DeletePrinterDriverA" => ["long",  ["str", "str", "str"]],
    "DeviceCapabilities" => ["long",  ["str", "str", "long", "str", "ptr"]],
    "DeviceCapabilitiesA" => ["long",  ["str", "str", "long", "str", "ptr"]],
    "DeviceCapabilitiesW" => ["long",  ["wstr", "wstr", "long", "wstr", "ptr"]],
    "DocumentPropertiesA" => ["long",  ["long", "long", "str", "ptr", "ptr", "long"]],
    "DocumentPropertiesW" => ["long",  ["long", "long", "wstr", "ptr", "ptr", "long"]],
    "EnumJobsA" => ["long",  ["long", "long", "long", "long", "ptr", "long", "ptr", "ptr"]],
    "EnumJobsW" => ["long",  ["long", "long", "long", "long", "ptr", "long", "ptr", "ptr"]],
    "EnumPortsA" => ["long",  ["str", "long", "ptr", "long", "ptr", "ptr"]],
    "EnumPrinterDataExA" => ["long",  ["long", "str", "ptr", "long", "ptr", "ptr"]],
    "EnumPrinterDataExW" => ["long",  ["long", "wstr", "ptr", "long", "ptr", "ptr"]],
    "EnumPrinterDriversA" => ["long",  ["str", "str", "long", "ptr", "long", "ptr", "ptr"]],
    "EnumPrinterDriversW" => ["long",  ["wstr", "wstr", "long", "ptr", "long", "ptr", "ptr"]],
    "EnumPrintersA" => ["long",  ["long", "str", "long", "ptr", "long", "ptr", "ptr"]],
    "EnumPrintersW" => ["long",  ["long", "wstr", "long", "ptr", "long", "ptr", "ptr"]],
    "GetFormA" => ["long",  ["long", "str", "long", "ptr", "long", "ptr"]],
    "GetFormW" => ["long",  ["long", "wstr", "long", "ptr", "long", "ptr"]],
    "GetPrinterA" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
    "GetPrinterDataA" => ["long",  ["long", "str", "ptr", "ptr", "long", "ptr"]],
    "GetPrinterDataExA" => ["long",  ["long", "str", "str", "ptr", "ptr", "long", "ptr"]],
    "GetPrinterDataExW" => ["long",  ["long", "wstr", "wstr", "ptr", "ptr", "long", "ptr"]],
    "GetPrinterDataW" => ["long",  ["long", "wstr", "ptr", "ptr", "long", "ptr"]],
    "GetPrinterDriverA" => ["long",  ["long", "str", "long", "ptr", "long", "ptr"]],
    "GetPrinterDriverDirectoryA" => ["long",  ["str", "str", "long", "ptr", "long", "ptr"]],
    "GetPrinterDriverDirectoryW" => ["long",  ["wstr", "wstr", "long", "ptr", "long", "ptr"]],
    "GetPrinterDriverW" => ["long",  ["long", "wstr", "long", "ptr", "long", "ptr"]],
    "GetPrinterW" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
    "OpenPrinterA" => ["long",  ["str", "ptr", "ptr"]],
    "OpenPrinterW" => ["long",  ["wstr", "ptr", "ptr"]],
    "PrinterProperties" => ["long",  ["long", "long"]],
    "ReadPrinter" => ["long",  ["long", "ptr", "long", "ptr"]],
    "ResetPrinterA" => ["long",  ["long", "ptr"]],
    "ResetPrinterW" => ["long",  ["long", "ptr"]],
    "SetFormA" => ["long",  ["long", "str", "long", "ptr"]],
    "SetFormW" => ["long",  ["long", "wstr", "long", "ptr"]],
    "SetJobA" => ["long",  ["long", "long", "long", "ptr", "long"]],
    "SetJobW" => ["long",  ["long", "long", "long", "ptr", "long"]],
    "SetPrinterA" => ["long",  ["long", "long", "ptr", "long"]],
    "SetPrinterDataA" => ["long",  ["long", "str", "long", "ptr", "long"]],
    "SetPrinterDataExA" => ["long",  ["long", "str", "str", "long", "ptr", "long"]],
    "SetPrinterDataExW" => ["long",  ["long", "wstr", "wstr", "long", "ptr", "long"]],
    "SetPrinterDataW" => ["long",  ["long", "wstr", "long", "ptr", "long"]],
    "SetPrinterW" => ["long",  ["long", "long", "ptr", "long"]],
    "WritePrinter" => ["long",  ["long", "ptr", "long", "ptr"]]
};

&wine::declare("winspool.drv",%$module_declarations);
push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
1;
