⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rpl_t22u.c

📁 用src,dest分别存放旧内容,新内容的最可靠binary替换器
💻 C
字号:
/*unicode/text格式,前者,始0xff,0xfe,2字节存ASCII
1啊2亍:国标2312,"啊":头,16区1位,2级头"亍":56区1位,u/t存成31,0,4a,55,32,0,8d,4e/31,b0,a1,32,d8,a1
各国煜用符表示码页.日语,表为8或16位多字节;其他语,表为16位u宽符
wcstombs:宽->多字节,mbstowcs相反.置936转汉字页setlocale*/
#include <conio.h>
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <memory.h>
#include <mbstring.h>
#include <sys/stat.h>

#define	rpt(h,F,C,c) fprintf(F,"%c%08x%c%c",h,_c0.u[5]-old_sz,C,c);

union{
struct _stat stat;
char*LP_ch[6];
FILE*LP_io[6];
size_t u[6];
}_c0;

size_t old_sz,new_sz=0;

__inline void heap(size_t n){
	if(!(_c0.LP_ch[3]=malloc(n)))
		exit(0);
}

void Open(FILE**a,char*c,char*m){
	if(!(*a=fopen(c,m))){
		printf("\n%s fail",c);
		_fcloseall();
		exit(0);
	}
}

typedef union{
char*p;
size_t u;
wchar_t S[2];
}O4;

#define v_bid "v:\\bid"

