anchor.diff:      PRED: array [0..3] of Integer;  //previous DC coefficient for each component.
         //After each RST it must reset to 0
         //no more than 4 components per scan is allowed, so we use static array here
  +    //not sure we need these
       curCol: array [0..3] of Integer;  //to manage edges of image if part of block is used
       curLine: array [0..3] of Integer;
     //settings of current scan
       Ns: Word; //number of components in current scan
       ScanHeaders: array of TJpegScanHeader;
  -    exists: Boolean;
  -    SamplingSum: Integer;
       Ss: Byte; //start of spectral/predictor selection
  -    Se: Byte; //end of spectral/predictor selection
  -    Ah: Byte;
  -    Al: Byte;
  +    Se: Byte; //end of spectral/predictor selection (for progressive mode)
  +    Ah: Byte; //high bit of DCT coefs
  +    Al: Byte; //low bit of DCT coefs (for another type of progressive mode)
  +
  +    fBuffer: TRealArray64;  //for DCT mode of course
  +
  +    fDecodeBlockProc: TDecodeBlockProc;
   
       function NextByte: Byte;
       function NextWord: Word; //will swap
  
positive.code:     i,j: Integer;
      B: Byte;
      Ident: Word;
      LeastCommonDivider: Integer;
  begin
    HL := NextWord;
    if HL<11 then
  
negative.code:     procedure DecodeQuantTable;
      procedure DecodeHuffmanTable;
      procedure DecodeSOF;
      procedure DecodeSequentialDCTScan;
      procedure DecodeDNL;
      procedure DecodeHuffmanBlock(CompNum, QuantID: Integer);
      procedure DecodeArithmBlock(CompNum, QuantID: Integer); //will raise exception so far
    public
      constructor Create(Properties: Pointer);
      destructor Destroy; override;
  