Guest User

Untitled

a guest
Jan 19th, 2018
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.67 KB | None | 0 0
  1. #include "frozen\void.h"
  2. #define tstruct typedef struct
  3. #define loop(loopx,loopy) for(loopx=0;loopx<loopy;loopx++)
  4.  
  5. #define fextension(string) strrchr(string,'.')?:".???"
  6. #define isbit(xint,ypos)    ((xint)&(1<<ypos))  
  7. #define frop(x,filename) FILE* x=fopen(filename,"rb")
  8. #define fwop(x,filename) FILE* x=fopen(filename,"wb")
  9.  
  10. #define outx(x,fil) fwrite(&x,1,sizeof(x),fil);
  11. #define mpz(x) mpz_t x;mpz_init(x);
  12. #define mpf(x) mpf_t x;mpf_init(x);
  13. //static array
  14. #define mpfr(x) MPFR_DECL_INIT(x, 53)  //returns float
  15. #define DEBUG 1
  16. #define DEBUG2 1
  17. #define DEBUG3 0
  18. #define MAXCHAIN 100000  // more for bigger files/
  19. #define C8 "Output.dat"
  20. #define SCALE 1 //was 8*inpsize
  21. #define fdisp(x) puts("");mpf_out_str(stdout,10, 0,x);
  22. //===========MAIN======================
  23. #define setch(o,ch,pos)  (o|=ch<<(pos<<1))  // pos 0-3,ch=0-3
  24. #define getbb(o,pos) ((o>>(pos<<1))&3) //get 001100>>2 &3
  25. #define getb0(b) (b&3)
  26. #define getb1(b) ((b>>2)&3)
  27. #define getb2(b) ((b>>4)&3)
  28. #define getb3(b) ((b>>6)&3)
  29.  
  30.  //(1<<(pos<<1))
  31. //========MAIN===
  32. u4 int2b(u4 v){  // 32-bit value to find the log2 of
  33. static const unsigned int b[] = {0xAAAAAAAA, 0xCCCCCCCC, 0xF0F0F0F0,
  34.                                  0xFF00FF00, 0xFFFF0000};
  35. unsigned int r = (v & b[0]) != 0;
  36.   r |= ((v & b[4]) != 0) << 4;
  37.   r |= ((v & b[3]) != 0) << 3;
  38.   r |= ((v & b[2]) != 0) << 2;
  39.   r |= ((v & b[1]) != 0) << 1;
  40. return r;}
  41.  
  42.  
  43.  main(int argc,char**argv){
  44. /*
  45. lx=x&0xf
  46. hx=(x&f0)>>4
  47. if hx^0xf==lx,setbit1
  48.  
  49. */
  50. if(!argv[1]){printf("Syntax:cmp inputfile [-d=decode]");exit(1);}
  51. //-----DECODE-------
  52. if(argv[2] && !strcmp(argv[2],"-d")){//decode Data+Bitmap
  53. u4* bitfile=(u4*)getcontent("Bitmapx16");
  54. FILE* result=fopen("Result","wb");
  55. if(!bitfile||!result){perror("File error");exit(2);}
  56.  
  57.  
  58. ;printf("Decoded to file Result");exit(10);}
  59. //------INPUT--------
  60. u8 inpsize=fsize(argv[1]);if(!inpsize){perror("input size invalid");return;};
  61. u1* input=getcontent(argv[1]);
  62. u1* output=calloc(inpsize/8 +1,1);
  63. if(!input){perror("input invalid");return;}
  64. FILE* bitfile=fopen("Bitmapx16","wb");if(!bitfile){perror("File write failed");return;};
  65. FILE* datafile=fopen("Data","wb");if(!bitfile){perror("File write failed");return;};
  66. u8 c,total=0,opos=0;u4 j;u1 l0,l1,l2,l3,bitsave=0,bitpos=0,startnib=0;
  67.  
  68. for(c=1;c<inpsize;c++){
  69. l0=getb0(input[c]);
  70. l1=getb1(input[c]);
  71. l2=getb2(input[c]);
  72. l3=getb3(input[c]); //opt
  73. if(l0^3==l3){ total++;
  74. switch(startnib){//
  75. case 0:;bitsave|=(l0);bitsave|=(l1<<2);bitsave|=(l2<<4);;startnib=3;break;
  76. case 1:;bitsave|=(l0<<2);bitsave|=(l1<<4);bitsave|=(l2<<6);
  77. fputc(bitsave,datafile);bitsave=0;startnib=0;break;
  78. case 2:;bitsave|=(l0<<4);bitsave|=(l1<<6);
  79. fputc(bitsave,datafile);bitsave=0;bitsave|=(l2);startnib=1;break;
  80. case 3:;bitsave|=(l0<<6);fputc(bitsave,datafile);bitsave=0;
  81. bitsave|=(l1);bitsave|=(l2<<2);startnib=2;break;;default:break;;}
  82. output[opos]|=(1<<(bitpos));}else{//save all
  83. switch(startnib){//no change in start nib
  84. case 0:;bitsave|=(l0);bitsave|=(l1<<2);bitsave|=(l2<<4);bitsave|=(l3<<6);
  85. fputc(bitsave,datafile);bitsave=0;;break;
  86. case 1:;bitsave|=(l0<<2);bitsave|=(l1<<4);bitsave|=(l2<<6);
  87. fputc(bitsave,datafile);bitsave=0;bitsave|=(l3);;break;
  88. case 2:;bitsave|=(l0<<4);bitsave|=(l1<<6);
  89. fputc(bitsave,datafile);bitsave=0;bitsave|=(l2);bitsave|=(l3<<2);;break;
  90. case 3:;bitsave|=(l0<<6);fputc(bitsave,datafile);bitsave=0;
  91. bitsave|=(l1);bitsave|=(l2<<2);bitsave|=(l2<<4);break;default:break;;;}
  92.  
  93. }
  94. if(++bitpos==8){bitpos=0;opos++;}
  95. ;}
  96.  
  97. fwrite(output,1,inpsize/8+1,bitfile);
  98. printf("Total bytes saved %llu ",total/4);
  99.  
  100. //====================================
  101. ; }
  102. /*
  103. mpz bitstring is very slow...
  104. 00:11:11:00
  105.  testbit(x0)
  106.  
  107. 1 int= 1<<nib| (1<<nib2)<<16
  108. */
Add Comment
Please, Sign In to add comment