# Automatically generated by make_symbols; DO NOT EDIT!! 
#
# Perl definitions for header file winver.h
#


package winver;

use strict;

use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);

require Exporter;

@ISA = qw(Exporter);
@EXPORT = qw(
    VFFF_ISSHAREDFILE
    VFF_BUFFTOOSMALL
    VFF_CURNEDEST
    VFF_FILEINUSE
    VFT2_DRV_COMM
    VFT2_DRV_DISPLAY
    VFT2_DRV_INPUTMETHOD
    VFT2_DRV_INSTALLABLE
    VFT2_DRV_KEYBOARD
    VFT2_DRV_LANGUAGE
    VFT2_DRV_MOUSE
    VFT2_DRV_NETWORK
    VFT2_DRV_PRINTER
    VFT2_DRV_SOUND
    VFT2_DRV_SYSTEM
    VFT2_FONT_RASTER
    VFT2_FONT_TRUETYPE
    VFT2_FONT_VECTOR
    VFT2_UNKNOWN
    VFT_APP
    VFT_DLL
    VFT_DRV
    VFT_FONT
    VFT_STATIC_LIB
    VFT_UNKNOWN
    VFT_VXD
    VIFF_DONTDELETEOLD
    VIFF_FORCEINSTALL
    VIF_ACCESSVIOLATION
    VIF_BUFFTOOSMALL
    VIF_CANNOTCREATE
    VIF_CANNOTDELETE
    VIF_CANNOTDELETECUR
    VIF_CANNOTREADDST
    VIF_CANNOTREADSRC
    VIF_CANNOTRENAME
    VIF_DIFFCODEPG
    VIF_DIFFLANG
    VIF_DIFFTYPE
    VIF_FILEINUSE
    VIF_MISMATCH
    VIF_OUTOFMEMORY
    VIF_OUTOFSPACE
    VIF_SHARINGVIOLATION
    VIF_SRCOLD
    VIF_TEMPFILE
    VIF_WRITEPROT
    VOS_DOS
    VOS_DOS_WINDOWS16
    VOS_DOS_WINDOWS32
    VOS_NT
    VOS_NT_WINDOWS32
    VOS_OS216
    VOS_OS216_PM16
    VOS_OS232
    VOS_OS232_PM32
    VOS_UNKNOWN
    VOS__BASE
    VOS__PM16
    VOS__PM32
    VOS__WINDOWS16
    VOS__WINDOWS32
    VS_FFI_FILEFLAGSMASK
    VS_FFI_SIGNATURE
    VS_FFI_STRUCVERSION
    VS_FF_DEBUG
    VS_FF_INFOINFERRED
    VS_FF_PATCHED
    VS_FF_PRERELEASE
    VS_FF_PRIVATEBUILD
    VS_FF_SPECIALBUILD
    VS_FILE_INFO
    VS_USER_DEFINED
    VS_VERSION_INFO
);
@EXPORT_OK = qw();

use constant VFFF_ISSHAREDFILE => 1;
use constant VFF_BUFFTOOSMALL => 4;
use constant VFF_CURNEDEST => 1;
use constant VFF_FILEINUSE => 2;
use constant VFT2_DRV_COMM => 10;
use constant VFT2_DRV_DISPLAY => 4;
use constant VFT2_DRV_INPUTMETHOD => 11;
use constant VFT2_DRV_INSTALLABLE => 8;
use constant VFT2_DRV_KEYBOARD => 2;
use constant VFT2_DRV_LANGUAGE => 3;
use constant VFT2_DRV_MOUSE => 5;
use constant VFT2_DRV_NETWORK => 6;
use constant VFT2_DRV_PRINTER => 1;
use constant VFT2_DRV_SOUND => 9;
use constant VFT2_DRV_SYSTEM => 7;
use constant VFT2_FONT_RASTER => 1;
use constant VFT2_FONT_TRUETYPE => 3;
use constant VFT2_FONT_VECTOR => 2;
use constant VFT2_UNKNOWN => 0;
use constant VFT_APP => 1;
use constant VFT_DLL => 2;
use constant VFT_DRV => 3;
use constant VFT_FONT => 4;
use constant VFT_STATIC_LIB => 7;
use constant VFT_UNKNOWN => 0;
use constant VFT_VXD => 5;
use constant VIFF_DONTDELETEOLD => 2;
use constant VIFF_FORCEINSTALL => 1;
use constant VIF_ACCESSVIOLATION => 512;
use constant VIF_BUFFTOOSMALL => 262144;
use constant VIF_CANNOTCREATE => 2048;
use constant VIF_CANNOTDELETE => 4096;
use constant VIF_CANNOTDELETECUR => 16384;
use constant VIF_CANNOTREADDST => 131072;
use constant VIF_CANNOTREADSRC => 65536;
use constant VIF_CANNOTRENAME => 8192;
use constant VIF_DIFFCODEPG => 16;
use constant VIF_DIFFLANG => 8;
use constant VIF_DIFFTYPE => 32;
use constant VIF_FILEINUSE => 128;
use constant VIF_MISMATCH => 2;
use constant VIF_OUTOFMEMORY => 32768;
use constant VIF_OUTOFSPACE => 256;
use constant VIF_SHARINGVIOLATION => 1024;
use constant VIF_SRCOLD => 4;
use constant VIF_TEMPFILE => 1;
use constant VIF_WRITEPROT => 64;
use constant VOS_DOS => 65536;
use constant VOS_DOS_WINDOWS16 => 65537;
use constant VOS_DOS_WINDOWS32 => 65540;
use constant VOS_NT => 262144;
use constant VOS_NT_WINDOWS32 => 262148;
use constant VOS_OS216 => 131072;
use constant VOS_OS216_PM16 => 131074;
use constant VOS_OS232 => 196608;
use constant VOS_OS232_PM32 => 196611;
use constant VOS_UNKNOWN => 0;
use constant VOS__BASE => 0;
use constant VOS__PM16 => 2;
use constant VOS__PM32 => 3;
use constant VOS__WINDOWS16 => 1;
use constant VOS__WINDOWS32 => 4;
use constant VS_FFI_FILEFLAGSMASK => 63;
use constant VS_FFI_SIGNATURE => -17890115;
use constant VS_FFI_STRUCVERSION => 65536;
use constant VS_FF_DEBUG => 1;
use constant VS_FF_INFOINFERRED => 16;
use constant VS_FF_PATCHED => 4;
use constant VS_FF_PRERELEASE => 2;
use constant VS_FF_PRIVATEBUILD => 8;
use constant VS_FF_SPECIALBUILD => 32;
use constant VS_FILE_INFO => 16;
use constant VS_USER_DEFINED => 100;
use constant VS_VERSION_INFO => 1;

1;
