import java.awt.*;
import javax.swing.*;

/**
 * A utility that displays  full-screen exclusive 
 * mode graphics capabilities
 *
 * @author  Prof. David Bernstein, James Madison University
 * @version 1.0
 */
public class ShowCapabilities
{

    public static void main(String[] args)
    {
	BufferCapabilities       bcaps;
	DisplayMode[]            modes;
	GraphicsConfiguration[]  configs;
	GraphicsDevice[]         devices;
	GraphicsEnvironment      env;
	ImageCapabilities        icaps;
	int                      aram, i, j, k;


	env     = GraphicsEnvironment.getLocalGraphicsEnvironment();
	devices = env.getScreenDevices();

	System.out.println("Screen Devices: ");
	for (i=0; i < devices.length; i++) {

	    System.out.println(i+"\t"+devices[i]);

	    if (devices[i].isDisplayChangeSupported())
		System.out.println("\tDisplay Changes Supported");

	    if (devices[i].isFullScreenSupported())
		System.out.println("\tFull-Screen Supported");

	    aram = devices[i].getAvailableAcceleratedMemory();
	    System.out.println("\tAccelerated RAM: "+aram/1024+" Kb");

	    configs = devices[i].getConfigurations();
	    for (j=0; j < configs.length; j++) {

		System.out.println("\t\tGraphicsConfiguraion "+j);
		icaps = configs[i].getImageCapabilities();
		if (icaps.isAccelerated()) 
		    System.out.println("\t\t\tAccelerated");
		if (icaps.isTrueVolatile()) 
		    System.out.println("\t\t\tTrue Volatile");
		bcaps = configs[i].getBufferCapabilities();
		if (bcaps.isMultiBufferAvailable())
		    System.out.println("\t\t\tMulti Buffer");
		if (bcaps.isPageFlipping())
		    System.out.println("\t\t\tPage Flipping");
	    }


	    modes = devices[i].getDisplayModes();
	    for (j=0; j < modes.length; j++) {

		System.out.println("\t\t"+modes[j].getWidth()+"x"+
				          modes[j].getHeight()+"x"+
				          modes[j].getBitDepth());
            }


	}
    }
}
