| Macro |

    package ij;
    import ij.process.*;
    import ij.gui.*;
    import ij.io.*;
    import ij.measure.*;
    import ij.plugin.filter.*;
    import ij.macro.Interpreter;
    import java.awt.*;
    import java.awt.image.*;
    import java.io.*;
    import java.util.Locale;

    /** The class contains static methods that perform macro operations. */
    public class Macro {

        public static final String MACRO_CANCELED = "Macro canceled";

        //public static boolean record;
        private static String currentOptions;
        static boolean abort;

        public static boolean open(String path) {
            if (path==null || path.equals("")) {
                Opener o = new Opener();
                return true;
            }
            Opener o = new Opener();
            ImagePlus img = o.openImage(path);
            if (img==null)
                return false;
            img.show();
            return true;
        }

        public static boolean saveAs(String path) {
            ImagePlus imp = WindowManager.getCurrentImage();
            if (imp==null)
                return false;
            FileSaver fs = new FileSaver(imp);
            if (path==null || path.equals(""))
                return fs.saveAsTiff();
            if (imp.getStackSize()>1)
                return fs.saveAsTiffStack(path);
            else
                return fs.saveAsTiff(path);
        }

        public static String getName(String path) {
            int i = path.lastIndexOf('/');
            if (i==-1)
                i = path.lastIndexOf('\\');
            if (i>0)
                return path.substring(i+1);
            else
                return path;
        }

        public static String getDir(String path) {
            int i = path.lastIndexOf('/');
            if (i==-1)
                i = path.lastIndexOf('\\');
            if (i>0)
                return path.substring(0, i+1);
            else
                return "";
        }

        /** Aborts the currently running macro or any plugin using IJ.run(). */
        public static void abort() {
            abort = true;
            //IJ.log("Abort: "+Thread.currentThread().getName());
            if (Thread.currentThread().getName().endsWith("Macro$"))
               throw new RuntimeException(MACRO_CANCELED);
        }

        /** If a command started using run(name, options) is running,
            returns the options string, otherwise, returns null.
            @see ij.gui.GenericDialog
            @see ij.io.OpenDialog
        */
        public static String getOptions() {
            if (currentOptions!=null && Thread.currentThread().getName().startsWith("Run$_"))
                return currentOptions+" ";
            else
                return null;
        }

        public static void setOptions(String options) {
            currentOptions = options;
        }

        public static String getValue(String options, String key, String defaultValue) {
            key = trimKey(key);
            key += '=';
            int index=-1;
            do {
                index = options.indexOf(key, ++index);
                if (index<0) return defaultValue;
            } while (index!=0&&options.charAt(index-1)!=' ');
            options = options.substring(index+key.length(), options.length());
            if (options.charAt(0)=='\'') {
                index = options.indexOf("'",1);
                if (index<0)
                    return defaultValue;
                else
                    return options.substring(1, index);
            } else if (options.charAt(0)=='[') {
                index = options.indexOf("]",1);
                if (index<0)
                    return defaultValue;
                else
                    return options.substring(1, index);
            } else {
                //if (options.indexOf('=')==-1) {
                //  options = options.trim();
                //  IJ.log("getValue: "+key+"  |"+options+"|");
                //  if (options.length()>0)
                //      return options;
                //  else
                //      return defaultValue;
                //}
                index = options.indexOf(" ");
                if (index<0)
                    return defaultValue;
                else
                    return options.substring(0, index);
            }
        }

        public static String trimKey(String key) {
            int index = key.indexOf(" ");
            if (index>-1)
                key = key.substring(0,index);
            index = key.indexOf(":");
            if (index>-1)
                key = key.substring(0,index);
            key = key.toLowerCase(Locale.US);
            return key;
        }

    }

| Macro |