anchor.diff:          //ValuePtr = OffsetBase+OffsetVal;
         }
   
  -      switch (tag) {
  -        case TAG_ORIENTATION:
  -          {
  -            var orientation = _readExifValue(block, format);
  -            exif.orientation = orientation.toInt();
  -          }
  -          break;
  -        case TAG_EXIF_OFFSET:
  -        case TAG_INTEROP_OFFSET:
  -          break;
  -        default:
  -          // skip unknown tags
  -          break;
  -      }
  +      exif.data[tag] = _readExifValue(block, format, offset);
       }
     }
   
  
positive.code:     const FMT_SINGLE = 11;
      const FMT_DOUBLE = 12;
  
      switch (format) {
        case FMT_SBYTE:
          return block.readInt8();
        case FMT_BYTE:
          return block.readByte();
        case FMT_USHORT:
          return block.readUint16();
        case FMT_ULONG:
          return block.readUint32();
        case FMT_URATIONAL:
        case FMT_SRATIONAL:
          {
            var num = block.readInt32();
            var den = block.readInt32();
            if (den == 0) {
              return 0.0;
            }
            return num / den;
          }
        case FMT_SSHORT:
          return block.readInt16();
        case FMT_SLONG:
          return block.readInt32();
        // Not sure if this is correct (never seen float used in Exif format)
        case FMT_SINGLE:
          return block.readFloat32();
        case FMT_DOUBLE:
          return block.readFloat64();
        default:
          return 0;
      }
    }
  
  
negative.code:     return c;
    }
  
    num _readExifValue(InputBuffer block, int format, int offset) {
      const FMT_BYTE = 1;
      //const FMT_STRING = 2;
      const FMT_USHORT = 3;
  