Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Latest encoder

Name: FrozenVoid 2011-10-12 10:32


//====Headers
#include <iso646.h>
#include <assert.h>
#include <limits.h>
#include <stdbool.h>
#include <locale.h>
#include <setjmp.h>
#include <signal.h>
#include <stdarg.h>
#include <stddef.h>
#include <errno.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <float.h>
#include <time.h>
#include <gmp.h>   //using libgmp.a
#include <mpfr.h>
//======Types
#define u1 unsigned char
#define u2 unsigned short
#define u4 unsigned int
#define u8 unsigned long long
//====Bithacks
#define setb(o,p) (o|=(1<<p))      //byte| 1<< pos  
#define clrb(o,p) (o&=(~(1<<p)))  // byte | 11101111
#define togb(o,p) (o^=(1<<p))
#define chkb(o,p) ((o>>p)&1)
#define bitchar(bitchar_bit)    (48|bitchar_bit) // 48|0 or 1
//====Func
static __inline__ u8 rdtsc(void){u8 x;
 __asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));     return x;}

u8 fsize(u1* filename){
FILE* tfile=fopen(filename,"rb");
if(!tfile){perror(filename);return 0;}
fseek(tfile,0,SEEK_END);
u8 sz=(u8)(ftell(tfile));fclose(tfile);return sz;}

u1* getcontent(u1*filename){//file to buffer
u8 size=fsize(filename);//
if(!size){perror("Zero length content"); return NULL;}
u1* res=malloc(size);
if(!res){perror("Malloc failure");return NULL;}
FILE* inpfile=fopen(filename,"rb");
if(!inpfile){perror("File cannot be read");return NULL;}
u8 findex=(u8)fread(res,1,size,inpfile);fclose(inpfile);
if(findex!=size){perror("size mismatch");return NULL;}
return res;}


void readcontent(u1* filename,u1* storage){
if(!filename){perror("Invalid filename"); return;}
u8 inpsize=fsize(filename);
if(!inpsize){perror("File empty");return;}
FILE* in=fopen(filename,"rb");
if(!in){perror(filename);return;}
storage=realloc(storage,inpsize);
if(!storage){perror("Malloc failure");return;}
u8 findex=(u8)fread(storage,1,inpsize,in);
fclose(in);
if(findex!=inpsize){perror("Read size mismatch");return;}}

void writecontent(u1* filename,u1* content,u8 size){
FILE* out=fopen(filename,"wb");
if(!out){perror(filename);return;}
u8 findex=(u8)fwrite(content,1,size,out);fclose(out);
if(findex!=size) perror("Write size mismatch");}

void buf2mpz(u1* string,mpz_t num,u8 size){
if(!string){perror("NULL string");return;}
if(!num){perror("Invalid mpz_t");return;}
if(!size){perror("Zero-length string");return;}
mpz_import(num,size, 1,1, -1, 0,string);
}

#define tstruct typedef struct
#define loop(loopx,loopy) for(loopx=0;loopx<loopy;loopx++)

#define fextension(string) strrchr(string,'.')?:".???"
#define isbit(xint,ypos)    ((xint)&(1<<ypos)) 
#define frop(x,filename) FILE* x=fopen(filename,"rb")
#define fwop(x,filename) FILE* x=fopen(filename,"wb")

#define outx(x,fil) fwrite(&x,1,sizeof(x),fil);
#define mpz(x) mpz_t x;mpz_init(x);
#define mpf(x) mpf_t x;mpf_init(x);
//static array
#define mpfr(x) MPFR_DECL_INIT(x, 53)  //returns float
#define DEBUG 1
#define DEBUG2 1
#define DEBUG3 0
#define MAXCHAIN 100000  // more for bigger files/
#define C8 "Output.dat"
#define SCALE 1 //was 8*inpsize
#define fdisp(x) puts("");mpf_out_str(stdout,10, 0,x);
//===========MAIN======================
#define setch(o,ch,pos)  (o|=ch<<(pos<<1))  // pos 0-3,ch=0-3
#define getbb(o,pos) ((o>>(pos<<1))&3) //get 001100>>2 &3
#define getb0(b) (b&3)
#define getb1(b) ((b>>2)&3)
#define getb2(b) ((b>>4)&3)
#define getb3(b) ((b>>6)&3)
 
 //(1<<(pos<<1))
