- 积分
- 322
- 实力分
- 点
- 金钱数
- 两
- 技术分
- 分
- 贡献分
- 分
|
楼主 |
发表于 2008-5-26 18:36:16
|
显示全部楼层
原帖由 crack4000 于 2008-5-26 13:45 发表
移植到其他65上机器上啊.我要C65的
源码:- #define FIX_ZH_CN_PATH
- #ifdef FIX_ZH_CN_PATH
- extern doZH_CNPathFix
- //ROM:A0756B3C 40 00 8D E2 ADD R0, SP, #0x40
- CODE32
- RSEG FIX_ZH_CN_PATH_MKDIR_HOOK
- BLX FIX_ZH_CN_PATH_MKDIR_
-
- //ROM:A02CD2E8 85 10 84 E2 ADD R1, R4, #0x85
- CODE32
- RSEG FIX_ZH_CN_PATH_FCOPY_HOOK
- BLX FIX_ZH_CN_PATH_FCOPY_
-
- //ROM:A0858B44 43 01 FB FB BLX sub_A071905A ; int wsprintf (WSHDR *,const char *format,...)
- CODE32
- RSEG FIX_ZH_CN_PATH_MSGWIN_HOOK
- BLX FIX_ZH_CN_PATH_MSGWIN_
-
- //ROM:A0751C90 14 00 90 E5 LDR R0, [R0,#0x14]
- CODE32
- RSEG FIX_ZH_CN_PATH_FSTATU_HOOK1
- BLX FIX_ZH_CN_PATH_FSTATU_1
- //ROM:A0752350 14 00 94 E5 LDR R0, [R4,#0x14]
- CODE32
- RSEG FIX_ZH_CN_PATH_FSTATU_HOOK2
- BLX FIX_ZH_CN_PATH_FSTATU_2
-
- //ROM:A07495D8 CF 0F 8D E2 ADD R0, SP, #0x33C
- CODE32
- RSEG FIX_ZH_CN_PATH_ISDIR_HOOK1
- BLX FIX_ZH_CN_PATH_ISDIR_1
-
- //ROM:A0756B14 40 00 8D E2 ADD R0, SP, #0x40
- CODE32
- RSEG FIX_ZH_CN_PATH_ISDIR_HOOK2
- BLX FIX_ZH_CN_PATH_ISDIR_2
- //ROM:A0749590 CF 0F 8D E2 ADD R0, SP, #0x33C
- CODE32
- RSEG FIX_ZH_CN_PATH_FIND_HOOK1
- BLX FIX_ZH_CN_PATH_FIND_1
- //ROM:A074961C 0D 00 A0 E1 MOV R0, SP
- CODE32
- RSEG FIX_ZH_CN_PATH_FIND_HOOK2
- BLX FIX_ZH_CN_PATH_FIND_2
- //ROM:A0755FD4 08 30 8D E2 ADD R3, SP, #8
- CODE32
- RSEG FIX_ZH_CN_PATH_FOPEN_HOOK
- BLX FIX_ZH_CN_PATH_FOPEN_
-
- RSEG FIX_ZH_CN_PATH_BODY
- DATA
- FMT
- DCD "%t %c"
-
-
- CODE16
- DIRECT_DO_FIX
- PUSH {R0-R7, LR}
- BL doZH_CNPathFix
- POP {R0-R7, PC}
- DO_FIX_R1
- PUSH {R0-R7, LR}
- MOV R0, R1
- BL doZH_CNPathFix
- POP {R0-R7, PC}
- FIX_ZH_CN_PATH_MKDIR_
- ADD R0, SP, #0x40
- B DIRECT_DO_FIX
-
- FIX_ZH_CN_PATH_FCOPY_
- MOV R0, #0x85
- ADD R1, R4, R0
- B DO_FIX_R1
-
- FIX_ZH_CN_PATH_FSTATU_1
- LDR R0, [R0,#0x14]
- B DIRECT_DO_FIX
-
- FIX_ZH_CN_PATH_FSTATU_2
- LDR R0, [R4,#0x14]
- B DIRECT_DO_FIX
- FIX_ZH_CN_PATH_ISDIR_1
- LDR R2, =0x33C
- ADD R0, SP, #0
- ADD R0, R0, R2
- B DIRECT_DO_FIX
-
- FIX_ZH_CN_PATH_ISDIR_2
- ADD R0, SP, #0x40
- B DIRECT_DO_FIX
-
- FIX_ZH_CN_PATH_FIND_1
- B FIX_ZH_CN_PATH_ISDIR_1
-
- FIX_ZH_CN_PATH_FIND_2
- MOV R0, SP
- B DO_FIX_R1
- FIX_ZH_CN_PATH_FOPEN_
- ADD R3, SP, #8
- B DIRECT_DO_FIX
-
- FIX_ZH_CN_PATH_MSGWIN_
- PUSH {R0-R7, LR}
- MOV R6, R0
- LDR R1, =FMT
- LDR R7, =0xA071905A+1 //wsprintf
- BLX R7
- MOV R0, #0x80
- LDR R7, =0xA0719852+1 //AllocWS
- BLX R7
- MOV R4, R0
- MOV R1, R5
- MOV R2, #0x80
- LDR R7, =0xA0987BEE+1 //utf8_2ws
- BLX R7
- MOV R0, R6
- MOV R1, R4
- LDR R7, =0xA07199B8+1 //wstrcat
- BLX R7
- MOV R0, R4
- LDR R7, =0xA071919C+1 //FreeWS
- BLX R7
- POP {R0-R7, PC}
-
-
- #endif
复制代码- __thumb void doZH_CNPathFix(char *path) @ "FIX_ZH_CN_PATH_BODY"
- {
- char *p=path;
- char *pp=p; //'\\'
- char *p1=p; //end
- char *temp=0; //temp
- int c=0;
- //if(path/0x10000000!=0xA)
- // return;
- if(*(p+1)!=':'||*(p+2)!='\\')
- return;
- while(*p1)
- {
- p1++;
- }
- while((c=*p++)>=X_CHAR)
- {
- if(c=='\\'||c==0x2F) // '/'
- pp=p;
- if(c>0x80)
- {
- if(*pp>X_CHAR)
- {
- p1++;
- temp=p1;
- while(temp>pp)
- {
- *temp=*(temp-1);
- temp--;
- }
- *pp=X_CHAR;
- temp=p;
- while((c=*temp))//goto end or next "\"
- {
- temp++;
- p=temp;
- if(c=='\\'||c==0x2F)
- {
- pp=temp;
- break;
- }
- }
- }
- }
- }
- }
复制代码- //修正中文路径操作问题
- -Z(CODE)FIX_ZH_CN_PATH_MKDIR_HOOK=A0756B3C-FFFFFFFF
- -Z(CODE)FIX_ZH_CN_PATH_FCOPY_HOOK=A02CD2E8-FFFFFFFF
- -Z(CODE)FIX_ZH_CN_PATH_FSTATU_HOOK1=A0751C90-FFFFFFFF
- -Z(CODE)FIX_ZH_CN_PATH_FSTATU_HOOK2=A0752350-FFFFFFFF
- -Z(CODE)FIX_ZH_CN_PATH_ISDIR_HOOK1=A07495D8-FFFFFFFF
- -Z(CODE)FIX_ZH_CN_PATH_ISDIR_HOOK2=A0756B14-FFFFFFFF
- -Z(CODE)FIX_ZH_CN_PATH_FIND_HOOK1=A0749590-FFFFFFFF
- -Z(CODE)FIX_ZH_CN_PATH_FIND_HOOK2=A074961C-FFFFFFFF
- -Z(CODE)FIX_ZH_CN_PATH_FOPEN_HOOK=A0755FD4-FFFFFFFF
- -Z(CODE)FIX_ZH_CN_PATH_MSGWIN_HOOK=A0858B44-FFFFFFFF
- -Z(CODE)FIX_ZH_CN_PATH_BODY=A0E23880-FFFFFFFF
复制代码 |
|