0
This commit is contained in:
BIN
MemCheck【死机调查】死机调查的利器-内存泄露和溢出检测.rar
Normal file
BIN
MemCheck【死机调查】死机调查的利器-内存泄露和溢出检测.rar
Normal file
Binary file not shown.
BIN
mrp解压渐变版.zip
Normal file
BIN
mrp解压渐变版.zip
Normal file
Binary file not shown.
BIN
screen_buf.rar
Normal file
BIN
screen_buf.rar
Normal file
Binary file not shown.
84
screenshot.c
Normal file
84
screenshot.c
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
//<2F><><EFBFBD><EFBFBD> space - <20><>
|
||||||
|
//<2F><>Դ<EFBFBD>빫<EFBFBD><EBB9AB><EFBFBD><EFBFBD><EFBFBD>κθ<CEBA><CEB8>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;<EFBFBD><CDBE>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>http://ourmrp.ys168.com
|
||||||
|
//<2F><><EFBFBD><EFBFBD>16λ<36><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MTK<54>ֻ<EFBFBD><D6BB><EFBFBD>SPR<50>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
// space <20><> 2011-9-9
|
||||||
|
|
||||||
|
#include "mrc_base.h"
|
||||||
|
|
||||||
|
#define BMP_HEAD "\x42\x4D\x42\xC8\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x38\x00\x00\x00\xA0\x00\x00\x00\xA0\x00\x00\x00\x01\x00\x10\x00\x03\x00\x00\x00\x00\xC8\x00\x00\xA0\x0F\x00\x00\xA0\x0F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" //54<35>ֽ<EFBFBD>
|
||||||
|
#define BMP_HEAD_MTK "\x00\xF8\x00\x00\xE0\x07\x00\x00\x1F\x00\x00\x00\x00\x00\x00\x00" //16<31>ֽ<EFBFBD>
|
||||||
|
#define BMP_HEAD_SPR "\xF8\x00\x00\x00\x07\xE0\x00\x00\x00\x1F\x00\x00\x00\x00\x00\x00"
|
||||||
|
|
||||||
|
int32 picShot(char *pBmp,char *SaveDir,int16 x,int16 y,int16 w,int16 h,int16 max_w,int8 isSPR)
|
||||||
|
{
|
||||||
|
mr_datetime datetime;
|
||||||
|
char saveShotPath[24]={0};
|
||||||
|
int32 dirlen=mrc_strlen(SaveDir);
|
||||||
|
int8 elseNum=w%2;
|
||||||
|
char *pTempBmp=NULL;
|
||||||
|
int32 fileH=0,i=0;
|
||||||
|
|
||||||
|
mrc_getDatetime(&datetime);
|
||||||
|
mrc_sprintf(saveShotPath,"%s%02d%02d_%02d%02d_%02d.bmp",SaveDir,datetime.month ,datetime.day ,datetime.hour ,datetime.minute ,i);
|
||||||
|
for (i=1;i<100;i++)
|
||||||
|
{
|
||||||
|
if(MR_IS_FILE==mrc_fileState(saveShotPath))
|
||||||
|
{
|
||||||
|
mrc_sprintf(saveShotPath+dirlen+10,"%02d.bmp",i);
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fileH=mrc_open(saveShotPath,MR_FILE_RDWR|MR_FILE_CREATE);
|
||||||
|
if(fileH)
|
||||||
|
{
|
||||||
|
int32 fileLen=(w+elseNum)*h*2+54+16+2;
|
||||||
|
int32 addPos=0;
|
||||||
|
pTempBmp=mrc_malloc(fileLen);
|
||||||
|
mrc_memset(pTempBmp,0,fileLen);
|
||||||
|
mrc_memcpy(pTempBmp,BMP_HEAD,54);
|
||||||
|
if (isSPR==TRUE)
|
||||||
|
{
|
||||||
|
for (i=0;i<4;i++)
|
||||||
|
{
|
||||||
|
mrc_memcpy(pTempBmp+2+i,(char*)&fileLen+3-i,1);
|
||||||
|
}
|
||||||
|
for (i=0;i<4;i++)
|
||||||
|
{
|
||||||
|
mrc_memcpy(pTempBmp+18+i,(char*)&w+3-i,1);
|
||||||
|
}
|
||||||
|
for (i=0;i<4;i++)
|
||||||
|
{
|
||||||
|
mrc_memcpy(pTempBmp+22+i,(char*)&h+3-i,1);
|
||||||
|
}
|
||||||
|
mrc_memcpy(pTempBmp+54,BMP_HEAD_SPR,16);
|
||||||
|
//mrc_write(fileH,BMP_HEAD_SPR,16);
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
mrc_memcpy(pTempBmp+2,&fileLen,4);
|
||||||
|
mrc_memcpy(pTempBmp+18,&w,4);
|
||||||
|
mrc_memcpy(pTempBmp+22,&h,4);
|
||||||
|
mrc_memcpy(pTempBmp+54,BMP_HEAD_MTK,16);
|
||||||
|
//mrc_write(fileH,BMP_HEAD_MTK,16);
|
||||||
|
}
|
||||||
|
addPos=54+16;
|
||||||
|
for (i=h+y -1;i>=y;i--)
|
||||||
|
{
|
||||||
|
mrc_memcpy(pTempBmp+addPos,pBmp+(x+i*max_w )*2,w*2);
|
||||||
|
addPos+=(w+elseNum)*2;
|
||||||
|
//mrc_write(fileH,(uint8 *)pBmp+x*2 +i*max_w *2,w*2 );
|
||||||
|
//mrc_write(fileH,"\00\00",2*elseNum);
|
||||||
|
}
|
||||||
|
mrc_seek(fileH,0,MR_SEEK_SET);
|
||||||
|
mrc_write(fileH,pTempBmp,fileLen);
|
||||||
|
mrc_close(fileH);
|
||||||
|
fileH=0;
|
||||||
|
mrc_free(pTempBmp),pTempBmp=NULL;
|
||||||
|
return MR_SUCCESS;
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
return MR_FAILED;
|
||||||
|
}
|
||||||
|
}
|
||||||
29
screenshot.h
Normal file
29
screenshot.h
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
#ifndef _SCREENSHOT_H_
|
||||||
|
#define _SCREENSHOT_H_
|
||||||
|
|
||||||
|
//mrperʹ<72>õĽ<C3B5>16λbmpͼ<70><CDBC><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
/*ע<><D7A2> ֻ<>ʺ<EFBFBD><CABA><EFBFBD>16bit<69><74>Ļ
|
||||||
|
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
pBmp <09><>ͼ<EFBFBD><CDBC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>char * ָ<><D6B8>
|
||||||
|
|
||||||
|
SaveDir <09><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>(<28><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SaveDir+4λ<34><CEBB><EFBFBD><EFBFBD>+4λʱ<CEBB><CAB1>+2λ<32><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.bmp)
|
||||||
|
|
||||||
|
x,y,w,h <09>ǽ<EFBFBD>ͼλ<CDBC><CEBB>
|
||||||
|
|
||||||
|
max_h <09><><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
isSPR <09><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>SPRչѶƽ̨,ȡֵ0/1 <20><>Ӧ MTK/SPR
|
||||||
|
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
|
||||||
|
MR_SUCCESS <09><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
||||||
|
MR_FAILED <09><><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>
|
||||||
|
|
||||||
|
ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>MTK<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD>
|
||||||
|
picShot( (char *)w_getScreenBuffer,0,0,240,320,240,0);
|
||||||
|
*/
|
||||||
|
int32 picShot(char *pBmp,char *SaveDir,int16 x,int16 y,int16 w,int16 h,int16 max_w,int8 isSPR);
|
||||||
|
|
||||||
|
#endif
|
||||||
BIN
十六进制编辑器SGL.rar
Normal file
BIN
十六进制编辑器SGL.rar
Normal file
Binary file not shown.
BIN
十六进制编辑器base.rar
Normal file
BIN
十六进制编辑器base.rar
Normal file
Binary file not shown.
BIN
商城版SGL记事本110826.rar
Normal file
BIN
商城版SGL记事本110826.rar
Normal file
Binary file not shown.
85
屏幕旋转.c
Normal file
85
屏幕旋转.c
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
#include "mrc_base.h"
|
||||||
|
#include "mrc_bmp.h"
|
||||||
|
#include "debug.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
uint16 *OldScreen;//<2F><>ʵ<EFBFBD><CAB5>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||||
|
uint16 *NewScreen;//<2F><>̨<EFBFBD><CCA8>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||||
|
int32 Scr_w,Scr_h;//<2F><>Ļ<EFBFBD><C4BB>Ϣ
|
||||||
|
|
||||||
|
/******** <20>ṩһ<E1B9A9><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>ĺ<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD> ********/
|
||||||
|
/* void RotateScreen(void) */
|
||||||
|
/* <20><><EFBFBD><EFBFBD> RotateRefresh ʹ<><CAB9> */
|
||||||
|
/******** <20>ṩһ<E1B9A9><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>ĺ<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD> ********/
|
||||||
|
void RotateScreen(void)
|
||||||
|
{
|
||||||
|
mrc_getScreenSize(&Scr_w,&Scr_h);//<2F><>ȡ<EFBFBD><C8A1>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||||
|
NewScreen=mrc_malloc(Scr_w*Scr_h*2);//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD>Ƶ<EFBFBD><C6B5>,<2C><><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>1<EFBFBD><31>
|
||||||
|
mrc_memset(NewScreen,0,Scr_w*Scr_h*2);
|
||||||
|
w_setScreenBuffer(NewScreen);//<2F><><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||||
|
mrc_setScreenSize(Scr_h,Scr_w);//<2F>˴<EFBFBD>ʵ<EFBFBD>ֿ<EFBFBD><D6BF>ߵ<EFBFBD>ת
|
||||||
|
}
|
||||||
|
/******** <20><><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת90<39>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>Ļ<EFBFBD><C4BB>ˢ<EFBFBD><CBA2> ********/
|
||||||
|
/* void RotateRefresh(void) */
|
||||||
|
/* <20><><EFBFBD><EFBFBD> RotateScreen ʹ<><CAB9> */
|
||||||
|
/******** <20><><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת90<39>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>Ļ<EFBFBD><C4BB>ˢ<EFBFBD><CBA2> ********/
|
||||||
|
void RotateRefresh(void)
|
||||||
|
{
|
||||||
|
w_setScreenBuffer(OldScreen); //<2F>˴<EFBFBD><CBB4><EFBFBD>ԭ<EFBFBD><D4AD>ʵ<EFBFBD><CAB5>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||||
|
mrc_setScreenSize(Scr_w,Scr_h);//<2F>˴<EFBFBD><CBB4><EFBFBD>ԭ<EFBFBD><D4AD>ʵ<EFBFBD><CAB5>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>
|
||||||
|
mrc_bitmapShowFlip(NewScreen,0,0,(int16)Scr_h,(int16)Scr_h,(int16)Scr_w,BM_COPY|TRANS_ROT90,0,0,0);//<2F>˴<EFBFBD><CBB4><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת90<39>Ⱥ<EFBFBD>,<2C><><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>ʼ<EFBFBD><CABC>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>
|
||||||
|
mrc_refreshScreen(0,0,(int16)Scr_w,(int16)Scr_h);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8>µ<EFBFBD><C2B5><EFBFBD>Ļ
|
||||||
|
|
||||||
|
mrc_free(&NewScreen);//<2F>ͷź<CDB7>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD>Ƶ<EFBFBD><C6B5>,<2C><><EFBFBD>鵽<EFBFBD><E9B5BD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ͷ<EFBFBD>
|
||||||
|
NewScreen=NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void HorizontalScreenTest()
|
||||||
|
{
|
||||||
|
int32 f;
|
||||||
|
|
||||||
|
OldScreen = w_getScreenBuffer();//<2F><>ȡ<EFBFBD><C8A1>ʵ<EFBFBD><CAB5>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||||
|
|
||||||
|
RotateScreen();//<2F><><EFBFBD><EFBFBD>RotateRefreshʹ<68><CAB9>
|
||||||
|
|
||||||
|
mrc_bitmapNew(0, 41, 26);
|
||||||
|
mrc_bitmapLoad(0, "plane.bmp", 0, 0, 41, 26,41);
|
||||||
|
mrc_bitmapShow(0, 240,50,BM_COPY,0, 0, 41, 26);
|
||||||
|
mrc_drawText("ԭʼͼ",0,0,255,0,0,0,1);
|
||||||
|
mrc_drawLine(0,0,320,0,255,0,0);
|
||||||
|
|
||||||
|
mrc_refreshScreen(0,0,240,320);
|
||||||
|
f=mrc_open("data.bmp",12);
|
||||||
|
mrc_write(f,NewScreen,Scr_w*Scr_h*2);
|
||||||
|
mrc_close(f);
|
||||||
|
// return;
|
||||||
|
RotateRefresh();//<2F><><EFBFBD><EFBFBD>RotateScreenʹ<6E><CAB9>
|
||||||
|
}
|
||||||
|
|
||||||
|
int32 MRC_EXT_INIT(void)
|
||||||
|
{
|
||||||
|
HorizontalScreenTest();
|
||||||
|
|
||||||
|
return MR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32 MRC_EXT_EXIT(void)
|
||||||
|
{
|
||||||
|
return MR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32 mrc_appEvent(int32 code, int32 param0, int32 param1)
|
||||||
|
{
|
||||||
|
return MR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32 mrc_appPause()
|
||||||
|
{
|
||||||
|
return MR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32 mrc_appResume()
|
||||||
|
{
|
||||||
|
return MR_SUCCESS;
|
||||||
|
}
|
||||||
388
整理的ext重要函数.c
Normal file
388
整理的ext重要函数.c
Normal file
@@ -0,0 +1,388 @@
|
|||||||
|
|
||||||
|
typedef struct _mrc_extChunk_st mrc_extChunk_st;
|
||||||
|
|
||||||
|
typedef struct _mr_c_function_st // <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>RW<52><57><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
{
|
||||||
|
uint8* start_of_ER_RW; // RW<52><57>ָ<EFBFBD><D6B8>
|
||||||
|
uint32 ER_RW_Length; // RW<52><57><EFBFBD><EFBFBD>
|
||||||
|
int32 ext_type; // ext<78><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>Ϊ1ʱ<31><CAB1>ʾext<78><74><EFBFBD><EFBFBD>
|
||||||
|
mrc_extChunk_st * mrc_extChunk; // extģ<74><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľṹ<C4BD>塣
|
||||||
|
int32 stack; //stack shell 2008-2-28
|
||||||
|
} mr_c_function_st;
|
||||||
|
|
||||||
|
typedef struct _mrc_extChunk_st // <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>extģ<74><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
{
|
||||||
|
int32 check; //0x7FD854EB <20><>־
|
||||||
|
MR_LOAD_C_FUNCTION init_func; // mr_c_function_load<61><64><EFBFBD>ڵ<EFBFBD>
|
||||||
|
MR_C_FUNCTION event; // <20>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ֪
|
||||||
|
uint8* code_buf; // extģ<74><C4A3><EFBFBD><EFBFBD>ַ
|
||||||
|
int32 code_len; // extģ<74>鳤<EFBFBD><E9B3A4>
|
||||||
|
uint8* var_buf; // ȫ<>ֱ<EFBFBD><D6B1><EFBFBD>RW<52>ε<EFBFBD>ַ
|
||||||
|
int32 var_len; // RW<52><57><EFBFBD><EFBFBD>
|
||||||
|
mr_c_function_st* global_p_buf; // RW<52><57><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľṹ<C4BD>塣
|
||||||
|
int32 global_p_len; // <20><><EFBFBD><EFBFBD>
|
||||||
|
int32 timer; // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>mrc_extLoad<61><64><EFBFBD><EFBFBD>mrc_timerCreate<74><65><EFBFBD><EFBFBD>
|
||||||
|
mrc_extMainSendAppMsg_t sendAppEvent; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ext<78><74>Ϣ<EFBFBD><CFA2><EFBFBD>պ<EFBFBD><D5BA><EFBFBD>ָ<EFBFBD><D6B8>
|
||||||
|
mr_table *extMrTable; // mr_table<6C><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
#ifdef MRC_PLUGIN // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>û<EFBFBD><C3BB>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x30<33><30>С<EFBFBD><D0A1><EFBFBD><EFBFBD>Ϊֹ<CEAA><D6B9>
|
||||||
|
MR_C_FUNCTION_EX eventEx;
|
||||||
|
#endif
|
||||||
|
int32 isPause;/*1: pause ״̬0:<3A><><EFBFBD><EFBFBD>״̬*/
|
||||||
|
#ifdef SDK_MOD
|
||||||
|
mrc_init_t init_f;
|
||||||
|
mrc_event_t event_f;
|
||||||
|
mrc_pause_t pause_f;
|
||||||
|
mrc_resume_t resume_f;
|
||||||
|
mrc_exitApp_t exitApp_f;
|
||||||
|
#endif
|
||||||
|
} mrc_extChunk_st;
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
uint32* pMrTable = *(uint32**)(mr_c_function_load - 8);
|
||||||
|
|
||||||
|
/************************************
|
||||||
|
mrc_extLoad
|
||||||
|
չʾ<D5B9><CABE>ext<78><74><EFBFBD>ص<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>
|
||||||
|
************************************/
|
||||||
|
int32 mrc_extLoad (int32* extAddr, int32 len)
|
||||||
|
{
|
||||||
|
mr_table* ext_table; // <20><>ext<78><74>MrTable
|
||||||
|
mr_extChunk_st* ext_handle; // <20><>extģ<74><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
mr_c_function_st* pSt; // RW<52><57><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
|
||||||
|
if(mrc_extInitMainModule() != MR_SUCCESS )
|
||||||
|
return -1;//ʧ<><CAA7>
|
||||||
|
|
||||||
|
// Ϊ<>µ<EFBFBD>ext<78><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||||
|
ext_table = mrc_malloc(0x248); //mr_table<6C><65>
|
||||||
|
if(ext_table == NULL)
|
||||||
|
return -1;
|
||||||
|
mrc_memcpy(ext_table, pTable, 0x248);//<2F><><EFBFBD><EFBFBD>mr_table
|
||||||
|
|
||||||
|
ext_table[25] = mrc_extFunction_new; //<2F>ñ<EFBFBD><C3B1>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>滻
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD>ext<78><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||||
|
ext_handle = mrc_malloc(0x30); // <20><><EFBFBD>䡰ext<78><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||||
|
if(ext_handle == NULL)
|
||||||
|
{
|
||||||
|
mrc_free(ext_table);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
mrc_memset(ext_handle, 0, 30);
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD>ext<78><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
ext_handle->extMrTable = ext_table; //<2F><><EFBFBD>ñ<EFBFBD>
|
||||||
|
ext_handle->check = 0x7FD854EB; // EXT<58><54>־
|
||||||
|
ext_handle->timer = mrc_timerCreate();
|
||||||
|
ext_handle->sendAppEvent = mrc_extMainSendAppEventShell;
|
||||||
|
//<2F><><EFBFBD><EFBFBD>RW<52>ṹ<EFBFBD><E1B9B9>
|
||||||
|
ext_handle->global_p_buf = pSt = mrc_malloc(20);
|
||||||
|
|
||||||
|
if(pSt == NULL)
|
||||||
|
{
|
||||||
|
mrc_free(ext_table);
|
||||||
|
mrc_free(ext_handle);
|
||||||
|
return -1;//ʧ<><CAA7>
|
||||||
|
}
|
||||||
|
mrc_memset(pSt, 0, 20);
|
||||||
|
//
|
||||||
|
ext_handle->global_p_len = 20; //<2F>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD>С
|
||||||
|
ext_handle->init_func = extAddr + 8;//<2F><><EFBFBD>ڣ<EFBFBD>mr_c_function_load
|
||||||
|
ext_handle->code_buf = extAddr;// <20><EFBFBD>ַ
|
||||||
|
ext_handle->code_len = len; //ext<78><74>С
|
||||||
|
|
||||||
|
//<2F><><EFBFBD><EFBFBD>extͷ
|
||||||
|
extAddr[0] = ext_table; //<2F><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
extAddr[1] = pSt; // <20><><EFBFBD><EFBFBD>RW<52>ṹ<EFBFBD><E1B9B9>
|
||||||
|
pSt->mrc_extChunk = ext_handle; //<2F><><EFBFBD>þ<EFBFBD><C3BE><EFBFBD>
|
||||||
|
|
||||||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mrc_event(5001, )
|
||||||
|
_mr_testCom1(0, 9, extAddr, len); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD>㺯<EFBFBD><E3BAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ֪
|
||||||
|
|
||||||
|
mr_c_function_load(1); //<2F><><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>ext<78><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD>mr_c_function_load<61><64><EFBFBD><EFBFBD>RW<52>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
|
||||||
|
// <20>ٶ<EFBFBD><RW><3E><>RW<52>λ<EFBFBD>ַ<EFBFBD><D6B7>
|
||||||
|
ext_handle->event = *(<RW> + 0x14);
|
||||||
|
ext_handle->var_buf = pSt->pRW;
|
||||||
|
ext_handle->var_len = pSt->len;
|
||||||
|
|
||||||
|
(ext_handle->event)(pSt, 6, 0, *(<RW>+0xC), 0, 0);//δ֪
|
||||||
|
(ext_handle->event)(pSt, 8, *(<RW>+0x10), 0, 0, 0);
|
||||||
|
|
||||||
|
|
||||||
|
return ext_handle; // <20><><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************
|
||||||
|
<09><> EXT<58>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD> <20><>
|
||||||
|
mr_c_function_load
|
||||||
|
<09><><EFBFBD>ֳ<F0B2BFB7>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
*******************************/
|
||||||
|
int32 mr_c_function_load (int32 code)
|
||||||
|
{
|
||||||
|
mr_c_function_st* pSt = *((uint32)mr_c_function_load - 0x4); // ȡRW<52><57><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9>ָ<EFBFBD><D6B8>
|
||||||
|
void* p; int32 len;
|
||||||
|
|
||||||
|
typedef int (*PFUNC_2) (void*,int);
|
||||||
|
if( code == 1 ) // ext<78><74><EFBFBD><EFBFBD>
|
||||||
|
{
|
||||||
|
int32 a = _mr_c_function_new(mrc_extHelper, 20); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD>㡣
|
||||||
|
if( a == -2 ) return -1;
|
||||||
|
pSt->ext_type = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊext<78><74><EFBFBD><EFBFBD>
|
||||||
|
pMrTable->g_mr_timerStart = mrc_extTimerStart; // mr_table -> g_mr_timerStart
|
||||||
|
pMrTable->g_mr_timerStop = mrc_extTimerStop; // mr_table -> g_mr_timerStop
|
||||||
|
}
|
||||||
|
else // <20><>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>
|
||||||
|
{
|
||||||
|
int32 a = _mr_c_function_new(mr_helper, 20); // <20><>ֲ<EFBFBD>㺯<EFBFBD><E3BAAF>
|
||||||
|
if( a == -2 ) return -1; //<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
||||||
|
pSt->ext_type = 0;
|
||||||
|
}
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
len = mr_helper_get_rw_len(); //ȡ<><C8A1>RW<52><57><EFBFBD>ȣ<EFBFBD>ext<78>ڲ<EFBFBD><DAB2>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>ext<78><74>ͬ
|
||||||
|
pSt->ER_RW_Length = len;
|
||||||
|
|
||||||
|
p = mrc_malloc( len );
|
||||||
|
pST->Start_of_ER_RW = p;
|
||||||
|
if( p == NULL ) return -1;
|
||||||
|
mrc_memset( p, 0, len); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>0x38<33><38><EFBFBD><EFBFBD>memset<65><74>
|
||||||
|
|
||||||
|
return 0; //<2F>ɹ<EFBFBD>
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************
|
||||||
|
<09><>EXT<58>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
mr_helper
|
||||||
|
<09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||||
|
***************************************/
|
||||||
|
/**
|
||||||
|
* (void* P, int32 code, uint8* input, int32 input_len, uint8** output, int32* output_len);
|
||||||
|
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⣺
|
||||||
|
* input<75><74>Ϊһint32<33><32><EFBFBD>飬<EFBFBD><E9A3AC><EFBFBD>ڴ<EFBFBD><DAB4>ݲ<EFBFBD><DDB2><EFBFBD>
|
||||||
|
* input_len<65><6E>input<75>ֽ<EFBFBD><D6BD><EFBFBD>
|
||||||
|
* p<><70>global_p_buf ָ<><D6B8>
|
||||||
|
* code <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>
|
||||||
|
* 0<><30>mrc_init input null
|
||||||
|
* 1<><31>mrc_event input<75><74><EFBFBD><EFBFBD>ǰ3<C7B0><33>Ϊmrc_event<6E><74><EFBFBD><EFBFBD> input_len=20
|
||||||
|
* <09><><EFBFBD><EFBFBD> input[0] == 8 ʱΪext<78>˳<EFBFBD><CBB3><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>mrc_exitApp
|
||||||
|
* 4<><34>mrc_pause input=null input_len=0
|
||||||
|
* 5<><35>mrc_resume input=null input_len=0
|
||||||
|
*/
|
||||||
|
int32 mr_helper (void** pRW, int32 msg, int32 c[], int32 d)
|
||||||
|
{
|
||||||
|
uint32* RWAddr = *(uint32*)pRW + 4; // ȡRW<52><57>
|
||||||
|
int32 ret = 0; //<2F><><EFBFBD><EFBFBD>ֵ
|
||||||
|
|
||||||
|
if(msg >= 9) return 0;
|
||||||
|
switch(msg) //<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
|
||||||
|
{
|
||||||
|
case 0: // mrc_init
|
||||||
|
_mr_init_c_helper_function(); // <20><>ʼ<EFBFBD><CABC>RW<52><57>
|
||||||
|
ret = mrc_init();
|
||||||
|
mrc_refreshScreenReal();
|
||||||
|
pMrTable->mr_internal_table->mr_timer_p = "dealtimer";
|
||||||
|
break;
|
||||||
|
case 1: // mrc_event
|
||||||
|
ret = mrc_event(c[0], c[1], c[2]);
|
||||||
|
if(c[0] == 0x8) // 0x8 <20><>ƽ̨<C6BD>˳<EFBFBD><CBB3><EFBFBD>Ϣ
|
||||||
|
ret = mrc_exitApp();
|
||||||
|
mrc_refreshScreenReal();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
mrc_timerTimeout(); //δ֪
|
||||||
|
mrc_refreshScreenReal();
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
mrc_pause();
|
||||||
|
mrc_refreshScreenReal();
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
mrc_resume();
|
||||||
|
mrc_refreshScreenReal();
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
*(RWAddr + 0xC) = d; // λ<><CEBB>RW
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
*(RWAddr + 0x10) = c; // λ<><CEBB>RW
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
typedef int (*PFUNC_6) (int,int,int,int,int,int);
|
||||||
|
{
|
||||||
|
PFUNC_6* pfunc = (PFUNC) c[0];
|
||||||
|
if(pfunc)
|
||||||
|
ret = (*pfunc)(c[1],c[2],c[3],c[4],c[5],c[6]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int __cdecl _mr_intra_start(char *Str1, char *Source)
|
||||||
|
{
|
||||||
|
char v3; // [sp+Ch] [bp-4Ch]@1
|
||||||
|
int v4; // [sp+4Ch] [bp-Ch]@2
|
||||||
|
int v5; // [sp+50h] [bp-8h]@15
|
||||||
|
int i; // [sp+54h] [bp-4h]@10
|
||||||
|
|
||||||
|
memset(&v3, -858993460, 0x4Cu);
|
||||||
|
getAppInfo();
|
||||||
|
Origin_LG_mem_len = _mr_getMetaMemLimit();
|
||||||
|
if ( !_mr_mem_init_ex(*((_DWORD *)&mrc_appInfo_st + 3)) )
|
||||||
|
{
|
||||||
|
mr_event_function = 0;
|
||||||
|
mr_timer_function = 0;
|
||||||
|
mr_stop_function = 0;
|
||||||
|
mr_pauseApp_function = 0;
|
||||||
|
mr_resumeApp_function = 0;
|
||||||
|
mr_ram_file = 0;
|
||||||
|
mr_c_function_P = 0;
|
||||||
|
mr_c_function_P_len = 0;
|
||||||
|
mr_c_function_fix_p = 0;
|
||||||
|
mr_exception_str = 0;
|
||||||
|
mr_printf("Total memory:%d", LG_mem_len);
|
||||||
|
v4 = 0;
|
||||||
|
mr_screenBuf = 0;
|
||||||
|
if ( !mr_platEx(1001, 0, 0, &mr_screenBuf, &v4, 0) )
|
||||||
|
{
|
||||||
|
if ( mr_screenBuf && v4 >= 2 * mr_screen_h * mr_screen_w )
|
||||||
|
{
|
||||||
|
dword_18D0 = 1;
|
||||||
|
dword_18CC = v4;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( mr_screenBuf )
|
||||||
|
{
|
||||||
|
mr_platEx(1002, mr_screenBuf, v4, 0, 0, 0);
|
||||||
|
mr_screenBuf = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( !mr_screenBuf )
|
||||||
|
{
|
||||||
|
mr_screenBuf = mr_malloc(2 * mr_screen_h * mr_screen_w);
|
||||||
|
dword_18D0 = 0;
|
||||||
|
dword_18CC = 2 * mr_screen_h * mr_screen_w;
|
||||||
|
}
|
||||||
|
|
||||||
|
dword_18D4 = mr_screenBuf;
|
||||||
|
word_18CA = mr_screen_h;
|
||||||
|
word_18C8 = mr_screen_w;
|
||||||
|
vm_state = 0;
|
||||||
|
mr_timer_state = 0;
|
||||||
|
mr_timer_run_without_pause = 0;
|
||||||
|
bi &= 2u;
|
||||||
|
memset(&mr_bitmap, 0, 0x1E0u);
|
||||||
|
memset(&mr_sound, 0, 0x3Cu);
|
||||||
|
memset(&mr_sprite, 0, 0x14u);
|
||||||
|
memset(&mr_tile, 0, 0x3Cu);
|
||||||
|
memset(&mr_map, 0, 0xCu);
|
||||||
|
|
||||||
|
for ( i = 0; i < 3; ++i )
|
||||||
|
{
|
||||||
|
word_1610[10 * i] = 0;
|
||||||
|
word_1612[10 * i] = 0;
|
||||||
|
word_1614[10 * i] = mr_screen_w;
|
||||||
|
word_1616[10 * i] = mr_screen_h;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !Source )
|
||||||
|
Source = "_dsm";
|
||||||
|
|
||||||
|
mr_strncpy(mr_entry, Source, 0x7Fu);
|
||||||
|
mr_printf("Used by VM(include screen buffer):%d bytes", LG_mem_len - LG_mem_left);
|
||||||
|
mr_state = 1;
|
||||||
|
v5 = mr_doExt(Str1);
|
||||||
|
|
||||||
|
if ( v5 )
|
||||||
|
{
|
||||||
|
mr_state = 5;
|
||||||
|
mr_stop();
|
||||||
|
mr_printf("init failed");
|
||||||
|
mr_connectWAP("http://wap.skmeg.com/dsmWap/error.jsp");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _chkesp();
|
||||||
|
}
|
||||||
|
|
||||||
|
int __cdecl mr_timer()
|
||||||
|
{
|
||||||
|
char v1; // [sp+Ch] [bp-44h]@1
|
||||||
|
int v2; // [sp+4Ch] [bp-4h]@11
|
||||||
|
|
||||||
|
memset(&v1, -858993460, 0x44u);
|
||||||
|
if ( mr_timer_state == 1 )
|
||||||
|
{
|
||||||
|
mr_timer_state = 0;
|
||||||
|
if ( mr_state == 1 || mr_timer_run_without_pause && mr_state == 2 )
|
||||||
|
{
|
||||||
|
if ( !mr_timer_function || (mr_timer_function(), v2 = _chkesp(), v2 == 1) )
|
||||||
|
_mr_TestComC(801, 0, 1, 2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( mr_state == 3 )
|
||||||
|
{
|
||||||
|
mr_stop();
|
||||||
|
_mr_intra_start(start_filename, &_pad__1__mr_md5_finish__9_9);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mr_printf("warning:mr_timer event unexpected!");
|
||||||
|
}
|
||||||
|
return _chkesp();
|
||||||
|
}
|
||||||
|
|
||||||
|
int __cdecl mr_start_dsm(char *Source)
|
||||||
|
{
|
||||||
|
char v2; // [sp+Ch] [bp-4Ch]@1
|
||||||
|
int v3; // [sp+4Ch] [bp-Ch]@1
|
||||||
|
int v4; // [sp+50h] [bp-8h]@2
|
||||||
|
int v5; // [sp+54h] [bp-4h]@2
|
||||||
|
|
||||||
|
memset(&v2, -858993460, 0x4Cu);
|
||||||
|
if ( !mr_getScreenInfo(&v3) )
|
||||||
|
{
|
||||||
|
mr_screen_w = v3;
|
||||||
|
mr_screen_h = v4;
|
||||||
|
mr_screen_bit = v5;
|
||||||
|
|
||||||
|
memset(&pack_filename, 0, 0x80u);
|
||||||
|
|
||||||
|
if ( Source && *Source == 42 )
|
||||||
|
{
|
||||||
|
strcpy(&pack_filename, Source);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( Source && *Source == 37 )
|
||||||
|
{
|
||||||
|
strcpy(&pack_filename, Source + 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( Source && *Source == 35 && Source[1] == 60 )
|
||||||
|
strcpy(&pack_filename, Source + 2);
|
||||||
|
else
|
||||||
|
strcpy(&pack_filename, "*A");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mr_printf(&pack_filename);
|
||||||
|
memset(old_pack_filename, 0, 0x80u);
|
||||||
|
memset(old_start_filename, 0, 0x80u);
|
||||||
|
memset(start_fileparameter, 0, 0x80u);
|
||||||
|
*((_DWORD *)&mrc_appInfo_st + 3) = 0;
|
||||||
|
_mr_intra_start("cfunction.ext", Source);
|
||||||
|
|
||||||
|
}
|
||||||
|
return _chkesp();
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user