From 071f930558ccc2fc7d1f37e90d793a1f7999d30b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?= <41315874+fumiama@users.noreply.github.com> Date: Thu, 16 Apr 2020 14:18:16 +0800 Subject: [PATCH] Add files via upload --- base16384.c | 32 ++++++++++++++++++++++++++++++ base16384.exe | Bin 0 -> 64299 bytes base16384.h | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++ bitio.h | 48 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 133 insertions(+) create mode 100644 base16384.c create mode 100644 base16384.exe create mode 100644 base16384.h create mode 100644 bitio.h diff --git a/base16384.c b/base16384.c new file mode 100644 index 0000000..05f1054 --- /dev/null +++ b/base16384.c @@ -0,0 +1,32 @@ +#include +#include +#include "base16384.h" + +#define CHOICE argv[1][1] +#define READ argv[2] +#define WRITE argv[3] + +int main(int argc, char **argv){ + FILE *fp = NULL; + FILE *fpo = NULL; + + if(argc != 4){ + fputs("Usage: -[e|d] inputfile outputfile", stderr); + fputs(" -e encode", stderr); + fputs(" -d decode", stderr); + exit(EXIT_FAILURE); + } + + fp = fopen(READ, "rb"); + fpo = fopen(WRITE, "wb"); + if(!fp || !fpo){ + fputs("IO error!", stderr); + exit(EXIT_FAILURE); + } + switch(CHOICE){ + case 'e': encode(fp, fpo); break; + case 'd': decode(fp, fpo); break; + default: break; + } + return 0; +} diff --git a/base16384.exe b/base16384.exe new file mode 100644 index 0000000000000000000000000000000000000000..140d4a58504da81d9c4f3afb43560632c499aa84 GIT binary patch literal 64299 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 literal 0 HcmV?d00001 diff --git a/base16384.h b/base16384.h new file mode 100644 index 0000000..b1e0945 --- /dev/null +++ b/base16384.h @@ -0,0 +1,53 @@ +#include "bitio.h" +#define HEAD 0x4E +BIT outbuf; +unsigned char buf[BUFSIZ]; +void push(int istrue, FILE *fpo, int offset){ + if(!~pushbit(&outbuf, istrue)){ + if(offset) for(int i = 0; i < BITBUFSIZE; i += 2) outbuf.b[i] += offset; + fwrite(outbuf.b, sizeof(char), BITBUFSIZE, fpo); + outbuf.p = 0; + pushbit(&outbuf, istrue); + } +} +void encode(FILE *fp, FILE *fpo){ + int cnt = 0; + + fputc(0xFE, fpo); + fputc(0xFF, fpo); + while((cnt = fread(buf, sizeof(char), BUFSIZ, fp))){ + for(int i = 0; i < cnt * 8; i++){ + if(!(outbuf.p % 16)){ + push(0, fpo, HEAD); + push(0, fpo, HEAD); + } + push(buf[i / 8] & (128u >> (i % 8)), fpo, HEAD); + } + } + if(outbuf.p){ + outbuf.b[outbuf.p / 8] &= ~(255u >> outbuf.p % 8); + for(int i = 0; i < outbuf.p / 8 + 1; i += 2) outbuf.b[i] += HEAD; + fwrite(outbuf.b, sizeof(char), (outbuf.p % 8)?outbuf.p / 8 + 1:outbuf.p / 8 , fpo); + if(((outbuf.p % 8)?outbuf.p / 8 + 1:outbuf.p / 8) % 2) fputc(0, fpo); + for(int i = 0; i < outbuf.p % 8; i++) fputc('=', fpo); + } +} +void decode(FILE *fp, FILE *fpo){ + int cnt = 0; + char ch = '='; + while((cnt = fread(buf, sizeof(char), BUFSIZ, fp))){ + int cnt8 = cnt * 8; + while(!feof(fp) && (ch = fgetc(fp)) == '=') cnt8 -= 7; + if(ch != '=') {ungetc(ch, fp); ch = '=';} + while(feof(fp) && buf[cnt - 1] == '=' && buf[cnt - 2] == '=') {cnt8 -= 7; cnt -= 2;} + if(cnt8 % 8) cnt8 -= 8; + for(int i = ((buf[0] == 0xFE)?16:0); i < cnt8; i++){ + if(!(i % 16)){ + buf[i / 8] -= HEAD; + i += 2; + } + push(buf[i / 8] & (128u >> (i % 8)), fpo, 0); + } + } + if(outbuf.p) fwrite(outbuf.b, sizeof(char), outbuf.p / 8 + ((outbuf.p % 8)?1:0), fpo); +} diff --git a/bitio.h b/bitio.h new file mode 100644 index 0000000..a816dc6 --- /dev/null +++ b/bitio.h @@ -0,0 +1,48 @@ +//bitio.h +//made by fumiama +//20200413 +#include +#include +#ifndef BITBUFSIZE +#define BITBUFSIZE 1024 +#endif +struct BIT{ + char b[BITBUFSIZE]; + int p; +}; +typedef struct BIT BIT; + +int pushbit(BIT *buffer, const int isture){ + if(buffer->p >= BITBUFSIZE * 8) return EOF; + else if(isture) buffer->b[buffer->p / 8] |= 128u >> buffer->p % 8; + else buffer->b[buffer->p / 8] &= ~(128u >> buffer->p % 8); + buffer->p++; + return isture; +} + +int fpushbit(BIT *buffer, FILE *fp){ + memset(buffer, 0, sizeof(BIT)); + if((buffer->p = fread(buffer->b, sizeof(char), BITBUFSIZE, fp)) && feof(fp)) + buffer->p = (buffer->p - 2) * 8 + buffer->b[buffer->p - 1] + 1; + else buffer->p *= 8; + return buffer->p; +} + +int changebit(BIT *buffer, const int isture, const int position){ + if(position >= buffer->p) return EOF; + else if(isture) buffer->b[position / 8] |= 128u >> position % 8; + else buffer->b[position / 8] &= ~(128u >> position % 8); + buffer->p++; + return isture; +} + +int readbit(const BIT *buffer, const int position){ + if(position >= buffer->p) return EOF; + else return buffer->b[position / 8] & (128u >> position % 8); +} + +int popbit(BIT *buffer){ + if(buffer->p >= BITBUFSIZE * 8 || buffer->p < 0) return EOF; + buffer->p--; + return buffer->b[(buffer->p+1) / 8] & (128u >> (buffer->p+1) % 8); +}