binaryEditor/binaryEditor.c
2025-09-19 20:36:01 -04:00

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);
inBitOffset = 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);
}
}