void main(int ac,O4 av[]){
printf("\
s(uppress_rpl_ask)|t(ext)|u(nicode)=av1,av2/3=old/new_data,may_2_1st_ch=memicmp)\
av4=Hex_rpl_bias(eg,2f);v:\\bid=convert_format;Hex_pry_bias|replace_data(in these\
:hdr exit 1,IF not errorlevel 1 GOTO hdr)av!=dev(TYPE nul>n);eg,sh.20 ton I:cwt");
	switch(ac){
		case 2:
			_stat(av[1].p,&_c0.stat);
			old_sz=_c0.stat.st_size;

			Open(&_c0.LP_io[1],av[1].p,"rb");

			setlocale(LC_CTYPE,".OCP");
			if('u'==*av[1].p){
				if(!(_c0.LP_ch[0]=malloc(old_sz)))
					exit(0);

				fseek(_c0.LP_io[1],sizeof(wchar_t),SEEK_SET);//跳u头

				old_sz-=sizeof(wchar_t);
				fread(_c0.LP_ch[0],1,old_sz,_c0.LP_io[1]);
				fclose(_c0.LP_io[1]);

				heap(old_sz);
/*
	mov	eax, DWORD PTR _old_sz
	push	eax
	call	_heap
	add	esp, 4

  ; 28   : __inline void heap(size_t n){

	push	ebp
	mov	ebp, esp
	sub	esp, 64					; 00000040H
	push	ebx
	push	esi
	push	edi
	lea	edi, DWORD PTR [ebp-64]
	mov	ecx, 16					; 00000010H
	mov	eax, -858993460				; ccccccccH
	rep stosd

; 29   : 	_c0.LP_ch[3]=malloc(n);

	mov	eax, DWORD PTR _n$[ebp]
	push	eax
	call	_malloc
	add	esp, 4
	mov	DWORD PTR __c0+12, eax

-/ZI +Ob1
	mov	ecx, DWORD PTR _old_sz
	mov	DWORD PTR $T1152[ebp], ecx
	mov	edx, DWORD PTR $T1152[ebp]
	push	edx
	call	_malloc
	add	esp, 4
*/
				*(wchar_t*)(_c0.LP_ch[0]+old_sz)=L'\0';
				new_sz=wcstombs(_c0.LP_ch[3],(wchar_t*)_c0.LP_ch[0],old_sz);
			}else
				if('t'==*av[1].p){
					heap(old_sz+1);

					fread(_c0.LP_ch[3],1,old_sz,_c0.LP_io[1]);
					fclose(_c0.LP_io[1]);

					*(_c0.LP_ch[3]+old_sz)=0;
					old_sz=_mbslen(_c0.LP_ch[3]);//!validity
					printf("\n_mbslen got the number of multibyte characters:0x%08x",old_sz);

					if(!(_c0.LP_ch[0]=malloc(old_sz*2)))
						exit(0);

					new_sz=mbstowcs((wchar_t*)_c0.LP_ch[0],_c0.LP_ch[3],old_sz);
				}else
					exit(0);

			if(new_sz!=-1){//0前wchar_t数
				Open(&_c0.LP_io[4],v_bid,"wb");

				if('t'==*av[1].p){
					fwprintf(_c0.LP_io[4],L"%c",0xfeff);//添u头
					_c0.LP_ch[3]=_c0.LP_ch[0];
					new_sz<<=1;
				}

				fwrite(_c0.LP_ch[3],1,new_sz,_c0.LP_io[4]);
				fclose(_c0.LP_io[4]);
			}else
				printf("\n%s no convert",av[1].p);

			exit(0);

		case 3:
			goto pry_rpl;

		case 4:case 5:
			_stat(av[3].p,&_c0.stat);//new
			new_sz=_c0.stat.st_size;

pry_rpl:	_stat(av[2].p,&_c0.stat);//old
			heap((old_sz=_c0.stat.st_size)*2+new_sz);

			Open(&_c0.LP_io[1],av[2].p,"rb");
			fread(_c0.LP_ch[3]+old_sz,1,old_sz,_c0.LP_io[1]);
			fclose(_c0.LP_io[1]);

			if(3<ac){
				if(new_sz){
					Open(&_c0.LP_io[1],av[3].p,"rb");
					fread(_c0.LP_ch[3]+old_sz*2,1,new_sz,_c0.LP_io[1]);
					fclose(_c0.LP_io[1]);
				}

				if(4<ac)
					av[3].u=strtoul(av[4].p,NULL,16);
				
				if('s'==*av[1].p)
					_c0.u[2]='Y';
				else
					_c0.u[2]=32;
			}

			Open(&_c0.LP_io[1],av[1].p,"rb");//src
			Open(&_c0.LP_io[4],v_bid,"wb");

			_c0.u[5]=av[0].u=0;
			while(1){
				if(old_sz!=(_c0.u[0]=fread(_c0.LP_ch[3],1,old_sz,_c0.LP_io[1]))){
					if(4>ac)
						printf("\npry_cnt=0x%x",av[0].u);
					else
						if(_c0.u[0])
							fwrite(_c0.LP_ch[3],1,_c0.u[0],_c0.LP_io[4]);

bye:				_fcloseall();
					exit(_c0.u[2]&128?1:0);//pry,rpl
				}

				_c0.u[5]+=_c0.u[0];

				if('m'==*av[2].p&&_memicmp(_c0.LP_ch[3],_c0.LP_ch[3]+old_sz,old_sz)||\
					'm'!=*av[2].p&&memcmp(_c0.LP_ch[3],_c0.LP_ch[3]+old_sz,old_sz)){

					if(old_sz>(_c0.u[0]=1))
						if('m'==*av[2].p)//A即a
							goto ftell;
						else
							while(old_sz!=_c0.u[0]){
								if(*(_c0.LP_ch[3]+_c0.u[0])==*(_c0.LP_ch[3]+old_sz)){
ftell:								_c0.u[5]+=_c0.u[0]-old_sz;
									fseek(_c0.LP_io[1],_c0.u[0]-old_sz,SEEK_CUR);
									break;
								}
								_c0.u[0]++;
							}

					if(3<ac)
						fwrite(_c0.LP_ch[3],1,_c0.u[0],_c0.LP_io[4]);
				}else
					if(4>ac){
						av[0].u++;
						rpt('H',_c0.LP_io[4],'\r','\n')
						goto ge_n;
					}else{
						if(4<ac&&av[3].u!=_c0.u[5]-old_sz)
							goto asis;

						if(_c0.u[2]&32){//!N&&!Y
							rpt('\n',stdout,':',0)
							printf("rpl(n(o_now),yes|No(from now on),Yes|^C)");
							if(3==(_c0.u[2]=_getche()))
								goto bye;
						}

						if(_c0.u[2]&1){//Y||y
							if(new_sz)
								fwrite(_c0.LP_ch[3]+old_sz*2,1,new_sz,_c0.LP_io[4]);
ge_n:						_c0.u[2]|=128;
							continue;
						}

asis:					fwrite(_c0.LP_ch[3],1,old_sz,_c0.LP_io[4]);
					}
			}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -