############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 08/Jun/2010 15:03:30 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = F:\SVN\cn\Master\getConfig.c # # Command line = F:\SVN\cn\Master\getConfig.c -D NEWSGOLD -lC # # F:\SVN\cn\Master\Release_NEWSGOLD\List\ -o # # F:\SVN\cn\Master\Release_NEWSGOLD\Obj\ -s9 # # --no_unroll --no_clustering --cpu_mode arm --endian # # little --cpu ARM926EJ-S --stack_align 4 --interwork # # -e --fpu None --dlib_config "F:\software\Embedded # # Workbench 4.0 Evaluation\ARM\LIB\dl5tpainl8n.h" -I # # "F:\software\Embedded Workbench 4.0 # # Evaluation\ARM\INC\" --inline_threshold=2 # # List file = F:\SVN\cn\Master\Release_NEWSGOLD\List\getConfig.lst # # Object file = F:\SVN\cn\Master\Release_NEWSGOLD\Obj\getConfig.r79 # # # # # ############################################################################## F:\SVN\cn\Master\getConfig.c 1 /* 2 * 文件名: getConfig.c 3 * 作者: BingK(binghelingxi) 4 * 5 * 最后修改日期: 2008.08.05 6 * 7 * 作用: 读取config.txt,并进行解析,储存结果,还提供了一些文字处理函数 8 * 备注: WINTEL_DEBUG为使用在windows中使用编译器进行调试的条件编译项目 9 * 10 */ 11 12 #ifdef WINTEL_DEBUG 13 #include 14 #include 15 #include 16 #include 17 #else 18 #include "..\inc\swilib.h" 19 #endif 20 #include "getConfig.h" 21 #include "ptcFileWork.h" 22 #include "usedstr.h" 23 #include "string.h" 24 #include "main.h" 25 26 27 #ifdef WINTEL_DEBUG 28 #define PATCH_DIR "E:\\SRC\\SVN\\SieELF\\Master\\Patches\\" 29 char cfg_buf[CONFIG_SIZE]; 30 int patch_n=0; 31 #define mfree free 32 33 #else 34 \ In segment DATA_Z, align 4, align-sorted 35 char cfg_buf[CONFIG_SIZE]; \ cfg_buf: \ 00000000 DS8 49152 36 //char *cfg_buf; 37 38 #endif 39 \ In segment DATA_Z, align 4, align-sorted 40 PTC_CONFIG * volatile ptcfgtop=0; \ ptcfgtop: \ 00000000 DS8 4 41 42 43 //打开config.txt并载入到cfg_buf \ In segment CODE, align 4, keep-with-next 44 int loadConfig(void) 45 { 46 char cfg_path[128]=PATCH_DIR; \ loadConfig: \ 00000000 CC109FE5 LDR R1,??loadConfig_0 ;; `?` \ 00000004 70402DE9 PUSH {R4-R6,LR} \ 00000008 ACD04DE2 SUB SP,SP,#+172 \ 0000000C 04008DE2 ADD R0,SP,#+4 \ 00000010 8030A0E3 MOV R3,#+128 \ ??loadConfig_1: \ 00000014 043053E2 SUBS R3,R3,#+4 \ 00000018 032091E7 LDR R2,[R1, R3] \ 0000001C 032080E7 STR R2,[R0, R3] \ 00000020 FBFFFF1A BNE ??loadConfig_1 47 int size=0; 48 #ifdef WINTEL_DEBUG 49 FILE *fp; 50 strcpy(cfg_path, "E:\\SRC\\SVN\\SieELF\\Master\\Patches\\PTC\\configs.txt"); 51 fp=fopen(cfg_path, "rb"); 52 if(!fp) 53 { 54 cfg_buf[0]=0; 55 return 0; 56 } 57 size=fread(cfg_buf, sizeof(char), CONFIG_SIZE, fp); 58 fclose(fp); 59 #else 60 int f; 61 unsigned int ferr; 62 FSTATS fstat; 63 strcat(cfg_path, PTC_FOLDR); \ 00000024 AC109FE5 LDR R1,??loadConfig_0+0x4 ;; `?` 64 strcat(cfg_path, "configs.txt"); 65 if(GetFileStats(cfg_path,&fstat,&ferr)!=-1) \ 00000028 0040E0E3 MVN R4,#+0 \ 0000002C 170000EF SWI +23 \ 00000030 A4109FE5 LDR R1,??loadConfig_0+0x8 ;; `?` \ 00000034 04008DE2 ADD R0,SP,#+4 \ 00000038 170000EF SWI +23 \ 0000003C 0D20A0E1 MOV R2,SP \ 00000040 84108DE2 ADD R1,SP,#+132 \ 00000044 04008DE2 ADD R0,SP,#+4 \ 00000048 840000EF SWI +132 \ 0000004C 040050E1 CMP R0,R4 \ 00000050 1C00000A BEQ ??loadConfig_2 66 { 67 f=fopen(cfg_path, A_BIN+A_ReadOnly, P_READ, &ferr); \ 00000054 0D30A0E1 MOV R3,SP \ 00000058 8020A0E3 MOV R2,#+128 \ 0000005C 801CA0E3 MOV R1,#+32768 \ 00000060 04008DE2 ADD R0,SP,#+4 \ 00000064 0A0000EF SWI +10 \ 00000068 0050A0E1 MOV R5,R0 68 if(f==-1) \ 0000006C 040055E1 CMP R5,R4 \ 00000070 1400000A BEQ ??loadConfig_2 69 { 70 return 0; 71 } 72 size=fstat.size; \ 00000074 88409DE5 LDR R4,[SP, #+136] 73 if(size<=0) \ 00000078 010054E3 CMP R4,#+1 \ 0000007C 110000BA BLT ??loadConfig_2 74 return 0; 75 //cfg_buf=malloc((size+3)&(~3)); 76 if(fread(f, cfg_buf, size, &ferr)!=size) \ 00000080 ........ LDR R6,??DataTable0 ;; cfg_buf \ 00000084 0D30A0E1 MOV R3,SP \ 00000088 0420A0E1 MOV R2,R4 \ 0000008C 0610A0E1 MOV R1,R6 \ 00000090 0B0000EF SWI +11 \ 00000094 040050E1 CMP R0,R4 \ 00000098 0D10A0E1 MOV R1,SP \ 0000009C 0500A0E1 MOV R0,R5 \ 000000A0 0200000A BEQ ??loadConfig_3 77 { 78 fclose(f, &ferr); \ 000000A4 0D0000EF SWI +13 79 //mfree(cfg_buf); 80 return 0; \ 000000A8 0000A0E3 MOV R0,#+0 \ 000000AC 030000EA B ??loadConfig_4 81 } 82 fclose(f, &ferr); \ ??loadConfig_3: \ 000000B0 0D0000EF SWI +13 83 cfg_buf[size]=0; \ 000000B4 0000A0E3 MOV R0,#+0 \ 000000B8 0600C4E7 STRB R0,[R4, +R6] 84 } 85 else 86 return 0; 87 #endif 88 return 1; \ 000000BC 0100A0E3 MOV R0,#+1 \ ??loadConfig_4: \ 000000C0 ACD08DE2 ADD SP,SP,#+172 \ 000000C4 7080BDE8 POP {R4-R6,PC} \ ??loadConfig_2: \ 000000C8 0000A0E3 MOV R0,#+0 \ 000000CC ACD08DE2 ADD SP,SP,#+172 \ 000000D0 7080BDE8 POP {R4-R6,PC} ;; return \ ??loadConfig_0: \ 000000D4 ........ DC32 `?` \ 000000D8 ........ DC32 `?` \ 000000DC ........ DC32 `?` 89 } 90 //将一个PTC_CONFIG指针添加到链表,即添加一个补丁 \ In segment CODE, align 4, keep-with-next 91 void addPatchConfigList(void) 92 { \ addPatchConfigList: \ 00000000 00402DE9 PUSH {LR} 93 PTC_CONFIG *ptcfg=malloc(sizeof(PTC_CONFIG)); \ 00000004 A400A0E3 MOV R0,#+164 \ 00000008 140000EF SWI +20 94 ptcfg->prev=0; \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 001080E5 STR R1,[R0, #+0] 95 ptcfg->next=0; \ 00000014 041080E5 STR R1,[R0, #+4] 96 ptcfg->patchonoff=127; //all profile on, patch off \ 00000018 7F20A0E3 MOV R2,#+127 \ 0000001C 0820C0E5 STRB R2,[R0, #+8] 97 ptcfg->patchInfo=0; \ 00000020 1C1080E5 STR R1,[R0, #+28] 98 ptcfg->mainitem.smName[0]=0; \ 00000024 2010C0E5 STRB R1,[R0, #+32] 99 ptcfg->mainitem.item=0; \ 00000028 A01080E5 STR R1,[R0, #+160] 100 ptcfg->needSaveData=0; \ 0000002C 0C1080E5 STR R1,[R0, #+12] 101 ptcfg->memory=0; \ 00000030 141080E5 STR R1,[R0, #+20] 102 ptcfg->disableProfile=0; \ 00000034 101080E5 STR R1,[R0, #+16] 103 ptcfg->offset=0; \ 00000038 181080E5 STR R1,[R0, #+24] 104 if(!ptcfgtop) \ 0000003C ........ LDR R1,??DataTable4 ;; ptcfgtop \ 00000040 002091E5 LDR R2,[R1, #+0] \ 00000044 000052E3 CMP R2,#+0 105 ptcfgtop=ptcfg; \ 00000048 00008105 STREQ R0,[R1, #+0] \ 0000004C 0300000A BEQ ??addPatchConfigList_0 106 else 107 { 108 PTC_CONFIG *ptcfg_1=ptcfgtop; \ 00000050 002091E5 LDR R2,[R1, #+0] 109 ptcfgtop=ptcfg; \ 00000054 000081E5 STR R0,[R1, #+0] 110 ptcfg->next=ptcfg_1; \ 00000058 042080E5 STR R2,[R0, #+4] 111 ptcfg_1->prev=ptcfg; \ 0000005C 000082E5 STR R0,[R2, #+0] 112 } 113 patch_n++; \ ??addPatchConfigList_0: \ 00000060 0C009FE5 LDR R0,??addPatchConfigList_1 ;; patch_n \ 00000064 001090E5 LDR R1,[R0, #+0] \ 00000068 011081E2 ADD R1,R1,#+1 \ 0000006C 001080E5 STR R1,[R0, #+0] 114 } \ 00000070 0080BDE8 POP {PC} ;; return \ ??addPatchConfigList_1: \ 00000074 ........ DC32 patch_n 115 116 //添加作者,版本等信息 \ In segment CODE, align 4, keep-with-next 117 void addToPatchInfo(char *pdata) 118 { \ addToPatchInfo: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 119 PATCH_INFO *ptcinfo=malloc(sizeof(PATCH_INFO)); \ 00000008 BC00A0E3 MOV R0,#+188 \ 0000000C 140000EF SWI +20 \ 00000010 0050A0E1 MOV R5,R0 120 char *pp=pdata; 121 char *p1; //start 122 char *p2; //end 123 ptcinfo->patchName[0]=0; \ 00000014 0000A0E3 MOV R0,#+0 \ 00000018 0000C5E5 STRB R0,[R5, #+0] 124 ptcinfo->patchID[0]=0; \ 0000001C 8000C5E5 STRB R0,[R5, #+128] 125 ptcinfo->info=0; \ 00000020 B80085E5 STR R0,[R5, #+184] 126 ptcinfo->author[0]=0; \ 00000024 9800C5E5 STRB R0,[R5, #+152] 127 ptcinfo->version[0]=0; \ 00000028 9000C5E5 STRB R0,[R5, #+144] 128 p1=gotoMyStrStart(pp); \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 ........ _BLF gotoMyStrStart,??gotoMyStrStart??rA \ 00000034 0060A0E1 MOV R6,R0 129 p2=gotoMyStrEnd(pp); \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C ........ _BLF gotoMyStrEnd,??gotoMyStrEnd??rA 130 strnCopyWithEnd(ptcinfo->patchName, p1, p2-p1); \ 00000040 062040E0 SUB R2,R0,R6 \ 00000044 0610A0E1 MOV R1,R6 \ 00000048 0500A0E1 MOV R0,R5 \ 0000004C ........ _BLF strnCopyWithEnd,??strnCopyWithEnd??rA 131 if((pp=strstrInQuote(pdata, "ver="))||(pp=strstrInQuote(pdata, "version="))) \ 00000050 5C119FE5 LDR R1,??addToPatchInfo_0+0x8 ;; `?` \ 000004E4 0400A0E1 MOV R0,R4 \ 000004E8 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 000004EC 0080B0E1 MOVS R8,R0 \ 000004F0 6500000A BEQ ??doItemJob_25 543 { 544 if(isCurrectItem(p1)) \ ??doItemJob_23: \ 000004F4 0800A0E1 MOV R0,R8 \ 000004F8 ........ BL isCurrectItem \ 000004FC 000050E3 CMP R0,#+0 \ 00000500 6100000A BEQ ??doItemJob_25 545 { 546 DATA_BYTE *dbyte=malloc(sizeof(DATA_BYTE)); \ 00000504 0300A0E3 MOV R0,#+3 \ 00000508 140000EF SWI +20 \ 0000050C 00A0A0E1 MOV R10,R0 547 dbyte->initData=0; \ 00000510 0290CAE5 STRB R9,[R10, #+2] 548 dbyte->min=127; 549 dbyte->min=~(dbyte->min)+1; \ 00000514 8100A0E3 MOV R0,#+129 \ 00000518 0000CAE5 STRB R0,[R10, #+0] 550 #ifdef WINTEL_DEBUG 551 dbyte->max=127; 552 #else 553 dbyte->max=0xFF; \ 0000051C FF00A0E3 MOV R0,#+255 \ 00000520 0100CAE5 STRB R0,[R10, #+1] 554 #endif 555 pp=gotoRealPos(p1); \ 00000524 0800A0E1 MOV R0,R8 \ 00000528 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 0000052C 0080A0E1 MOV R8,R0 556 p1=gotoMyStrStart(pp); \ 00000530 ........ _BLF gotoMyStrStart,??gotoMyStrStart??rA \ 00000534 00B0A0E1 MOV R11,R0 557 p2=gotoMyStrEnd(pp); \ 00000538 0800A0E1 MOV R0,R8 \ 0000053C ........ _BLF gotoMyStrEnd,??gotoMyStrEnd??rA 558 strnCopyWithEnd(temp, p1, p2-p1); \ 00000540 0B2040E0 SUB R2,R0,R11 \ 00000544 0B10A0E1 MOV R1,R11 \ 00000548 08008DE2 ADD R0,SP,#+8 \ 0000054C ........ _BLF strnCopyWithEnd,??strnCopyWithEnd??rA 559 if((p1=strstrInQuote(p, STR_VL))||(p1=strstrInQuote(p, STR_VL1))) \ 00000550 0710A0E1 MOV R1,R7 \ 00000554 0400A0E1 MOV R0,R4 \ 00000558 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 0000055C 000050E3 CMP R0,#+0 \ 00000560 0400001A BNE ??doItemJob_26 \ 00000564 0610A0E1 MOV R1,R6 \ 00000568 0400A0E1 MOV R0,R4 \ 0000056C ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000570 000050E3 CMP R0,#+0 \ 00000574 0900000A BEQ ??doItemJob_27 560 { 561 pp=gotoRealPos(p1); \ ??doItemJob_26: \ 00000578 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 0000057C 0080A0E1 MOV R8,R0 562 str2num_char(pp, &dbyte->initData, dbyte->max, dbyte->min, 0); \ 00000580 0000A0E3 MOV R0,#+0 \ 00000584 01002DE9 PUSH {R0} \ 00000588 0030DAE5 LDRB R3,[R10, #+0] \ 0000058C 0120DAE5 LDRB R2,[R10, #+1] \ 00000590 02108AE2 ADD R1,R10,#+2 \ 00000594 0800A0E1 MOV R0,R8 \ 00000598 ........ _BLF str2num_char,??str2num_char??rA \ 0000059C 04D08DE2 ADD SP,SP,#+4 563 } 564 if((p1=strstrInQuote(p, STR_RANGE1))||(p1=strstrInQuote(p, STR_RANGE2))) \ ??doItemJob_27: \ 000005A0 F01D9FE5 LDR R1,??doItemJob_24+0xC ;; STR_RANGE1 \ 000005A4 0400A0E1 MOV R0,R4 \ 000005A8 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 000005AC 0080B0E1 MOVS R8,R0 \ 000005B0 0400001A BNE ??doItemJob_28 \ 000005B4 E01D9FE5 LDR R1,??doItemJob_24+0x10 ;; STR_RANGE2 \ 000005B8 0400A0E1 MOV R0,R4 \ 000005BC ........ _BLF strstrInQuote,??strstrInQuote??rA \ 000005C0 0080B0E1 MOVS R8,R0 \ 000005C4 1F00000A BEQ ??doItemJob_29 565 { 566 pp=gotoRealPos(p1); \ ??doItemJob_28: \ 000005C8 0800A0E1 MOV R0,R8 \ 000005CC ........ _BLF gotoRealPos,??gotoRealPos??rA \ 000005D0 0080A0E1 MOV R8,R0 567 str2num_char(pp, &dbyte->min, dbyte->max, dbyte->min, 0); \ 000005D4 0000A0E3 MOV R0,#+0 \ 000005D8 01002DE9 PUSH {R0} \ 000005DC 0030DAE5 LDRB R3,[R10, #+0] \ 000005E0 0120DAE5 LDRB R2,[R10, #+1] \ 000005E4 0A10A0E1 MOV R1,R10 \ 000005E8 0800A0E1 MOV R0,R8 \ 000005EC ........ _BLF str2num_char,??str2num_char??rA \ 000005F0 04D08DE2 ADD SP,SP,#+4 \ 000005F4 000000EA B ??doItemJob_30 568 //while(*pp>='0'&&*pp<='9') //leave min 569 // pp++; 570 while(*pp&&*pp!='.') 571 pp++; \ ??doItemJob_31: \ 000005F8 018088E2 ADD R8,R8,#+1 \ ??doItemJob_30: \ 000005FC 0000D8E5 LDRB R0,[R8, #+0] \ 00000600 000050E3 CMP R0,#+0 \ 00000604 2E005013 CMPNE R0,#+46 \ 00000608 FAFFFF1A BNE ??doItemJob_31 572 while(*pp<'0'||*pp>'9') //to max \ ??doItemJob_32: \ 0000060C 0000D8E5 LDRB R0,[R8, #+0] \ 00000610 300050E3 CMP R0,#+48 \ 00000614 0100003A BCC ??doItemJob_33 \ 00000618 3A0050E3 CMP R0,#+58 \ 0000061C 0100003A BCC ??doItemJob_34 573 pp++; \ ??doItemJob_33: \ 00000620 018088E2 ADD R8,R8,#+1 \ 00000624 F8FFFFEA B ??doItemJob_32 574 str2num_char(pp, &dbyte->max, dbyte->max, dbyte->min, 0); \ ??doItemJob_34: \ 00000628 0000A0E3 MOV R0,#+0 \ 0000062C 01002DE9 PUSH {R0} \ 00000630 0030DAE5 LDRB R3,[R10, #+0] \ 00000634 0120DAE5 LDRB R2,[R10, #+1] \ 00000638 01108AE2 ADD R1,R10,#+1 \ 0000063C 0800A0E1 MOV R0,R8 \ 00000640 ........ _BLF str2num_char,??str2num_char??rA \ 00000644 04D08DE2 ADD SP,SP,#+4 575 } 576 pp=gotoRealPos(p+1); \ ??doItemJob_29: \ 00000648 010084E2 ADD R0,R4,#+1 \ 0000064C ........ _BLF gotoRealPos,??gotoRealPos??rA \ 00000650 0040A0E1 MOV R4,R0 577 str2num(pp, &bytePos, 0, 0, 0); \ 00000654 0000A0E3 MOV R0,#+0 \ 00000658 01002DE9 PUSH {R0} \ 0000065C 0030A0E1 MOV R3,R0 \ 00000660 0020A0E1 MOV R2,R0 \ 00000664 04108DE2 ADD R1,SP,#+4 \ 00000668 0400A0E1 MOV R0,R4 \ 0000066C ........ _BLF str2num,??str2num??rA 578 addItemToConfig(dbyte, subMenu, TYPE_BYTE, bytePos+ptcfgtop->offset, temp); \ 00000670 E0199FE5 LDR R1,??doItemJob_8+0x4 ;; ptcfgtop \ 00000674 0C008DE2 ADD R0,SP,#+12 \ 00000678 01002DE9 PUSH {R0} \ 0000067C 08009DE5 LDR R0,[SP, #+8] \ 00000680 001091E5 LDR R1,[R1, #+0] \ 00000684 0420A0E3 MOV R2,#+4 \ 00000688 C60500EA B ??doItemJob_35 579 return; 580 } 581 } 582 if((p1=strstrInQuote(p, " int "))||(p1=strstrInQuote(p, " i "))) \ ??doItemJob_25: \ 0000068C 101D9FE5 LDR R1,??doItemJob_24+0x18 ;; `?` \ 00000690 0400A0E1 MOV R0,R4 \ 00000694 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000698 0080B0E1 MOVS R8,R0 \ 0000069C 0400001A BNE ??doItemJob_36 \ 000006A0 6B1F8FE2 ADR R1,??doItemJob_22+0x4 ;; " i " \ 000006A4 0400A0E1 MOV R0,R4 \ 000006A8 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 000006AC 0080B0E1 MOVS R8,R0 \ 000006B0 6800000A BEQ ??doItemJob_37 583 { 584 if(isCurrectItem(p1)) \ ??doItemJob_36: \ 000006B4 0800A0E1 MOV R0,R8 \ 000006B8 ........ BL isCurrectItem \ 000006BC 000050E3 CMP R0,#+0 \ 000006C0 6400000A BEQ ??doItemJob_37 585 { 586 DATA_INT *dint=malloc(sizeof(DATA_INT)); \ 000006C4 0C00A0E3 MOV R0,#+12 \ 000006C8 140000EF SWI +20 \ 000006CC 00A0A0E1 MOV R10,R0 587 dint->initData=0; \ 000006D0 08908AE5 STR R9,[R10, #+8] 588 dint->max=0xFFFFFFF; \ 000006D4 F004E0E3 MVN R0,#-268435456 \ 000006D8 04008AE5 STR R0,[R10, #+4] 589 dint->min=0xFFFFFFF; 590 dint->min=~(dint->min); \ 000006DC F004A0E3 MOV R0,#-268435456 \ 000006E0 00008AE5 STR R0,[R10, #+0] 591 pp=gotoRealPos(p1); \ 000006E4 0800A0E1 MOV R0,R8 \ 000006E8 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 000006EC 0080A0E1 MOV R8,R0 592 p1=gotoMyStrStart(pp); \ 000006F0 ........ _BLF gotoMyStrStart,??gotoMyStrStart??rA \ 000006F4 00B0A0E1 MOV R11,R0 593 p2=gotoMyStrEnd(pp); \ 000006F8 0800A0E1 MOV R0,R8 \ 000006FC ........ _BLF gotoMyStrEnd,??gotoMyStrEnd??rA 594 strnCopyWithEnd(temp, p1, p2-p1); \ 00000700 0B2040E0 SUB R2,R0,R11 \ 00000704 0B10A0E1 MOV R1,R11 \ 00000708 08008DE2 ADD R0,SP,#+8 \ 0000070C ........ _BLF strnCopyWithEnd,??strnCopyWithEnd??rA 595 if((p1=strstrInQuote(p, STR_VL))||(p1=strstrInQuote(p, STR_VL1))) \ 00000710 0710A0E1 MOV R1,R7 \ 00000714 0400A0E1 MOV R0,R4 \ 00000718 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 0000071C 000050E3 CMP R0,#+0 \ 00000720 0400001A BNE ??doItemJob_38 \ 00000724 0610A0E1 MOV R1,R6 \ 00000728 0400A0E1 MOV R0,R4 \ 0000072C ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000730 000050E3 CMP R0,#+0 \ 00000734 0900000A BEQ ??doItemJob_39 596 { 597 pp=gotoRealPos(p1); \ ??doItemJob_38: \ 00000738 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 0000073C 0080A0E1 MOV R8,R0 598 str2num(pp, &dint->initData, dint->max, dint->min, 0); \ 00000740 0000A0E3 MOV R0,#+0 \ 00000744 01002DE9 PUSH {R0} \ 00000748 00309AE5 LDR R3,[R10, #+0] \ 0000074C 04209AE5 LDR R2,[R10, #+4] \ 00000750 08108AE2 ADD R1,R10,#+8 \ 00000754 0800A0E1 MOV R0,R8 \ 00000758 ........ _BLF str2num,??str2num??rA \ 0000075C 04D08DE2 ADD SP,SP,#+4 599 } 600 if((p1=strstrInQuote(p, STR_RANGE1))||(p1=strstrInQuote(p, STR_RANGE2))) \ ??doItemJob_39: \ 00000760 301C9FE5 LDR R1,??doItemJob_24+0xC ;; STR_RANGE1 \ 00000764 0400A0E1 MOV R0,R4 \ 00000768 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 0000076C 0080B0E1 MOVS R8,R0 \ 00000770 0400001A BNE ??doItemJob_40 \ 00000774 201C9FE5 LDR R1,??doItemJob_24+0x10 ;; STR_RANGE2 \ 00000778 0400A0E1 MOV R0,R4 \ 0000077C ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000780 0080B0E1 MOVS R8,R0 \ 00000784 2000000A BEQ ??doItemJob_41 601 { 602 pp=gotoRealPos(p1); \ ??doItemJob_40: \ 00000788 0800A0E1 MOV R0,R8 \ 0000078C ........ _BLF gotoRealPos,??gotoRealPos??rA \ 00000790 0080A0E1 MOV R8,R0 603 str2num(pp, &dint->min, dint->max, dint->min, 0); \ 00000794 0000A0E3 MOV R0,#+0 \ 00000798 01002DE9 PUSH {R0} \ 0000079C 00309AE5 LDR R3,[R10, #+0] \ 000007A0 04209AE5 LDR R2,[R10, #+4] \ 000007A4 0A10A0E1 MOV R1,R10 \ 000007A8 0800A0E1 MOV R0,R8 \ 000007AC ........ _BLF str2num,??str2num??rA \ 000007B0 04D08DE2 ADD SP,SP,#+4 \ 000007B4 000000EA B ??doItemJob_42 604 while(*pp>='0'&&*pp<='9') //leave min 605 pp++; \ ??doItemJob_43: \ 000007B8 018088E2 ADD R8,R8,#+1 \ ??doItemJob_42: \ 000007BC 0000D8E5 LDRB R0,[R8, #+0] \ 000007C0 300050E3 CMP R0,#+48 \ 000007C4 0100003A BCC ??doItemJob_44 \ 000007C8 3A0050E3 CMP R0,#+58 \ 000007CC F9FFFF3A BCC ??doItemJob_43 606 while(*pp<'0'||*pp>'9') //to max \ ??doItemJob_44: \ 000007D0 0000D8E5 LDRB R0,[R8, #+0] \ 000007D4 300050E3 CMP R0,#+48 \ 000007D8 0100003A BCC ??doItemJob_45 \ 000007DC 3A0050E3 CMP R0,#+58 \ 000007E0 0100003A BCC ??doItemJob_46 607 pp++; \ ??doItemJob_45: \ 000007E4 018088E2 ADD R8,R8,#+1 \ 000007E8 F8FFFFEA B ??doItemJob_44 608 str2num(pp, &dint->max, dint->max, dint->min, 0); \ ??doItemJob_46: \ 000007EC 0000A0E3 MOV R0,#+0 \ 000007F0 01002DE9 PUSH {R0} \ 000007F4 00309AE5 LDR R3,[R10, #+0] \ 000007F8 04209AE5 LDR R2,[R10, #+4] \ 000007FC 04108AE2 ADD R1,R10,#+4 \ 00000800 0800A0E1 MOV R0,R8 \ 00000804 ........ _BLF str2num,??str2num??rA \ 00000808 04D08DE2 ADD SP,SP,#+4 609 } 610 pp=gotoRealPos(p+1); \ ??doItemJob_41: \ 0000080C 010084E2 ADD R0,R4,#+1 \ 00000810 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 00000814 0040A0E1 MOV R4,R0 611 str2num(pp, &bytePos,0,0, 0); \ 00000818 0000A0E3 MOV R0,#+0 \ 0000081C 01002DE9 PUSH {R0} \ 00000820 0030A0E1 MOV R3,R0 \ 00000824 0020A0E1 MOV R2,R0 \ 00000828 04108DE2 ADD R1,SP,#+4 \ 0000082C 0400A0E1 MOV R0,R4 \ 00000830 ........ _BLF str2num,??str2num??rA 612 addItemToConfig(dint, subMenu, TYPE_INT, bytePos+ptcfgtop->offset, temp); \ 00000834 1C189FE5 LDR R1,??doItemJob_8+0x4 ;; ptcfgtop \ 00000838 0C008DE2 ADD R0,SP,#+12 \ 0000083C 01002DE9 PUSH {R0} \ 00000840 08009DE5 LDR R0,[SP, #+8] \ 00000844 001091E5 LDR R1,[R1, #+0] \ 00000848 0520A0E3 MOV R2,#+5 \ 0000084C 550500EA B ??doItemJob_35 \ ??doItemJob_22: \ 00000850 20622000 DC8 " b " \ 00000854 20692000 DC8 " i " 613 return; 614 } 615 } 616 if((p1=strstrInQuote(p, " o "))||(p1=strstrInQuote(p, " option "))) \ ??doItemJob_37: \ 00000858 D41F8FE2 ADR R1,??doItemJob_0 ;; " o " \ 0000085C 0400A0E1 MOV R0,R4 \ 00000860 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000864 0080B0E1 MOVS R8,R0 \ 00000868 0400001A BNE ??doItemJob_47 \ 0000086C 6C1E9FE5 LDR R1,??doItemJob_48+0x4 ;; `?` \ 00000870 0400A0E1 MOV R0,R4 \ 00000874 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000878 0080B0E1 MOVS R8,R0 \ 0000087C 4500000A BEQ ??doItemJob_49 617 { 618 if(isCurrectItem(p1)) \ ??doItemJob_47: \ 00000880 0800A0E1 MOV R0,R8 \ 00000884 ........ BL isCurrectItem \ 00000888 000050E3 CMP R0,#+0 \ 0000088C 4100000A BEQ ??doItemJob_49 619 { 620 DATA_CBOX *cbox=malloc(sizeof(DATA_CBOX)); \ 00000890 0800A0E3 MOV R0,#+8 \ 00000894 140000EF SWI +20 \ 00000898 00A0A0E1 MOV R10,R0 621 cbox->cboxitem=0; \ 0000089C 04908AE5 STR R9,[R10, #+4] 622 cbox->initData=0; \ 000008A0 0090CAE5 STRB R9,[R10, #+0] 623 pp=gotoRealPos(p1); \ 000008A4 0800A0E1 MOV R0,R8 \ 000008A8 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 000008AC 0080A0E1 MOV R8,R0 624 p1=gotoMyStrStart(pp); \ 000008B0 ........ _BLF gotoMyStrStart,??gotoMyStrStart??rA \ 000008B4 00B0A0E1 MOV R11,R0 625 p2=gotoMyStrEnd(pp); \ 000008B8 0800A0E1 MOV R0,R8 \ 000008BC ........ _BLF gotoMyStrEnd,??gotoMyStrEnd??rA \ 000008C0 0090A0E1 MOV R9,R0 626 strnCopyWithEnd(temp, p1, p2-p1); \ 000008C4 0B2049E0 SUB R2,R9,R11 \ 000008C8 0B10A0E1 MOV R1,R11 \ 000008CC 08008DE2 ADD R0,SP,#+8 \ 000008D0 ........ _BLF strnCopyWithEnd,??strnCopyWithEnd??rA 627 if(p1=strstrInQuote(p, STR_CHOICE)) //可能是IAR在中文系统的BUG,一个字符串被两次使用之后可能会报错 \ 000008D4 081E9FE5 LDR R1,??doItemJob_48+0x8 ;; STR_CHOICE \ 000008D8 0400A0E1 MOV R0,R4 \ 000008DC ........ _BLF strstrInQuote,??strstrInQuote??rA \ 000008E0 0010B0E1 MOVS R1,R0 \ 000008E4 0200000A BEQ ??doItemJob_50 628 { 629 addPreDataToCBoxItem(cbox, p1); \ 000008E8 0A00A0E1 MOV R0,R10 \ 000008EC ........ BL addPreDataToCBoxItem \ 000008F0 020000EA B ??doItemJob_51 630 } 631 else 632 { 633 cboxItemColon(p2, cbox); \ ??doItemJob_50: \ 000008F4 0A10A0E1 MOV R1,R10 \ 000008F8 0900A0E1 MOV R0,R9 \ 000008FC ........ BL cboxItemColon 634 } 635 if((p1=strstrInQuote(p, STR_VL))||(p1=strstrInQuote(p, STR_VL1))) \ ??doItemJob_51: \ 00000900 0710A0E1 MOV R1,R7 \ 00000904 0400A0E1 MOV R0,R4 \ 00000908 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 0000090C 0080B0E1 MOVS R8,R0 \ 00000910 0400001A BNE ??doItemJob_52 \ 00000914 0610A0E1 MOV R1,R6 \ 00000918 0400A0E1 MOV R0,R4 \ 0000091C ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000920 0080B0E1 MOVS R8,R0 \ 00000924 0A00000A BEQ ??doItemJob_53 636 { 637 pp=gotoRealPos(p1); \ ??doItemJob_52: \ 00000928 0800A0E1 MOV R0,R8 \ 0000092C ........ _BLF gotoRealPos,??gotoRealPos??rA \ 00000930 0080A0E1 MOV R8,R0 638 str2num_char(pp, &cbox->initData,0xFF,0, 0); \ 00000934 0000A0E3 MOV R0,#+0 \ 00000938 01002DE9 PUSH {R0} \ 0000093C 0030A0E3 MOV R3,#+0 \ 00000940 FF20A0E3 MOV R2,#+255 \ 00000944 0A10A0E1 MOV R1,R10 \ 00000948 0800A0E1 MOV R0,R8 \ 0000094C ........ _BLF str2num_char,??str2num_char??rA \ 00000950 04D08DE2 ADD SP,SP,#+4 639 } 640 pp=gotoRealPos(p+1); \ ??doItemJob_53: \ 00000954 010084E2 ADD R0,R4,#+1 \ 00000958 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 0000095C 0040A0E1 MOV R4,R0 641 str2num(pp, &bytePos,0,0, 0); \ 00000960 0000A0E3 MOV R0,#+0 \ 00000964 01002DE9 PUSH {R0} \ 00000968 0030A0E3 MOV R3,#+0 \ 0000096C 0020A0E1 MOV R2,R0 \ 00000970 04108DE2 ADD R1,SP,#+4 \ 00000974 0400A0E1 MOV R0,R4 \ 00000978 ........ _BLF str2num,??str2num??rA 642 addItemToConfig(cbox, subMenu, TYPE_CBOX, bytePos+ptcfgtop->offset, temp); \ 0000097C D4169FE5 LDR R1,??doItemJob_8+0x4 ;; ptcfgtop \ 00000980 0C008DE2 ADD R0,SP,#+12 \ 00000984 01002DE9 PUSH {R0} \ 00000988 08009DE5 LDR R0,[SP, #+8] \ 0000098C 001091E5 LDR R1,[R1, #+0] \ 00000990 0620A0E3 MOV R2,#+6 \ 00000994 030500EA B ??doItemJob_35 643 return; 644 } 645 } 646 if((p1=strstrInQuote(p, " co "))||(p1=strstrInQuote(p, " color "))) \ ??doItemJob_49: \ 00000998 481D9FE5 LDR R1,??doItemJob_48+0xC ;; `?` \ 0000099C 0400A0E1 MOV R0,R4 \ 000009A0 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 000009A4 0080B0E1 MOVS R8,R0 \ 000009A8 0400001A BNE ??doItemJob_54 \ 000009AC 381D9FE5 LDR R1,??doItemJob_48+0x10 ;; `?` \ 000009B0 0400A0E1 MOV R0,R4 \ 000009B4 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 000009B8 0080B0E1 MOVS R8,R0 \ 000009BC 3800000A BEQ ??doItemJob_55 647 { 648 if(isCurrectItem(p1)) \ ??doItemJob_54: \ 000009C0 0800A0E1 MOV R0,R8 \ 000009C4 ........ BL isCurrectItem \ 000009C8 000050E3 CMP R0,#+0 \ 000009CC 3400000A BEQ ??doItemJob_55 649 { 650 DATA_COLOR *color=malloc(sizeof(DATA_COLOR)); \ 000009D0 0400A0E3 MOV R0,#+4 \ 000009D4 140000EF SWI +20 \ 000009D8 00A0A0E1 MOV R10,R0 651 int *col=(int *)color->color; 652 *col=0; \ 000009DC 00908AE5 STR R9,[R10, #+0] 653 pp=gotoRealPos(p1); \ 000009E0 0800A0E1 MOV R0,R8 \ 000009E4 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 000009E8 0080A0E1 MOV R8,R0 654 p1=gotoMyStrStart(pp); \ 000009EC ........ _BLF gotoMyStrStart,??gotoMyStrStart??rA \ 000009F0 00B0A0E1 MOV R11,R0 655 p2=gotoMyStrEnd(pp); \ 000009F4 0800A0E1 MOV R0,R8 \ 000009F8 ........ _BLF gotoMyStrEnd,??gotoMyStrEnd??rA 656 strnCopyWithEnd(temp, p1, p2-p1); \ 000009FC 0B2040E0 SUB R2,R0,R11 \ 00000A00 0B10A0E1 MOV R1,R11 \ 00000A04 08008DE2 ADD R0,SP,#+8 \ 00000A08 ........ _BLF strnCopyWithEnd,??strnCopyWithEnd??rA 657 if((p1=strstrInQuote(p, STR_VL))||(p1=strstrInQuote(p, STR_VL1))) \ 00000A0C 0710A0E1 MOV R1,R7 \ 00000A10 0400A0E1 MOV R0,R4 \ 00000A14 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000A18 0080B0E1 MOVS R8,R0 \ 00000A1C 0400001A BNE ??doItemJob_56 \ 00000A20 0610A0E1 MOV R1,R6 \ 00000A24 0400A0E1 MOV R0,R4 \ 00000A28 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000A2C 0080B0E1 MOVS R8,R0 \ 00000A30 0A00000A BEQ ??doItemJob_57 658 { 659 pp=gotoRealPos(p1); \ ??doItemJob_56: \ 00000A34 0800A0E1 MOV R0,R8 \ 00000A38 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 00000A3C 0080A0E1 MOV R8,R0 660 str2num(pp, col,0,0, 0); \ 00000A40 0000A0E3 MOV R0,#+0 \ 00000A44 01002DE9 PUSH {R0} \ 00000A48 0030A0E1 MOV R3,R0 \ 00000A4C 0020A0E1 MOV R2,R0 \ 00000A50 0A10A0E1 MOV R1,R10 \ 00000A54 0800A0E1 MOV R0,R8 \ 00000A58 ........ _BLF str2num,??str2num??rA \ 00000A5C 04D08DE2 ADD SP,SP,#+4 661 } 662 pp=gotoRealPos(p+1); \ ??doItemJob_57: \ 00000A60 010084E2 ADD R0,R4,#+1 \ 00000A64 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 00000A68 0040A0E1 MOV R4,R0 663 str2num(pp, &bytePos,0,0, 0); \ 00000A6C 0000A0E3 MOV R0,#+0 \ 00000A70 01002DE9 PUSH {R0} \ 00000A74 0030A0E1 MOV R3,R0 \ 00000A78 0020A0E1 MOV R2,R0 \ 00000A7C 04108DE2 ADD R1,SP,#+4 \ 00000A80 0400A0E1 MOV R0,R4 \ 00000A84 ........ _BLF str2num,??str2num??rA 664 addItemToConfig(color, subMenu, TYPE_COLOR, bytePos+ptcfgtop->offset, temp); \ 00000A88 C8159FE5 LDR R1,??doItemJob_8+0x4 ;; ptcfgtop \ 00000A8C 0C008DE2 ADD R0,SP,#+12 \ 00000A90 01002DE9 PUSH {R0} \ 00000A94 08009DE5 LDR R0,[SP, #+8] \ 00000A98 001091E5 LDR R1,[R1, #+0] \ 00000A9C 0720A0E3 MOV R2,#+7 \ 00000AA0 C00400EA B ??doItemJob_35 665 return; 666 } 667 } 668 if((p1=strstrInQuote(p, " a "))||(p1=strstrInQuote(p, " address "))) \ ??doItemJob_55: \ 00000AA4 421F8FE2 ADR R1,??doItemJob_0+0x4 ;; " a " \ 00000AA8 0400A0E1 MOV R0,R4 \ 00000AAC ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000AB0 0080B0E1 MOVS R8,R0 \ 00000AB4 0400001A BNE ??doItemJob_58 \ 00000AB8 301C9FE5 LDR R1,??doItemJob_48+0x14 ;; `?` \ 00000ABC 0400A0E1 MOV R0,R4 \ 00000AC0 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000AC4 0080B0E1 MOVS R8,R0 \ 00000AC8 3E00000A BEQ ??doItemJob_59 669 { 670 if(isCurrectItem(p1)) \ ??doItemJob_58: \ 00000ACC 0800A0E1 MOV R0,R8 \ 00000AD0 ........ BL isCurrectItem \ 00000AD4 000050E3 CMP R0,#+0 \ 00000AD8 3A00000A BEQ ??doItemJob_59 671 { 672 DATA_ADDRESS *addr=malloc(sizeof(DATA_ADDRESS)); \ 00000ADC 0400A0E3 MOV R0,#+4 \ 00000AE0 140000EF SWI +20 \ 00000AE4 00A0A0E1 MOV R10,R0 673 addr->addr=0; \ 00000AE8 00908AE5 STR R9,[R10, #+0] 674 pp=gotoRealPos(p1); \ 00000AEC 0800A0E1 MOV R0,R8 \ 00000AF0 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 00000AF4 0080A0E1 MOV R8,R0 675 p1=gotoMyStrStart(pp); \ 00000AF8 ........ _BLF gotoMyStrStart,??gotoMyStrStart??rA \ 00000AFC 00B0A0E1 MOV R11,R0 676 p2=gotoMyStrEnd(pp); \ 00000B00 0800A0E1 MOV R0,R8 \ 00000B04 ........ _BLF gotoMyStrEnd,??gotoMyStrEnd??rA 677 strnCopyWithEnd(temp, p1, p2-p1); \ 00000B08 0B2040E0 SUB R2,R0,R11 \ 00000B0C 0B10A0E1 MOV R1,R11 \ 00000B10 08008DE2 ADD R0,SP,#+8 \ 00000B14 ........ _BLF strnCopyWithEnd,??strnCopyWithEnd??rA 678 if((p1=strstrInQuote(p, STR_VL))||(p1=strstrInQuote(p, STR_VL1))) \ 00000B18 0710A0E1 MOV R1,R7 \ 00000B1C 0400A0E1 MOV R0,R4 \ 00000B20 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000B24 0080B0E1 MOVS R8,R0 \ 00000B28 0400001A BNE ??doItemJob_60 \ 00000B2C 0610A0E1 MOV R1,R6 \ 00000B30 0400A0E1 MOV R0,R4 \ 00000B34 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000B38 0080B0E1 MOVS R8,R0 \ 00000B3C 0A00000A BEQ ??doItemJob_61 679 { 680 pp=gotoRealPos(p1); \ ??doItemJob_60: \ 00000B40 0800A0E1 MOV R0,R8 \ 00000B44 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 00000B48 0080A0E1 MOV R8,R0 681 str2num(pp, (int *)&addr->addr,0,0, 0); \ 00000B4C 0000A0E3 MOV R0,#+0 \ 00000B50 01002DE9 PUSH {R0} \ 00000B54 0030A0E1 MOV R3,R0 \ 00000B58 0020A0E1 MOV R2,R0 \ 00000B5C 0A10A0E1 MOV R1,R10 \ 00000B60 0800A0E1 MOV R0,R8 \ 00000B64 ........ _BLF str2num,??str2num??rA \ 00000B68 04D08DE2 ADD SP,SP,#+4 682 } 683 pp=gotoRealPos(p+1); \ ??doItemJob_61: \ 00000B6C 010084E2 ADD R0,R4,#+1 \ 00000B70 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 00000B74 0040A0E1 MOV R4,R0 684 str2num(pp, &bytePos,0,0, 0); \ 00000B78 0000A0E3 MOV R0,#+0 \ 00000B7C 01002DE9 PUSH {R0} \ 00000B80 0030A0E1 MOV R3,R0 \ 00000B84 0020A0E1 MOV R2,R0 \ 00000B88 04108DE2 ADD R1,SP,#+4 \ 00000B8C 0400A0E1 MOV R0,R4 \ 00000B90 ........ _BLF str2num,??str2num??rA 685 addItemToConfig(addr, subMenu, TYPE_ADDRESS, bytePos+ptcfgtop->offset, temp); \ 00000B94 BC149FE5 LDR R1,??doItemJob_8+0x4 ;; ptcfgtop \ 00000B98 0C008DE2 ADD R0,SP,#+12 \ 00000B9C 01002DE9 PUSH {R0} \ 00000BA0 08009DE5 LDR R0,[SP, #+8] \ 00000BA4 001091E5 LDR R1,[R1, #+0] \ 00000BA8 0820A0E3 MOV R2,#+8 \ 00000BAC 7D0400EA B ??doItemJob_35 \ ??doItemJob_0: \ 00000BB0 206F2000 DC8 " o " \ 00000BB4 20612000 DC8 " a " \ 00000BB8 ........ DC32 STR_VL1 \ 00000BBC ........ DC32 STR_VL \ 00000BC0 ........ DC32 STR_CHKBOX1 \ 00000BC4 ........ DC32 STR_CHKBOX2 686 return; 687 } 688 } 689 if((p1=strstrInQuote(p, " sf "))||(p1=strstrInQuote(p, " selectfile "))) \ ??doItemJob_59: \ 00000BC8 241B9FE5 LDR R1,??doItemJob_48+0x18 ;; `?` \ 00000BCC 0400A0E1 MOV R0,R4 \ 00000BD0 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000BD4 0080B0E1 MOVS R8,R0 \ 00000BD8 0400001A BNE ??doItemJob_62 \ 00000BDC 141B9FE5 LDR R1,??doItemJob_48+0x1C ;; `?` \ 00000BE0 0400A0E1 MOV R0,R4 \ 00000BE4 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000BE8 0080B0E1 MOVS R8,R0 \ 00000BEC 6200000A BEQ ??doItemJob_63 690 { 691 if(isCurrectItem(p1)) \ ??doItemJob_62: \ 00000BF0 0800A0E1 MOV R0,R8 \ 00000BF4 ........ BL isCurrectItem \ 00000BF8 000050E3 CMP R0,#+0 \ 00000BFC 5E00000A BEQ ??doItemJob_63 692 { 693 DATA_SF *fs=malloc(sizeof(DATA_SF)); \ 00000C00 A400A0E3 MOV R0,#+164 \ 00000C04 140000EF SWI +20 \ 00000C08 00A0A0E1 MOV R10,R0 694 int i=0; \ 00000C0C 0000A0E3 MOV R0,#+0 695 for(;i<128;i++) 696 fs->path[i]=0; \ ??doItemJob_64: \ 00000C10 0A90C0E7 STRB R9,[R0, +R10] \ 00000C14 010080E2 ADD R0,R0,#+1 \ 00000C18 800050E3 CMP R0,#+128 \ 00000C1C FBFFFFBA BLT ??doItemJob_64 697 fs->mask[0]=0; \ 00000C20 8090CAE5 STRB R9,[R10, #+128] 698 fs->maxlen=0; \ 00000C24 A0908AE5 STR R9,[R10, #+160] 699 pp=gotoRealPos(p1); \ 00000C28 0800A0E1 MOV R0,R8 \ 00000C2C ........ _BLF gotoRealPos,??gotoRealPos??rA \ 00000C30 0080A0E1 MOV R8,R0 700 p1=gotoMyStrStart(pp); \ 00000C34 ........ _BLF gotoMyStrStart,??gotoMyStrStart??rA \ 00000C38 00B0A0E1 MOV R11,R0 701 p2=gotoMyStrEnd(pp); \ 00000C3C 0800A0E1 MOV R0,R8 \ 00000C40 ........ _BLF gotoMyStrEnd,??gotoMyStrEnd??rA 702 strnCopyWithEnd(temp, p1, p2-p1); \ 00000C44 0B2040E0 SUB R2,R0,R11 \ 00000C48 0B10A0E1 MOV R1,R11 \ 00000C4C 08008DE2 ADD R0,SP,#+8 \ 00000C50 ........ _BLF strnCopyWithEnd,??strnCopyWithEnd??rA 703 if((p1=strstrInQuote(p, STR_VL))||(p1=strstrInQuote(p, STR_VL1))) \ 00000C54 0710A0E1 MOV R1,R7 \ 00000C58 0400A0E1 MOV R0,R4 \ 00000C5C ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000C60 0070B0E1 MOVS R7,R0 \ 00000C64 0400001A BNE ??doItemJob_65 \ 00000C68 0610A0E1 MOV R1,R6 \ 00000C6C 0400A0E1 MOV R0,R4 \ 00000C70 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000C74 0070B0E1 MOVS R7,R0 \ 00000C78 0A00000A BEQ ??doItemJob_66 704 { 705 pp=gotoRealPos(p1); \ ??doItemJob_65: \ 00000C7C 0700A0E1 MOV R0,R7 \ 00000C80 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 00000C84 0080A0E1 MOV R8,R0 706 p1=gotoMyStrStart(pp); \ 00000C88 ........ _BLF gotoMyStrStart,??gotoMyStrStart??rA \ 00000C8C 0070A0E1 MOV R7,R0 707 p2=gotoMyStrEnd(pp); \ 00000C90 0800A0E1 MOV R0,R8 \ 00000C94 ........ _BLF gotoMyStrEnd,??gotoMyStrEnd??rA 708 strnCopyWithEnd(fs->path, p1, p2-p1); \ 00000C98 072040E0 SUB R2,R0,R7 \ 00000C9C 0710A0E1 MOV R1,R7 \ 00000CA0 0A00A0E1 MOV R0,R10 \ 00000CA4 ........ _BLF strnCopyWithEnd,??strnCopyWithEnd??rA 709 } 710 if(p1=strstrInQuote(p, "mask=")) \ ??doItemJob_66: \ 00000CA8 4C1A9FE5 LDR R1,??doItemJob_48+0x20 ;; `?` \ 00000D80 0400A0E1 MOV R0,R4 \ 00000D84 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000D88 0080B0E1 MOVS R8,R0 \ 00000D8C 0400001A BNE ??doItemJob_70 \ 00000D90 70199FE5 LDR R1,??doItemJob_48+0x2C ;; `?` \ 00000D94 0400A0E1 MOV R0,R4 \ 00000D98 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000D9C 0080B0E1 MOVS R8,R0 \ 00000DA0 4E00000A BEQ ??doItemJob_71 729 { 730 if(isCurrectItem(p1)) \ ??doItemJob_70: \ 00000DA4 0800A0E1 MOV R0,R8 \ 00000DA8 ........ BL isCurrectItem \ 00000DAC 000050E3 CMP R0,#+0 \ 00000DB0 4A00000A BEQ ??doItemJob_71 731 { 732 DATA_SD *sd=malloc(sizeof(DATA_SD)); \ 00000DB4 8400A0E3 MOV R0,#+132 \ 00000DB8 140000EF SWI +20 \ 00000DBC 00A0A0E1 MOV R10,R0 733 sd->path[0]=0; \ 00000DC0 0090CAE5 STRB R9,[R10, #+0] 734 sd->maxlen=0; \ 00000DC4 80908AE5 STR R9,[R10, #+128] 735 pp=gotoRealPos(p1); \ 00000DC8 0800A0E1 MOV R0,R8 \ 00000DCC ........ _BLF gotoRealPos,??gotoRealPos??rA \ 00000DD0 0080A0E1 MOV R8,R0 736 p1=gotoMyStrStart(pp); \ 00000DD4 ........ _BLF gotoMyStrStart,??gotoMyStrStart??rA \ 00000DD8 00B0A0E1 MOV R11,R0 737 p2=gotoMyStrEnd(pp); \ 00000DDC 0800A0E1 MOV R0,R8 \ 00000DE0 ........ _BLF gotoMyStrEnd,??gotoMyStrEnd??rA 738 strnCopyWithEnd(temp, p1, p2-p1); \ 00000DE4 0B2040E0 SUB R2,R0,R11 \ 00000DE8 0B10A0E1 MOV R1,R11 \ 00000DEC 08008DE2 ADD R0,SP,#+8 \ 00000DF0 ........ _BLF strnCopyWithEnd,??strnCopyWithEnd??rA 739 if((p1=strstrInQuote(p, STR_VL))||(p1=strstrInQuote(p, STR_VL1))) \ 00000DF4 0710A0E1 MOV R1,R7 \ 00000DF8 0400A0E1 MOV R0,R4 \ 00000DFC ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000E00 0070B0E1 MOVS R7,R0 \ 00000E04 0400001A BNE ??doItemJob_72 \ 00000E08 0610A0E1 MOV R1,R6 \ 00000E0C 0400A0E1 MOV R0,R4 \ 00000E10 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000E14 0070B0E1 MOVS R7,R0 \ 00000E18 0A00000A BEQ ??doItemJob_73 740 { 741 pp=gotoRealPos(p1); \ ??doItemJob_72: \ 00000E1C 0700A0E1 MOV R0,R7 \ 00000E20 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 00000E24 0080A0E1 MOV R8,R0 742 p1=gotoMyStrStart(pp); \ 00000E28 ........ _BLF gotoMyStrStart,??gotoMyStrStart??rA \ 00000E2C 0070A0E1 MOV R7,R0 743 p2=gotoMyStrEnd(pp); \ 00000E30 0800A0E1 MOV R0,R8 \ 00000E34 ........ _BLF gotoMyStrEnd,??gotoMyStrEnd??rA 744 strnCopyWithEnd(sd->path, p1, p2-p1); \ 00000E38 072040E0 SUB R2,R0,R7 \ 00000E3C 0710A0E1 MOV R1,R7 \ 00000E40 0A00A0E1 MOV R0,R10 \ 00000E44 ........ _BLF strnCopyWithEnd,??strnCopyWithEnd??rA 745 } 746 if((p1=strstrInQuote(p, "ml="))||(p1=strstrInQuote(p, "maxlen="))) \ ??doItemJob_73: \ 00000E48 811F8FE2 ADR R1,??doItemJob_8 ;; "ml=" \ 00000E4C 0400A0E1 MOV R0,R4 \ 00000E50 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000E54 0080B0E1 MOVS R8,R0 \ 00000E58 0400001A BNE ??doItemJob_74 \ 00000E5C 9C189FE5 LDR R1,??doItemJob_48+0x24 ;; `?` \ 00000EF8 0400A0E1 MOV R0,R4 \ 00000EFC ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000F00 0080B0E1 MOVS R8,R0 \ 00000F04 5B00000A BEQ ??doItemJob_78 758 { 759 if(isCurrectItem(p1)) \ ??doItemJob_76: \ 00000F08 0800A0E1 MOV R0,R8 \ 00000F0C ........ BL isCurrectItem \ 00000F10 000050E3 CMP R0,#+0 \ 00000F14 5700000A BEQ ??doItemJob_78 760 { 761 DATA_STRING *string=malloc(sizeof(DATA_STRING)); \ 00000F18 8400A0E3 MOV R0,#+132 \ 00000F1C 140000EF SWI +20 \ 00000F20 00A0A0E1 MOV R10,R0 762 int i=0; \ 00000F24 0000A0E3 MOV R0,#+0 763 string->maxlen=0; \ 00000F28 80908AE5 STR R9,[R10, #+128] 764 for(;i<128;i++) 765 string->string[i]=0; \ ??doItemJob_79: \ 00000F2C 0A90C0E7 STRB R9,[R0, +R10] \ 00000F30 010080E2 ADD R0,R0,#+1 \ 00000F34 800050E3 CMP R0,#+128 \ 00000F38 FBFFFFBA BLT ??doItemJob_79 766 pp=gotoRealPos(p1); \ 00000F3C 0800A0E1 MOV R0,R8 \ 00000F40 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 00000F44 0080A0E1 MOV R8,R0 767 p1=gotoMyStrStart(pp); \ 00000F48 ........ _BLF gotoMyStrStart,??gotoMyStrStart??rA \ 00000F4C 00B0A0E1 MOV R11,R0 768 p2=gotoMyStrEnd(pp); \ 00000F50 0800A0E1 MOV R0,R8 \ 00000F54 ........ _BLF gotoMyStrEnd,??gotoMyStrEnd??rA 769 strnCopyWithEnd(temp, p1, p2-p1); \ 00000F58 0B2040E0 SUB R2,R0,R11 \ 00000F5C 0B10A0E1 MOV R1,R11 \ 00000F60 08008DE2 ADD R0,SP,#+8 \ 00000F64 ........ _BLF strnCopyWithEnd,??strnCopyWithEnd??rA 770 if((p1=strstrInQuote(p, STR_VL))||(p1=strstrInQuote(p, STR_VL1))) \ 00000F68 0710A0E1 MOV R1,R7 \ 00000F6C 0400A0E1 MOV R0,R4 \ 00000F70 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000F74 0070B0E1 MOVS R7,R0 \ 00000F78 0400001A BNE ??doItemJob_80 \ 00000F7C 0610A0E1 MOV R1,R6 \ 00000F80 0400A0E1 MOV R0,R4 \ 00000F84 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000F88 0070B0E1 MOVS R7,R0 \ 00000F8C 0A00000A BEQ ??doItemJob_81 771 { 772 pp=gotoRealPos(p1); \ ??doItemJob_80: \ 00000F90 0700A0E1 MOV R0,R7 \ 00000F94 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 00000F98 0080A0E1 MOV R8,R0 773 p1=gotoMyStrStart(pp); \ 00000F9C ........ _BLF gotoMyStrStart,??gotoMyStrStart??rA \ 00000FA0 0070A0E1 MOV R7,R0 774 p2=gotoMyStrEnd(pp); \ 00000FA4 0800A0E1 MOV R0,R8 \ 00000FA8 ........ _BLF gotoMyStrEnd,??gotoMyStrEnd??rA 775 strnCopyWithEnd(string->string, p1, p2-p1); \ 00000FAC 072040E0 SUB R2,R0,R7 \ 00000FB0 0710A0E1 MOV R1,R7 \ 00000FB4 0A00A0E1 MOV R0,R10 \ 00000FB8 ........ _BLF strnCopyWithEnd,??strnCopyWithEnd??rA 776 } 777 if((p1=strstrInQuote(p, "ml="))||(p1=strstrInQuote(p, "maxlen="))) \ ??doItemJob_81: \ 00000FBC 241F8FE2 ADR R1,??doItemJob_8 ;; "ml=" \ 00000FC0 0400A0E1 MOV R0,R4 \ 00000FC4 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000FC8 0080B0E1 MOVS R8,R0 \ 00000FCC 0400001A BNE ??doItemJob_82 \ 00000FD0 28179FE5 LDR R1,??doItemJob_48+0x24 ;; `?` \ 00001090 0400A0E1 MOV R0,R4 \ 00001094 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00001098 0080B0E1 MOVS R8,R0 \ 0000109C 6200000A BEQ ??doItemJob_85 789 { 790 if(isCurrectItem(p1)) \ ??doItemJob_84: \ 000010A0 0800A0E1 MOV R0,R8 \ 000010A4 ........ BL isCurrectItem \ 000010A8 000050E3 CMP R0,#+0 \ 000010AC 5E00000A BEQ ??doItemJob_85 791 { 792 DATA_UNICODE *uni=malloc(sizeof(DATA_UNICODE)); \ 000010B0 410FA0E3 MOV R0,#+260 \ 000010B4 140000EF SWI +20 \ 000010B8 00A0A0E1 MOV R10,R0 793 int j=0; \ 000010BC 0000A0E3 MOV R0,#+0 794 uni->maxlen=0; \ 000010C0 00918AE5 STR R9,[R10, #+256] 795 for(;j<128;j++) 796 uni->ustr[j]=0; \ ??doItemJob_86: \ 000010C4 80108AE0 ADD R1,R10,R0, LSL #+1 \ 000010C8 B090C1E1 STRH R9,[R1, #+0] \ 000010CC 010080E2 ADD R0,R0,#+1 \ 000010D0 800050E3 CMP R0,#+128 \ 000010D4 FAFFFFBA BLT ??doItemJob_86 797 pp=gotoRealPos(p1); \ 000010D8 0800A0E1 MOV R0,R8 \ 000010DC ........ _BLF gotoRealPos,??gotoRealPos??rA \ 000010E0 0080A0E1 MOV R8,R0 798 p1=gotoMyStrStart(pp); \ 000010E4 ........ _BLF gotoMyStrStart,??gotoMyStrStart??rA \ 000010E8 00B0A0E1 MOV R11,R0 799 p2=gotoMyStrEnd(pp); \ 000010EC 0800A0E1 MOV R0,R8 \ 000010F0 ........ _BLF gotoMyStrEnd,??gotoMyStrEnd??rA 800 strnCopyWithEnd(temp, p1, p2-p1); \ 000010F4 0B2040E0 SUB R2,R0,R11 \ 000010F8 0B10A0E1 MOV R1,R11 \ 000010FC 08008DE2 ADD R0,SP,#+8 \ 00001100 ........ _BLF strnCopyWithEnd,??strnCopyWithEnd??rA 801 if((p1=strstrInQuote(p, STR_VL))||(p1=strstrInQuote(p, STR_VL1)))//添加UNICODE字符 \ 00001104 0710A0E1 MOV R1,R7 \ 00001108 0400A0E1 MOV R0,R4 \ 0000110C ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00001110 0070B0E1 MOVS R7,R0 \ 00001114 0400001A BNE ??doItemJob_87 \ 00001118 0610A0E1 MOV R1,R6 \ 0000111C 0400A0E1 MOV R0,R4 \ 00001120 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00001124 0070B0E1 MOVS R7,R0 \ 00001128 1900000A BEQ ??doItemJob_88 802 { 803 int i=0; \ ??doItemJob_87: \ 0000112C 0060A0E3 MOV R6,#+0 804 unsigned short c, c1; 805 pp=gotoRealPos(p1); \ 00001130 0700A0E1 MOV R0,R7 \ 00001134 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 00001138 0080A0E1 MOV R8,R0 806 p1=gotoMyStrStart(pp); \ 0000113C ........ _BLF gotoMyStrStart,??gotoMyStrStart??rA \ 00001140 0070A0E1 MOV R7,R0 807 p2=gotoMyStrEnd(pp); \ 00001144 0800A0E1 MOV R0,R8 \ 00001148 ........ _BLF gotoMyStrEnd,??gotoMyStrEnd??rA \ 0000114C 0090A0E1 MOV R9,R0 \ 00001150 000000EA B ??doItemJob_89 808 while((p1ustr[i++]=c; \ ??doItemJob_90: \ 00001154 B010C0E1 STRH R1,[R0, #+0] \ ??doItemJob_89: \ 00001158 090057E1 CMP R7,R9 \ 0000115C 0C00002A BCS ??doItemJob_88 \ 00001160 ........ LDRB R0,[R7], #+1 \ 00001164 0010B0E1 MOVS R1,R0 \ 00001168 0900000A BEQ ??doItemJob_88 \ 0000116C 7F0056E3 CMP R6,#+127 \ 00001170 070000AA BGE ??doItemJob_88 \ 00001174 800051E3 CMP R1,#+128 812 else 813 { 814 c1=*p1++; \ 00001178 ........ LDRBCS R1,[R7], #+1 \ 0000117C 86008AE0 ADD R0,R10,R6, LSL #+1 \ 00001180 016086E2 ADD R6,R6,#+1 815 if(c1<=127) \ 00001184 80005123 CMPCS R1,#+128 \ 00001188 F1FFFF3A BCC ??doItemJob_90 816 uni->ustr[i++]=c1; 817 else 818 uni->ustr[i++]=c1*0x10+c1; \ 0000118C 011281E0 ADD R1,R1,R1, LSL #+4 \ 00001190 EFFFFFEA B ??doItemJob_90 819 } 820 } 821 } 822 if((p1=strstrInQuote(p, "ml="))||(p1=strstrInQuote(p, "maxlen="))) \ ??doItemJob_88: \ 00001194 7E1F8FE2 ADR R1,??doItemJob_24+0x8 ;; "ml=" \ 00001198 0400A0E1 MOV R0,R4 \ 0000119C ........ _BLF strstrInQuote,??strstrInQuote??rA \ 000011A0 0080B0E1 MOVS R8,R0 \ 000011A4 0400001A BNE ??doItemJob_91 \ 000011A8 50159FE5 LDR R1,??doItemJob_48+0x24 ;; `?` \ 00001244 0400A0E1 MOV R0,R4 \ 00001248 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 0000124C 00B0B0E1 MOVS R11,R0 \ 00001250 7E00000A BEQ ??doItemJob_94 834 { 835 if(isCurrectItem(p1)) \ ??doItemJob_93: \ 00001254 0B00A0E1 MOV R0,R11 \ 00001258 ........ BL isCurrectItem \ 0000125C 000050E3 CMP R0,#+0 \ 00001260 7A00000A BEQ ??doItemJob_94 836 { 837 DATA_HEX *hex=malloc(sizeof(DATA_HEX)); \ 00001264 8400A0E3 MOV R0,#+132 \ 00001268 140000EF SWI +20 \ 0000126C 00A0A0E1 MOV R10,R0 838 int i=0; \ 00001270 0080A0E3 MOV R8,#+0 839 for(;i<128;i++) 840 hex->hex[i]=0; \ ??doItemJob_95: \ 00001274 0A90C8E7 STRB R9,[R8, +R10] \ 00001278 018088E2 ADD R8,R8,#+1 \ 0000127C 800058E3 CMP R8,#+128 \ 00001280 FBFFFFBA BLT ??doItemJob_95 841 hex->maxlen=0; \ 00001284 80908AE5 STR R9,[R10, #+128] 842 pp=gotoRealPos(p1); \ 00001288 0B00A0E1 MOV R0,R11 \ 0000128C ........ _BLF gotoRealPos,??gotoRealPos??rA \ 00001290 0090A0E1 MOV R9,R0 843 p1=gotoMyStrStart(pp); \ 00001294 ........ _BLF gotoMyStrStart,??gotoMyStrStart??rA \ 00001298 0080A0E1 MOV R8,R0 844 p2=gotoMyStrEnd(pp); \ 0000129C 0900A0E1 MOV R0,R9 \ 000012A0 ........ _BLF gotoMyStrEnd,??gotoMyStrEnd??rA 845 strnCopyWithEnd(temp, p1, p2-p1); \ 000012A4 082040E0 SUB R2,R0,R8 \ 000012A8 0810A0E1 MOV R1,R8 \ 000012AC 08008DE2 ADD R0,SP,#+8 \ 000012B0 ........ _BLF strnCopyWithEnd,??strnCopyWithEnd??rA 846 if((p1=strstrInQuote(p, STR_VL))||(p1=strstrInQuote(p, STR_VL1))) \ 000012B4 0710A0E1 MOV R1,R7 \ 000012B8 0400A0E1 MOV R0,R4 \ 000012BC ........ _BLF strstrInQuote,??strstrInQuote??rA \ 000012C0 0070B0E1 MOVS R7,R0 \ 000012C4 0400001A BNE ??doItemJob_96 \ 000012C8 0610A0E1 MOV R1,R6 \ 000012CC 0400A0E1 MOV R0,R4 \ 000012D0 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 000012D4 0070B0E1 MOVS R7,R0 \ 000012D8 3600000A BEQ ??doItemJob_97 847 { 848 unsigned char c, c1; 849 i=0; \ ??doItemJob_96: \ 000012DC 0080A0E3 MOV R8,#+0 850 pp=gotoRealPos(p1); \ 000012E0 0700A0E1 MOV R0,R7 \ 000012E4 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 000012E8 0090A0E1 MOV R9,R0 851 p1=gotoMyStrStart(pp); \ 000012EC ........ _BLF gotoMyStrStart,??gotoMyStrStart??rA \ 000012F0 0070A0E1 MOV R7,R0 852 p2=gotoMyStrEnd(pp); \ 000012F4 0900A0E1 MOV R0,R9 \ 000012F8 ........ _BLF gotoMyStrEnd,??gotoMyStrEnd??rA \ 000012FC 0090A0E1 MOV R9,R0 \ 00001300 130000EA B ??doItemJob_98 853 while((c=*p1++)&& p1='0'&&c<='9')||(c>='a'&&c<='f')||(c>='A'&&c<='F')) \ ??doItemJob_99: \ 00001304 410051E3 CMP R1,#+65 \ 00001308 2A00003A BCC ??doItemJob_97 \ 0000130C 470051E3 CMP R1,#+71 \ 00001310 2800002A BCS ??doItemJob_97 856 { 857 c1=*p1++; \ ??doItemJob_100: \ 00001314 ........ LDRB R6,[R7], #+1 858 if((c1>='0'&&c1<='9')||(c1>='a'&&c1<='f')||(c1>='A'&&c1<='F')) \ 00001318 300056E3 CMP R6,#+48 \ 0000131C 0100003A BCC ??doItemJob_101 \ 00001320 3A0056E3 CMP R6,#+58 \ 00001324 0300003A BCC ??doItemJob_102 \ ??doItemJob_101: \ 00001328 610056E3 CMP R6,#+97 \ 0000132C 1D00003A BCC ??doItemJob_103 \ 00001330 670056E3 CMP R6,#+103 \ 00001334 1F00002A BCS ??doItemJob_97 859 hex->hex[i++]=chr2num(c)*0x10+chr2num(c1); \ ??doItemJob_102: \ 00001338 ........ _BLF chr2num,??chr2num??rA \ 0000133C 00B0A0E1 MOV R11,R0 \ 00001340 0600A0E1 MOV R0,R6 \ 00001344 ........ _BLF chr2num,??chr2num??rA \ 00001348 0B0280E0 ADD R0,R0,R11, LSL #+4 \ 0000134C 0A00C8E7 STRB R0,[R8, +R10] \ 00001350 018088E2 ADD R8,R8,#+1 \ ??doItemJob_98: \ 00001354 ........ LDRB R1,[R7], #+1 \ 00001358 0100B0E1 MOVS R0,R1 \ 0000135C 1500000A BEQ ??doItemJob_97 \ 00001360 090057E1 CMP R7,R9 \ 00001364 1300002A BCS ??doItemJob_97 \ 00001368 300051E3 CMP R1,#+48 \ 0000136C 0100003A BCC ??doItemJob_104 \ 00001370 3A0051E3 CMP R1,#+58 \ 00001374 E6FFFF3A BCC ??doItemJob_100 \ ??doItemJob_104: \ 00001378 610051E3 CMP R1,#+97 \ 0000137C E0FFFF3A BCC ??doItemJob_99 \ 00001380 670051E3 CMP R1,#+103 \ 00001384 E2FFFF3A BCC ??doItemJob_100 \ 00001388 0A0000EA B ??doItemJob_97 \ ??doItemJob_24: \ 0000138C 20752000 DC8 " u " \ 00001390 ........ DC32 `?` \ 00001394 6D6C3D00 DC8 "ml=" \ 00001398 ........ DC32 STR_RANGE1 \ 0000139C ........ DC32 STR_RANGE2 \ 000013A0 20682000 DC8 " h " \ 000013A4 ........ DC32 `?` \ ??doItemJob_103: \ 000013A8 410056E3 CMP R6,#+65 \ 000013AC 0100003A BCC ??doItemJob_97 \ 000013B0 470056E3 CMP R6,#+71 \ 000013B4 DFFFFF3A BCC ??doItemJob_102 860 else 861 break; 862 } 863 else 864 break; 865 } 866 } 867 if((p1=strstrInQuote(p, "ml="))||(p1=strstrInQuote(p, "maxlen="))) \ ??doItemJob_97: \ 000013B8 C71F8FE2 ADR R1,??doItemJob_48 ;; "ml=" \ 000013BC 0400A0E1 MOV R0,R4 \ 000013C0 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 000013C4 0080B0E1 MOVS R8,R0 \ 000013C8 0400001A BNE ??doItemJob_105 \ 000013CC 2C139FE5 LDR R1,??doItemJob_48+0x24 ;; `?` \ 000016E4 ........ DC32 STR_CHOICE \ 000016E8 ........ DC32 `?` \ 000016EC ........ DC32 `?` \ 000016F0 ........ DC32 `?` \ 000016F4 ........ DC32 `?` \ 000016F8 ........ DC32 `?` \ 000016FC ........ DC32 `?` \ 00001708 ........ DC32 `?` 926 return; 927 } 928 } 929 if((p1=strstrInQuote(p, STR_MS1))||(p1=strstrInQuote(p, STR_MS2))) \ ??doItemJob_119: \ 0000170C D8169FE5 LDR R1,??doItemJob_77+0x24 ;; STR_MS1 \ 00001710 0400A0E1 MOV R0,R4 \ 00001714 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00001718 0080B0E1 MOVS R8,R0 \ 0000171C 0400001A BNE ??doItemJob_121 \ 00001720 C8169FE5 LDR R1,??doItemJob_77+0x28 ;; STR_MS2 \ 00001724 0400A0E1 MOV R0,R4 \ 00001728 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 0000172C 0080B0E1 MOVS R8,R0 \ 00001730 3800000A BEQ ??doItemJob_122 930 { 931 if(isCurrectItem(p1)) \ ??doItemJob_121: \ 00001734 0800A0E1 MOV R0,R8 \ 00001738 ........ BL isCurrectItem \ 0000173C 000050E3 CMP R0,#+0 \ 00001740 3400000A BEQ ??doItemJob_122 932 { 933 DATA_MS *ms=malloc(sizeof(DATA_MS)); \ 00001744 0400A0E3 MOV R0,#+4 \ 00001748 140000EF SWI +20 \ 0000174C 00A0A0E1 MOV R10,R0 934 ms->ms=0; \ 00001750 00908AE5 STR R9,[R10, #+0] 935 pp=gotoRealPos(p1); \ 00001754 0800A0E1 MOV R0,R8 \ 00001758 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 0000175C 0080A0E1 MOV R8,R0 936 p1=gotoMyStrStart(pp); \ 00001760 ........ _BLF gotoMyStrStart,??gotoMyStrStart??rA \ 00001764 00B0A0E1 MOV R11,R0 937 p2=gotoMyStrEnd(pp); \ 00001768 0800A0E1 MOV R0,R8 \ 0000176C ........ _BLF gotoMyStrEnd,??gotoMyStrEnd??rA 938 strnCopyWithEnd(temp, p1, p2-p1); \ 00001770 0B2040E0 SUB R2,R0,R11 \ 00001774 0B10A0E1 MOV R1,R11 \ 00001778 08008DE2 ADD R0,SP,#+8 \ 0000177C ........ _BLF strnCopyWithEnd,??strnCopyWithEnd??rA 939 if((p1=strstrInQuote(p, STR_VL))||(p1=strstrInQuote(p, STR_VL1))) \ 00001780 0710A0E1 MOV R1,R7 \ 00001784 0400A0E1 MOV R0,R4 \ 00001788 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 0000178C 0080B0E1 MOVS R8,R0 \ 00001790 0400001A BNE ??doItemJob_123 \ 00001794 0610A0E1 MOV R1,R6 \ 00001798 0400A0E1 MOV R0,R4 \ 0000179C ........ _BLF strstrInQuote,??strstrInQuote??rA \ 000017A0 0080B0E1 MOVS R8,R0 \ 000017A4 0A00000A BEQ ??doItemJob_124 940 { 941 pp=gotoRealPos(p1); \ ??doItemJob_123: \ 000017A8 0800A0E1 MOV R0,R8 \ 000017AC ........ _BLF gotoRealPos,??gotoRealPos??rA \ 000017B0 0080A0E1 MOV R8,R0 942 str2num(pp, (int *)&ms->ms, 0, 0, 0); \ 000017B4 0000A0E3 MOV R0,#+0 \ 000017B8 01002DE9 PUSH {R0} \ 000017BC 0030A0E1 MOV R3,R0 \ 000017C0 0020A0E1 MOV R2,R0 \ 000017C4 0A10A0E1 MOV R1,R10 \ 000017C8 0800A0E1 MOV R0,R8 \ 000017CC ........ _BLF str2num,??str2num??rA \ 000017D0 04D08DE2 ADD SP,SP,#+4 943 } 944 pp=gotoRealPos(p+1); \ ??doItemJob_124: \ 000017D4 010084E2 ADD R0,R4,#+1 \ 000017D8 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 000017DC 0040A0E1 MOV R4,R0 945 str2num(pp, &bytePos,0,0, 0); \ 000017E0 0000A0E3 MOV R0,#+0 \ 000017E4 01002DE9 PUSH {R0} \ 000017E8 0030A0E1 MOV R3,R0 \ 000017EC 0020A0E1 MOV R2,R0 \ 000017F0 04108DE2 ADD R1,SP,#+4 \ 000017F4 0400A0E1 MOV R0,R4 \ 000017F8 ........ _BLF str2num,??str2num??rA 946 addItemToConfig(ms, subMenu, TYPE_MS, bytePos+ptcfgtop->offset, temp); \ 000017FC ........ LDR R1,??DataTable16 ;; ptcfgtop \ 00001800 0C008DE2 ADD R0,SP,#+12 \ 00001804 01002DE9 PUSH {R0} \ 00001808 08009DE5 LDR R0,[SP, #+8] \ 0000180C 001091E5 LDR R1,[R1, #+0] \ 00001810 0F20A0E3 MOV R2,#+15 \ 00001814 630100EA B ??doItemJob_35 947 return; 948 } 949 } 950 if((p1=strstrInQuote(p, STR_BYTES1))||(p1=strstrInQuote(p, STR_BYTES2))) \ ??doItemJob_122: \ 00001818 D4159FE5 LDR R1,??doItemJob_77+0x2C ;; STR_BYTES1 \ 0000181C 0400A0E1 MOV R0,R4 \ 00001820 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00001824 0080B0E1 MOVS R8,R0 \ 00001828 0400001A BNE ??doItemJob_125 \ 0000182C C4159FE5 LDR R1,??doItemJob_77+0x30 ;; STR_BYTES2 \ 00001830 0400A0E1 MOV R0,R4 \ 00001834 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00001838 0080B0E1 MOVS R8,R0 \ 0000183C 7F00000A BEQ ??doItemJob_126 951 { 952 char *p3=p1; \ ??doItemJob_125: \ 00001840 04808DE5 STR R8,[SP, #+4] \ 00001844 040000EA B ??doItemJob_127 953 while(*p3) 954 { 955 if(*p3==')') 956 break; 957 if(*p3=='}') \ ??doItemJob_128: \ 00001848 04109DE5 LDR R1,[SP, #+4] \ 0000184C ........ LDRB R2,[R1], #+1 \ 00001850 04108DE5 STR R1,[SP, #+4] \ 00001854 7D0052E3 CMP R2,#+125 \ 00001858 5801000A BEQ ??doItemJob_120 \ ??doItemJob_127: \ 0000185C 04009DE5 LDR R0,[SP, #+4] \ 00001860 0000D0E5 LDRB R0,[R0, #+0] \ 00001864 000050E3 CMP R0,#+0 \ 00001868 29005013 CMPNE R0,#+41 \ 0000186C F5FFFF1A BNE ??doItemJob_128 958 return; 959 p3++; 960 } 961 p3++; 962 if(isCurrectItem(p3)) \ 00001870 04009DE5 LDR R0,[SP, #+4] \ 00001874 010080E2 ADD R0,R0,#+1 \ 00001878 04008DE5 STR R0,[SP, #+4] \ 0000187C ........ BL isCurrectItem \ 00001880 000050E3 CMP R0,#+0 \ 00001884 6D00000A BEQ ??doItemJob_126 963 { 964 int i=0; \ 00001888 00B0A0E3 MOV R11,#+0 965 //char c; 966 DATA_BYTES *dbytes=malloc(sizeof(DATA_BYTES)); \ 0000188C 8800A0E3 MOV R0,#+136 \ 00001890 140000EF SWI +20 \ 00001894 00A0A0E1 MOV R10,R0 967 dbytes->min=0; \ 00001898 0090CAE5 STRB R9,[R10, #+0] 968 dbytes->max=127; \ 0000189C 7F00A0E3 MOV R0,#+127 \ 000018A0 0100CAE5 STRB R0,[R10, #+1] 969 dbytes->len=0; \ 000018A4 04908AE5 STR R9,[R10, #+4] 970 for(;i<128;i++) 971 dbytes->bytes[i]=0; \ ??doItemJob_129: \ 000018A8 0A008BE0 ADD R0,R11,R10 \ 000018AC 0890C0E5 STRB R9,[R0, #+8] \ 000018B0 01B08BE2 ADD R11,R11,#+1 \ 000018B4 80005BE3 CMP R11,#+128 \ 000018B8 FAFFFFBA BLT ??doItemJob_129 972 pp=gotoRealPos(p1); \ 000018BC 0800A0E1 MOV R0,R8 \ 000018C0 ........ _BLF gotoRealPos,??gotoRealPos??rA 973 str2num(pp, &dbytes->len, 0, 0, 0); \ 000018C4 0010A0E3 MOV R1,#+0 \ 000018C8 02002DE9 PUSH {R1} \ 000018CC 0130A0E1 MOV R3,R1 \ 000018D0 0120A0E1 MOV R2,R1 \ 000018D4 04108AE2 ADD R1,R10,#+4 \ 000018D8 ........ _BLF str2num,??str2num??rA 974 if((dbytes->len)>128) \ 000018DC 04009AE5 LDR R0,[R10, #+4] \ 000018E0 04D08DE2 ADD SP,SP,#+4 \ 000018E4 810050E3 CMP R0,#+129 975 dbytes->len=128; \ 000018E8 8000A0A3 MOVGE R0,#+128 \ 000018EC 04008AA5 STRGE R0,[R10, #+4] 976 pp=gotoRealPos(p3); \ 000018F0 04009DE5 LDR R0,[SP, #+4] \ 000018F4 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 000018F8 0080A0E1 MOV R8,R0 977 p1=gotoMyStrStart(pp); \ 000018FC ........ _BLF gotoMyStrStart,??gotoMyStrStart??rA \ 00001900 00B0A0E1 MOV R11,R0 978 p2=gotoMyStrEnd(pp); \ 00001904 0800A0E1 MOV R0,R8 \ 00001908 ........ _BLF gotoMyStrEnd,??gotoMyStrEnd??rA 979 strnCopyWithEnd(temp, p1, p2-p1); \ 0000190C 0B2040E0 SUB R2,R0,R11 \ 00001910 0B10A0E1 MOV R1,R11 \ 00001914 08008DE2 ADD R0,SP,#+8 \ 00001918 ........ _BLF strnCopyWithEnd,??strnCopyWithEnd??rA 980 if((p1=strstrInQuote(p, STR_VL))||(p1=strstrInQuote(p, STR_VL1))) \ 0000191C 0710A0E1 MOV R1,R7 \ 00001920 0400A0E1 MOV R0,R4 \ 00001924 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00001928 000050E3 CMP R0,#+0 \ 0000192C 0400001A BNE ??doItemJob_130 \ 00001930 0610A0E1 MOV R1,R6 \ 00001934 0400A0E1 MOV R0,R4 \ 00001938 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 0000193C 000050E3 CMP R0,#+0 \ 00001940 0300000A BEQ ??doItemJob_131 981 { 982 //pp=gotoRealPos(p1); 983 str2bytes(dbytes->bytes, p1, dbytes->len); \ ??doItemJob_130: \ 00001944 04209AE5 LDR R2,[R10, #+4] \ 00001948 0010A0E1 MOV R1,R0 \ 0000194C 08008AE2 ADD R0,R10,#+8 \ 00001950 ........ _BLF str2bytes,??str2bytes??rA 984 } 985 if((p1=strstrInQuote(p, STR_RANGE1))||(p1=strstrInQuote(p, STR_RANGE2))) \ ??doItemJob_131: \ 00001954 80149FE5 LDR R1,??doItemJob_77+0x14 ;; STR_RANGE1 \ 00001958 0400A0E1 MOV R0,R4 \ 0000195C ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00001960 0080B0E1 MOVS R8,R0 \ 00001964 0400001A BNE ??doItemJob_132 \ 00001968 70149FE5 LDR R1,??doItemJob_77+0x18 ;; STR_RANGE2 \ 0000196C 0400A0E1 MOV R0,R4 \ 00001970 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00001974 0080B0E1 MOVS R8,R0 \ 00001978 1F00000A BEQ ??doItemJob_133 986 { 987 pp=gotoRealPos(p1); \ ??doItemJob_132: \ 0000197C 0800A0E1 MOV R0,R8 \ 00001980 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 00001984 0080A0E1 MOV R8,R0 988 str2num_char(pp, &dbytes->min, 0xFF, 0, 0); \ 00001988 0000A0E3 MOV R0,#+0 \ 0000198C 01002DE9 PUSH {R0} \ 00001990 0030A0E1 MOV R3,R0 \ 00001994 FF20A0E3 MOV R2,#+255 \ 00001998 0A10A0E1 MOV R1,R10 \ 0000199C 0800A0E1 MOV R0,R8 \ 000019A0 ........ _BLF str2num_char,??str2num_char??rA \ 000019A4 04D08DE2 ADD SP,SP,#+4 \ 000019A8 000000EA B ??doItemJob_134 989 //while(*pp>='0'&&*pp<='9') //leave min 990 // pp++; 991 while(*pp&&*pp!='.') 992 pp++; \ ??doItemJob_135: \ 000019AC 018088E2 ADD R8,R8,#+1 \ ??doItemJob_134: \ 000019B0 0000D8E5 LDRB R0,[R8, #+0] \ 000019B4 000050E3 CMP R0,#+0 \ 000019B8 2E005013 CMPNE R0,#+46 \ 000019BC FAFFFF1A BNE ??doItemJob_135 993 while(*pp<'0'||*pp>'9') //to max \ ??doItemJob_136: \ 000019C0 0000D8E5 LDRB R0,[R8, #+0] \ 000019C4 300050E3 CMP R0,#+48 \ 000019C8 0100003A BCC ??doItemJob_137 \ 000019CC 3A0050E3 CMP R0,#+58 \ 000019D0 0100003A BCC ??doItemJob_138 994 pp++; \ ??doItemJob_137: \ 000019D4 018088E2 ADD R8,R8,#+1 \ 000019D8 F8FFFFEA B ??doItemJob_136 995 str2num_char(pp, &dbytes->max, 0xFF, 0, 0); \ ??doItemJob_138: \ 000019DC 0000A0E3 MOV R0,#+0 \ 000019E0 01002DE9 PUSH {R0} \ 000019E4 0030A0E1 MOV R3,R0 \ 000019E8 FF20A0E3 MOV R2,#+255 \ 000019EC 01108AE2 ADD R1,R10,#+1 \ 000019F0 0800A0E1 MOV R0,R8 \ 000019F4 ........ _BLF str2num_char,??str2num_char??rA \ 000019F8 04D08DE2 ADD SP,SP,#+4 996 } 997 pp=gotoRealPos(p+1); \ ??doItemJob_133: \ 000019FC 010084E2 ADD R0,R4,#+1 \ 00001A00 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 00001A04 0040A0E1 MOV R4,R0 998 str2num(pp, &bytePos, 0, 0, 0); \ 00001A08 0000A0E3 MOV R0,#+0 \ 00001A0C 01002DE9 PUSH {R0} \ 00001A10 0030A0E1 MOV R3,R0 \ 00001A14 0020A0E1 MOV R2,R0 \ 00001A18 04108DE2 ADD R1,SP,#+4 \ 00001A1C 0400A0E1 MOV R0,R4 \ 00001A20 ........ _BLF str2num,??str2num??rA 999 addItemToConfig(dbytes, subMenu, TYPE_BYTES, bytePos+ptcfgtop->offset, temp); \ 00001A24 ........ LDR R1,??DataTable16 ;; ptcfgtop \ 00001A28 0C008DE2 ADD R0,SP,#+12 \ 00001A2C 01002DE9 PUSH {R0} \ 00001A30 08009DE5 LDR R0,[SP, #+8] \ 00001A34 001091E5 LDR R1,[R1, #+0] \ 00001A38 1020A0E3 MOV R2,#+16 \ 00001A3C D90000EA B ??doItemJob_35 1000 return; 1001 } 1002 } 1003 if((p1=strstrInQuote(p, STR_INTS1))||(p1=strstrInQuote(p, STR_INTS2))) \ ??doItemJob_126: \ 00001A40 B4139FE5 LDR R1,??doItemJob_77+0x34 ;; STR_INTS1 \ 00001A44 0400A0E1 MOV R0,R4 \ 00001A48 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00001A4C 0080B0E1 MOVS R8,R0 \ 00001A50 0400001A BNE ??doItemJob_139 \ 00001A54 A4139FE5 LDR R1,??doItemJob_77+0x38 ;; STR_INTS2 \ 00001A58 0400A0E1 MOV R0,R4 \ 00001A5C ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00001A60 0080B0E1 MOVS R8,R0 \ 00001A64 7F00000A BEQ ??doItemJob_140 1004 { 1005 char *p3=p1; \ ??doItemJob_139: \ 00001A68 04808DE5 STR R8,[SP, #+4] \ 00001A6C 040000EA B ??doItemJob_141 1006 while(*p3) 1007 { 1008 if(*p3==')') 1009 break; 1010 if(*p3=='}') \ ??doItemJob_142: \ 00001A70 04109DE5 LDR R1,[SP, #+4] \ 00001A74 ........ LDRB R2,[R1], #+1 \ 00001A78 04108DE5 STR R1,[SP, #+4] \ 00001A7C 7D0052E3 CMP R2,#+125 \ 00001A80 CE00000A BEQ ??doItemJob_120 \ ??doItemJob_141: \ 00001A84 04009DE5 LDR R0,[SP, #+4] \ 00001A88 0000D0E5 LDRB R0,[R0, #+0] \ 00001A8C 000050E3 CMP R0,#+0 \ 00001A90 29005013 CMPNE R0,#+41 \ 00001A94 F5FFFF1A BNE ??doItemJob_142 1011 return; 1012 p3++; 1013 } 1014 p3++; 1015 if(isCurrectItem(p3)) \ 00001A98 04009DE5 LDR R0,[SP, #+4] \ 00001A9C 010080E2 ADD R0,R0,#+1 \ 00001AA0 04008DE5 STR R0,[SP, #+4] \ 00001AA4 ........ BL isCurrectItem \ 00001AA8 000050E3 CMP R0,#+0 \ 00001AAC 6D00000A BEQ ??doItemJob_140 1016 { 1017 int i=0; \ 00001AB0 00B0A0E3 MOV R11,#+0 1018 //char c; 1019 DATA_INTS *dints=malloc(sizeof(DATA_INTS)); \ 00001AB4 830FA0E3 MOV R0,#+524 \ 00001AB8 140000EF SWI +20 \ 00001ABC 00A0A0E1 MOV R10,R0 1020 dints->min=0; \ 00001AC0 00908AE5 STR R9,[R10, #+0] 1021 dints->max=127; \ 00001AC4 7F00A0E3 MOV R0,#+127 \ 00001AC8 04008AE5 STR R0,[R10, #+4] 1022 dints->len=0; \ 00001ACC 08908AE5 STR R9,[R10, #+8] 1023 for(;i<128;i++) 1024 dints->ints[i]=0; \ ??doItemJob_143: \ 00001AD0 0B018AE0 ADD R0,R10,R11, LSL #+2 \ 00001AD4 0C9080E5 STR R9,[R0, #+12] \ 00001AD8 01B08BE2 ADD R11,R11,#+1 \ 00001ADC 80005BE3 CMP R11,#+128 \ 00001AE0 FAFFFFBA BLT ??doItemJob_143 1025 pp=gotoRealPos(p1); \ 00001AE4 0800A0E1 MOV R0,R8 \ 00001AE8 ........ _BLF gotoRealPos,??gotoRealPos??rA 1026 str2num(pp, &dints->len, 0, 0, 0); \ 00001AEC 0010A0E3 MOV R1,#+0 \ 00001AF0 02002DE9 PUSH {R1} \ 00001AF4 0130A0E1 MOV R3,R1 \ 00001AF8 0120A0E1 MOV R2,R1 \ 00001AFC 08108AE2 ADD R1,R10,#+8 \ 00001B00 ........ _BLF str2num,??str2num??rA 1027 if((dints->len)>128) \ 00001B04 08009AE5 LDR R0,[R10, #+8] \ 00001B08 04D08DE2 ADD SP,SP,#+4 \ 00001B0C 810050E3 CMP R0,#+129 1028 dints->len=128; \ 00001B10 8000A0A3 MOVGE R0,#+128 \ 00001B14 08008AA5 STRGE R0,[R10, #+8] 1029 pp=gotoRealPos(p3); \ 00001B18 04009DE5 LDR R0,[SP, #+4] \ 00001B1C ........ _BLF gotoRealPos,??gotoRealPos??rA \ 00001B20 0080A0E1 MOV R8,R0 1030 p1=gotoMyStrStart(pp); \ 00001B24 ........ _BLF gotoMyStrStart,??gotoMyStrStart??rA \ 00001B28 00B0A0E1 MOV R11,R0 1031 p2=gotoMyStrEnd(pp); \ 00001B2C 0800A0E1 MOV R0,R8 \ 00001B30 ........ _BLF gotoMyStrEnd,??gotoMyStrEnd??rA 1032 strnCopyWithEnd(temp, p1, p2-p1); \ 00001B34 0B2040E0 SUB R2,R0,R11 \ 00001B38 0B10A0E1 MOV R1,R11 \ 00001B3C 08008DE2 ADD R0,SP,#+8 \ 00001B40 ........ _BLF strnCopyWithEnd,??strnCopyWithEnd??rA 1033 if((p1=strstrInQuote(p, STR_VL))||(p1=strstrInQuote(p, STR_VL1))) \ 00001B44 0710A0E1 MOV R1,R7 \ 00001B48 0400A0E1 MOV R0,R4 \ 00001B4C ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00001B50 000050E3 CMP R0,#+0 \ 00001B54 0400001A BNE ??doItemJob_144 \ 00001B58 0610A0E1 MOV R1,R6 \ 00001B5C 0400A0E1 MOV R0,R4 \ 00001B60 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00001B64 000050E3 CMP R0,#+0 \ 00001B68 0300000A BEQ ??doItemJob_145 1034 { 1035 str2ints(dints->ints, p1, dints->len); \ ??doItemJob_144: \ 00001B6C 08209AE5 LDR R2,[R10, #+8] \ 00001B70 0010A0E1 MOV R1,R0 \ 00001B74 0C008AE2 ADD R0,R10,#+12 \ 00001B78 ........ _BLF str2ints,??str2ints??rA 1036 } 1037 if((p1=strstrInQuote(p, STR_RANGE1))||(p1=strstrInQuote(p, STR_RANGE2))) \ ??doItemJob_145: \ 00001B7C 58129FE5 LDR R1,??doItemJob_77+0x14 ;; STR_RANGE1 \ 00001B80 0400A0E1 MOV R0,R4 \ 00001B84 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00001B88 0080B0E1 MOVS R8,R0 \ 00001B8C 0400001A BNE ??doItemJob_146 \ 00001B90 48129FE5 LDR R1,??doItemJob_77+0x18 ;; STR_RANGE2 \ 00001B94 0400A0E1 MOV R0,R4 \ 00001B98 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00001B9C 0080B0E1 MOVS R8,R0 \ 00001BA0 1F00000A BEQ ??doItemJob_147 1038 { 1039 pp=gotoRealPos(p1); \ ??doItemJob_146: \ 00001BA4 0800A0E1 MOV R0,R8 \ 00001BA8 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 00001BAC 0080A0E1 MOV R8,R0 1040 str2num(pp, &dints->min, 0xFF, 0, 0); \ 00001BB0 0000A0E3 MOV R0,#+0 \ 00001BB4 01002DE9 PUSH {R0} \ 00001BB8 0030A0E1 MOV R3,R0 \ 00001BBC FF20A0E3 MOV R2,#+255 \ 00001BC0 0A10A0E1 MOV R1,R10 \ 00001BC4 0800A0E1 MOV R0,R8 \ 00001BC8 ........ _BLF str2num,??str2num??rA \ 00001BCC 04D08DE2 ADD SP,SP,#+4 \ 00001BD0 000000EA B ??doItemJob_148 1041 while(*pp&&*pp!='.') 1042 pp++; \ ??doItemJob_149: \ 00001BD4 018088E2 ADD R8,R8,#+1 \ ??doItemJob_148: \ 00001BD8 0000D8E5 LDRB R0,[R8, #+0] \ 00001BDC 000050E3 CMP R0,#+0 \ 00001BE0 2E005013 CMPNE R0,#+46 \ 00001BE4 FAFFFF1A BNE ??doItemJob_149 1043 while(*pp<'0'||*pp>'9') //to max \ ??doItemJob_150: \ 00001BE8 0000D8E5 LDRB R0,[R8, #+0] \ 00001BEC 300050E3 CMP R0,#+48 \ 00001BF0 0100003A BCC ??doItemJob_151 \ 00001BF4 3A0050E3 CMP R0,#+58 \ 00001BF8 0100003A BCC ??doItemJob_152 1044 pp++; \ ??doItemJob_151: \ 00001BFC 018088E2 ADD R8,R8,#+1 \ 00001C00 F8FFFFEA B ??doItemJob_150 1045 str2num(pp, &dints->max, 0xFF, 0, 0); \ ??doItemJob_152: \ 00001C04 0000A0E3 MOV R0,#+0 \ 00001C08 01002DE9 PUSH {R0} \ 00001C0C 0030A0E1 MOV R3,R0 \ 00001C10 FF20A0E3 MOV R2,#+255 \ 00001C14 04108AE2 ADD R1,R10,#+4 \ 00001C18 0800A0E1 MOV R0,R8 \ 00001C1C ........ _BLF str2num,??str2num??rA \ 00001C20 04D08DE2 ADD SP,SP,#+4 1046 } 1047 pp=gotoRealPos(p+1); \ ??doItemJob_147: \ 00001C24 010084E2 ADD R0,R4,#+1 \ 00001C28 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 00001C2C 0040A0E1 MOV R4,R0 1048 str2num(pp, &bytePos, 0, 0, 0); \ 00001C30 0000A0E3 MOV R0,#+0 \ 00001C34 01002DE9 PUSH {R0} \ 00001C38 0030A0E1 MOV R3,R0 \ 00001C3C 0020A0E1 MOV R2,R0 \ 00001C40 04108DE2 ADD R1,SP,#+4 \ 00001C44 0400A0E1 MOV R0,R4 \ 00001C48 ........ _BLF str2num,??str2num??rA 1049 addItemToConfig(dints, subMenu, TYPE_INTS, bytePos+ptcfgtop->offset, temp); \ 00001C4C ........ LDR R1,??DataTable16 ;; ptcfgtop \ 00001C50 0C008DE2 ADD R0,SP,#+12 \ 00001C54 01002DE9 PUSH {R0} \ 00001C58 08009DE5 LDR R0,[SP, #+8] \ 00001C5C 001091E5 LDR R1,[R1, #+0] \ 00001C60 1220A0E3 MOV R2,#+18 \ 00001C64 4F0000EA B ??doItemJob_35 1050 return; 1051 } 1052 } 1053 if(p1=strstrInQuote(p, STR_CONST)) \ ??doItemJob_140: \ 00001C68 94119FE5 LDR R1,??doItemJob_77+0x3C ;; STR_CONST \ 00001C6C 0400A0E1 MOV R0,R4 \ 00001C70 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00001C74 0080B0E1 MOVS R8,R0 \ 00001C78 5000000A BEQ ??doItemJob_120 1054 { 1055 if(isCurrectItem(p1)) \ 00001C7C ........ BL isCurrectItem \ 00001C80 000050E3 CMP R0,#+0 \ 00001C84 4D00000A BEQ ??doItemJob_120 1056 { 1057 DATA_CONST *dconst=malloc(sizeof(DATA_CONST)); \ 00001C88 0800A0E3 MOV R0,#+8 \ 00001C8C 140000EF SWI +20 \ 00001C90 00A0A0E1 MOV R10,R0 1058 dconst->data=0; \ 00001C94 00908AE5 STR R9,[R10, #+0] 1059 dconst->len=1; \ 00001C98 0100A0E3 MOV R0,#+1 \ 00001C9C 04008AE5 STR R0,[R10, #+4] 1060 pp=gotoRealPos(p1); \ 00001CA0 0800A0E1 MOV R0,R8 \ 00001CA4 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 00001CA8 0080A0E1 MOV R8,R0 1061 p1=gotoMyStrStart(pp); \ 00001CAC ........ _BLF gotoMyStrStart,??gotoMyStrStart??rA \ 00001CB0 00B0A0E1 MOV R11,R0 1062 p2=gotoMyStrEnd(pp); \ 00001CB4 0800A0E1 MOV R0,R8 \ 00001CB8 ........ _BLF gotoMyStrEnd,??gotoMyStrEnd??rA 1063 strnCopyWithEnd(temp, p1, p2-p1); \ 00001CBC 0B2040E0 SUB R2,R0,R11 \ 00001CC0 0B10A0E1 MOV R1,R11 \ 00001CC4 08008DE2 ADD R0,SP,#+8 \ 00001CC8 ........ _BLF strnCopyWithEnd,??strnCopyWithEnd??rA 1064 if((p1=strstrInQuote(p, STR_VL))||(p1=strstrInQuote(p, STR_VL1))) \ 00001CCC 0710A0E1 MOV R1,R7 \ 00001CD0 0400A0E1 MOV R0,R4 \ 00001CD4 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00001CD8 000050E3 CMP R0,#+0 \ 00001CDC 0400001A BNE ??doItemJob_153 \ 00001CE0 0610A0E1 MOV R1,R6 \ 00001CE4 0400A0E1 MOV R0,R4 \ 00001CE8 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00001CEC 000050E3 CMP R0,#+0 \ 00001CF0 0900000A BEQ ??doItemJob_154 1065 { 1066 pp=gotoRealPos(p1); \ ??doItemJob_153: \ 00001CF4 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 00001CF8 0080A0E1 MOV R8,R0 1067 str2num(pp, &dconst->data, 0, 0, 0); \ 00001CFC 0000A0E3 MOV R0,#+0 \ 00001D00 01002DE9 PUSH {R0} \ 00001D04 0030A0E1 MOV R3,R0 \ 00001D08 0020A0E1 MOV R2,R0 \ 00001D0C 0A10A0E1 MOV R1,R10 \ 00001D10 0800A0E1 MOV R0,R8 \ 00001D14 ........ _BLF str2num,??str2num??rA \ 00001D18 04D08DE2 ADD SP,SP,#+4 1068 } 1069 if(p1=strstrInQuote(p, " size=")) \ ??doItemJob_154: \ 00001D1C E4109FE5 LDR R1,??doItemJob_77+0x40 ;; `?` \ 00001DCC ........ DC32 `?` \ 00001DD0 ........ DC32 `?` \ 00001DD4 ........ DC32 STR_SLIDER2 \ 00001DD8 ........ DC32 STR_SLIDER1 \ 00001DDC ........ DC32 STR_RANGE1 \ 00001DE0 ........ DC32 STR_RANGE2 \ 00001DE4 ........ DC32 STR_USETEMPLATE1 \ 00001DE8 ........ DC32 STR_USRTEMPLATE2 \ 00001DEC ........ DC32 STR_MS1 \ 00001DF0 ........ DC32 STR_MS2 \ 00001DF4 ........ DC32 STR_BYTES1 \ 00001DF8 ........ DC32 STR_BYTES2 \ 00001DFC ........ DC32 STR_INTS1 \ 00001E00 ........ DC32 STR_INTS2 \ 00001E04 ........ DC32 STR_CONST \ 00001E08 ........ DC32 `?offset, 0, 0, 0); 1621 // ptcfgtop->offset=(-1)*(ptcfgtop->offset); 1622 //} 1623 //else 1624 { 1625 if(*s=='+') 1626 s++; 1627 str2num(s, &ptcfgtop->offset, 0, 0, 0); 1628 } 1629 goto ANYWHERE; 1630 } 1631 } 1632 if((p2=strstrInQuote(pp, "offset "))) 1633 { 1634 if(isThatItem(p2-8)) 1635 { 1636 char *s=gotoRealPos(p2); 1637 //if(*s=='-') 1638 //{ 1639 // s++; 1640 // str2num(s, &ptcfgtop->offset, 0, 0, 0); 1641 // ptcfgtop->offset=0-(ptcfgtop->offset); 1642 //} 1643 //else 1644 { 1645 if(*s=='+') 1646 s++; 1647 str2num(s, &ptcfgtop->offset, 0, 0, 0); 1648 } 1649 goto ANYWHERE; 1650 } 1651 } 1652 if((p2=strstrInQuote(pp, "info"))) 1653 { 1654 if(isThatItem(p2-5)) 1655 { 1656 addInfoToPatchInfo(p2); 1657 goto ANYWHERE; 1658 } 1659 } 1660 if((p2=strstrInQuote(pp, STR_CHOICE))||(p2=strstrInQuote(pp, STR_CHOICE1))||(p2=strstrInQuote(pp, STR_CHOICE2))) 1661 { 1662 if(isPrepareItem(p2)) 1663 { 1664 addPrepareData(p2); //Jump to 1665 goto ANYWHERE; 1666 } 1667 //else 1668 // doItemJob(pp, &ptcfgtop->mainitem); 1669 //goto ANYWHERE; 1670 } 1671 if((p2=strstrInQuote(pp, STR_TEMPLATE1))) 1672 { 1673 if(isThatItem(p2-3)) 1674 { 1675 p=doTemplateWork(p2); 1676 goto ANYWHERE; 1677 } 1678 } 1679 if((p2=strstrInQuote(pp, STR_TEMPLATE2))) 1680 { 1681 p=doTemplateWork(p2); 1682 } 1683 else 1684 { 1685 if((p2=strstrInQuote(pp, STR_SUBMENU2))) 1686 { 1687 if(isThatItem(p2-3)) 1688 { 1689 if(*p2=='=') 1690 p2++; 1691 p=doSubMenuJob(&ptcfgtop->mainitem, p2); 1692 } 1693 } 1694 if((p2=strstrInQuote(pp, STR_SUBMENU1))) 1695 { 1696 p=doSubMenuJob(&ptcfgtop->mainitem, p2); 1697 } 1698 else 1699 doItemJob(pp, &ptcfgtop->mainitem); 1700 } 1701 ANYWHERE: //执行完成一种数据类型之后,不再对这一行进行解析 1702 p=gotoQuoteEnd(p); 1703 if(!p) 1704 break; 1705 p++; 1706 while(*p) \ ??readConfig_2: \ 00000034 0100F5E5 LDRB R0,[R5, #+1]! \ 00000038 000050E3 CMP R0,#+0 1707 { 1708 if(*p=='{') \ 0000003C 7B005013 CMPNE R0,#+123 \ 00000040 1F00000A BEQ ??readConfig_1 1709 break; 1710 if(*p<0xA) // \ 00000044 0A0050E3 CMP R0,#+10 \ 00000048 1D00003A BCC ??readConfig_1 1711 break; 1712 if((*p>X_CHAR)&&(*p!=',')) //判断是这直接显示的字符 \ 0000004C 210050E3 CMP R0,#+33 \ 00000050 F7FFFF3A BCC ??readConfig_2 \ 00000054 2C0050E3 CMP R0,#+44 \ 00000058 F5FFFF0A BEQ ??readConfig_2 1713 { 1714 DATA_DRSTR *drstr=malloc(sizeof(DATA_DRSTR)); \ 0000005C 8000A0E3 MOV R0,#+128 \ 00000060 140000EF SWI +20 \ 00000064 0070A0E1 MOV R7,R0 1715 char *p1=p; 1716 char *p2=gotoQuoteStart(p); \ 00000068 0500A0E1 MOV R0,R5 \ 0000006C ........ _BLF gotoQuoteStart,??gotoQuoteStart??rA 1717 if(!p2) \ 00000070 000050E3 CMP R0,#+0 \ 00000074 1200000A BEQ ??readConfig_1 1718 break; 1719 p2--; 1720 while(*p2) \ ??readConfig_3: \ 00000078 011070E5 LDRB R1,[R0, #-1]! \ 0000007C 000051E3 CMP R1,#+0 \ 00000080 0100000A BEQ ??readConfig_4 1721 { 1722 if(*p2>X_CHAR) \ 00000084 210051E3 CMP R1,#+33 \ 00000088 FAFFFF3A BCC ??readConfig_3 1723 break; 1724 p2--; 1725 } 1726 p2++; 1727 strnCopyWithEnd(drstr->str, p1, p2-p1); \ ??readConfig_4: \ 0000008C 010080E2 ADD R0,R0,#+1 \ 00000090 052040E0 SUB R2,R0,R5 \ 00000094 0510A0E1 MOV R1,R5 \ 00000098 0700A0E1 MOV R0,R7 \ 0000009C ........ _BLF strnCopyWithEnd,??strnCopyWithEnd??rA 1728 addItemToConfig(drstr, &ptcfgtop->mainitem, TYPE_DRSTR, 0, NULL); \ 000000A0 0000A0E3 MOV R0,#+0 \ 000000A4 01002DE9 PUSH {R0} \ 000000A8 000096E5 LDR R0,[R6, #+0] \ 000000AC 0030A0E3 MOV R3,#+0 \ 000000B0 0120A0E3 MOV R2,#+1 \ 000000B4 201080E2 ADD R1,R0,#+32 \ 000000B8 0700A0E1 MOV R0,R7 \ 000000BC ........ BL addItemToConfig 1729 break; \ 000000C0 04D08DE2 ADD SP,SP,#+4 1730 } 1731 p++; 1732 } \ ??readConfig_1: \ 000000C4 0000D5E5 LDRB R0,[R5, #+0] \ 000000C8 000050E3 CMP R0,#+0 \ 000000CC 9C00000A BEQ ??readConfig_5 \ 000000D0 0500A0E1 MOV R0,R5 \ 000000D4 ........ _BLF gotoQuoteStart,??gotoQuoteStart??rA \ 000000D8 0070A0E1 MOV R7,R0 \ 000000DC 0750B0E1 MOVS R5,R7 \ 000000E0 9700000A BEQ ??readConfig_5 \ 000000E4 70129FE5 LDR R1,??readConfig_6+0xC ;; `?` \ 000000F8 0700A0E1 MOV R0,R7 \ 000000FC ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000100 0080B0E1 MOVS R8,R0 \ 00000104 0500000A BEQ ??readConfig_8 \ ??readConfig_7: \ 00000108 000054E3 CMP R4,#+0 \ 0000010C 8D00001A BNE ??readConfig_9 \ 00000110 ........ BL addPatchConfigList \ 00000114 0800A0E1 MOV R0,R8 \ 00000118 ........ BL addToPatchInfo \ 0000011C 840000EA B ??readConfig_10 \ ??readConfig_8: \ 00000120 8A1F8FE2 ADR R1,??readConfig_6 ;; "p " \ 00000124 0700A0E1 MOV R0,R7 \ 00000128 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 0000012C 0080B0E1 MOVS R8,R0 \ 00000130 0300000A BEQ ??readConfig_11 \ 00000134 030048E2 SUB R0,R8,#+3 \ 00000138 ........ BL isThatItem \ 0000013C 000050E3 CMP R0,#+0 \ 00000140 F0FFFF1A BNE ??readConfig_7 \ ??readConfig_11: \ 00000144 821F8FE2 ADR R1,??readConfig_6+0x4 ;; "p=" \ 00000148 0700A0E1 MOV R0,R7 \ 0000014C ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000150 0080B0E1 MOVS R8,R0 \ 00000154 0300000A BEQ ??readConfig_12 \ 00000158 030048E2 SUB R0,R8,#+3 \ 0000015C ........ BL isThatItem \ 00000160 000050E3 CMP R0,#+0 \ 00000164 E7FFFF1A BNE ??readConfig_7 \ ??readConfig_12: \ 00000168 7A1F8FE2 ADR R1,??readConfig_6+0x8 ;; "of " \ 0000016C 0700A0E1 MOV R0,R7 \ 00000170 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000174 0080B0E1 MOVS R8,R0 \ 00000178 1100000A BEQ ??readConfig_13 \ 0000017C 040048E2 SUB R0,R8,#+4 \ 00000180 ........ BL isThatItem \ 00000184 000050E3 CMP R0,#+0 \ 00000188 0D00000A BEQ ??readConfig_13 \ ??readConfig_14: \ 0000018C 0800A0E1 MOV R0,R8 \ 00000190 ........ _BLF gotoRealPos,??gotoRealPos??rA \ 00000194 0010D0E5 LDRB R1,[R0, #+0] \ 00000198 0030A0E3 MOV R3,#+0 \ 0000019C 2B0051E3 CMP R1,#+43 \ 000001A0 0010A0E3 MOV R1,#+0 \ 000001A4 02002DE9 PUSH {R1} \ 000001A8 0120A0E1 MOV R2,R1 \ 000001AC 001096E5 LDR R1,[R6, #+0] \ 000001B0 01008002 ADDEQ R0,R0,#+1 \ 000001B4 181081E2 ADD R1,R1,#+24 \ 000001B8 ........ _BLF str2num,??str2num??rA \ 000001BC 04D08DE2 ADD SP,SP,#+4 \ 000001C0 5B0000EA B ??readConfig_10 \ ??readConfig_13: \ 000001C4 98119FE5 LDR R1,??readConfig_6+0x14 ;; `?` \ 000001C8 0700A0E1 MOV R0,R7 \ 000001CC ........ _BLF strstrInQuote,??strstrInQuote??rA \ 000001D0 0080B0E1 MOVS R8,R0 \ 000001D4 0300000A BEQ ??readConfig_15 \ 000001D8 080048E2 SUB R0,R8,#+8 \ 000001DC ........ BL isThatItem \ 000001E0 000050E3 CMP R0,#+0 \ 000001E4 E8FFFF1A BNE ??readConfig_14 \ ??readConfig_15: \ 000001E8 78119FE5 LDR R1,??readConfig_6+0x18 ;; `?` \ 000001EC 0700A0E1 MOV R0,R7 \ 000001F0 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 000001F4 0080B0E1 MOVS R8,R0 \ 000001F8 0600000A BEQ ??readConfig_16 \ 000001FC 050048E2 SUB R0,R8,#+5 \ 00000200 ........ BL isThatItem \ 00000204 000050E3 CMP R0,#+0 \ 00000208 0200000A BEQ ??readConfig_16 \ 0000020C 0800A0E1 MOV R0,R8 \ 00000210 ........ BL addInfoToPatchInfo \ 00000214 460000EA B ??readConfig_10 \ ??readConfig_16: \ 00000218 ........ LDR R1,??DataTable22 ;; STR_CHOICE \ 0000021C 0700A0E1 MOV R0,R7 \ 00000220 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000224 0080B0E1 MOVS R8,R0 \ 00000228 0900001A BNE ??readConfig_17 \ 0000022C 38119FE5 LDR R1,??readConfig_6+0x1C ;; STR_CHOICE1 \ 00000230 0700A0E1 MOV R0,R7 \ 00000234 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000238 0080B0E1 MOVS R8,R0 \ 0000023C 0400001A BNE ??readConfig_17 \ 00000240 28119FE5 LDR R1,??readConfig_6+0x20 ;; STR_CHOICE2 \ 00000244 0700A0E1 MOV R0,R7 \ 00000248 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 0000024C 0080B0E1 MOVS R8,R0 \ 00000250 0600000A BEQ ??readConfig_18 \ ??readConfig_17: \ 00000254 0800A0E1 MOV R0,R8 \ 00000258 ........ BL isPrepareItem \ 0000025C 000050E3 CMP R0,#+0 \ 00000260 0200000A BEQ ??readConfig_18 \ 00000264 0800A0E1 MOV R0,R8 \ 00000268 ........ BL addPrepareData \ 0000026C 300000EA B ??readConfig_10 \ ??readConfig_18: \ 00000270 FC109FE5 LDR R1,??readConfig_6+0x24 ;; STR_TEMPLATE1 \ 00000274 0700A0E1 MOV R0,R7 \ 00000278 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 0000027C 0080B0E1 MOVS R8,R0 \ 00000280 0700000A BEQ ??readConfig_19 \ 00000284 030048E2 SUB R0,R8,#+3 \ 00000288 ........ BL isThatItem \ 0000028C 000050E3 CMP R0,#+0 \ 00000290 0300000A BEQ ??readConfig_19 \ ??readConfig_20: \ 00000294 0800A0E1 MOV R0,R8 \ 00000298 ........ BL doTemplateWork \ ??readConfig_21: \ 0000029C 0050A0E1 MOV R5,R0 \ 000002A0 230000EA B ??readConfig_10 \ ??readConfig_19: \ 000002A4 CC109FE5 LDR R1,??readConfig_6+0x28 ;; STR_TEMPLATE2 \ 000002A8 0700A0E1 MOV R0,R7 \ 000002AC ........ _BLF strstrInQuote,??strstrInQuote??rA \ 000002B0 0080B0E1 MOVS R8,R0 \ 000002B4 F6FFFF1A BNE ??readConfig_20 \ 000002B8 ........ LDR R1,??DataTable23 ;; STR_SUBMENU2 \ 000002BC 0700A0E1 MOV R0,R7 \ 000002C0 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 000002C4 0080B0E1 MOVS R8,R0 \ 000002C8 0B00000A BEQ ??readConfig_22 \ 000002CC 030048E2 SUB R0,R8,#+3 \ 000002D0 ........ BL isThatItem \ 000002D4 000050E3 CMP R0,#+0 \ 000002D8 0700000A BEQ ??readConfig_22 \ 000002DC 0000D8E5 LDRB R0,[R8, #+0] \ 000002E0 3D0050E3 CMP R0,#+61 \ 000002E4 000096E5 LDR R0,[R6, #+0] \ 000002E8 01808802 ADDEQ R8,R8,#+1 \ 000002EC 0810A0E1 MOV R1,R8 \ 000002F0 200080E2 ADD R0,R0,#+32 \ 000002F4 ........ BL doSubMenuJob \ 000002F8 0050A0E1 MOV R5,R0 \ ??readConfig_22: \ 000002FC ........ LDR R1,??DataTable24 ;; STR_SUBMENU1 \ 00000300 0700A0E1 MOV R0,R7 \ 00000304 ........ _BLF strstrInQuote,??strstrInQuote??rA \ 00000308 0080B0E1 MOVS R8,R0 \ 0000030C 0400000A BEQ ??readConfig_23 \ 00000310 0010A0E1 MOV R1,R0 \ 00000314 000096E5 LDR R0,[R6, #+0] \ 00000318 200080E2 ADD R0,R0,#+32 \ 0000031C ........ BL doSubMenuJob \ 00000320 DDFFFFEA B ??readConfig_21 \ ??readConfig_23: \ 00000324 000096E5 LDR R0,[R6, #+0] \ 00000328 201080E2 ADD R1,R0,#+32 \ 0000032C 0700A0E1 MOV R0,R7 \ 00000330 ........ BL doItemJob \ ??readConfig_10: \ 00000334 0500A0E1 MOV R0,R5 \ 00000338 ........ _BLF gotoQuoteEnd,??gotoQuoteEnd??rA \ 0000033C 0050B0E1 MOVS R5,R0 \ 00000340 3BFFFF1A BNE ??readConfig_2 1733 } 1734 sortPatchConfigList(); \ ??readConfig_5: \ 00000344 ........ BL sortPatchConfigList 1735 END: 1736 return 1; \ ??readConfig_9: \ 00000348 0100A0E3 MOV R0,#+1 \ 0000034C F081BDE8 POP {R4-R8,PC} ;; return \ ??readConfig_6: \ 00000350 70200000 DC8 "p ",+0 \ 00000354 703D0000 DC8 "p=",+0 \ 00000358 6F662000 DC8 "of " \ 0000035C ........ DC32 `?` \ 00000364 ........ DC32 `?` \ 00000368 ........ DC32 `?` \ 0000036C ........ DC32 STR_CHOICE1 \ 00000370 ........ DC32 STR_CHOICE2 \ 00000374 ........ DC32 STR_TEMPLATE1 \ 00000378 ........ DC32 STR_TEMPLATE2 1737 } 1738 1739 //释放一个submenu的所有项目 \ In segment CODE, align 4, keep-with-next 1740 void freeSubMenuItem(PATCH_SUBMENU *subMenuItem) 1741 { \ freeSubMenuItem: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1742 PATCH_ITEM *patchItem=subMenuItem->item; \ 00000004 804090E5 LDR R4,[R0, #+128] 1743 PATCH_ITEM *ptcItem; 1744 while(patchItem) \ 00000008 000054E3 CMP R4,#+0 \ 0000000C 3080BD08 POPEQ {R4,R5,PC} \ 00000010 020000EA B ??freeSubMenuItem_0 1745 { 1746 if(patchItem->itemData) 1747 { 1748 if(patchItem->itemType==TYPE_PRE) 1749 { 1750 PREPARE_DATA *preData=(PREPARE_DATA *)patchItem->itemData; 1751 PREPARE_ITEM *preItem=preData->prepareItem; 1752 PREPARE_ITEM *pItem; 1753 while(preItem) 1754 { 1755 pItem=preItem->next; 1756 mfree(preItem); 1757 preItem=pItem; 1758 } 1759 } 1760 else if(patchItem->itemType==TYPE_CBOX) 1761 { 1762 DATA_CBOX *cbox=(DATA_CBOX *)patchItem->itemData; 1763 CBOX_ITEM *cboxItem=cbox->cboxitem; 1764 CBOX_ITEM *cItem; 1765 while(cboxItem) 1766 { 1767 cItem=cboxItem->next; 1768 mfree(cboxItem); 1769 cboxItem=cItem; 1770 } 1771 } 1772 mfree(patchItem->itemData); 1773 } 1774 ptcItem=patchItem->next; 1775 mfree(patchItem); 1776 if(ptcItem) 1777 ptcItem->prev=0; \ ??freeSubMenuItem_1: \ 00000014 0000A0E3 MOV R0,#+0 \ 00000018 000085E5 STR R0,[R5, #+0] 1778 else 1779 break; 1780 patchItem=ptcItem; \ 0000001C 0540A0E1 MOV R4,R5 \ ??freeSubMenuItem_0: \ 00000020 900094E5 LDR R0,[R4, #+144] \ 00000024 000050E3 CMP R0,#+0 \ 00000028 1500000A BEQ ??freeSubMenuItem_2 \ 0000002C 8C1094E5 LDR R1,[R4, #+140] \ 00000030 000051E3 CMP R1,#+0 \ 00000034 0700001A BNE ??freeSubMenuItem_3 \ 00000038 200090E5 LDR R0,[R0, #+32] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 0D00000A BEQ ??freeSubMenuItem_4 \ ??freeSubMenuItem_5: \ 00000044 045090E5 LDR R5,[R0, #+4] \ 00000048 150000EF SWI +21 \ 0000004C 0500B0E1 MOVS R0,R5 \ 00000050 0900000A BEQ ??freeSubMenuItem_4 \ 00000054 FAFFFFEA B ??freeSubMenuItem_5 \ ??freeSubMenuItem_3: \ 00000058 060051E3 CMP R1,#+6 \ 0000005C 0600001A BNE ??freeSubMenuItem_4 \ 00000060 040090E5 LDR R0,[R0, #+4] \ 00000064 000050E3 CMP R0,#+0 \ 00000068 0300000A BEQ ??freeSubMenuItem_4 \ ??freeSubMenuItem_6: \ 0000006C 045090E5 LDR R5,[R0, #+4] \ 00000070 150000EF SWI +21 \ 00000074 0500B0E1 MOVS R0,R5 \ 00000078 FBFFFF1A BNE ??freeSubMenuItem_6 \ ??freeSubMenuItem_4: \ 0000007C 900094E5 LDR R0,[R4, #+144] \ 00000080 150000EF SWI +21 \ ??freeSubMenuItem_2: \ 00000084 045094E5 LDR R5,[R4, #+4] \ 00000088 0400A0E1 MOV R0,R4 \ 0000008C 150000EF SWI +21 \ 00000090 000055E3 CMP R5,#+0 \ 00000094 DEFFFF1A BNE ??freeSubMenuItem_1 1781 } 1782 } \ 00000098 3080BDE8 POP {R4,R5,PC} ;; return 1783 1784 //释放整个补丁 \ In segment CODE, align 4, keep-with-next 1785 void freePatchItem(PATCH_SUBMENU *subMenuItem) 1786 { \ freePatchItem: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1787 PATCH_ITEM *patchItem=subMenuItem->item; \ 00000004 804090E5 LDR R4,[R0, #+128] 1788 PATCH_ITEM *ptcItem; 1789 while(patchItem) \ 00000008 000054E3 CMP R4,#+0 \ 0000000C 3080BD08 POPEQ {R4,R5,PC} \ 00000010 020000EA B ??freePatchItem_0 1790 { 1791 if(patchItem->itemData) 1792 { 1793 if(patchItem->itemType==TYPE_PRE) 1794 { 1795 PREPARE_DATA *preData=(PREPARE_DATA *)patchItem->itemData; 1796 PREPARE_ITEM *preItem=preData->prepareItem; 1797 PREPARE_ITEM *pItem; 1798 while(preItem) 1799 { 1800 pItem=preItem->next; 1801 mfree(preItem); 1802 preItem=pItem; 1803 } 1804 } 1805 else if(patchItem->itemType==TYPE_CBOX) 1806 { 1807 DATA_CBOX *cbox=(DATA_CBOX *)patchItem->itemData; 1808 CBOX_ITEM *cboxItem=cbox->cboxitem; 1809 CBOX_ITEM *cItem; 1810 while(cboxItem) 1811 { 1812 cItem=cboxItem->next; 1813 mfree(cboxItem); 1814 cboxItem=cItem; 1815 } 1816 } 1817 else if(patchItem->itemType==TYPE_SUBMENU||patchItem->itemType==TYPE_TP) 1818 { 1819 PATCH_SUBMENU *subMenu=(PATCH_SUBMENU *)patchItem->itemData; 1820 freePatchItem(subMenu); 1821 } 1822 mfree(patchItem->itemData); 1823 } 1824 ptcItem=patchItem->next; 1825 mfree(patchItem); 1826 if(ptcItem) 1827 ptcItem->prev=0; \ ??freePatchItem_1: \ 00000014 0000A0E3 MOV R0,#+0 \ 00000018 000085E5 STR R0,[R5, #+0] 1828 else 1829 break; 1830 patchItem=ptcItem; \ 0000001C 0540A0E1 MOV R4,R5 \ ??freePatchItem_0: \ 00000020 900094E5 LDR R0,[R4, #+144] \ 00000024 000050E3 CMP R0,#+0 \ 00000028 1A00000A BEQ ??freePatchItem_2 \ 0000002C 8C1094E5 LDR R1,[R4, #+140] \ 00000030 000051E3 CMP R1,#+0 \ 00000034 0700001A BNE ??freePatchItem_3 \ 00000038 200090E5 LDR R0,[R0, #+32] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 1200000A BEQ ??freePatchItem_4 \ ??freePatchItem_5: \ 00000044 045090E5 LDR R5,[R0, #+4] \ 00000048 150000EF SWI +21 \ 0000004C 0500B0E1 MOVS R0,R5 \ 00000050 0E00000A BEQ ??freePatchItem_4 \ 00000054 FAFFFFEA B ??freePatchItem_5 \ ??freePatchItem_3: \ 00000058 060051E3 CMP R1,#+6 \ 0000005C 0700001A BNE ??freePatchItem_6 \ 00000060 040090E5 LDR R0,[R0, #+4] \ 00000064 000050E3 CMP R0,#+0 \ 00000068 0800000A BEQ ??freePatchItem_4 \ ??freePatchItem_7: \ 0000006C 045090E5 LDR R5,[R0, #+4] \ 00000070 150000EF SWI +21 \ 00000074 0500B0E1 MOVS R0,R5 \ 00000078 0400000A BEQ ??freePatchItem_4 \ 0000007C FAFFFFEA B ??freePatchItem_7 \ ??freePatchItem_6: \ 00000080 0B0051E3 CMP R1,#+11 \ 00000084 13005113 CMPNE R1,#+19 \ 00000088 0000001A BNE ??freePatchItem_4 \ 0000008C DBFFFFEB BL freePatchItem \ ??freePatchItem_4: \ 00000090 900094E5 LDR R0,[R4, #+144] \ 00000094 150000EF SWI +21 \ ??freePatchItem_2: \ 00000098 045094E5 LDR R5,[R4, #+4] \ 0000009C 0400A0E1 MOV R0,R4 \ 000000A0 150000EF SWI +21 \ 000000A4 000055E3 CMP R5,#+0 \ 000000A8 D9FFFF1A BNE ??freePatchItem_1 1831 } 1832 } \ 000000AC 3080BDE8 POP {R4,R5,PC} ;; return 1833 1834 //重新载入一个补丁配置(从config.txt),并释放老的配置 \ In segment CODE, align 4, keep-with-next 1835 void reloadThisPatch(PTC_CONFIG *ptcfg) 1836 { \ reloadThisPatch: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 0040A0E1 MOV R4,R0 1837 if(loadConfig()) \ 00000008 ........ BL loadConfig \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 F081BD08 POPEQ {R4-R8,PC} 1838 { 1839 char *p; 1840 if(p=strstr(cfg_buf, ptcfg->patchInfo->patchName)) \ 00000014 ........ LDR R0,??DataTable25 ;; cfg_buf \ 00000018 1C1094E5 LDR R1,[R4, #+28] \ 0000001C 180100EF SWI +280 \ 00000020 0080B0E1 MOVS R8,R0 \ 00000024 F081BD08 POPEQ {R4-R8,PC} 1841 { 1842 PTC_CONFIG *ptc_temp=ptcfgtop; \ 00000028 ........ LDR R6,??DataTable31 ;; ptcfgtop 1843 PTC_CONFIG *ptc_config=malloc(sizeof(PTC_CONFIG)); \ 0000002C A400A0E3 MOV R0,#+164 \ 00000030 007096E5 LDR R7,[R6, #+0] \ 00000034 140000EF SWI +20 \ 00000038 0050A0E1 MOV R5,R0 1844 ptc_config->prev=ptcfg->prev; \ 0000003C 000094E5 LDR R0,[R4, #+0] \ 00000040 000085E5 STR R0,[R5, #+0] 1845 ptc_config->next=ptcfg->next; \ 00000044 040094E5 LDR R0,[R4, #+4] \ 00000048 040085E5 STR R0,[R5, #+4] 1846 ptc_config->patchonoff=127; //all profile on, patch off \ 0000004C 7F00A0E3 MOV R0,#+127 \ 00000050 0800C5E5 STRB R0,[R5, #+8] 1847 ptc_config->patchInfo=0; \ 00000054 0000A0E3 MOV R0,#+0 \ 00000058 1C0085E5 STR R0,[R5, #+28] 1848 ptc_config->mainitem.smName[0]=0; \ 0000005C 2000C5E5 STRB R0,[R5, #+32] 1849 ptc_config->mainitem.item=0; \ 00000060 A00085E5 STR R0,[R5, #+160] 1850 ptc_config->needSaveData=0; \ 00000064 0C0085E5 STR R0,[R5, #+12] 1851 ptc_config->memory=0; \ 00000068 140085E5 STR R0,[R5, #+20] 1852 ptc_config->offset=0; \ 0000006C 180085E5 STR R0,[R5, #+24] 1853 ptc_config->disableProfile=0; \ 00000070 100085E5 STR R0,[R5, #+16] 1854 ptcfgtop=ptc_config; \ 00000074 005086E5 STR R5,[R6, #+0] \ 00000078 000000EA B ??reloadThisPatch_0 1855 while(*p) //goto Start Pos, maybe '`', 1856 { 1857 if((*p==' ')||(*p=='`')) 1858 break; 1859 if((*p=='=')||(*p=='{')) 1860 { 1861 p++; 1862 break; 1863 } 1864 p--; \ ??reloadThisPatch_1: \ 0000007C 018048E2 SUB R8,R8,#+1 \ ??reloadThisPatch_0: \ 00000080 0000D8E5 LDRB R0,[R8, #+0] \ 00000084 000050E3 CMP R0,#+0 \ 00000088 20005013 CMPNE R0,#+32 \ 0000008C 60005013 CMPNE R0,#+96 \ 00000090 0300000A BEQ ??reloadThisPatch_2 \ 00000094 3D0050E3 CMP R0,#+61 \ 00000098 7B005013 CMPNE R0,#+123 \ 0000009C F6FFFF1A BNE ??reloadThisPatch_1 \ 000000A0 018088E2 ADD R8,R8,#+1 1865 } 1866 addToPatchInfo(p); \ ??reloadThisPatch_2: \ 000000A4 0800A0E1 MOV R0,R8 \ 000000A8 ........ BL addToPatchInfo 1867 readConfig(1, p); //reload \ 000000AC 0810A0E1 MOV R1,R8 \ 000000B0 0100A0E3 MOV R0,#+1 \ 000000B4 ........ BL readConfig 1868 ptcfgtop=ptc_temp; \ 000000B8 007086E5 STR R7,[R6, #+0] 1869 ptc_temp=ptcfg->prev; \ 000000BC 000094E5 LDR R0,[R4, #+0] 1870 if(ptc_temp) \ 000000C0 000050E3 CMP R0,#+0 1871 ptc_temp->next=ptc_config; \ 000000C4 04508015 STRNE R5,[R0, #+4] 1872 else //top 1873 ptcfgtop=ptc_config; \ 000000C8 00508605 STREQ R5,[R6, #+0] 1874 ptc_temp=ptcfg->next; \ 000000CC 040094E5 LDR R0,[R4, #+4] 1875 if(ptc_temp) \ 000000D0 000050E3 CMP R0,#+0 1876 ptc_temp->prev=ptc_config; \ 000000D4 00508015 STRNE R5,[R0, #+0] 1877 if(ptcfg->patchInfo->info) //free info \ 000000D8 1C0094E5 LDR R0,[R4, #+28] \ 000000DC B81090E5 LDR R1,[R0, #+184] \ 000000E0 000051E3 CMP R1,#+0 \ 000000E4 0100000A BEQ ??reloadThisPatch_3 1878 mfree(ptcfg->patchInfo->info); \ 000000E8 0100A0E1 MOV R0,R1 \ 000000EC 150000EF SWI +21 1879 mfree(ptcfg->patchInfo); \ ??reloadThisPatch_3: \ 000000F0 1C0094E5 LDR R0,[R4, #+28] \ 000000F4 150000EF SWI +21 1880 freePatchItem(&ptcfg->mainitem); \ 000000F8 200084E2 ADD R0,R4,#+32 \ 000000FC ........ BL freePatchItem 1881 mfree(ptcfg); \ 00000100 0400A0E1 MOV R0,R4 \ 00000104 150000EF SWI +21 1882 } 1883 } 1884 } \ 00000108 F081BDE8 POP {R4-R8,PC} ;; return 1885 1886 //交换两个补丁的位置 \ In segment CODE, align 4, keep-with-next 1887 void swapPatchConfigList(PTC_CONFIG *p1, PTC_CONFIG *p2) 1888 { \ swapPatchConfigList: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0040A0E1 MOV R4,R0 1889 PTC_CONFIG *p1n=p1->next; \ 00000008 046094E5 LDR R6,[R4, #+4] 1890 PTC_CONFIG *p1p=p1->prev; \ 0000000C 007094E5 LDR R7,[R4, #+0] \ 00000010 0150A0E1 MOV R5,R1 1891 PTC_CONFIG *p2n=p2->next; \ 00000014 048095E5 LDR R8,[R5, #+4] 1892 PTC_CONFIG *p2p=p2->prev; \ 00000018 009095E5 LDR R9,[R5, #+0] 1893 PTC_CONFIG *temp=malloc(sizeof(PTC_CONFIG)); \ 0000001C A400A0E3 MOV R0,#+164 \ 00000020 140000EF SWI +20 \ 00000024 00A0A0E1 MOV R10,R0 1894 memcpy(temp, p2, sizeof(PTC_CONFIG)); \ 00000028 A420A0E3 MOV R2,#+164 \ 0000002C 0510A0E1 MOV R1,R5 \ 00000030 1E0100EF SWI +286 1895 memcpy(p2, p1, sizeof(PTC_CONFIG)); \ 00000034 A420A0E3 MOV R2,#+164 \ 00000038 0410A0E1 MOV R1,R4 \ 0000003C 0500A0E1 MOV R0,R5 \ 00000040 1E0100EF SWI +286 1896 memcpy(p1, temp, sizeof(PTC_CONFIG)); \ 00000044 A420A0E3 MOV R2,#+164 \ 00000048 0A10A0E1 MOV R1,R10 \ 0000004C 0400A0E1 MOV R0,R4 \ 00000050 1E0100EF SWI +286 1897 if(p1p) \ 00000054 000057E3 CMP R7,#+0 1898 p1p->next=p1; \ 00000058 04408715 STRNE R4,[R7, #+4] 1899 p1->prev=p1p; \ 0000005C 007084E5 STR R7,[R4, #+0] 1900 if(p1n) \ 00000060 000056E3 CMP R6,#+0 1901 p1n->prev=p1; \ 00000064 00408615 STRNE R4,[R6, #+0] 1902 p1->next=p1n; \ 00000068 046084E5 STR R6,[R4, #+4] 1903 if(p2n) \ 0000006C 000058E3 CMP R8,#+0 1904 p2n->prev=p2; \ 00000070 00508815 STRNE R5,[R8, #+0] 1905 p2->next=p2n; \ 00000074 048085E5 STR R8,[R5, #+4] 1906 if(p2p) \ 00000078 000059E3 CMP R9,#+0 1907 p2p->next=p2; \ 0000007C 04508915 STRNE R5,[R9, #+4] 1908 p2->prev=p2p; \ 00000080 009085E5 STR R9,[R5, #+0] 1909 mfree(temp); \ 00000084 0A00A0E1 MOV R0,R10 \ 00000088 150000EF SWI +21 1910 } \ 0000008C F087BDE8 POP {R4-R10,PC} ;; return 1911 1912 //排序补丁,按照补丁名称 \ In segment CODE, align 4, keep-with-next 1913 void sortPatchConfigList(void) 1914 { 1915 PTC_CONFIG *ptcfg=ptcfgtop; \ sortPatchConfigList: \ 00000000 ........ LDR R0,??DataTable31 ;; ptcfgtop \ 00000004 30402DE9 PUSH {R4,R5,LR} \ 00000008 004090E5 LDR R4,[R0, #+0] \ 0000000C 000054E3 CMP R4,#+0 \ 00000010 3080BD08 POPEQ {R4,R5,PC} 1916 PTC_CONFIG *pcfg; 1917 while(ptcfg) 1918 { 1919 pcfg=ptcfg->next; \ ??sortPatchConfigList_0: \ 00000014 045094E5 LDR R5,[R4, #+4] \ 00000018 000055E3 CMP R5,#+0 \ 0000001C 0B00000A BEQ ??sortPatchConfigList_1 1920 while(pcfg) 1921 { 1922 if(strncmpNoCase(ptcfg->patchInfo->patchName, pcfg->patchInfo->patchName, 128)>0) \ ??sortPatchConfigList_2: \ 00000020 1C0094E5 LDR R0,[R4, #+28] \ 00000024 1C1095E5 LDR R1,[R5, #+28] \ 00000028 8020A0E3 MOV R2,#+128 \ 0000002C ........ _BLF strncmpNoCase,??strncmpNoCase??rA \ 00000030 010050E3 CMP R0,#+1 \ 00000034 020000BA BLT ??sortPatchConfigList_3 1923 { 1924 swapPatchConfigList(ptcfg, pcfg); \ 00000038 0510A0E1 MOV R1,R5 \ 0000003C 0400A0E1 MOV R0,R4 \ 00000040 ........ BL swapPatchConfigList 1925 } 1926 pcfg=pcfg->next; \ ??sortPatchConfigList_3: \ 00000044 045095E5 LDR R5,[R5, #+4] 1927 } \ 00000048 000055E3 CMP R5,#+0 \ 0000004C F3FFFF1A BNE ??sortPatchConfigList_2 1928 ptcfg=ptcfg->next; \ ??sortPatchConfigList_1: \ 00000050 044094E5 LDR R4,[R4, #+4] 1929 } \ 00000054 000054E3 CMP R4,#+0 \ 00000058 EDFFFF1A BNE ??sortPatchConfigList_0 1930 } \ 0000005C 3080BDE8 POP {R4,R5,PC} ;; return 1931 1932 //释放所有补丁 \ In segment CODE, align 4, keep-with-next 1933 void fuckThemAll(void) 1934 { \ fuckThemAll: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1935 PTC_CONFIG *ptcfg=ptcfgtop; \ 00000004 ........ LDR R4,??DataTable31 ;; ptcfgtop \ 00000008 020000EA B ??fuckThemAll_0 1936 while(ptcfg) 1937 { 1938 if(ptcfg->patchInfo->info) //free info 1939 mfree(ptcfg->patchInfo->info); 1940 mfree(ptcfg->patchInfo); 1941 freePatchItem(&ptcfg->mainitem); 1942 ptcfgtop=ptcfg->next; 1943 mfree(ptcfg); 1944 if(ptcfgtop) 1945 ptcfgtop->prev=0; \ ??fuckThemAll_1: \ 0000000C 000094E5 LDR R0,[R4, #+0] \ 00000010 0010A0E3 MOV R1,#+0 \ 00000014 001080E5 STR R1,[R0, #+0] 1946 else 1947 break; 1948 ptcfg=ptcfgtop; \ ??fuckThemAll_0: \ 00000018 005094E5 LDR R5,[R4, #+0] \ 0000001C 000055E3 CMP R5,#+0 \ 00000020 3080BD08 POPEQ {R4,R5,PC} \ 00000024 1C0095E5 LDR R0,[R5, #+28] \ 00000028 B81090E5 LDR R1,[R0, #+184] \ 0000002C 000051E3 CMP R1,#+0 \ 00000030 0100000A BEQ ??fuckThemAll_2 \ 00000034 0100A0E1 MOV R0,R1 \ 00000038 150000EF SWI +21 \ ??fuckThemAll_2: \ 0000003C 1C0095E5 LDR R0,[R5, #+28] \ 00000040 150000EF SWI +21 \ 00000044 200085E2 ADD R0,R5,#+32 \ 00000048 ........ BL freePatchItem \ 0000004C 040095E5 LDR R0,[R5, #+4] \ 00000050 000084E5 STR R0,[R4, #+0] \ 00000054 0500A0E1 MOV R0,R5 \ 00000058 150000EF SWI +21 \ 0000005C 000094E5 LDR R0,[R4, #+0] \ 00000060 000050E3 CMP R0,#+0 \ 00000064 E8FFFF1A BNE ??fuckThemAll_1 1949 } 1950 } \ 00000068 3080BDE8 POP {R4,R5,PC} ;; return 1951 1952 //找到给定序号的补丁 \ In segment CODE, align 4, keep-with-next 1953 PTC_CONFIG *getPatchConfigItem(int n) 1954 { 1955 int i=0; 1956 PTC_CONFIG *ptcfg=ptcfgtop; \ getPatchConfigItem: \ 00000000 ........ LDR R1,??DataTable31 ;; ptcfgtop \ 00000004 0020A0E3 MOV R2,#+0 \ 00000008 001091E5 LDR R1,[R1, #+0] \ 0000000C 010000EA B ??getPatchConfigItem_0 1957 while(ptcfg) 1958 { 1959 if(i==n) 1960 return ptcfg; 1961 ptcfg=ptcfg->next; \ ??getPatchConfigItem_1: \ 00000010 041091E5 LDR R1,[R1, #+4] 1962 i++; \ 00000014 012082E2 ADD R2,R2,#+1 \ ??getPatchConfigItem_0: \ 00000018 000051E3 CMP R1,#+0 \ 0000001C 0300000A BEQ ??getPatchConfigItem_2 \ 00000020 000052E1 CMP R2,R0 \ 00000024 F9FFFF1A BNE ??getPatchConfigItem_1 \ 00000028 0100A0E1 MOV R0,R1 \ 0000002C 1EFF2FE1 BX LR 1963 } 1964 return 0; \ ??getPatchConfigItem_2: \ 00000030 0000A0E3 MOV R0,#+0 \ 00000034 1EFF2FE1 BX LR ;; return 1965 } 1966 1967 //给出所给选择项的最大条目 \ In segment CODE, align 4, keep-with-next 1968 int getMaxCBoxItem(DATA_CBOX *cbox) 1969 { 1970 CBOX_ITEM *cboxitem=cbox->cboxitem; \ getMaxCBoxItem: \ 00000000 041090E5 LDR R1,[R0, #+4] 1971 int i=0; \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 000051E3 CMP R1,#+0 \ 0000000C 1EFF2F01 BXEQ LR 1972 while(cboxitem) 1973 { 1974 cboxitem=cboxitem->next; \ ??getMaxCBoxItem_0: \ 00000010 041091E5 LDR R1,[R1, #+4] 1975 i++; \ 00000014 010080E2 ADD R0,R0,#+1 1976 } \ 00000018 000051E3 CMP R1,#+0 \ 0000001C FBFFFF1A BNE ??getMaxCBoxItem_0 1977 return i; \ 00000020 1EFF2FE1 BX LR ;; return 1978 } 1979 1980 //给出光标所指选择项 \ In segment CODE, align 4, keep-with-next 1981 CBOX_ITEM *getCurCBoxItem(DATA_CBOX *cbox, int cur) 1982 { 1983 CBOX_ITEM *cboxitem=cbox->cboxitem; \ getCurCBoxItem: \ 00000000 040090E5 LDR R0,[R0, #+4] 1984 int i=0; \ 00000004 0020A0E3 MOV R2,#+0 \ 00000008 010000EA B ??getCurCBoxItem_0 1985 while(cboxitem) 1986 { 1987 if(i==cur) 1988 return cboxitem; 1989 cboxitem=cboxitem->next; \ ??getCurCBoxItem_1: \ 0000000C 040090E5 LDR R0,[R0, #+4] 1990 i++; \ 00000010 012082E2 ADD R2,R2,#+1 \ ??getCurCBoxItem_0: \ 00000014 000050E3 CMP R0,#+0 \ 00000018 01005211 CMPNE R2,R1 \ 0000001C FAFFFF1A BNE ??getCurCBoxItem_1 1991 } 1992 return 0; \ 00000020 1EFF2FE1 BX LR ;; return 1993 } 1994 1995 //给出初始选择项 \ In segment CODE, align 4, keep-with-next 1996 CBOX_ITEM *getInitCBoxItem(DATA_CBOX *cbox, int *cur) 1997 { \ getInitCBoxItem: \ 00000000 10002DE9 PUSH {R4} 1998 CBOX_ITEM *cboxitem=cbox->cboxitem; \ 00000004 042090E5 LDR R2,[R0, #+4] 1999 int i=1; //选项是从1开始算的,0为标题 \ 00000008 0130A0E3 MOV R3,#+1 2000 *cur=i; \ 0000000C 01C0A0E3 MOV R12,#+1 \ 00000010 00C081E5 STR R12,[R1, #+0] \ 00000014 010000EA B ??getInitCBoxItem_0 2001 while(cboxitem) 2002 { 2003 if(cboxitem->data == cbox->initData) 2004 { 2005 *cur=i; 2006 return cboxitem; 2007 } 2008 cboxitem=cboxitem->next; \ ??getInitCBoxItem_1: \ 00000018 042092E5 LDR R2,[R2, #+4] 2009 i++; \ 0000001C 013083E2 ADD R3,R3,#+1 \ ??getInitCBoxItem_0: \ 00000020 000052E3 CMP R2,#+0 \ 00000024 0700000A BEQ ??getInitCBoxItem_2 \ 00000028 88C0D2E5 LDRB R12,[R2, #+136] \ 0000002C 0040D0E5 LDRB R4,[R0, #+0] \ 00000030 04005CE1 CMP R12,R4 \ 00000034 F7FFFF1A BNE ??getInitCBoxItem_1 \ 00000038 003081E5 STR R3,[R1, #+0] \ 0000003C 1000BDE8 POP {R4} \ 00000040 0200A0E1 MOV R0,R2 \ 00000044 1EFF2FE1 BX LR 2010 } 2011 return 0; \ ??getInitCBoxItem_2: \ 00000048 1000BDE8 POP {R4} \ 0000004C 0000A0E3 MOV R0,#+0 \ 00000050 1EFF2FE1 BX LR ;; return 2012 } 2013 2014 //读取并初始化所有补丁配置 \ In segment CODE, align 4, keep-with-next 2015 int getAllPatchData(void) 2016 { \ getAllPatchData: \ 00000000 10402DE9 PUSH {R4,LR} 2017 PTC_CONFIG *ptcfg; 2018 if(!readConfig(0, 0)) \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 0000A0E3 MOV R0,#+0 \ 0000000C ........ BL readConfig \ 00000010 000050E3 CMP R0,#+0 2019 return 0; \ 00000014 1080BD08 POPEQ {R4,PC} 2020 ptcfg=ptcfgtop; \ 00000018 ........ LDR R0,??DataTable31 ;; ptcfgtop \ 0000001C 004090E5 LDR R4,[R0, #+0] \ 00000020 000054E3 CMP R4,#+0 \ 00000024 0400000A BEQ ??getAllPatchData_0 2021 while(ptcfg) 2022 { 2023 initPatchConfig(ptcfg); \ ??getAllPatchData_1: \ 00000028 0400A0E1 MOV R0,R4 \ 0000002C ........ _BLF initPatchConfig,??initPatchConfig??rA 2024 ptcfg=ptcfg->next; \ 00000030 044094E5 LDR R4,[R4, #+4] 2025 } \ 00000034 000054E3 CMP R4,#+0 \ 00000038 FAFFFF1A BNE ??getAllPatchData_1 2026 return 1; \ ??getAllPatchData_0: \ 0000003C 0100A0E3 MOV R0,#+1 \ 00000040 1080BDE8 POP {R4,PC} ;; return 2027 } 2028 2029 //设置补丁开关 \ In segment CODE, align 4, keep-with-next 2030 void setPatchOnOff(PTC_CONFIG *ptcfg, int n) //0-6, profile, 7 patch 2031 { \ setPatchOnOff: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040B0E1 MOVS R4,R0 2032 if(!ptcfg) \ 00000008 7080BD08 POPEQ {R4-R6,PC} 2033 return; 2034 if(getPatchOnOff(ptcfg, n)) \ 0000000C 0860D4E5 LDRB R6,[R4, #+8] \ 00000010 0100A0E3 MOV R0,#+1 \ 00000014 1051A0E1 LSL R5,R0,R1 \ 00000018 0400A0E1 MOV R0,R4 \ 0000001C ........ BL getPatchOnOff \ 00000020 000050E3 CMP R0,#+0 2035 { 2036 ptcfg->patchonoff=(ptcfg->patchonoff)&(~(1<patchonoff=(ptcfg->patchonoff)|(1<patchonoff; \ getPatchOnOff: \ 00000000 0800D0E5 LDRB R0,[R0, #+8] 2048 if(n>7||n<0) \ 00000004 080051E3 CMP R1,#+8 \ 00000008 010000AA BGE ??getPatchOnOff_0 \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0100005A BPL ??getPatchOnOff_1 2049 return 0; \ ??getPatchOnOff_0: \ 00000014 0000A0E3 MOV R0,#+0 \ 00000018 1EFF2FE1 BX LR 2050 c=c>>n; 2051 return (c&1); \ ??getPatchOnOff_1: \ 0000001C 0120A0E3 MOV R2,#+1 \ 00000020 500102E0 AND R0,R2,R0, ASR R1 \ 00000024 1EFF2FE1 BX LR ;; return 2052 } 2053 2054 //检查ptc所对应的补丁是否存在 \ In segment CODE, align 4, keep-with-next 2055 int isPatchExistedByID(char *patchID) 2056 { \ isPatchExistedByID: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 2057 PTC_CONFIG *ptcfg=ptcfgtop; \ 00000008 ........ LDR R0,??DataTable31 ;; ptcfgtop \ 0000000C 005090E5 LDR R5,[R0, #+0] \ 00000010 000000EA B ??isPatchExistedByID_0 2058 while(ptcfg) 2059 { 2060 if(!strncmpNoCase(ptcfg->patchInfo->patchID, patchID, 16)) 2061 return 1; 2062 ptcfg=ptcfg->next; \ ??isPatchExistedByID_1: \ 00000014 045095E5 LDR R5,[R5, #+4] \ ??isPatchExistedByID_0: \ 00000018 000055E3 CMP R5,#+0 \ 0000001C 0800000A BEQ ??isPatchExistedByID_2 \ 00000020 1C0095E5 LDR R0,[R5, #+28] \ 00000024 1020A0E3 MOV R2,#+16 \ 00000028 0410A0E1 MOV R1,R4 \ 0000002C 800080E2 ADD R0,R0,#+128 \ 00000030 ........ _BLF strncmpNoCase,??strncmpNoCase??rA \ 00000034 000050E3 CMP R0,#+0 \ 00000038 F5FFFF1A BNE ??isPatchExistedByID_1 \ 0000003C 0100A0E3 MOV R0,#+1 \ 00000040 3080BDE8 POP {R4,R5,PC} 2063 } 2064 return 0; \ ??isPatchExistedByID_2: \ 00000044 0000A0E3 MOV R0,#+0 \ 00000048 3080BDE8 POP {R4,R5,PC} ;; return 2065 } \ In segment CODE, align 4, keep-with-next \ ??DataTable0: \ 00000000 ........ DC32 cfg_buf \ In segment CODE, align 4, keep-with-next \ ??DataTable4: \ 00000000 ........ DC32 ptcfgtop \ In segment CODE, align 4, keep-with-next \ ??DataTable16: \ 00000000 ........ DC32 ptcfgtop \ In segment CODE, align 4, keep-with-next \ ??DataTable22: \ 00000000 ........ DC32 STR_CHOICE \ In segment CODE, align 4, keep-with-next \ ??DataTable23: \ 00000000 ........ DC32 STR_SUBMENU2 \ In segment CODE, align 4, keep-with-next \ ??DataTable24: \ 00000000 ........ DC32 STR_SUBMENU1 \ In segment CODE, align 4, keep-with-next \ ??DataTable25: \ 00000000 ........ DC32 cfg_buf \ In segment CODE, align 4, keep-with-next \ ??DataTable31: \ 00000000 ........ DC32 ptcfgtop \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F6666736574 DC8 "offset " \ 2000 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 303A5C4D6973 DC8 "0:\\Misc\\Patches\\" \ 635C50617463 \ 6865735C00 \ 00000011 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000021 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000031 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000041 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000051 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000061 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000071 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 000000 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 7074635C00 DC8 "ptc\\" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 636F6E666967 DC8 "configs.txt" \ 732E74787400 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 696E666F00 DC8 "info" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 206279746520 DC8 " byte " \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 20696E742000 DC8 " int " \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ 00000000 20692000 DC8 " i " \ In segment DATA_C, align 4, align-sorted \ 00000000 206F2000 DC8 " o " \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 206F7074696F DC8 " option " \ 6E2000 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 20636F2000 DC8 " co " \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 20636F6C6F72 DC8 " color " \ 2000 \ In segment DATA_C, align 4, align-sorted \ 00000000 20612000 DC8 " a " \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 206164647265 DC8 " address " \ 73732000 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 2073662000 DC8 " sf " \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 2073656C6563 DC8 " selectfile " \ 7466696C6520 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 2073642000 DC8 " sd " \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 2073656C6563 DC8 " selectdir " \ 746469722000 \ In segment DATA_C, align 4, align-sorted \ 00000000 20732000 DC8 " s " \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 20737472696E DC8 " string " \ 672000 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ 00000000 20752000 DC8 " u " \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 207573747269 DC8 " ustring " \ 6E672000 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ 00000000 20682000 DC8 " h " \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 206865782000 DC8 " hex " \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 706174636820 DC8 "patch " \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 702000 DC8 "p " \ In segment DATA_C, align 1, align-sorted \ 00000000 703D00 DC8 "p=" \ In segment DATA_C, align 4, align-sorted \ 00000000 6F662000 DC8 "of " 2066 2067 #ifdef WINTEL_DEBUG 2068 2069 void showSubMenuItem(PATCH_SUBMENU *subMenuItem) 2070 { 2071 PATCH_ITEM *patchItem=subMenuItem->item; 2072 if(subMenuItem->smName[0]) 2073 printf("\nSubMenu: %s\n", subMenuItem->smName); 2074 while(patchItem) 2075 { 2076 if(patchItem->itemName[0]) 2077 printf("ItemName: %s\n", patchItem->itemName); 2078 if(patchItem->bytePos) 2079 printf("bytePos: %d\n", patchItem->bytePos); 2080 switch(patchItem->itemType) 2081 { 2082 case TYPE_SUBMENU: 2083 case TYPE_TP: 2084 showSubMenuItem((PATCH_SUBMENU *)patchItem->itemData); 2085 break; 2086 case TYPE_PRE: 2087 { 2088 PREPARE_DATA *preData=(PREPARE_DATA *)patchItem->itemData; 2089 if(preData) 2090 { 2091 PREPARE_ITEM *preItem=preData->prepareItem; 2092 printf("\nprepareItem: %s\n", preData->useAs); 2093 while(preItem) 2094 { 2095 printf("data: %d\n", preItem->data); 2096 printf("name: %s\n", preItem->itemName); 2097 preItem=preItem->next; 2098 } 2099 } 2100 break; 2101 } 2102 case TYPE_CHECKBOX: 2103 { 2104 DATA_CHECKBOX *chkbox=(DATA_CHECKBOX *)patchItem->itemData; 2105 if(chkbox) 2106 { 2107 printf("ON/OFF: %d\n", chkbox->onoff); 2108 printf("bitPos: %d\n", chkbox->bitPos); 2109 } 2110 break; 2111 } 2112 case TYPE_POS: 2113 { 2114 DATA_POS *pos=(DATA_POS *)patchItem->itemData; 2115 if(pos) 2116 { 2117 if(pos->off) 2118 printf("POS is OFF"); 2119 printf("X: %d\n", pos->x); 2120 printf("Y: %d\n", pos->y); 2121 printf("W: %d\n", pos->w); 2122 printf("H: %d\n", pos->h); 2123 } 2124 break; 2125 } 2126 case TYPE_BYTE: 2127 { 2128 DATA_BYTE *dbyte=(DATA_BYTE *)patchItem->itemData; 2129 if(dbyte) 2130 { 2131 printf("initData: %d\n", dbyte->initData); 2132 printf("min: %d\n", dbyte->min); 2133 printf("max: %d\n", dbyte->max); 2134 } 2135 break; 2136 } 2137 case TYPE_INT: 2138 { 2139 DATA_INT *dint=(DATA_INT *)patchItem->itemData; 2140 if(dint) 2141 { 2142 printf("initData: %d\n", dint->initData); 2143 printf("min: %d\n", dint->min); 2144 printf("max: %d\n", dint->max); 2145 } 2146 break; 2147 } 2148 case TYPE_CBOX: 2149 { 2150 DATA_CBOX *cbox=(DATA_CBOX *)patchItem->itemData; 2151 if(cbox) 2152 { 2153 CBOX_ITEM *citem=cbox->cboxitem; 2154 printf("initData: %d\n", cbox->initData); 2155 while(citem) 2156 { 2157 printf("cbName: %s\n", citem->name); 2158 printf("cbData: %d\n", citem->data); 2159 citem=citem->next; 2160 } 2161 } 2162 break; 2163 } 2164 case TYPE_DRSTR: 2165 { 2166 DATA_DRSTR *dstr=(DATA_DRSTR *)patchItem->itemData; 2167 if(dstr) 2168 printf("DirectString: %s\n", dstr->str); 2169 break; 2170 } 2171 case TYPE_COLOR: 2172 { 2173 DATA_COLOR *color=(DATA_COLOR *)patchItem->itemData; 2174 if(color) 2175 printf("Color: %08X\n", *(int *)color->color); 2176 break; 2177 } 2178 case TYPE_ADDRESS: 2179 { 2180 DATA_ADDRESS *addr=(DATA_ADDRESS *)patchItem->itemData; 2181 if(addr) 2182 printf("Addr: %X\n", addr->addr); 2183 break; 2184 } 2185 case TYPE_STRING: 2186 { 2187 DATA_STRING *str=(DATA_STRING *)patchItem->itemData; 2188 if(str) 2189 { 2190 printf("String: %s\n", str->string); 2191 printf("MaxLen: %d\n", str->maxlen); 2192 } 2193 break; 2194 } 2195 case TYPE_UNICODE: 2196 { 2197 DATA_UNICODE *uni=(DATA_UNICODE *)patchItem->itemData; 2198 if(uni) 2199 { 2200 printf("UniStr: %s\n", uni->ustr); 2201 printf("MaxLen: %d\n", uni->maxlen); 2202 } 2203 break; 2204 } 2205 case TYPE_HEX: 2206 { 2207 DATA_HEX *hex=(DATA_HEX *)patchItem->itemData; 2208 if(hex) 2209 { 2210 unsigned char *s=hex->hex; 2211 int i=0; 2212 int max=(hex->maxlen?hex->maxlen:1); 2213 printf("HexData:"); 2214 for(;imaxlen); 2219 } 2220 break; 2221 } 2222 case TYPE_SF: 2223 { 2224 DATA_SF *fs=(DATA_SF *)patchItem->itemData; 2225 printf("FilePath: %s\n", fs->path); 2226 printf("Mask: %s\n", fs->mask); 2227 printf("Maxlen: %d\n", fs->maxlen); 2228 break; 2229 } 2230 case TYPE_SL: 2231 { 2232 DATA_SL *sl=(DATA_SL *)patchItem->itemData; 2233 if(sl) 2234 { 2235 printf("initData: %d\n", sl->initData); 2236 printf("min: %d\n", sl->min); 2237 printf("max: %d\n", sl->max); 2238 } 2239 break; 2240 } 2241 case TYPE_MS: 2242 { 2243 DATA_MS *ms=(DATA_MS *)patchItem->itemData; 2244 if(ms) 2245 { 2246 printf("ms: %d\n", ms->ms); 2247 } 2248 break; 2249 } 2250 case TYPE_POSB: 2251 { 2252 DATA_POS *pos=(DATA_POS *)patchItem->itemData; 2253 if(pos) 2254 { 2255 if(pos->off) 2256 printf("POS IS OFF"); 2257 printf("X: %d\n", pos->x); 2258 printf("Y: %d\n", pos->y); 2259 printf("W: %d\n", pos->w); 2260 printf("H: %d\n", pos->h); 2261 } 2262 break; 2263 } 2264 case TYPE_BYTES: 2265 { 2266 DATA_BYTES *dbytes=(DATA_BYTES *)patchItem->itemData; 2267 if(dbytes) 2268 { 2269 int i=1; 2270 printf("type: Bytes\nDATA:\n%d", dbytes->bytes[0]); 2271 for(;ilen;i++) 2272 printf(",%d",dbytes->bytes[i]); 2273 printf("\n"); 2274 } 2275 break; 2276 } 2277 case TYPE_INTS: 2278 { 2279 DATA_INTS *dints=(DATA_INTS *)patchItem->itemData; 2280 if(dints) 2281 { 2282 int i=1; 2283 printf("type: Ints\nDATA:\n%d", dints->ints[0]); 2284 for(;ilen;i++) 2285 printf(",%d",dints->ints[i]); 2286 printf("\n"); 2287 } 2288 break; 2289 } 2290 case TYPE_CONST: 2291 { 2292 DATA_CONST *dconst=(DATA_CONST *)patchItem->itemData; 2293 if(dconst) 2294 { 2295 printf("Const: %d\n", dconst->data); 2296 printf("Const, LEN: %d\n", dconst->len); 2297 } 2298 break; 2299 } 2300 } 2301 patchItem=patchItem->next; 2302 } 2303 } 2304 int main(void) 2305 { 2306 PTC_CONFIG *ptcfg; 2307 getAllPatchData(); 2308 ptcfg=ptcfgtop; 2309 while(ptcfg) 2310 { 2311 printf("\nname: %s\n", ptcfg->patchInfo->patchName); 2312 printf("author: %s\n", ptcfg->patchInfo->author); 2313 printf("Ver: %s\n", ptcfg->patchInfo->version); 2314 if(ptcfg->patchInfo->info) 2315 printf("Info: %s\n", ptcfg->patchInfo->info); 2316 printf("ID: %s\n", ptcfg->patchInfo->patchID); 2317 if(ptcfg->mainitem.item) 2318 showSubMenuItem(&ptcfg->mainitem); 2319 savePatchConfig(ptcfg); 2320 ptcfg=ptcfg->next; 2321 } 2322 fuckThemAll(); 2323 return 0; 2324 } 2325 #endif 2326 Maximum stack usage in bytes: Function CSTACK -------- ------ addInfoToPatchInfo 16 addItemToCBox 0 addItemToConfig 28 addPatchConfigList 4 addPreDataToCBoxItem 24 addPreItemToData 0 addPrepareData 32 addToPatchInfo 24 cboxItemColon 28 doItemJob 180 doSubMenuJob 28 doTemplateWork 24 findTemplate 16 freePatchItem 12 freeSubMenuItem 12 fuckThemAll 12 getAllPatchData 8 getCurCBoxItem 0 getInitCBoxItem 4 getMaxCBoxItem 0 getPatchConfigItem 0 getPatchOnOff 0 isCurrectItem 8 isPatchExistedByID 12 isPrepareItem 0 isThatItem 0 loadConfig 188 readConfig 28 reloadThisPatch 24 setPatchOnOff 16 sortPatchConfigList 12 subMenuCopy 40 swapPatchConfigList 32 Segment part sizes: Function/Label Bytes -------------- ----- cfg_buf 49152 ptcfgtop 4 loadConfig 224 addPatchConfigList 120 addToPatchInfo 464 addPreItemToData 56 addItemToConfig 180 addPrepareData 360 addPreDataToCBoxItem 228 addItemToCBox 56 cboxItemColon 280 isThatItem 48 findTemplate 100 isCurrectItem 112 doItemJob 7692 doSubMenuJob 576 addInfoToPatchInfo 84 isPrepareItem 84 doTemplateWork 584 subMenuCopy 1264 readConfig 892 freeSubMenuItem 156 freePatchItem 176 reloadThisPatch 268 swapPatchConfigList 144 sortPatchConfigList 96 fuckThemAll 108 getPatchConfigItem 56 getMaxCBoxItem 36 getCurCBoxItem 36 getInitCBoxItem 84 getAllPatchData 68 setPatchOnOff 60 getPatchOnOff 40 isPatchExistedByID 76 ??DataTable0 4 ??DataTable4 4 ??DataTable16 4 ??DataTable22 4 ??DataTable23 4 ??DataTable24 4 ??DataTable25 4 ??DataTable31 4 ? 8 ? 128 ? 8 ? 12 ? 8 ? 4 ? 8 ? 8 ? 4 ? 4 ? 12 ? 8 ? 8 ? 4 ? 12 ? 8 ? 16 ? 8 ? 12 ? 4 ? 12 ? 4 ? 12 ? 4 ? 8 ? 8 ? 3 ? 4 Others 360 15 188 bytes in segment CODE 434 bytes in segment DATA_C 49 156 bytes in segment DATA_Z 12 bytes in segment INITTAB 14 840 bytes of CODE memory (+ 360 bytes shared) 434 bytes of CONST memory 49 156 bytes of DATA memory Errors: none Warnings: none