summaryrefslogtreecommitdiff
path: root/japi/Sane.java
diff options
context:
space:
mode:
Diffstat (limited to 'japi/Sane.java')
-rw-r--r--japi/Sane.java144
1 files changed, 144 insertions, 0 deletions
diff --git a/japi/Sane.java b/japi/Sane.java
new file mode 100644
index 0000000..85600e7
--- /dev/null
+++ b/japi/Sane.java
@@ -0,0 +1,144 @@
+/* sane - Scanner Access Now Easy.
+ Copyright (C) 1997 Jeffrey S. Freedman
+ This file is part of the SANE package.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ MA 02111-1307, USA.
+
+ As a special exception, the authors of SANE give permission for
+ additional uses of the libraries contained in this release of SANE.
+
+ The exception is that, if you link a SANE library with other files
+ to produce an executable, this does not by itself cause the
+ resulting executable to be covered by the GNU General Public
+ License. Your use of that executable is in no way restricted on
+ account of linking the SANE library code into it.
+
+ This exception does not, however, invalidate any other reasons why
+ the executable file might be covered by the GNU General Public
+ License.
+
+ If you submit changes to SANE to the maintainers to be included in
+ a subsequent release, you agree by submitting the changes that
+ those changes may be distributed with this exception intact.
+
+ If you write modifications of your own for SANE, it is your choice
+ whether to permit this exception to apply to your modifications.
+ If you do not wish that, delete this exception notice. */
+
+//
+// Sane.java - Java version of SANE API.
+//
+// Written: 10/9/97 - JSF
+//
+
+public class Sane
+{
+ //
+ // Public constants:
+ //
+public static int FIXED_SCALE_SHIFT = 16;
+ //
+ // Sane status values:
+ //
+public static int STATUS_GOOD = 0; // everything A-OK
+public static int STATUS_UNSUPPORTED = 1;// operation is not supported
+public static int STATUS_CANCELLED = 2; // operation was cancelled
+public static int STATUS_DEVICE_BUSY = 3;// device is busy; try again later
+public static int STATUS_INVAL = 4; // data is invalid (includes no
+ // dev at open)
+public static int STATUS_EOF = 5; // no more data available (end-of-file)
+public static int STATUS_JAMMED = 6; // document feeder jammed
+public static int STATUS_NO_DOCS = 7; // document feeder out of documents
+public static int STATUS_COVER_OPEN = 8;// scanner cover is open
+public static int STATUS_IO_ERROR = 9; // error during device I/O
+public static int STATUS_NO_MEM = 10; // out of memory
+ // access to resource has been denied
+public static int STATUS_ACCESS_DENIED = 11;
+ //
+ // Initialize when class is loaded.
+ //
+static {
+ System.loadLibrary("sanej");
+ }
+ //
+ // Private methods:
+ //
+ // Get list of devices.
+private native int getDevicesNative(
+ SaneDevice[] deviceList, boolean localOnly);
+ // Get option descriptor.
+private native void getOptionNative(int handle, int option, SaneOption opt);
+ //
+ // Public methods:
+ //
+public Sane()
+ { }
+public int fix(double v)
+ { return (int) ((v) * (1 << FIXED_SCALE_SHIFT)); }
+public double unfix(int v)
+ { return (double)(v) / (1 << FIXED_SCALE_SHIFT); }
+public int versionMajor(int code)
+ { return ((code) >> 24) & 0xff; }
+public int versionMinor(int code)
+ { return ((code) >> 16) & 0xff; }
+public int versionBuild(int code)
+ { return ((code) >> 0) & 0xffff; }
+ //
+ // SANE interface.
+ //
+ // Initialize, and return STATUS_
+public native int init(int[] versionCode);
+public native void exit(); // All done.
+ // Get list of devices.
+public int getDevices(SaneDevice[] deviceList, boolean localOnly)
+ {
+ // Create objects first.
+ for (int i = 0; i < deviceList.length - 1; i++)
+ deviceList[i] = new SaneDevice();
+ return getDevicesNative(deviceList, localOnly);
+ }
+ // Open a device.
+public native int open(String deviceName, int[] handle);
+ // Close a device.
+public native void close(int handle);
+ // Get option descriptor.
+public SaneOption getOptionDescriptor(int handle, int option)
+ {
+ SaneOption opt = new SaneOption();
+ opt.name = null;
+ getOptionNative(handle, option, opt);
+ if (opt.name == null) // Error?
+ return (null);
+ return (opt);
+ }
+ // Get each type of option:
+public native int getControlOption(int handle, int option, int [] value,
+ int [] info);
+public native int getControlOption(int handle, int option, byte [] value,
+ int [] info);
+ // Set each type of option (SET_VALUE or
+ // SET_AUTO):
+public native int setControlOption(int handle, int option,
+ int action, int value, int [] info);
+public native int setControlOption(int handle, int option,
+ int action, String value, int [] info);
+public native int getParameters(int handle, SaneParameters params);
+public native int start(int handle);
+public native int read(int handle, byte [] data,
+ int maxLength, int [] length);
+public native void cancel(int handle);
+public native String strstatus(int status);
+}