The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#//////////////////////////////////////////////////////////////////////////////
#//
#//  DumpConstants.pl
#//  Win32::Daemon Perl extension test script employing Callbacks
#//
#//  Copyright (c) 1998-2008 Dave Roth
#//  Courtesy of Roth Consulting
#//  http://www.roth.net/
#//
#//  This file may be copied or modified only under the terms of either 
#//  the Artistic License or the GNU General Public License, which may 
#//  be found in the Perl 5.0 source kit.
#//
#//  2008.03.24  :Date
#//  20080324    :Version
#//////////////////////////////////////////////////////////////////////////////

# Displays all Win32::Daemon constant values.


use Win32::Daemon;

map
{
	my $Value = eval( $_ );
	
	# Only manage numeric values...
	if( $Value =~ /^[\d-]$/ )
	{
		$Constant{name}->{$_} = $Value;
		push( @{$Constant{value}->{$Value}}, $_ );
	}
} qw(

    SERVICE_CONTROL_USER_DEFINED
    SERVICE_NOT_READY
    SERVICE_STOPPED
    SERVICE_RUNNING
    SERVICE_PAUSED
    SERVICE_START_PENDING
    SERVICE_STOP_PENDING
    SERVICE_CONTINUE_PENDING
    SERVICE_PAUSE_PENDING

    SERVICE_CONTROL_NONE
    SERVICE_CONTROL_STOP
    SERVICE_CONTROL_PAUSE
    SERVICE_CONTROL_CONTINUE
    SERVICE_CONTROL_INTERROGATE
    SERVICE_CONTROL_SHUTDOWN
    SERVICE_CONTROL_PARAMCHANGE
    SERVICE_CONTROL_NETBINDADD
    SERVICE_CONTROL_NETBINDREMOVE
    SERVICE_CONTROL_NETBINDENABLE
    SERVICE_CONTROL_NETBINDDISABLE
    SERVICE_CONTROL_DEVICEEVENT
    SERVICE_CONTROL_HARDWAREPROFILECHANGE
    SERVICE_CONTROL_POWEREVENT
    SERVICE_CONTROL_SESSIONCHANGE
    SERVICE_CONTROL_USER_DEFINED
    SERVICE_CONTROL_RUNNING
    SERVICE_CONTROL_PRESHUTDOWN 
    SERVICE_CONTROL_TIMER
    SERVICE_CONTROL_START

    SERVICE_ACCEPT_DEVICEEVENT
    SERVICE_ACCEPT_HARDWAREPROFILECHANGE
    SERVICE_ACCEPT_POWEREVENT
    SERVICE_ACCEPT_SESSIONCHANGE

    USER_SERVICE_BITS_1
    USER_SERVICE_BITS_2
    USER_SERVICE_BITS_3
    USER_SERVICE_BITS_4
    USER_SERVICE_BITS_5
    USER_SERVICE_BITS_6
    USER_SERVICE_BITS_7
    USER_SERVICE_BITS_8
    USER_SERVICE_BITS_9
    USER_SERVICE_BITS_10

    SERVICE_ACCEPT_STOP
    SERVICE_ACCEPT_PAUSE_CONTINUE
    SERVICE_ACCEPT_SHUTDOWN    
    SERVICE_ACCEPT_PARAMCHANGE  
    SERVICE_ACCEPT_NETBINDCHANGE

    SERVICE_WIN32_OWN_PROCESS
    SERVICE_WIN32_SHARE_PROCESS
    SERVICE_KERNEL_DRIVER
    SERVICE_FILE_SYSTEM_DRIVER
    SERVICE_INTERACTIVE_PROCESS

    SERVICE_BOOT_START
    SERVICE_SYSTEM_START
    SERVICE_AUTO_START
    SERVICE_DEMAND_START
    SERVICE_DISABLED

    SERVICE_DISABLED
    SERVICE_ERROR_NORMAL
    SERVICE_ERROR_SEVERE
    SERVICE_ERROR_CRITICAL

	SC_GROUP_IDENTIFIER    

    NO_ERROR
);


print "Sort by name:\n";
foreach my $Name ( sort { $a cmp $b } keys( %{$Constant{name}} ) )
{
	printf( "\t%25s %d\n", $Name, $Constant{name}->{$Name} );
}


print "\n\nSort by value:\n";
foreach my $Value ( sort { $a <=> $b } keys( %{$Constant{value}} ) )
{
	local( $LocalValue ) = $Value;
	local( $LocalValueHex ) = sprintf( "0x%08x", $Value );
	local( $LocalNameList ) = join( " +", sort { $a <=> $b } @{ $Constant{value}->{$Value} } );
	$~ = "SortByValue";
	write;
}



format SortByValue =
	@>>>>>>>>>>  @<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
	$LocalValue, $LocalValueHex, $LocalNameList
~							^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	
							$LocalNameList
~							^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	
							$LocalNameList
~							^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	
							$LocalNameList
~							^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	
							$LocalNameList
~							^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	
							$LocalNameList
~							^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	
							$LocalNameList
~							^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	
							$LocalNameList
~							^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	
							$LocalNameList
~							^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	
							$LocalNameList
~							^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	
							$LocalNameList
~							^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	
							$LocalNameList
~							^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	
							$LocalNameList
~							^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	
							$LocalNameList
~							^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	
							$LocalNameList
.