Update of /cvsroot/perl-win32-gui/Win32-GUI/Win32-GUI-DropFiles In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2364/Win32-GUI-DropFiles Added Files: DropFiles.pm DropFiles.xs DropFilesRC.PL Makefile Makefile.PL README TYPEMAP ppport.h Log Message: Add Win32::GUI::DropFiles --- NEW FILE: DropFiles.xs --- #define WIN32_MEAN_AND_LEAN /* XS code for Win32::GUI::DropFiles * $Id: DropFiles.xs,v 1.1 2006/04/25 21:38:18 robertemay Exp $ * (c) Robert May, 2006 * Released under the same terms as Perl */ #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "ppport.h" #include "Windows.h" #include "shellapi.h" /* void newSVpvnW(SV* s, WCHAR* w, UINT c) * - s [OUT] pointer to SV. Will be set to point to a newly created SV, * with ref count 1. * - w [IN] pointer to WCHAR buffer. * - c [IN] number of characters (NOT bytes) to be copied from WCHAR. Do * not include any NULL termination. If c = -1, then length will be * calculated, assuming w is NULL terminated. */ /* TODO: This macro probably better written as a function that returns the * pointer to the SV, and it is more 'perl like' if c==0 indicates the length * should be calculated. It would be good to get rid of the duplicated SvPVX() calls. */ #define newSVpvnW(s, w, c) \ { UINT b = WideCharToMultiByte(CP_UTF8, 0, w, c, NULL, 0, NULL, NULL); \ s = newSV(b); SvPOK_on(s); SvUTF8_on(s); SvCUR_set(s,b); \ WideCharToMultiByte(CP_UTF8, 0, w, c, SvPVX(s), b, NULL, NULL); \ *(SvPVX(s) + b) = 0; sv_utf8_downgrade(s, 1); } /* BOOL INVALID_HANDLE(HDROP h) * Attempt to determine if a HDROP handle is valid * Returns TRUE if handle is invalid * Returns FALSE if handle is valid * TODO: can we do better than this? */ BOOL INVALID_HANDLE(HDROP h) { if(GlobalLock((HGLOBAL)h)) { GlobalUnlock((HGLOBAL)h); return 0; } return 1; } #ifndef W32G_NO_WIN9X /* BOOL IsWin9X() * Returns TRUE if OS Version is Win95/98/ME * Returns FLASE if OS Version is NT/2K/XP/2003 or higher */ /* TODO: Better to cache the value to prevent the overhead of * GetVersion() on each call. Eventually this needs extracting * somewhere central, so that we don't have repeat implementations * all over the place. ??Can we efficiently access the Win32::IsWin95 * function?? */ BOOL IsWin9X() { return (GetVersion() & 0x80000000); } #endif MODULE = Win32::GUI::DropFiles PACKAGE = Win32::GUI::DropFiles PROTOTYPES: ENABLE ########################################################################## # (@)WIN32API:DragQueryFile(HDROP, [ITEM]) # See Dropfiles.pm for documentation void DragQueryFile(handle, ...) HDROP handle PREINIT: UINT count, item, cch; SV* sv; PPCODE: /* Shell32.dll crashes if we pass an invalid handle * to DragQueryFile, so ensure we have one */ if(INVALID_HANDLE(handle)) { SetLastError(ERROR_INVALID_HANDLE); /* set $^E */ errno = EINVAL; /* set $! */ XSRETURN_UNDEF; /* and return undef */ } #ifndef W32G_NO_WIN9X if(IsWin9X()) count = DragQueryFileA(handle, 0xFFFFFFFF, NULL, 0); else #endif count = DragQueryFileW(handle, 0xFFFFFFFF, NULL, 0); if(items == 1) { mXPUSHu(count); XSRETURN(1); } else if (items == 2) { item = SvIV(ST(1)); if(item < count) { /* item is in range */ #ifndef W32G_NO_WIN9X if(IsWin9X()) { CHAR buffer[MAX_PATH]; cch = DragQueryFileA(handle, item, buffer, MAX_PATH); sv = newSVpvn(buffer,cch); } else { #endif WCHAR wbuffer[MAX_PATH]; cch = DragQueryFileW(handle, item, wbuffer, MAX_PATH); newSVpvnW(sv, wbuffer, cch); #ifndef W32G_NO_WIN9X } #endif XPUSHs(sv_2mortal(sv)); XSRETURN(1); } else { /* item is out of range */ SetLastError(ERROR_INVALID_INDEX); /* set $^E */ errno = EINVAL; /* set $! */ XSRETURN_UNDEF; /* and return undef */ } } else { croak("Usage: DragQueryHandle(handle);\n or: DragQueryHandle(handle, index);"); } ########################################################################## # (@)WIN32API:DragQueryPoint(HDROP) # See Dropfiles.pm for documentation void DragQueryPoint(handle) HDROP handle PREINIT: POINT pt; UV client; PPCODE: /* DragQueryPoint returns garbage if passed * an invalid handle, so ensure we have one */ if(INVALID_HANDLE(handle)) { SetLastError(ERROR_INVALID_HANDLE); /* set $^E */ errno = EINVAL; /* set $! */ XSRETURN_UNDEF; /* and return undef */ } client = (UV)DragQueryPoint(handle, &pt); mXPUSHi(pt.x); mXPUSHi(pt.y); mXPUSHu(client); XSRETURN(3); ########################################################################## # (@)WIN32API:DragFinish(HDROP) # See Dropfiles.pm for documentation void DragFinish(handle) HDROP handle --- NEW FILE: DropFilesRC.PL --- #!perl -w use strict; use warnings; use ExtUtils::MakeMaker; # $Id: DropFilesRC.PL,v 1.1 2006/04/25 21:38:18 robertemay Exp $ # perl script to produce the RC file for # Win32::GUI::DropFiles: create Resource # file with a VERSIONINFO section # The variables: my %info = ( Version => MM->parse_version('DropFiles.pm'), Dllname => 'DropFiles.dll', Years => '2006', Win32GUIVersion => MM->parse_version('../GUI.pm'), ); # Open the target file if ( @ARGV > 0 ) { my $file = $ARGV[0]; open(my $fh, '>', $file) or die qq(Failed to open '$file': $!); select $fh; } { my $fileVersion = $info{Version}; $fileVersion .= "_00" unless $fileVersion =~ m/_/; $info{FileVersion} = sprintf("%02d,%02d,%02d,00", $fileVersion =~ m/^(.*)\.([^_]*)_?(.*)$/); my $prodVersion = $info{Win32GUIVersion}; $prodVersion .= "_00" unless $prodVersion =~ m/_/; $info{ProductVersion} = sprintf("%02d,%02d,%02d,00", $prodVersion =~ m/^(.*)\.([^_]*)_?(.*)$/); } print <<"__RC"; #include "Winver.h" 1 VERSIONINFO FILEVERSION $info{FileVersion} PRODUCTVERSION $info{ProductVersion} FILEOS VOS__WINDOWS32 FILETYPE VFT_DLL { BLOCK "StringFileInfo" { BLOCK "040904E4" { VALUE "Comments" , "Win32::GUI::DropFiles, part of the perl Win32::GUI module." VALUE "CompanyName" , "perl-win32-gui.sourceforge.net" VALUE "FileDescription" , "Win32::GUI::DropFiles perl extension" VALUE "FileVersion" , "$info{Version}" VALUE "InternalName" , "$info{Dllname}" VALUE "LegalCopyright" , "Copyright © Robert May $info{Years}" VALUE "LegalTrademarks" , "GNU and Artistic licences" VALUE "OriginalFilename" , "$info{Dllname}" VALUE "ProductName" , "Win32::GUI perl extension" VALUE "ProductVersion" , "$info{Win32GUIVersion}" } } BLOCK "VarFileInfo" { VALUE "Translation", 0x0409, 0x04E4 } } __RC exit(0); __END__ --- NEW FILE: Makefile.PL --- #!perl -w use strict; use warnings; # Makefile.PL for Win32::GUI::DropFiles # $Id: Makefile.PL,v 1.1 2006/04/25 21:38:18 robertemay Exp $ use 5.006; use Config; use ExtUtils::MakeMaker; my %config = ( NAME => 'Win32::GUI::DropFiles', VERSION_FROM => 'DropFiles.pm', ABSTRACT_FROM => 'DropFiles.pm', AUTHOR => 'Robert May <rob...@us...>', PREREQ_PM => { 'Win32::GUI' => 1.04 }, #DEFINE => '-DW32G_no_WIN9X', PL_FILES => {'DropFilesRC.PL' => '$(BASEEXT).rc', }, OBJECT => '$(BASEEXT)$(OBJ_EXT) $(BASEEXT).res', macro => { RC => 'rc.exe', RCFLAGS => '', INST_DEMODIR => '$(INST_LIB)/Win32/GUI/demos/$(BASEEXT)', DEMOS => 'demos/DropFilesDemo.pl' }, clean => {FILES => '*.rc *.res', }, ); # if building using gcc (MinGW or cygwin) use windres # as the resource compiler if($Config{cc} =~ /gcc/i) { $config{macro}->{RC} = 'windres'; $config{macro}->{RCFLAGS} = '-O coff -o $*.res'; } # if building as part of the Win32::GUI core, then remove # the pre-req of Win32::GUI, as we may not have it until # we finish the build. { no warnings 'once'; delete $config{PREREQ_PM}->{'Win32::GUI'} if $main::W32G_CORE; } WriteMakefile(%config); package MY; # Add rule for .rc to .res conversion # Add rules to install demo scripts sub postamble { return <<'__POSTAMBLE'; .rc.res: $(RC) $(RCFLAGS) $< pure_all :: demo_to_blib $(NOECHO) $(NOOP) demo_to_blib: $(DEMOS) $(NOECHO) $(MKPATH) $(INST_DEMODIR) $(CP) $? $(INST_DEMODIR) $(NOECHO) $(TOUCH) demo_to_blib clean :: -$(RM_F) demo_to_blib __POSTAMBLE } --- NEW FILE: DropFiles.pm --- package Win32::GUI::DropFiles; # $Id: DropFiles.pm,v 1.1 2006/04/25 21:38:18 robertemay Exp $ # Win32::GUI::DropFiles, part of the Win32::GUI package # (c) Robert May, 2006 # released under the same terms as Perl. use 5.006; use strict; use warnings; use Win32::GUI 1.03_02,''; # Check Win32:GUI version, ensure import not called our $VERSION = '0.01'; require XSLoader; XSLoader::load('Win32::GUI::DropFiles', $VERSION); sub DESTROY { my $self = shift; $self->DragFinish(); } sub GetDroppedFiles { # void context - optional warning and do nothing if(!defined wantarray) { if(warnings::enabled('void')) { require Carp; Carp::carp('Useless use of GetDroppedFiles in void context'); } return; } my $self = shift; my $count = $self->DragQueryFile(); # scalar context - return number of files dropped return $count unless wantarray; my @files = (); for my $item (0..$count-1) { push @files, $self->DragQueryFile($item); } # list context - return list of files return(@files); } sub GetDroppedFile { # void context - optional warning and do nothing if(!defined wantarray) { if(warnings::enabled('void')) { require Carp; Carp::carp('Useless use of GetDroppedFile in void context'); } return; } my ($self, $item) = @_; $item ||= 0; # scalar context - return file name return $self->DragQueryFile($item); } sub GetDropPos { # void context - optional warning and do nothing if(!defined wantarray) { if(warnings::enabled('void')) { require Carp; Carp::carp('Useless use of GetDropPos in void context'); } return; } my $self = shift; my ($x, $y, $client) = $self->DragQueryPoint(); # scalar context - return boolean for whether drop is in # client area or not return $client unless wantarray; # list context - return x-pos, y-pos and boolean for # client area or not. return $x, $y, $client; } 1; # End of DropFiles.pm __END__ =head1 NAME Win32::GUI::DropFiles - Extension to Win32::GUI for shell Drag&Drop integration =head1 SYNOPSIS use Win32::GUI; use Win32::GUI::DropFiles; # Create droppable window: my $win = Win32::GUI::Window->new( -name => 'win', ... -acceptfiles => 1, -onDropFiles => \&dropfiles_callback, ... ); # Change the drop state of a window $win->AcceptFiles(1); $win->AcceptFiles(0); # In the DropFiles callback sub win_DropFiles { my ($self, $dropObj) = @_; # Get the number of dropped files my $count = $dropObj->GetDroppedFiles(); # Get a list of the dropped file names my @files = $dropObj->GetDroppedFiles(); # Get a particular file name (0 based index) my $file = $dropObj->GetDroppedFile($index); # determine if the drop happened in the client or # non-client area of the window my $clientarea = $dropObj->GetDropPos(); # get the mouse co-ordinates of the drop point, # in client co-ordinates my ($x, $y) = $dropObj->GetDropPos(); # get the drop point and (non-)client area information my ($x, $y, $client) = $dropObj->GetDropPos(); return 0; } =head1 DESCRIPTION Win32::GUI::DropFiles provides integration with the windows shell, allowing files to be dragged from the shell (e.g. explorer.exe), dropped onto a Win32::GUI window/control, and the path and filename of the dropped files to be retrieved. In order for a window to become a 'drop target' it must be created with the L<Win32::GUI::Reference::Options::acceptfiles|-acceptfiles> option set, or have called its L<Win32::GUI::Reference::Methods::AcceptFiles|AcceptFiles()> method. Once the window has been correctly initialised, then dropping a dragged file on the window results in a L<Win32::GUI::Reference::Events::DropFiles|DropFiles> event being triggered. The parameter to the event callback function is a Win32::GUI::DropFiles object that can be used to retrieve the names and paths of the dropped files. =head1 Drop Object Methods This section documents the public API for Win32::GUI::DropFiles objects. =head2 Constructor The constructor is not public: Win32::GUI creates Win32::GUI::DropFiles object when necessary, to pass to the DropFiles event handler subroutine. =head2 GetDroppedFiles my $count = $dropObj->GetDroppedFiles(); my @files = $dropObj->GetDroppedFiles(); In scalar context returns the number of files dropped. In list context returns a list of fully qualified path/filename for each dropped file. =head2 GetDroppedFile my $file = $dropObj->GetDroppedFile($index); returns the fully qualified path/filename for the file referenced by the zero-based C<index>. If C<index> is out of range, returns undef and sets C<$!> and C<$^E>. =head2 GetDropPos my $client = $dropObj->GetDropPos(); my ($x, $y, $client) = $dropObj->GetDropPos(); In scalar context returns a flag indicating whether the mouse was in the client or non-client area of the window when the files were dropped. In list context returns the x and y co-ordinates of the mouse when the files were dropped (in client co-ordinates), as well as a flag indicating whether the mouse was in the client or non-client area of the window. =head2 Destructor The destructor is called automatically when the object goes out of scope, and releases resources used by the system to store the filnames. Typically the object goes out of scope at the end of the DropFiles callback. Care should be taken to ensure that if a reference is taken to the object that does not go out of scope at that time, that it is eventually released, otherwise a memory leak will occur. =head1 Win32 API functions This section documents the Win32 API wrappers implemented by Win32::GUI::DropFiles. Although these APIs are available, their use is not recommended - the public Object Methods should provide better access to these APIs. See MSDN (L<http://msdn.microsoft.com/> for further details of the Win32 API functions. =head2 DragQueryFile Win32::GUI::DropFiles::DragQueryFile($dropHandle, [$item]); C<dropHandle> is a win32 C<HDROP> handle. C<item> is a zero-based index to the filename to be retrieved. Returns the number of files dropped if C<item> is omitted. Returns the filenmame if C<item> is provided. Returns undef and sets C<$!> and C<$^E> on error. =head2 DragQueryPoint Win32::GUI::DropFiles::DragQueryPoint($dropHandle); C<dropHandle> is a win32 C<HDROP> handle. Returns a 3 element list of the x-position and y-position (in client co-ordinates) and a flag that indicates whether the drop happened in the client or non-client area of the window. =head2 DragFinish Win32::GUI::DropFiles::DragFinish($dropHandle); C<dropHandle> is a win32 C<HDROP> handle. Releases the resources and invalidates C<dropHandle>. Does not return any value. =head1 Unicode filenmame support Supports unicode filenames under WinNT, Win2k, WinXP and higher. =head1 Backwards compatibility with Win32::GUI::DragDrop The GUI Loft includes a Win32::GUI::DragDrop module that exposes similar functionality. If you want to continue to use that module, then ensure that Win32::GUI::DropFiles is not used anywhere in your program (even by other modules that you use). Loading Win32::GUI::DropFiles changes the DropFiles event callback signature, and will result in Win32::GUI::DragDrop failing. It is recommended to upgrade to Win32::GUI::DropFiles. =head1 SEE ALSO MSDN L<http://msdn.microsoft.com> for more information on DragAcceptFiles, DragQueryFiles, DragQueryPos, DragFinish, WS_EX_ACCEPTFILES, WM_DROPFILES L<Win32::GUI|Win32::GUI> =head1 SUPPORT Homepage: L<http://perl-win32-gui.sourceforge.net/>. For further support join the users mailing list (C<per...@li...>) from the website at L<http://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users>. There is a searchable list archive at L<http://sourceforge.net/mail/?group_id=16572> =head1 AUTHORS Robert May, E<lt>rob...@us...<gt> Reini Urban, E<lt>ru...@xr...<gt> =head1 COPYRIGHT AND LICENSE Copyright (C) 2006 by Robert May This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut --- NEW FILE: Makefile --- # This Makefile is for the Win32::GUI::DropFiles extension to perl. # # It was generated automatically by MakeMaker version # 6.17 (Revision: 1.133) from the contents of # Makefile.PL. Don't edit this file, edit Makefile.PL instead. # # ANY CHANGES MADE HERE WILL BE LOST! # # MakeMaker ARGV: () # # MakeMaker Parameters: # ABSTRACT_FROM => q[DropFiles.pm] # AUTHOR => q[Robert May <rob...@us...>] # NAME => q[Win32::GUI::DropFiles] # OBJECT => q[$(BASEEXT)$(OBJ_EXT) $(BASEEXT).res] # PL_FILES => { DropFilesRC.PL=>q[$(BASEEXT).rc] } # PREREQ_PM => { } # VERSION_FROM => q[DropFiles.pm] # clean => { FILES=>q[*.rc *.res] } # macro => { DEMOS=>q[demos/DropFilesDemo.pl], INST_DEMODIR=>q[$(INST_LIB)/Win32/GUI/demos/$(BASEEXT)], RC=>q[rc.exe], RCFLAGS=>q[] } # --- MakeMaker post_initialize section: # --- MakeMaker const_config section: # These definitions are from config.sh (via C:/Perl/Perl587/lib/Config.pm) # They may have been overridden via Makefile.PL or on the command line AR = lib CC = cl CCCDLFLAGS = CCDLFLAGS = DLEXT = dll DLSRC = dl_win32.xs LD = link LDDLFLAGS = -dll -nologo -nodefaultlib -debug -opt:ref,icf -libpath:"C:\Perl\Perl587\lib\CORE" -machine:x86 LDFLAGS = -nologo -nodefaultlib -debug -opt:ref,icf -libpath:"C:\Perl\Perl587\lib\CORE" -machine:x86 LIBC = msvcrt.lib LIB_EXT = .lib OBJ_EXT = .obj OSNAME = MSWin32 OSVERS = 5.0 RANLIB = rem SITELIBEXP = C:\Perl\Perl587\site\lib SITEARCHEXP = C:\Perl\Perl587\site\lib SO = dll EXE_EXT = .exe FULL_AR = VENDORARCHEXP = VENDORLIBEXP = # --- MakeMaker constants section: AR_STATIC_ARGS = cr DIRFILESEP = ^\ NAME = Win32::GUI::DropFiles NAME_SYM = Win32_GUI_DropFiles VERSION = 0.01 VERSION_MACRO = VERSION VERSION_SYM = 0_01 DEFINE_VERSION = -D$(VERSION_MACRO)=\"$(VERSION)\" XS_VERSION = 0.01 XS_VERSION_MACRO = XS_VERSION XS_DEFINE_VERSION = -D$(XS_VERSION_MACRO)=\"$(XS_VERSION)\" INST_ARCHLIB = ..\blib\arch INST_SCRIPT = ..\blib\script INST_BIN = ..\blib\bin INST_LIB = ..\blib\lib INST_MAN1DIR = ..\blib\man1 INST_MAN3DIR = ..\blib\man3 MAN1EXT = 1 MAN3EXT = 3 INSTALLDIRS = site DESTDIR = PREFIX = PERLPREFIX = C:\Perl\Perl587 SITEPREFIX = C:\Perl\Perl587\site VENDORPREFIX = INSTALLPRIVLIB = $(PERLPREFIX)\lib DESTINSTALLPRIVLIB = $(DESTDIR)$(INSTALLPRIVLIB) INSTALLSITELIB = $(SITEPREFIX)\lib DESTINSTALLSITELIB = $(DESTDIR)$(INSTALLSITELIB) INSTALLVENDORLIB = DESTINSTALLVENDORLIB = $(DESTDIR)$(INSTALLVENDORLIB) INSTALLARCHLIB = $(PERLPREFIX)\lib DESTINSTALLARCHLIB = $(DESTDIR)$(INSTALLARCHLIB) INSTALLSITEARCH = $(SITEPREFIX)\lib DESTINSTALLSITEARCH = $(DESTDIR)$(INSTALLSITEARCH) INSTALLVENDORARCH = DESTINSTALLVENDORARCH = $(DESTDIR)$(INSTALLVENDORARCH) INSTALLBIN = $(PERLPREFIX)\bin DESTINSTALLBIN = $(DESTDIR)$(INSTALLBIN) INSTALLSITEBIN = C:\Perl\Perl587\bin DESTINSTALLSITEBIN = $(DESTDIR)$(INSTALLSITEBIN) INSTALLVENDORBIN = DESTINSTALLVENDORBIN = $(DESTDIR)$(INSTALLVENDORBIN) INSTALLSCRIPT = $(PERLPREFIX)\bin DESTINSTALLSCRIPT = $(DESTDIR)$(INSTALLSCRIPT) INSTALLMAN1DIR = $(PERLPREFIX)\man\man1 DESTINSTALLMAN1DIR = $(DESTDIR)$(INSTALLMAN1DIR) INSTALLSITEMAN1DIR = $(SITEPREFIX)\man\man1 DESTINSTALLSITEMAN1DIR = $(DESTDIR)$(INSTALLSITEMAN1DIR) INSTALLVENDORMAN1DIR = DESTINSTALLVENDORMAN1DIR = $(DESTDIR)$(INSTALLVENDORMAN1DIR) INSTALLMAN3DIR = $(PERLPREFIX)\man\man3 DESTINSTALLMAN3DIR = $(DESTDIR)$(INSTALLMAN3DIR) INSTALLSITEMAN3DIR = $(SITEPREFIX)\man\man3 DESTINSTALLSITEMAN3DIR = $(DESTDIR)$(INSTALLSITEMAN3DIR) INSTALLVENDORMAN3DIR = DESTINSTALLVENDORMAN3DIR = $(DESTDIR)$(INSTALLVENDORMAN3DIR) PERL_LIB = C:\Perl\Perl587\lib PERL_ARCHLIB = C:\Perl\Perl587\lib LIBPERL_A = libperl.lib FIRST_MAKEFILE = Makefile MAKEFILE_OLD = $(FIRST_MAKEFILE).old MAKE_APERL_FILE = $(FIRST_MAKEFILE).aperl PERLMAINCC = $(CC) PERL_INC = C:\Perl\Perl587\lib\CORE PERL = C:\Perl\Perl587\bin\perl.exe FULLPERL = C:\Perl\Perl587\bin\perl.exe ABSPERL = $(PERL) PERLRUN = $(PERL) FULLPERLRUN = $(FULLPERL) ABSPERLRUN = $(ABSPERL) PERLRUNINST = $(PERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" FULLPERLRUNINST = $(FULLPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" ABSPERLRUNINST = $(ABSPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" PERL_CORE = 0 PERM_RW = 644 PERM_RWX = 755 MAKEMAKER = C:/Perl/Perl587/lib/ExtUtils/MakeMaker.pm MM_VERSION = 6.17 MM_REVISION = 1.133 # FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle). # BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle) # PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar) # DLBASE = Basename part of dynamic library. May be just equal BASEEXT. FULLEXT = Win32\GUI\DropFiles BASEEXT = DropFiles PARENT_NAME = Win32::GUI DLBASE = $(BASEEXT) VERSION_FROM = DropFiles.pm OBJECT = $(BASEEXT)$(OBJ_EXT) $(BASEEXT).res LDFROM = $(OBJECT) LINKTYPE = dynamic # Handy lists of source code files: XS_FILES = DropFiles.xs C_FILES = DropFiles.c O_FILES = DropFiles.obj H_FILES = ppport.h MAN1PODS = MAN3PODS = DropFiles.pm # Where is the Config information that we are using/depend on CONFIGDEP = $(PERL_ARCHLIB)$(DIRFILESEP)Config.pm $(PERL_INC)$(DIRFILESEP)config.h # Where to build things INST_LIBDIR = $(INST_LIB)\Win32\GUI INST_ARCHLIBDIR = $(INST_ARCHLIB)\Win32\GUI INST_AUTODIR = $(INST_LIB)\auto\$(FULLEXT) INST_ARCHAUTODIR = $(INST_ARCHLIB)\auto\$(FULLEXT) INST_STATIC = $(INST_ARCHAUTODIR)\$(BASEEXT)$(LIB_EXT) INST_DYNAMIC = $(INST_ARCHAUTODIR)\$(DLBASE).$(DLEXT) INST_BOOT = $(INST_ARCHAUTODIR)\$(BASEEXT).bs # Extra linker info EXPORT_LIST = $(BASEEXT).def PERL_ARCHIVE = $(PERL_INC)\perl58.lib PERL_ARCHIVE_AFTER = TO_INST_PM = DropFiles.pm PM_TO_BLIB = DropFiles.pm \ $(INST_LIB)\Win32\GUI\DropFiles.pm # --- MakeMaker platform_constants section: MM_Win32_VERSION = 1.09 # --- MakeMaker tool_autosplit section: # Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto AUTOSPLITFILE = $(PERLRUN) -e "use AutoSplit; autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1)" # --- MakeMaker tool_xsubpp section: XSUBPPDIR = C:\Perl\Perl587\lib\ExtUtils XSUBPP = $(XSUBPPDIR)/xsubpp XSPROTOARG = XSUBPPDEPS = C:\Perl\Perl587\lib\ExtUtils\typemap typemap $(XSUBPP) XSUBPPARGS = -typemap C:\Perl\Perl587\lib\ExtUtils\typemap -typemap typemap XSUBPP_EXTRA_ARGS = # --- MakeMaker tools_other section: CHMOD = $(PERLRUN) -MExtUtils::Command -e chmod CP = $(PERLRUN) -MExtUtils::Command -e cp MV = $(PERLRUN) -MExtUtils::Command -e mv NOOP = rem NOECHO = @ RM_F = $(PERLRUN) -MExtUtils::Command -e rm_f RM_RF = $(PERLRUN) -MExtUtils::Command -e rm_rf TEST_F = $(PERLRUN) -MExtUtils::Command -e test_f TOUCH = $(PERLRUN) -MExtUtils::Command -e touch UMASK_NULL = umask 0 DEV_NULL = > NUL MKPATH = $(PERLRUN) "-MExtUtils::Command" -e mkpath EQUALIZE_TIMESTAMP = $(PERLRUN) "-MExtUtils::Command" -e eqtime ECHO = $(PERLRUN) -l -e "print qq{@ARGV}" ECHO_N = $(PERLRUN) -e "print qq{@ARGV}" UNINST = 0 VERBINST = 0 MOD_INSTALL = $(PERLRUN) -MExtUtils::Install -e "install({@ARGV}, '$(VERBINST)', 0, '$(UNINST)');" DOC_INSTALL = $(PERLRUN) "-MExtUtils::Command::MM" -e perllocal_install UNINSTALL = $(PERLRUN) "-MExtUtils::Command::MM" -e uninstall WARN_IF_OLD_PACKLIST = $(PERLRUN) "-MExtUtils::Command::MM" -e warn_if_old_packlist # --- MakeMaker makemakerdflt section: makemakerdflt: all $(NOECHO) $(NOOP) # --- MakeMaker dist section skipped. # --- MakeMaker macro section: DEMOS = demos/DropFilesDemo.pl INST_DEMODIR = $(INST_LIB)/Win32/GUI/demos/$(BASEEXT) RC = rc.exe RCFLAGS = # --- MakeMaker depend section: # --- MakeMaker cflags section: CCFLAGS = -nologo -Gf -W3 -MD -Zi -DNDEBUG -O1 -DWIN32 -D_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT -DBUILT_BY_ACTIVESTATE -DNO_HASH_SEED -DUSE_SITECUSTOMIZE -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -DPERL_MSVCRT_READFIX OPTIMIZE = -MD -Zi -DNDEBUG -O1 PERLTYPE = MPOLLUTE = # --- MakeMaker const_loadlibs section: # Win32::GUI::DropFiles might depend on some other libraries: # See ExtUtils::Liblist for details # LDLOADLIBS = oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib msvcrt.lib LD_RUN_PATH = # --- MakeMaker const_cccmd section: CCCMD = $(CC) -c $(PASTHRU_INC) $(INC) \ $(CCFLAGS) $(OPTIMIZE) \ $(PERLTYPE) $(MPOLLUTE) $(DEFINE_VERSION) \ $(XS_DEFINE_VERSION) # --- MakeMaker post_constants section: # --- MakeMaker pasthru section: PASTHRU = -nologo # --- MakeMaker special_targets section: .SUFFIXES: .xs .c .C .cpp .i .s .cxx .cc $(OBJ_EXT) .PHONY: all config static dynamic test linkext manifest # --- MakeMaker c_o section: .c.i: cl -nologo -E -c $(PASTHRU_INC) $(INC) \ $(CCFLAGS) $(OPTIMIZE) \ $(PERLTYPE) $(MPOLLUTE) $(DEFINE_VERSION) \ $(XS_DEFINE_VERSION) $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) $*.c > $*.i .c.s: $(CCCMD) -S $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) $*.c .c$(OBJ_EXT): $(CCCMD) $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) $*.c .cpp$(OBJ_EXT): $(CCCMD) $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) $*.cpp .cxx$(OBJ_EXT): $(CCCMD) $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) $*.cxx .cc$(OBJ_EXT): $(CCCMD) $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) $*.cc # --- MakeMaker xs_c section: .xs.c: $(PERLRUN) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.c # --- MakeMaker xs_o section: .xs$(OBJ_EXT): $(PERLRUN) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.c $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.c # --- MakeMaker top_targets section: all :: pure_all $(NOECHO) $(NOOP) pure_all :: config pm_to_blib subdirs linkext $(NOECHO) $(NOOP) subdirs :: $(MYEXTLIB) $(NOECHO) $(NOOP) config :: $(FIRST_MAKEFILE) $(INST_LIBDIR)$(DIRFILESEP).exists $(NOECHO) $(NOOP) config :: $(INST_ARCHAUTODIR)$(DIRFILESEP).exists $(NOECHO) $(NOOP) config :: $(INST_AUTODIR)$(DIRFILESEP).exists $(NOECHO) $(NOOP) $(INST_AUTODIR)\.exists :: C:\Perl\Perl587\lib\CORE\perl.h $(NOECHO) $(MKPATH) $(INST_AUTODIR) $(NOECHO) $(EQUALIZE_TIMESTAMP) C:\Perl\Perl587\lib\CORE\perl.h $(INST_AUTODIR)\.exists -$(NOECHO) $(CHMOD) $(PERM_RWX) $(INST_AUTODIR) $(INST_LIBDIR)\.exists :: C:\Perl\Perl587\lib\CORE\perl.h $(NOECHO) $(MKPATH) $(INST_LIBDIR) $(NOECHO) $(EQUALIZE_TIMESTAMP) C:\Perl\Perl587\lib\CORE\perl.h $(INST_LIBDIR)\.exists -$(NOECHO) $(CHMOD) $(PERM_RWX) $(INST_LIBDIR) $(INST_ARCHAUTODIR)\.exists :: C:\Perl\Perl587\lib\CORE\perl.h $(NOECHO) $(MKPATH) $(INST_ARCHAUTODIR) $(NOECHO) $(EQUALIZE_TIMESTAMP) C:\Perl\Perl587\lib\CORE\perl.h $(INST_ARCHAUTODIR)\.exists -$(NOECHO) $(CHMOD) $(PERM_RWX) $(INST_ARCHAUTODIR) config :: $(INST_MAN3DIR)$(DIRFILESEP).exists $(NOECHO) $(NOOP) $(INST_MAN3DIR)\.exists :: C:\Perl\Perl587\lib\CORE\perl.h $(NOECHO) $(MKPATH) $(INST_MAN3DIR) $(NOECHO) $(EQUALIZE_TIMESTAMP) C:\Perl\Perl587\lib\CORE\perl.h $(INST_MAN3DIR)\.exists -$(NOECHO) $(CHMOD) $(PERM_RWX) $(INST_MAN3DIR) $(O_FILES): $(H_FILES) help: perldoc ExtUtils::MakeMaker # --- MakeMaker linkext section: linkext :: $(LINKTYPE) $(NOECHO) $(NOOP) # --- MakeMaker dlsyms section: DropFiles.def: Makefile.PL $(PERLRUN) -MExtUtils::Mksymlists \ -e "Mksymlists('NAME'=>\"Win32::GUI::DropFiles\", 'DLBASE' => '$(BASEEXT)', 'DL_FUNCS' => { }, 'FUNCLIST' => [], 'IMPORTS' => { }, 'DL_VARS' => []);" # --- MakeMaker dynamic section: dynamic :: $(FIRST_MAKEFILE) $(INST_DYNAMIC) $(INST_BOOT) $(NOECHO) $(NOOP) # --- MakeMaker dynamic_bs section: BOOTSTRAP = $(BASEEXT).bs # As Mkbootstrap might not write a file (if none is required) # we use touch to prevent make continually trying to remake it. # The DynaLoader only reads a non-empty file. $(BOOTSTRAP): $(FIRST_MAKEFILE) $(BOOTDEP) $(INST_ARCHAUTODIR)$(DIRFILESEP).exists $(NOECHO) $(ECHO) "Running Mkbootstrap for $(NAME) ($(BSLOADLIBS))" $(NOECHO) $(PERLRUN) \ "-MExtUtils::Mkbootstrap" \ -e "Mkbootstrap('$(BASEEXT)','$(BSLOADLIBS)');" $(NOECHO) $(TOUCH) $(BOOTSTRAP) $(CHMOD) $(PERM_RW) $@ $(INST_BOOT): $(BOOTSTRAP) $(INST_ARCHAUTODIR)$(DIRFILESEP).exists $(NOECHO) $(RM_RF) $(INST_BOOT) -$(CP) $(BOOTSTRAP) $(INST_BOOT) $(CHMOD) $(PERM_RW) $@ # --- MakeMaker dynamic_lib section: # This section creates the dynamically loadable $(INST_DYNAMIC) # from $(OBJECT) and possibly $(MYEXTLIB). OTHERLDFLAGS = INST_DYNAMIC_DEP = $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)$(DIRFILESEP).exists $(EXPORT_LIST) $(PERL_ARCHIVE) $(INST_DYNAMIC_DEP) $(LD) -out:$@ $(LDDLFLAGS) $(LDFROM) $(OTHERLDFLAGS) $(MYEXTLIB) $(PERL_ARCHIVE) $(LDLOADLIBS) -def:$(EXPORT_LIST) $(CHMOD) $(PERM_RWX) $@ # --- MakeMaker static section: ## $(INST_PM) has been moved to the all: target. ## It remains here for awhile to allow for old usage: "make static" static :: $(FIRST_MAKEFILE) $(INST_STATIC) $(NOECHO) $(NOOP) # --- MakeMaker static_lib section: $(INST_STATIC): $(OBJECT) $(MYEXTLIB) $(INST_ARCHAUTODIR)$(DIRFILESEP).exists $(RM_RF) $@ $(AR) -out:$@ $(OBJECT) $(CHMOD) $(PERM_RWX) $@ $(NOECHO) $(ECHO) "$(EXTRALIBS)" > $(INST_ARCHAUTODIR)\extralibs.ld # --- MakeMaker manifypods section: POD2MAN_EXE = $(PERLRUN) "-MExtUtils::Command::MM" -e pod2man "--" POD2MAN = $(POD2MAN_EXE) manifypods : pure_all \ DropFiles.pm \ DropFiles.pm $(NOECHO) $(POD2MAN) --section=3 --perm_rw=$(PERM_RW)\ DropFiles.pm $(INST_MAN3DIR)\Win32\GUI\DropFiles.$(MAN3EXT) # --- MakeMaker processPL section: all :: $(BASEEXT).rc $(NOECHO) $(NOOP) $(BASEEXT).rc :: DropFilesRC.PL $(PERLRUNINST) DropFilesRC.PL $(BASEEXT).rc # --- MakeMaker installbin section: # --- MakeMaker subdirs section: # none # --- MakeMaker clean_subdirs section: clean_subdirs : $(NOECHO)$(NOOP) # --- MakeMaker clean section: # Delete temporary files but do not touch installed files. We don't delete # the Makefile here so a later make realclean still has a makefile to use. clean :: clean_subdirs -$(RM_RF) DropFiles.c *.rc *.res ./blib $(MAKE_APERL_FILE) $(INST_ARCHAUTODIR)/extralibs.all $(INST_ARCHAUTODIR)/extralibs.ld perlmain.c tmon.out mon.out so_locations pm_to_blib *$(OBJ_EXT) *$(LIB_EXT) perl.exe perl perl$(EXE_EXT) $(BOOTSTRAP) $(BASEEXT).bso $(BASEEXT).def lib$(BASEEXT).def $(BASEEXT).exp $(BASEEXT).x core core.*perl.*.? *perl.core core.[0-9] core.[0-9][0-9] core.[0-9][0-9][0-9] core.[0-9][0-9][0-9][0-9] core.[0-9][0-9][0-9][0-9][0-9] -$(MV) $(FIRST_MAKEFILE) $(MAKEFILE_OLD) $(DEV_NULL) clean :: -$(RM_F) *.pdb # --- MakeMaker realclean_subdirs section: realclean_subdirs : $(NOECHO)$(NOOP) # --- MakeMaker realclean section: # Delete temporary files (via clean) and also delete installed files realclean purge :: clean realclean_subdirs $(RM_RF) $(INST_AUTODIR) $(INST_ARCHAUTODIR) $(RM_RF) $(DISTVNAME) $(RM_F) $(INST_DYNAMIC) $(INST_BOOT) $(RM_F) $(INST_STATIC) $(RM_F) $(INST_LIB)\Win32\GUI\DropFiles.pm $(MAKEFILE_OLD) $(FIRST_MAKEFILE) # --- MakeMaker metafile section: metafile : $(NOECHO) $(ECHO) "# http://module-build.sourceforge.net/META-spec.html" > META.yml $(NOECHO) $(ECHO) "#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX#" >> META.yml $(NOECHO) $(ECHO) "name: Win32-GUI-DropFiles" >> META.yml $(NOECHO) $(ECHO) "version: 0.01" >> META.yml $(NOECHO) $(ECHO) "version_from: DropFiles.pm" >> META.yml $(NOECHO) $(ECHO) "installdirs: site" >> META.yml $(NOECHO) $(ECHO) "requires:" >> META.yml $(NOECHO) $(ECHO) "" >> META.yml $(NOECHO) $(ECHO) "distribution_type: module" >> META.yml $(NOECHO) $(ECHO) "generated_by: ExtUtils::MakeMaker version 6.17" >> META.yml # --- MakeMaker metafile_addtomanifest section: metafile_addtomanifest: $(NOECHO) $(PERLRUN) -MExtUtils::Manifest=maniadd -e "eval { maniadd({q{META.yml} => q{Module meta-data (added by MakeMaker)}}) } \ or print \"Could not add META.yml to MANIFEST: $${'@'}\n\"" # --- MakeMaker dist_basics section skipped. # --- MakeMaker dist_core section skipped. # --- MakeMaker distdir section skipped. # --- MakeMaker dist_test section skipped. # --- MakeMaker dist_ci section skipped. # --- MakeMaker install section skipped. # --- MakeMaker force section: # Phony target to force checking subdirectories. FORCE: $(NOECHO) $(NOOP) # --- MakeMaker perldepend section: PERL_HDRS = \ $(PERL_INC)/EXTERN.h \ $(PERL_INC)/INTERN.h \ $(PERL_INC)/XSUB.h \ $(PERL_INC)/av.h \ $(PERL_INC)/cc_runtime.h \ $(PERL_INC)/config.h \ $(PERL_INC)/cop.h \ $(PERL_INC)/cv.h \ $(PERL_INC)/dosish.h \ $(PERL_INC)/embed.h \ $(PERL_INC)/embedvar.h \ $(PERL_INC)/fakethr.h \ $(PERL_INC)/form.h \ $(PERL_INC)/gv.h \ $(PERL_INC)/handy.h \ $(PERL_INC)/hv.h \ $(PERL_INC)/intrpvar.h \ $(PERL_INC)/iperlsys.h \ $(PERL_INC)/keywords.h \ $(PERL_INC)/mg.h \ $(PERL_INC)/nostdio.h \ $(PERL_INC)/op.h \ $(PERL_INC)/opcode.h \ $(PERL_INC)/patchlevel.h \ $(PERL_INC)/perl.h \ $(PERL_INC)/perlio.h \ $(PERL_INC)/perlsdio.h \ $(PERL_INC)/perlsfio.h \ $(PERL_INC)/perlvars.h \ $(PERL_INC)/perly.h \ $(PERL_INC)/pp.h \ $(PERL_INC)/pp_proto.h \ $(PERL_INC)/proto.h \ $(PERL_INC)/regcomp.h \ $(PERL_INC)/regexp.h \ $(PERL_INC)/regnodes.h \ $(PERL_INC)/scope.h \ $(PERL_INC)/sv.h \ $(PERL_INC)/thrdvar.h \ $(PERL_INC)/thread.h \ $(PERL_INC)/unixish.h \ $(PERL_INC)/util.h $(OBJECT) : $(PERL_HDRS) DropFiles.c : $(XSUBPPDEPS) # --- MakeMaker makefile section: $(OBJECT) : $(FIRST_MAKEFILE) # We take a very conservative approach here, but it's worth it. # We move Makefile to Makefile.old here to avoid gnu make looping. $(FIRST_MAKEFILE) : Makefile.PL $(CONFIGDEP) $(NOECHO) $(ECHO) "Makefile out-of-date with respect to $?" $(NOECHO) $(ECHO) "Cleaning current config before rebuilding Makefile..." $(NOECHO) $(RM_F) $(MAKEFILE_OLD) $(NOECHO) $(MV) $(FIRST_MAKEFILE) $(MAKEFILE_OLD) -$(MAKE) -f $(MAKEFILE_OLD) clean $(DEV_NULL) || $(NOOP) $(PERLRUN) Makefile.PL $(NOECHO) $(ECHO) "==> Your Makefile has been rebuilt. <==" $(NOECHO) $(ECHO) "==> Please rerun the make command. <==" false # --- MakeMaker staticmake section: # --- MakeMaker makeaperl section --- MAP_TARGET = ..\perl FULLPERL = C:\Perl\Perl587\bin\perl.exe # --- MakeMaker test section: TEST_VERBOSE=0 TEST_TYPE=test_$(LINKTYPE) TEST_FILE = test.pl TEST_FILES = t\01_load.t t\02_old_callback.t t\03_new_callback.t t\04_GetDroppedFiles.t t\05_GetDroppedFile.t t\06_GetDropPos.t t\07_DragQueryFile.t t\08_DragQueryPoint.t t\09_DragFinish.t t\10_Unicode.t t\11_invalid_handles.t t\98_pod.t t\99_pod_coverage.t TESTDB_SW = -d testdb :: testdb_$(LINKTYPE) test :: $(TEST_TYPE) test_dynamic :: pure_all $(FULLPERLRUN) "-MExtUtils::Command::MM" "-e" "test_harness($(TEST_VERBOSE), '$(INST_LIB)', '$(INST_ARCHLIB)')" $(TEST_FILES) testdb_dynamic :: pure_all $(FULLPERLRUN) $(TESTDB_SW) "-I$(INST_LIB)" "-I$(INST_ARCHLIB)" $(TEST_FILE) test_ : test_dynamic test_static :: pure_all $(MAP_TARGET) ./$(MAP_TARGET) "-MExtUtils::Command::MM" "-e" "test_harness($(TEST_VERBOSE), '$(INST_LIB)', '$(INST_ARCHLIB)')" $(TEST_FILES) testdb_static :: pure_all $(MAP_TARGET) ./$(MAP_TARGET) $(TESTDB_SW) "-I$(INST_LIB)" "-I$(INST_ARCHLIB)" $(TEST_FILE) # --- MakeMaker ppd section: # Creates a PPD (Perl Package Description) for a binary distribution. ppd: $(NOECHO) $(ECHO) "<SOFTPKG NAME=\"$(DISTNAME)\" VERSION=\"0,01,0,0\">" > $(DISTNAME).ppd $(NOECHO) $(ECHO) " <TITLE>$(DISTNAME)</TITLE>" >> $(DISTNAME).ppd $(NOECHO) $(ECHO) " <ABSTRACT>Extension to Win32::GUI for shell Drag&Drop integration</ABSTRACT>" >> $(DISTNAME).ppd $(NOECHO) $(ECHO) " <AUTHOR>Robert May <rob...@us...></AUTHOR>" >> $(DISTNAME).ppd $(NOECHO) $(ECHO) " <IMPLEMENTATION>" >> $(DISTNAME).ppd $(NOECHO) $(ECHO) " <OS NAME=\"$(OSNAME)\" />" >> $(DISTNAME).ppd $(NOECHO) $(ECHO) " <ARCHITECTURE NAME=\"MSWin32-x86-multi-thread-5.8\" />" >> $(DISTNAME).ppd $(NOECHO) $(ECHO) " <CODEBASE HREF=\"\" />" >> $(DISTNAME).ppd $(NOECHO) $(ECHO) " </IMPLEMENTATION>" >> $(DISTNAME).ppd $(NOECHO) $(ECHO) "</SOFTPKG>" >> $(DISTNAME).ppd # --- MakeMaker pm_to_blib section: pm_to_blib: $(TO_INST_PM) $(NOECHO) $(PERLRUN) -MExtUtils::Install -e "pm_to_blib({@ARGV}, '$(INST_LIB)\auto', '$(PM_FILTER)')"\ DropFiles.pm $(INST_LIB)\Win32\GUI\DropFiles.pm $(NOECHO) $(TOUCH) $@ # --- MakeMaker selfdocument section: # --- MakeMaker postamble section: .rc.res: $(RC) $(RCFLAGS) $< pure_all :: demo_to_blib $(NOECHO) $(NOOP) demo_to_blib: $(DEMOS) $(NOECHO) $(MKPATH) $(INST_DEMODIR) $(CP) $? $(INST_DEMODIR) $(NOECHO) $(TOUCH) demo_to_blib clean :: -$(RM_F) demo_to_blib # End. --- NEW FILE: ppport.h --- #if 0 <<'SKIP'; #endif /* ---------------------------------------------------------------------- ppport.h -- Perl/Pollution/Portability Version 3.06 Automatically created by Devel::PPPort running under perl 5.008007 on Fri Mar 17 15:01:07 2006. Do NOT edit this file directly! -- Edit PPPort_pm.PL and the includes in parts/inc/ instead. Use 'perldoc ppport.h' to view the documentation below. ---------------------------------------------------------------------- SKIP [...4855 lines suppressed...] #ifdef NO_XSLOCKS # ifdef dJMPENV # define dXCPT dJMPENV; int rEtV = 0 # define XCPT_TRY_START JMPENV_PUSH(rEtV); if (rEtV == 0) # define XCPT_TRY_END JMPENV_POP; # define XCPT_CATCH if (rEtV != 0) # define XCPT_RETHROW JMPENV_JUMP(rEtV) # else # define dXCPT Sigjmp_buf oldTOP; int rEtV = 0 # define XCPT_TRY_START Copy(top_env, oldTOP, 1, Sigjmp_buf); rEtV = Sigsetjmp(top_env, 1); if (rEtV == 0) # define XCPT_TRY_END Copy(oldTOP, top_env, 1, Sigjmp_buf); # define XCPT_CATCH if (rEtV != 0) # define XCPT_RETHROW Siglongjmp(top_env, rEtV) # endif #endif #endif /* _P_P_PORTABILITY_H_ */ /* End of File ppport.h */ --- NEW FILE: README --- Win32-GUI-DropFiles =================== Win32::GUI::DropFiles provides integration with the windows shell for Win32::GUI applications, allowing retrieval of the filenames of files dragged from the shell (e.g. explorer) to the application window. INSTALLATION - from source As a source distribution this module is bundled with Win32::GUI, and will be built while makeing Win32::GUI itself. It is possible to build and install this module stand alone: perl Makefile.PL make make test make install INSTALLATION - binary distribution This module will be distributed in binary form (ActiveState PPM) as part of the Win32::GUI module. See the Win32-GUI module README for further details. DEPENDENCIES This module requires these other modules and libraries: perl 5.6.0 or higher (5.8.6 or higher recommended) Win32::GUI 1.04 or higher To fully test this module the following modules and libraries are required. Some tests will be skipped if these modules are not available: Win32::API 0.41 or higher Test::Pod 1.14 or higher Test::Pod::Coverage 1.04 or higher Unicode::String COPYRIGHT AND LICENCE Copyright (C) 2006 by Robert May This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. ---------------------------------------------------------------------- $Id: README,v 1.1 2006/04/25 21:38:18 robertemay Exp $ --- NEW FILE: TYPEMAP --- # $Id: TYPEMAP,v 1.1 2006/04/25 21:38:18 robertemay Exp $ # TYPEMAP for Win32::GUI::DropFiles TYPEMAP HDROP T_HANDLE BOOL T_UV ################################################################################ INPUT T_HANDLE if(SvROK($arg)) { SV** out=hv_fetch((HV*)SvRV($arg), \"-handle\", 7, 0); if(out != NULL) $var = INT2PTR($type,SvIV(*out)); else $var = NULL; } else $var = INT2PTR($type,SvIV($arg)); ################################################################################ OUTPUT |