//========MAIN===
u4 int2b(u4 v){  // 32-bit value to find the log2 of
static const unsigned int b[] = {0xAAAAAAAA, 0xCCCCCCCC, 0xF0F0F0F0,
                                 0xFF00FF00, 0xFFFF0000};
unsigned int r = (v & b[0]) != 0;
  r |= ((v & b[4]) != 0) << 4;
  r |= ((v & b[3]) != 0) << 3;
  r |= ((v & b[2]) != 0) << 2;
  r |= ((v & b[1]) != 0) << 1;
return r;}


 main(int argc,char**argv){
/*
lx=x&0xf
hx=(x&f0)>>4
if hx^0xf==lx,setbit1

*/
if(!argv[1]){printf("Syntax:cmp inputfile [-d=decode]");exit(1);}
//-----DECODE--Does not work-----
if(argv[2] && !strcmp(argv[2],"-d")){//decode Data+Bitmap
u1* bitfile=(u1*)getcontent("Bitmapx16");
u1* datafile=(u1*)getcontent("Data");
u8 xsize=fsize("Bitmapx16");u8 btsize=fsize("Data");
FILE* result=fopen("Result","wb");
if(!bitfile||!datafile||!result){perror("File error");exit(2);}
//convert into n1 byte nib(avoids corruption)
u1* expbit=malloc(btsize*4);
u8 n8;for(n8=0;n8<btsize;n8++){
expbit[n8*4]=getb0(datafile[n8]);
expbit[n8*4+1]=getb1(datafile[n8]);
expbit[n8*4+2]=getb2(datafile[n8]);
expbit[n8*4+3]=getb3(datafile[n8]);}

u1 bitsave=0,s0,s1,s2,s3;//read output nib
u8 m,dpos=0;u4 a2,cbit;for(m=0;m<xsize;m++){
for(a2=0;a2<8;a2++){//read bit
cbit=chkb(bitfile[m],a2);//current bit:
if(cbit){//read three,write four, nib pos never changes due expbit array
s0=expbit[dpos++];s1=expbit[dpos++];s2=expbit[dpos++];
bitsave=(s0)|(s1<<2)|(s2<<4)|((s0^3)<<6);fputc(bitsave,result);
}else{//read four, write four,
s0=expbit[dpos++];s1=expbit[dpos++];s2=expbit[dpos++];s3=expbit[dpos++];
bitsave=(s0)|(s1<<2)|(s2<<4)|(s3<<6);fputc(bitsave,result);
}
}//iloop end

}

;printf("Decoded to file Result");exit(10);}
//------INPUT--------
u8 inpsize=fsize(argv[1]);if(!inpsize){perror("input size invalid");return;};
u1* input=getcontent(argv[1]);
u1* output=calloc(inpsize/8 +1,1);
if(!input){perror("input invalid");return;}
FILE* bitfile=fopen("Bitmapx16","wb");if(!bitfile){perror("File write failed");return;};
FILE* datafile=fopen("Data","wb");if(!bitfile){perror("File write failed");return;};
u8 c,total=0,opos=0;u4 j;u1 l0,l1,l2,l3,bitsave=0,bitpos=0,startnib=0;

for(c=1;c<inpsize;c++){
l0=getb0(input[c]);
l1=getb1(input[c]);
l2=getb2(input[c]);
l3=getb3(input[c]); //opt
if(l0^3==l3){ total++;
switch(startnib){//
case 0:;bitsave|=(l0);bitsave|=(l1<<2);bitsave|=(l2<<4);;startnib=3;break;
case 1:;bitsave|=(l0<<2);bitsave|=(l1<<4);bitsave|=(l2<<6);
fputc(bitsave,datafile);bitsave=0;startnib=0;break;
case 2:;bitsave|=(l0<<4);bitsave|=(l1<<6);
fputc(bitsave,datafile);bitsave=0;bitsave|=(l2);startnib=1;break;
case 3:;bitsave|=(l0<<6);fputc(bitsave,datafile);bitsave=0;
bitsave|=(l1);bitsave|=(l2<<2);startnib=2;break;;default:break;;}
output[opos]|=(1<<(bitpos));}else{//save all
switch(startnib){//no change in start nib
case 0:;bitsave|=(l0);bitsave|=(l1<<2);bitsave|=(l2<<4);bitsave|=(l3<<6);
fputc(bitsave,datafile);bitsave=0;;break;
case 1:;bitsave|=(l0<<2);bitsave|=(l1<<4);bitsave|=(l2<<6);
fputc(bitsave,datafile);bitsave=0;bitsave|=(l3);;break;
case 2:;bitsave|=(l0<<4);bitsave|=(l1<<6);
fputc(bitsave,datafile);bitsave=0;bitsave|=(l2);bitsave|=(l3<<2);;break;
case 3:;bitsave|=(l0<<6);fputc(bitsave,datafile);bitsave=0;
bitsave|=(l1);bitsave|=(l2<<2);bitsave|=(l2<<4);break;default:break;;;}

}
if(++bitpos==8){bitpos=0;opos++;}
;}

fwrite(output,1,inpsize/8+1,bitfile);
printf("Total bytes saved %llu ",total/4);

//====================================
; }

Name: Anonymous 2011-10-12 16:08

Someone just tell this nigger what a fast fourier transform is already.

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List