package uk.co.mmscomputing.device.capi; public class Rider{ private int[] stack = new int[32]; private byte[] data; private int off,sp,index; public Rider(){ this.data = new byte[0]; this.off = 0; this.sp = 0; this.stack[sp] = 0; this.index = 0; } public void set(byte[] data,int off,int len){ this.data = data; this.off = off; this.sp = 0; this.stack[sp] = len; this.index = 0; } public void set(byte[] data){ set(data,0,(data[0]&0x00FF)|((data[1]&0x00FF)<<8)); } public Rider(byte[] data){ set(data,0,data.length); } public Rider(byte[] data,int off,int len){ set(data,off,len); } public void setLength(){ // read and set length of content int len=read(); // read 1 byte length stack[++sp]=len+index; // set len to current byte position plus value of byte read } // public int getLength(){return stack[sp];} /* public void setStructLength(){ // read and set length of struct content; return old length int len=read(); // read 1 byte length if(len==255){len=readWord();} // if escape code read 2 byte length stack[++sp]=len; } */ public void skip(int i){ if(stack[sp]<=(index+i)){throw new IndexOutOfBoundsException(""+(index+i));} index+=i; } public void skip(){ index=stack[sp--]; } public int available(){ return stack[sp]-index; } public void reset(){sp=0;index=0;} public void structBegin(){ // read and set length of struct content int len=read(); // read 1 byte length if(len==255){len=readWord();} // if escape code read 2 byte length stack[++sp]=len+index; } public void structEnd(){ index=stack[sp--]; } public int read(){ if(index>4)&0x0F]; s+=hexs[(data[i] )&0x0F]; if(((i+1)%8)==0){s+="\n";} i++; } if(((i+1)%8)!=0){s+="\n";} return s; } }