83 lines
1.8 KiB
C
83 lines
1.8 KiB
C
#include "binaryEditor.h"
|
|
|
|
char *input;
|
|
unsigned int inByteOffset = 0;
|
|
unsigned short inBitOffset = 0;
|
|
|
|
char *output;
|
|
unsigned int outByteOffset = 0;
|
|
unsigned short outBitOffset = 0;
|
|
|
|
void setBuffer(Buffer buffer, void *data){
|
|
switch (buffer){
|
|
case BUF_IN:
|
|
input = (char *) data;
|
|
inByteOffset = 0;
|
|
inBitOffset = 0;
|
|
break;
|
|
case BUF_OUT:
|
|
output = (char *) data;
|
|
outByteOffset = 0;
|
|
outBitOffset = 0;
|
|
break;
|
|
}
|
|
}
|
|
|
|
void seekBuffer(Buffer buffer, unsigned int position){
|
|
switch (buffer){
|
|
case BUF_IN:
|
|
inByteOffset = position - (position % 8);
|
|
inBitOffset = position % 8;
|
|
break;
|
|
case BUF_OUT:
|
|
outByteOffset = position - (position % 8);
|
|
outBitOffset = position % 8;
|
|
break;
|
|
}
|
|
}
|
|
|
|
unsigned int getBufferOffset(Buffer buffer){
|
|
switch (buffer){
|
|
case BUF_IN:
|
|
return (inByteOffset * 8) + inBitOffset;
|
|
case BUF_OUT:
|
|
return (outByteOffset * 8) + outBitOffset;
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
char readBit(){
|
|
char result = (input[inByteOffset] & (((char) 1) << ( 7 - inBitOffset))) >> (7 - inBitOffset);
|
|
inBitOffset++;
|
|
if (inBitOffset >= 8){
|
|
inByteOffset++;
|
|
inBitOffset = 0;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
char readByte(){
|
|
char result = 0;
|
|
for (int i = 0; i < 8; i++){
|
|
unsigned short bit = readBit();
|
|
result += bit << (7 - i);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
void writeBit(unsigned char bit){
|
|
output[outByteOffset] += bit << (7 - outBitOffset);
|
|
outBitOffset++;
|
|
if (outBitOffset >= 8){
|
|
outByteOffset++;
|
|
outBitOffset = 0;
|
|
}
|
|
}
|
|
|
|
void writeByte(unsigned char byte){
|
|
for (int i = 7; i >= 0; i--){
|
|
writeBit((byte & (1 << i)) >> i);
|
|
}
|
|
}
|