// Path: src/main/java/au/com/southsky/jfreesane/SaneOption.java
// public enum OptionUnits implements SaneEnum {
//   /**
//    * The option has no units.
//    */
//   UNIT_NONE(0),
// 
//   /**
//    * The option unit is pixels.
//    */
//   UNIT_PIXEL(1),
// 
//   /**
//    * The option unit is bits.
//    */
//   UNIT_BIT(2),
// 
//   /**
//    * The option unit is millimeters.
//    */
//   UNIT_MM(3),
// 
//   /**
//    * The option unit is dots per inch.
//    */
//   UNIT_DPI(4),
// 
//   /**
//    * The option unit is a percentage.
//    */
//   UNIT_PERCENT(5),
// 
//   /**
//    * The option unit is microseconds.
//    */
//   UNIT_MICROSECOND(6);
// 
//   private final int wireValue;
// 
//   OptionUnits(int wireValue) {
//     this.wireValue = wireValue;
//   }
// 
//   @Override
//   public int getWireValue() {
//     return wireValue;
//   }
// }


import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import au.com.southsky.jfreesane.SaneOption.OptionUnits;

    return new SaneParameters(frame, lastFrame, bytesPerLine, pixelsPerLine, lines, depth);
  }

  public SaneStatus readStatus() throws IOException {
    return SaneStatus.fromWireValue(readWord().integerValue());
  }

  public SaneWord readWord() throws IOException {
    return SaneWord.fromStream(this);
  }

  public SaneOptionDescriptor readOptionDescriptor() throws IOException {
    // discard pointer
    readWord();

    String optionName = readString();
    String optionTitle = readString();
    String optionDescription = readString();
    int typeInt = readWord().integerValue();
    // TODO: range check here
    OptionValueType valueType = SaneEnums.valueOf(OptionValueType.class, typeInt);

    if (valueType == OptionValueType.GROUP) {
      // a new group applies!
      currentGroup = new OptionGroup(optionTitle);
    }

    int unitsInt = readWord().integerValue();
    // TODO: range check here
// Path: src/main/java/au/com/southsky/jfreesane/SaneOption.java
// public enum OptionUnits implements SaneEnum {
//   /**
//    * The option has no units.
//    */
//   UNIT_NONE(0),
// 
//   /**
//    * The option unit is pixels.
//    */
//   UNIT_PIXEL(1),
// 
//   /**
//    * The option unit is bits.
//    */
//   UNIT_BIT(2),
// 
//   /**
//    * The option unit is millimeters.
//    */
//   UNIT_MM(3),
// 
//   /**
//    * The option unit is dots per inch.
//    */
//   UNIT_DPI(4),
// 
//   /**
//    * The option unit is a percentage.
//    */
//   UNIT_PERCENT(5),
// 
//   /**
//    * The option unit is microseconds.
//    */
//   UNIT_MICROSECOND(6);
// 
//   private final int wireValue;
// 
//   OptionUnits(int wireValue) {
//     this.wireValue = wireValue;
//   }
// 
//   @Override
//   public int getWireValue() {
//     return wireValue;
//   }
// }


// Path: src/main/java/au/com/southsky/jfreesane/SaneInputStream.java
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import au.com.southsky.jfreesane.SaneOption.OptionUnits;


    return new SaneParameters(frame, lastFrame, bytesPerLine, pixelsPerLine, lines, depth);
  }

  public SaneStatus readStatus() throws IOException {
    return SaneStatus.fromWireValue(readWord().integerValue());
  }

  public SaneWord readWord() throws IOException {
    return SaneWord.fromStream(this);
  }

  public SaneOptionDescriptor readOptionDescriptor() throws IOException {
    // discard pointer
    readWord();

    String optionName = readString();
    String optionTitle = readString();
    String optionDescription = readString();
    int typeInt = readWord().integerValue();
    // TODO: range check here
    OptionValueType valueType = SaneEnums.valueOf(OptionValueType.class, typeInt);

    if (valueType == OptionValueType.GROUP) {
      // a new group applies!
      currentGroup = new OptionGroup(optionTitle);
    }

    int unitsInt = readWord().integerValue();
    // TODO: range check here
    OptionUnits units = SaneEnums.valueOf(OptionUnits.class, unitsInt);