############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.41A/W32 EVALUATION 09/Dec/2007 21:15:06 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\Pasha\elf\googlecode\SieTextView\main.c # # Command line = D:\Pasha\elf\googlecode\SieTextView\main.c -D # # NEWSGOLD -D ELKA -lC D:\Pasha\elf\googlecode\SieText # # View\Release\List\ -lA D:\Pasha\elf\googlecode\SieTe # # xtView\Release\List\ -o D:\Pasha\elf\googlecode\SieT # # extView\Release\Obj\ -s9 --no_unroll --cpu_mode arm # # --endian little --cpu ARM926EJ-S --stack_align 4 # # --interwork -e --fpu None -I # # "D:\Pasha\ARM_Embedded_Workbench\Embedded Workbench # # 4.0 Evaluation\ARM\INC\" --inline_threshold=2 # # List file = D:\Pasha\elf\googlecode\SieTextView\Release\List\mai # # n.lst # # Object file = D:\Pasha\elf\googlecode\SieTextView\Release\Obj\main # # .r79 # # # # # ############################################################################## D:\Pasha\elf\googlecode\SieTextView\main.c 1 #include "..\inc\swilib.h" 2 #include "..\inc\cfg_items.h" 3 #include "conf_loader.h" 4 #include "code.h" 5 #include "bookmark.h" 6 7 /* 待完成 8 -页码与边界控制 9 -字符集控制 10 -书签载入/生成 11 -定位控制 12 -搜索 13 -编辑 14 */ 15 /* 16 =============================== 17 窗口调整 18 =============================== 19 */ 20 #pragma inline \ In segment CODE, align 4, keep-with-next 21 void patch_header(HEADER_DESC* head) { \ patch_header: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 22 head->rc.x = 0; \ 00000008 0000A0E3 MOV R0,#+0 \ 0000000C B000C4E1 STRH R0,[R4, #+0] 23 head->rc.y = YDISP; \ 00000010 1800A0E3 MOV R0,#+24 \ 00000014 B200C4E1 STRH R0,[R4, #+2] 24 head->rc.x2 = ScreenW() - 1; \ 00000018 888100EF SWI +33160 \ 0000001C 010040E2 SUB R0,R0,#+1 \ 00000020 B400C4E1 STRH R0,[R4, #+4] 25 head->rc.y2 = HeaderH() + YDISP; \ 00000024 8A8100EF SWI +33162 \ 00000028 180080E2 ADD R0,R0,#+24 \ 0000002C B600C4E1 STRH R0,[R4, #+6] 26 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 27 28 #pragma inline 29 void patch_input(INPUTDIA_DESC* inp) { 30 inp->rc.x = 0; 31 inp->rc.y = HeaderH() + 1 + YDISP; 32 inp->rc.x2 = ScreenW() - 1; 33 inp->rc.y2 = ScreenH() - SoftkeyH() - 1; 34 } 35 36 #pragma inline 37 void patch_rect(RECT* rc, int x, int y, int x2, int y2) { 38 rc->x = x; 39 rc->y = y; 40 rc->x2 = x2; 41 rc->y2 = y2; 42 } 43 44 /* 45 =============================== 46 end 47 =============================== 48 */ 49 50 51 /* 52 =============================== 53 参数定义 54 =============================== 55 */ 56 int Quit_Required = 0; 57 /*---------文件----------*/ 58 #define BUF_LEN 32768 //缓存长度 59 60 typedef struct DataIndex { 61 struct DataIndex *next; 62 struct DataIndex *prev; 63 int offset; 64 int uc16len, datalen; 65 } DataIndex; 66 67 DataIndex *fileindex; //文件索引 68 DataIndex *curblock; //当前块 69 char* buff; //缓存 70 int codetype = 0; 71 char procfile[128]; 72 int buffloaded = 0; 73 int fd = 0; //文件号 74 unsigned int ul = 0; 75 int foffset = 0; //文件偏移 76 77 int rlen = 0, llen = 0; 78 79 int bmkfd = 0; //书签文件号 80 int* bookmark; //书签 81 int bmknum; //数量 82 /*---------end-----------*/ 83 84 /*---------屏幕----------*/ 85 int winx = 0, winy = 0, winw = 0, winh = 0; 86 int viewlen = 0; //一次性转换的字节数 87 int bytelen = 0; //显示缓存字节数 88 int viewpos = 0; //显示起始缓存偏移 89 int viewrow = 0; // 90 short showinfo = 0; 91 WSHDR *sbw; //屏幕显存 92 93 extern const int charset; //编码 94 extern const int space; //行间距 95 extern const int font; //字体 96 extern const int status; //显示状态条 97 extern const int acbm; //自动生成书签 98 extern const int statfont; //状态条字体 99 extern const int fileicon; //文件图标 100 extern const int foldicon; //文件夹图标 101 extern const char fontcolor[4]; //字体颜色 102 extern const char bgcolor[4]; //背景颜色 103 extern const char statbgcolor[4]; //状态栏背景颜色 104 extern const char statfontcolor[4]; //状态栏字体颜色 105 extern const char LAST[]; //上次打开的文件 106 /*---------end-----------*/ 107 /* 108 =============================== 109 end 110 =============================== 111 */ 112 113 114 /* 115 =============================== 116 文件 117 =============================== 118 */ \ In segment CODE, align 4, keep-with-next 119 int getStartOffset(void) { 120 int offset = 0; 121 if (charset) codetype = charset; \ getStartOffset: \ 00000000 ........ LDR R1,??DataTable0 ;; charset \ 00000004 ........ LDR R2,??DataTable19 ;; inp_desc \ 00000008 001091E5 LDR R1,[R1, #+0] \ 0000000C 0000A0E3 MOV R0,#+0 \ 00000010 000051E3 CMP R1,#+0 \ 00000014 4C108215 STRNE R1,[R2, #+76] \ 00000018 1EFF2F11 BXNE LR 122 else { 123 switch (codetype) { \ 0000001C 4C1092E5 LDR R1,[R2, #+76] \ 00000020 021041E2 SUB R1,R1,#+2 \ 00000024 010051E3 CMP R1,#+1 \ 00000028 0200009A BLS ??getStartOffset_0 \ 0000002C 021051E2 SUBS R1,R1,#+2 \ 00000030 0200000A BEQ ??getStartOffset_1 \ 00000034 1EFF2FE1 BX LR 124 case 2: case 3: offset += 2; break; \ ??getStartOffset_0: \ 00000038 0200A0E3 MOV R0,#+2 \ 0000003C 1EFF2FE1 BX LR 125 case 4: offset += 3; break; \ ??getStartOffset_1: \ 00000040 0300A0E3 MOV R0,#+3 126 } 127 } 128 return offset; \ 00000044 1EFF2FE1 BX LR ;; return 129 } 130 \ In segment CODE, align 4, keep-with-next 131 int createIndex(void) { \ createIndex: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 132 133 int readlen = BUF_LEN - (BUF_LEN >> 2); 134 135 char *tb = NULL; 136 DataIndex *p; 137 foffset = getStartOffset(); \ 00000004 ........ LDR R5,??DataTable19 ;; inp_desc \ 00000008 0040A0E3 MOV R4,#+0 \ 0000000C 0070A0E3 MOV R7,#+0 \ 00000010 ........ BL getStartOffset \ 00000014 580085E5 STR R0,[R5, #+88] 138 139 //链表头,保存整个文件的信息 140 fileindex = malloc(sizeof (DataIndex)); \ 00000018 1400A0E3 MOV R0,#+20 \ 0000001C 140000EF SWI +20 \ 00000020 400085E5 STR R0,[R5, #+64] 141 fileindex->prev = NULL; \ 00000024 044080E5 STR R4,[R0, #+4] 142 fileindex->next = NULL; \ 00000028 400095E5 LDR R0,[R5, #+64] 143 fileindex->offset = foffset; 144 fileindex->uc16len = 0; 145 fileindex->datalen = 0; 146 p = fileindex; 147 148 if (lseek(fd, foffset, S_SET, &ul, &ul) != foffset) return 0; \ 0000002C 663F85E2 ADD R3,R5,#+408 \ 00000030 004080E5 STR R4,[R0, #+0] \ 00000034 406095E5 LDR R6,[R5, #+64] \ 00000038 580095E5 LDR R0,[R5, #+88] \ 0000003C 0420A0E1 MOV R2,R4 \ 00000040 080086E5 STR R0,[R6, #+8] \ 00000044 0C4086E5 STR R4,[R6, #+12] \ 00000048 104086E5 STR R4,[R6, #+16] \ 0000004C 660F85E2 ADD R0,R5,#+408 \ 00000050 01002DE9 PUSH {R0} \ 00000054 581095E5 LDR R1,[R5, #+88] \ 00000058 540095E5 LDR R0,[R5, #+84] \ 0000005C 0F0000EF SWI +15 \ 00000060 581095E5 LDR R1,[R5, #+88] \ 00000064 04D08DE2 ADD SP,SP,#+4 \ 00000068 010050E1 CMP R0,R1 \ 0000006C 2100000A BEQ ??createIndex_0 \ ??createIndex_1: \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 F080BDE8 POP {R4-R7,PC} 149 150 while ((rlen = llen = fread(fd, buff, readlen, &ul)) > 0) { 151 fileindex->datalen += llen; 152 switch (codetype) { 153 case 1: //ansi 154 tb = gb2unicode(buff, rlen, &rlen, &llen); 155 break; 156 case 2: //unicode le 157 rlen = rlen >> 1 << 1; 158 llen = rlen; 159 tb = malloc(1); 160 break; 161 case 3: //unicode be 162 tb = unicodeSwitch(buff, rlen, &rlen, &llen); 163 break; 164 case 4: //utf8 165 tb = utf82unicode(buff, rlen, &rlen, &llen); \ ??createIndex_2: \ 00000078 5C1095E5 LDR R1,[R5, #+92] \ 0000007C 480095E5 LDR R0,[R5, #+72] \ 00000080 603085E2 ADD R3,R5,#+96 \ 00000084 5C2085E2 ADD R2,R5,#+92 \ 00000088 ........ _BLF utf82unicode,??utf82unicode??rA \ ??createIndex_3: \ 0000008C 0070A0E1 MOV R7,R0 166 break; 167 default: 168 break; 169 } 170 if (!tb) return 0; \ ??createIndex_4: \ 00000090 000057E3 CMP R7,#+0 \ 00000094 F5FFFF0A BEQ ??createIndex_1 171 mfree(tb); \ 00000098 0700A0E1 MOV R0,R7 \ 0000009C 150000EF SWI +21 172 p->next = malloc(sizeof (DataIndex)); \ 000000A0 1400A0E3 MOV R0,#+20 \ 000000A4 140000EF SWI +20 \ 000000A8 000086E5 STR R0,[R6, #+0] 173 p->next->offset = foffset; \ 000000AC 581095E5 LDR R1,[R5, #+88] \ 000000B0 081080E5 STR R1,[R0, #+8] 174 p->next->uc16len = rlen; \ 000000B4 5C1095E5 LDR R1,[R5, #+92] \ 000000B8 0C1080E5 STR R1,[R0, #+12] 175 p->next->datalen = llen; \ 000000BC 601095E5 LDR R1,[R5, #+96] \ 000000C0 101080E5 STR R1,[R0, #+16] 176 p->next->prev = p; \ 000000C4 046080E5 STR R6,[R0, #+4] 177 p->next->next = NULL; \ 000000C8 000096E5 LDR R0,[R6, #+0] \ 000000CC 004080E5 STR R4,[R0, #+0] 178 fileindex->uc16len += rlen; \ 000000D0 400095E5 LDR R0,[R5, #+64] \ 000000D4 5C2095E5 LDR R2,[R5, #+92] \ 000000D8 0C1090E5 LDR R1,[R0, #+12] \ 000000DC 011082E0 ADD R1,R2,R1 \ 000000E0 0C1080E5 STR R1,[R0, #+12] 179 foffset += llen; \ 000000E4 580095E5 LDR R0,[R5, #+88] \ 000000E8 601095E5 LDR R1,[R5, #+96] \ 000000EC 000081E0 ADD R0,R1,R0 \ 000000F0 580085E5 STR R0,[R5, #+88] 180 p = p->next; \ 000000F4 006096E5 LDR R6,[R6, #+0] \ ??createIndex_0: \ 000000F8 540095E5 LDR R0,[R5, #+84] \ 000000FC 481095E5 LDR R1,[R5, #+72] \ 00000100 663F85E2 ADD R3,R5,#+408 \ 00000104 602CA0E3 MOV R2,#+24576 \ 00000108 0B0000EF SWI +11 \ 0000010C 600085E5 STR R0,[R5, #+96] \ 00000110 5C0085E5 STR R0,[R5, #+92] \ 00000114 010050E3 CMP R0,#+1 \ 00000118 400095E5 LDR R0,[R5, #+64] \ 0000011C 210000BA BLT ??createIndex_5 \ 00000120 101090E5 LDR R1,[R0, #+16] \ 00000124 602095E5 LDR R2,[R5, #+96] \ 00000128 011082E0 ADD R1,R2,R1 \ 0000012C 101080E5 STR R1,[R0, #+16] \ 00000130 4C0095E5 LDR R0,[R5, #+76] \ 00000134 010050E2 SUBS R0,R0,#+1 \ 00000138 0600000A BEQ ??createIndex_6 \ 0000013C 010050E2 SUBS R0,R0,#+1 \ 00000140 0A00000A BEQ ??createIndex_7 \ 00000144 010050E2 SUBS R0,R0,#+1 \ 00000148 1000000A BEQ ??createIndex_8 \ 0000014C 010050E2 SUBS R0,R0,#+1 \ 00000150 C8FFFF0A BEQ ??createIndex_2 \ 00000154 CDFFFFEA B ??createIndex_4 \ ??createIndex_6: \ 00000158 5C1095E5 LDR R1,[R5, #+92] \ 0000015C 480095E5 LDR R0,[R5, #+72] \ 00000160 603085E2 ADD R3,R5,#+96 \ 00000164 5C2085E2 ADD R2,R5,#+92 \ 00000168 ........ _BLF gb2unicode,??gb2unicode??rA \ 0000016C C6FFFFEA B ??createIndex_3 \ ??createIndex_7: \ 00000170 5C0095E5 LDR R0,[R5, #+92] \ 00000174 C000A0E1 ASR R0,R0,#+1 \ 00000178 8000A0E1 LSL R0,R0,#+1 \ 0000017C 5C0085E5 STR R0,[R5, #+92] \ 00000180 600085E5 STR R0,[R5, #+96] \ 00000184 0100A0E3 MOV R0,#+1 \ 00000188 140000EF SWI +20 \ 0000018C BEFFFFEA B ??createIndex_3 \ ??createIndex_8: \ 00000190 5C1095E5 LDR R1,[R5, #+92] \ 00000194 480095E5 LDR R0,[R5, #+72] \ 00000198 603085E2 ADD R3,R5,#+96 \ 0000019C 5C2085E2 ADD R2,R5,#+92 \ 000001A0 ........ _BLF unicodeSwitch,??unicodeSwitch??rA \ 000001A4 B8FFFFEA B ??createIndex_3 181 } 182 183 if (!fileindex->next) { //0字节文件 \ ??createIndex_5: \ 000001A8 000090E5 LDR R0,[R0, #+0] \ 000001AC 000050E3 CMP R0,#+0 \ 000001B0 0A00001A BNE ??createIndex_9 184 p = malloc(sizeof (DataIndex)); \ 000001B4 1400A0E3 MOV R0,#+20 \ 000001B8 140000EF SWI +20 \ 000001BC 0060A0E1 MOV R6,R0 185 p->uc16len = p->datalen = 0; \ 000001C0 104086E5 STR R4,[R6, #+16] \ 000001C4 0C4086E5 STR R4,[R6, #+12] 186 p->offset = 0; \ 000001C8 084086E5 STR R4,[R6, #+8] 187 p->prev = fileindex; \ 000001CC 400095E5 LDR R0,[R5, #+64] \ 000001D0 040086E5 STR R0,[R6, #+4] 188 p->next= NULL; \ 000001D4 004086E5 STR R4,[R6, #+0] 189 fileindex->next = p; \ 000001D8 400095E5 LDR R0,[R5, #+64] \ 000001DC 006080E5 STR R6,[R0, #+0] 190 } 191 fileindex->prev = p; \ ??createIndex_9: \ 000001E0 400095E5 LDR R0,[R5, #+64] \ 000001E4 046080E5 STR R6,[R0, #+4] 192 return 1; \ 000001E8 0100A0E3 MOV R0,#+1 \ 000001EC F080BDE8 POP {R4-R7,PC} ;; return 193 } 194 \ In segment CODE, align 4, keep-with-next 195 int WriteLog(char *text, unsigned int len) { //调试 \ WriteLog: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 196 if (!text) return 0; \ 0000000C 000054E3 CMP R4,#+0 \ 00000010 1200000A BEQ ??WriteLog_0 197 int f = fopen("0:\\test.log", A_ReadWrite + A_Create + A_BIN, P_READ + P_WRITE, &ul); \ 00000014 ........ LDR R6,??DataTable19 ;; inp_desc \ 00000018 48009FE5 LDR R0,??WriteLog_1 ;; `?` \ 0000001C 663F86E2 ADD R3,R6,#+408 \ 00000020 602FA0E3 MOV R2,#+384 \ 00000024 0210A0E3 MOV R1,#+2 \ 00000028 811C81E3 ORR R1,R1,#0x8100 \ 0000002C 0A0000EF SWI +10 \ 00000030 0070A0E1 MOV R7,R0 198 if (f != -1) { \ 00000034 010077E3 CMN R7,#+1 \ 00000038 0800000A BEQ ??WriteLog_0 199 fwrite(f, text, len, &ul); \ 0000003C 663F86E2 ADD R3,R6,#+408 \ 00000040 0520A0E1 MOV R2,R5 \ 00000044 0410A0E1 MOV R1,R4 \ 00000048 0C0000EF SWI +12 200 fclose(f, &ul); \ 0000004C 661F86E2 ADD R1,R6,#+408 \ 00000050 0700A0E1 MOV R0,R7 \ 00000054 0D0000EF SWI +13 201 return 1; \ 00000058 0100A0E3 MOV R0,#+1 \ 0000005C F080BDE8 POP {R4-R7,PC} 202 } 203 return 0; \ ??WriteLog_0: \ 00000060 0000A0E3 MOV R0,#+0 \ 00000064 F080BDE8 POP {R4-R7,PC} ;; return \ ??WriteLog_1: \ 00000068 ........ DC32 `?` 204 } 205 206 \ In segment CODE, align 4, keep-with-next 207 int openFile(char *filename) { \ openFile: \ 00000000 30402DE9 PUSH {R4,R5,LR} 208 if (fd > 0) fclose(fd, &ul); \ 00000004 ........ LDR R5,??DataTable19 ;; inp_desc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 540095E5 LDR R0,[R5, #+84] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 010000BA BLT ??openFile_0 \ 00000018 661F85E2 ADD R1,R5,#+408 \ 0000001C 0D0000EF SWI +13 209 buffloaded = 0; \ ??openFile_0: \ 00000020 0000A0E3 MOV R0,#+0 \ 00000024 500085E5 STR R0,[R5, #+80] 210 if ((fd = fopen(filename, A_ReadOnly + A_BIN, P_READ, &ul)) != -1) { \ 00000028 663F85E2 ADD R3,R5,#+408 \ 0000002C 8020A0E3 MOV R2,#+128 \ 00000030 801CA0E3 MOV R1,#+32768 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 0A0000EF SWI +10 \ 0000003C 540085E5 STR R0,[R5, #+84] \ 00000040 010070E3 CMN R0,#+1 \ 00000044 1200000A BEQ ??openFile_1 211 if (fread(fd, buff, 3, &ul) > 0) { \ 00000048 481095E5 LDR R1,[R5, #+72] \ 0000004C 663F85E2 ADD R3,R5,#+408 \ 00000050 0320A0E3 MOV R2,#+3 \ 00000054 0B0000EF SWI +11 \ 00000058 010050E3 CMP R0,#+1 \ 0000005C 020000BA BLT ??openFile_2 212 codetype = getCodeType(buff); \ 00000060 480095E5 LDR R0,[R5, #+72] \ 00000064 ........ _BLF getCodeType,??getCodeType??rA \ 00000068 4C0085E5 STR R0,[R5, #+76] 213 } 214 if (!createIndex()) return 0; \ ??openFile_2: \ 0000006C ........ BL createIndex \ 00000070 000050E3 CMP R0,#+0 \ 00000074 3080BD08 POPEQ {R4,R5,PC} 215 foffset = fileindex->offset; \ 00000078 400095E5 LDR R0,[R5, #+64] \ 0000007C 081090E5 LDR R1,[R0, #+8] \ 00000080 581085E5 STR R1,[R5, #+88] 216 curblock = fileindex->next; \ 00000084 000090E5 LDR R0,[R0, #+0] \ 00000088 440085E5 STR R0,[R5, #+68] 217 return 1; \ 0000008C 0100A0E3 MOV R0,#+1 \ 00000090 3080BDE8 POP {R4,R5,PC} 218 } 219 return 0; \ ??openFile_1: \ 00000094 0000A0E3 MOV R0,#+0 \ 00000098 3080BDE8 POP {R4,R5,PC} ;; return 220 } 221 \ In segment CODE, align 4, keep-with-next 222 int loadBuffer(void) { \ loadBuffer: \ 00000000 70402DE9 PUSH {R4-R6,LR} 223 224 if (curblock && lseek(fd, curblock->offset, S_SET, &ul, &ul) == curblock->offset) { \ 00000004 ........ LDR R4,??DataTable19 ;; inp_desc \ 00000008 440094E5 LDR R0,[R4, #+68] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 7080BD08 POPEQ {R4-R6,PC} \ 00000014 661F84E2 ADD R1,R4,#+408 \ 00000018 02002DE9 PUSH {R1} \ 0000001C 663F84E2 ADD R3,R4,#+408 \ 00000020 081090E5 LDR R1,[R0, #+8] \ 00000024 540094E5 LDR R0,[R4, #+84] \ 00000028 0020A0E3 MOV R2,#+0 \ 0000002C 0F0000EF SWI +15 \ 00000030 441094E5 LDR R1,[R4, #+68] \ 00000034 081091E5 LDR R1,[R1, #+8] \ 00000038 04D08DE2 ADD SP,SP,#+4 \ 0000003C 010050E1 CMP R0,R1 \ 00000040 4000001A BNE ??loadBuffer_0 225 char *ms = malloc (50); \ 00000044 3200A0E3 MOV R0,#+50 \ 00000048 140000EF SWI +20 226 char *tb = NULL; 227 if ((rlen = llen = fread(fd, buff, BUF_LEN, &ul)) > 0) { \ 0000004C 540094E5 LDR R0,[R4, #+84] \ 00000050 481094E5 LDR R1,[R4, #+72] \ 00000054 0050A0E3 MOV R5,#+0 \ 00000058 663F84E2 ADD R3,R4,#+408 \ 0000005C 802CA0E3 MOV R2,#+32768 \ 00000060 0B0000EF SWI +11 \ 00000064 600084E5 STR R0,[R4, #+96] \ 00000068 5C0084E5 STR R0,[R4, #+92] \ 0000006C 010050E3 CMP R0,#+1 \ 00000070 210000BA BLT ??loadBuffer_1 228 switch (codetype) { \ 00000074 4C2094E5 LDR R2,[R4, #+76] \ 00000078 480094E5 LDR R0,[R4, #+72] \ 0000007C 5C1094E5 LDR R1,[R4, #+92] \ 00000080 0160A0E3 MOV R6,#+1 \ 00000084 806C86E3 ORR R6,R6,#0x8000 \ 00000088 012052E2 SUBS R2,R2,#+1 \ 0000008C 0600000A BEQ ??loadBuffer_2 \ 00000090 012052E2 SUBS R2,R2,#+1 \ 00000094 1400000A BEQ ??loadBuffer_3 \ 00000098 012052E2 SUBS R2,R2,#+1 \ 0000009C 1D00000A BEQ ??loadBuffer_4 \ 000000A0 012052E2 SUBS R2,R2,#+1 \ 000000A4 1F00000A BEQ ??loadBuffer_5 \ 000000A8 220000EA B ??loadBuffer_6 229 case 1: //ansi 230 tb = gb2unicode(buff, rlen, &rlen, &llen); \ ??loadBuffer_2: \ 000000AC 603084E2 ADD R3,R4,#+96 \ 000000B0 5C2084E2 ADD R2,R4,#+92 \ 000000B4 ........ _BLF gb2unicode,??gb2unicode??rA \ ??loadBuffer_7: \ 000000B8 0050A0E1 MOV R5,R0 231 if (rlen > BUF_LEN) { \ 000000BC 5C0094E5 LDR R0,[R4, #+92] \ 000000C0 060050E1 CMP R0,R6 \ 000000C4 040000BA BLT ??loadBuffer_8 232 mfree(buff); \ 000000C8 480094E5 LDR R0,[R4, #+72] \ 000000CC 150000EF SWI +21 233 buff = malloc(rlen); \ 000000D0 5C0094E5 LDR R0,[R4, #+92] \ 000000D4 140000EF SWI +20 \ 000000D8 480084E5 STR R0,[R4, #+72] 234 } 235 memcpy(buff, tb, rlen); \ ??loadBuffer_8: \ 000000DC 5C2094E5 LDR R2,[R4, #+92] \ 000000E0 480094E5 LDR R0,[R4, #+72] \ 000000E4 0510A0E1 MOV R1,R5 \ 000000E8 1E0100EF SWI +286 236 break; 237 case 2: //unicode le 238 break; 239 case 3: //unicode be 240 tb = unicodeSwitch(buff, rlen, &rlen, &llen); 241 if (rlen > BUF_LEN) { 242 mfree(buff); 243 buff = malloc(rlen); 244 } 245 memcpy(buff, tb, rlen); 246 break; 247 case 4: //utf8 248 tb = utf82unicode(buff, rlen, &rlen, &llen); 249 if (rlen > BUF_LEN) { 250 mfree(buff); 251 buff = malloc(rlen); 252 } 253 memcpy(buff, tb, rlen); 254 break; 255 default: 256 ShowMSG(1, (int) "Unkonwn code type!"); 257 break; 258 } 259 if (tb) mfree(tb); \ ??loadBuffer_3: \ 000000EC 000055E3 CMP R5,#+0 \ 000000F0 0100000A BEQ ??loadBuffer_1 \ 000000F4 0500A0E1 MOV R0,R5 \ 000000F8 150000EF SWI +21 260 } 261 262 buffloaded = 1; \ ??loadBuffer_1: \ 000000FC 0100A0E3 MOV R0,#+1 \ 00000100 500084E5 STR R0,[R4, #+80] 263 foffset = curblock->offset; \ 00000104 440094E5 LDR R0,[R4, #+68] \ 00000108 080090E5 LDR R0,[R0, #+8] \ 0000010C 580084E5 STR R0,[R4, #+88] 264 return 1; \ 00000110 0100A0E3 MOV R0,#+1 \ 00000114 7080BDE8 POP {R4-R6,PC} \ ??loadBuffer_4: \ 00000118 603084E2 ADD R3,R4,#+96 \ 0000011C 5C2084E2 ADD R2,R4,#+92 \ 00000120 ........ _BLF unicodeSwitch,??unicodeSwitch??rA \ 00000124 E3FFFFEA B ??loadBuffer_7 \ ??loadBuffer_5: \ 00000128 603084E2 ADD R3,R4,#+96 \ 0000012C 5C2084E2 ADD R2,R4,#+92 \ 00000130 ........ _BLF utf82unicode,??utf82unicode??rA \ 00000134 DFFFFFEA B ??loadBuffer_7 \ ??loadBuffer_6: \ 00000138 10109FE5 LDR R1,??loadBuffer_9 ;; `?` \ 0000013C 0100A0E3 MOV R0,#+1 \ 00000140 480100EF SWI +328 \ 00000144 ECFFFFEA B ??loadBuffer_1 265 } 266 else 267 return 0; \ ??loadBuffer_0: \ 00000148 0000A0E3 MOV R0,#+0 \ 0000014C 7080BDE8 POP {R4-R6,PC} ;; return \ ??loadBuffer_9: \ 00000150 ........ DC32 `?` 268 } 269 \ In segment CODE, align 4, keep-with-next 270 int gotoPos(int offset) { 271 DataIndex *p = curblock; \ gotoPos: \ 00000000 ........ LDR R1,??DataTable19 ;; inp_desc \ 00000004 10402DE9 PUSH {R4,LR} \ 00000008 442091E5 LDR R2,[R1, #+68] 272 curblock = fileindex->next; \ 0000000C 403091E5 LDR R3,[R1, #+64] \ 00000010 040000EA B ??gotoPos_0 273 while (curblock && offset > curblock->offset + curblock->uc16len) { \ ??gotoPos_1: \ 00000014 08C093E5 LDR R12,[R3, #+8] \ 00000018 0C4093E5 LDR R4,[R3, #+12] \ 0000001C 0C4084E0 ADD R4,R4,R12 \ 00000020 000054E1 CMP R4,R0 \ 00000024 0A0000AA BGE ??gotoPos_2 274 curblock = curblock->next; \ ??gotoPos_0: \ 00000028 003093E5 LDR R3,[R3, #+0] \ 0000002C 443081E5 STR R3,[R1, #+68] 275 } \ 00000030 443091E5 LDR R3,[R1, #+68] \ 00000034 000053E3 CMP R3,#+0 \ 00000038 F5FFFF1A BNE ??gotoPos_1 276 if (curblock) { 277 viewpos = (offset - curblock->offset) >> 1 << 1; 278 if (viewpos < 0) { 279 viewpos = 0; 280 offset = curblock->offset; 281 } 282 foffset = offset; 283 return loadBuffer(); 284 } 285 else { 286 curblock = p; \ 0000003C 442081E5 STR R2,[R1, #+68] 287 ShowMSG(1, (int) "no buff?"); \ 00000040 34109FE5 LDR R1,??gotoPos_3 ;; `?` \ 00000044 0100A0E3 MOV R0,#+1 \ 00000048 480100EF SWI +328 288 return 0; \ 0000004C 0000A0E3 MOV R0,#+0 \ 00000050 1080BDE8 POP {R4,PC} 289 } \ ??gotoPos_2: \ 00000054 0C2040E0 SUB R2,R0,R12 \ 00000058 C220A0E1 ASR R2,R2,#+1 \ 0000005C 8220B0E1 LSLS R2,R2,#+1 \ 00000060 882081E5 STR R2,[R1, #+136] \ 00000064 0000A043 MOVMI R0,#+0 \ 00000068 88008145 STRMI R0,[R1, #+136] \ 0000006C 08009345 LDRMI R0,[R3, #+8] \ 00000070 580081E5 STR R0,[R1, #+88] \ 00000074 ........ BL loadBuffer \ 00000078 1080BDE8 POP {R4,PC} ;; return \ ??gotoPos_3: \ 0000007C ........ DC32 `?` 290 } 291 292 int InitSettings(); 293 void KillIndex(); \ In segment CODE, align 4, keep-with-next 294 int loadFile(char *filename) { \ loadFile: \ 00000000 70402DE9 PUSH {R4-R6,LR} 295 LockSched(); 296 InitSettings(); 297 viewpos = 0; \ 00000004 ........ LDR R5,??DataTable19 ;; inp_desc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0060A0E3 MOV R6,#+0 \ 00000010 460100EF SWI +326 \ 00000014 ........ BL InitSettings \ 00000018 886085E5 STR R6,[R5, #+136] 298 KillIndex(); \ 0000001C ........ BL KillIndex 299 if (openFile(filename)) { \ 00000020 0400A0E1 MOV R0,R4 \ 00000024 ........ BL openFile \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 2400000A BEQ ??loadFile_0 300 //载入书签 301 if (bookmark) { \ 00000030 680095E5 LDR R0,[R5, #+104] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 0100000A BEQ ??loadFile_1 302 mfree(bookmark); \ 0000003C 150000EF SWI +21 303 bookmark = NULL; \ 00000040 686085E5 STR R6,[R5, #+104] 304 } 305 bookmark = readAddrInt(filename, &bmkfd, &ul, &bmknum, acbm); \ ??loadFile_1: \ 00000044 ........ LDR R0,??DataTable26 ;; acbm \ 00000048 6C3085E2 ADD R3,R5,#+108 \ 0000004C 000090E5 LDR R0,[R0, #+0] \ 00000050 662F85E2 ADD R2,R5,#+408 \ 00000054 01002DE9 PUSH {R0} \ 00000058 641085E2 ADD R1,R5,#+100 \ 0000005C 0400A0E1 MOV R0,R4 \ 00000060 ........ _BLF readAddrInt,??readAddrInt??rA \ 00000064 680085E5 STR R0,[R5, #+104] 306 if (bookmark && bmknum > 0) \ 00000068 000050E3 CMP R0,#+0 \ 0000006C 04D08DE2 ADD SP,SP,#+4 \ 00000070 0500000A BEQ ??loadFile_2 \ 00000074 6C1095E5 LDR R1,[R5, #+108] \ 00000078 010051E3 CMP R1,#+1 \ 0000007C 020000BA BLT ??loadFile_2 307 gotoPos(*bookmark); \ 00000080 000090E5 LDR R0,[R0, #+0] \ 00000084 ........ BL gotoPos \ 00000088 000000EA B ??loadFile_3 308 else 309 foffset = 0; \ ??loadFile_2: \ 0000008C 586085E5 STR R6,[R5, #+88] 310 if (!buffloaded) { \ ??loadFile_3: \ 00000090 500095E5 LDR R0,[R5, #+80] \ 00000094 000050E3 CMP R0,#+0 \ 00000098 0300001A BNE ??loadFile_4 311 curblock = fileindex->next; \ 0000009C 400095E5 LDR R0,[R5, #+64] \ 000000A0 000090E5 LDR R0,[R0, #+0] \ 000000A4 440085E5 STR R0,[R5, #+68] 312 loadBuffer(); \ 000000A8 ........ BL loadBuffer 313 } 314 strcpy(procfile, filename); \ ??loadFile_4: \ 000000AC 0410A0E1 MOV R1,R4 \ 000000B0 460F85E2 ADD R0,R5,#+280 \ 000000B4 1A0000EF SWI +26 315 UnlockSched(); \ 000000B8 470100EF SWI +327 316 return 1; \ 000000BC 0100A0E3 MOV R0,#+1 \ 000000C0 7080BDE8 POP {R4-R6,PC} 317 } 318 UnlockSched(); \ ??loadFile_0: \ 000000C4 470100EF SWI +327 319 return 0; \ 000000C8 0000A0E3 MOV R0,#+0 \ 000000CC 7080BDE8 POP {R4-R6,PC} ;; return 320 } 321 /* 322 =============================== 323 end 324 =============================== 325 */ 326 327 /* 328 =============================== 329 初始化 330 =============================== 331 */ \ In segment CODE, align 4, keep-with-next 332 int div(int a, int b) { 333 if (b == 0) return 0; \ div: \ 00000000 000051E3 CMP R1,#+0 \ 00000004 0000A003 MOVEQ R0,#+0 \ 00000008 1EFF2F01 BXEQ LR 334 int symbol = 1; \ 0000000C 0120A0E3 MOV R2,#+1 335 if (a < 0) symbol *= -1; \ 00000010 000050E3 CMP R0,#+0 \ 00000014 00206242 RSBMI R2,R2,#+0 336 if (b < 0) symbol *= -1; \ 00000018 000051E3 CMP R1,#+0 \ 0000001C 00206242 RSBMI R2,R2,#+0 337 int result = 0; \ 00000020 0030A0E3 MOV R3,#+0 \ 00000024 000000EA B ??div_0 338 while (result * b < a) result++; \ ??div_1: \ 00000028 013083E2 ADD R3,R3,#+1 \ ??div_0: \ 0000002C 91030CE0 MUL R12,R1,R3 \ 00000030 00005CE1 CMP R12,R0 \ 00000034 FBFFFFBA BLT ??div_1 339 return result * symbol; \ 00000038 920300E0 MUL R0,R2,R3 \ 0000003C 1EFF2FE1 BX LR ;; return 340 } 341 \ In segment CODE, align 4, keep-with-next 342 void adjustWindowsSize() { \ adjustWindowsSize: \ 00000000 10402DE9 PUSH {R4,LR} 343 winx = 0; \ 00000004 ........ LDR R4,??DataTable19 ;; inp_desc \ 00000008 0000A0E3 MOV R0,#+0 \ 0000000C 700084E5 STR R0,[R4, #+112] 344 winy = YDISP; \ 00000010 1800A0E3 MOV R0,#+24 \ 00000014 740084E5 STR R0,[R4, #+116] 345 winw = ScreenW() - winx; \ 00000018 888100EF SWI +33160 \ 0000001C 701094E5 LDR R1,[R4, #+112] \ 00000020 010040E0 SUB R0,R0,R1 \ 00000024 780084E5 STR R0,[R4, #+120] 346 winh = ScreenH() - winy; \ 00000028 898100EF SWI +33161 \ 0000002C 741094E5 LDR R1,[R4, #+116] \ 00000030 010040E0 SUB R0,R0,R1 \ 00000034 7C0084E5 STR R0,[R4, #+124] 347 } \ 00000038 1080BDE8 POP {R4,PC} ;; return 348 \ In segment CODE, align 4, keep-with-next 349 int InitSettings() { \ InitSettings: \ 00000000 30402DE9 PUSH {R4,R5,LR} 350 //初始化各项设置 351 adjustWindowsSize(); 352 InitConfig(); 353 viewrow = div(winh, GetFontYSIZE(font) + space); \ 00000004 ........ LDR R4,??DataTable19 ;; inp_desc \ 00000008 ........ BL adjustWindowsSize \ 0000000C ........ _BLF InitConfig,??InitConfig??rA \ 00000010 ........ LDR R0,??DataTable20 ;; font \ 00000014 005090E5 LDR R5,[R0, #+0] \ 00000018 0500A0E1 MOV R0,R5 \ 0000001C C50100EF SWI +453 \ 00000020 ........ LDR R1,??DataTable21 ;; space \ 00000024 001091E5 LDR R1,[R1, #+0] \ 00000028 001081E0 ADD R1,R1,R0 \ 0000002C 7C0094E5 LDR R0,[R4, #+124] \ 00000030 ........ BL div \ 00000034 8C0084E5 STR R0,[R4, #+140] 354 viewlen = div(winw, GetSymbolWidth(' ', font)) * viewrow; \ 00000038 0510A0E1 MOV R1,R5 \ 0000003C 2000A0E3 MOV R0,#+32 \ 00000040 E10100EF SWI +481 \ 00000044 0010A0E1 MOV R1,R0 \ 00000048 780094E5 LDR R0,[R4, #+120] \ 0000004C ........ BL div \ 00000050 8C1094E5 LDR R1,[R4, #+140] \ 00000054 910000E0 MUL R0,R1,R0 \ 00000058 800084E5 STR R0,[R4, #+128] 355 viewlen = viewlen >> 1 << 1; \ 0000005C C000A0E1 ASR R0,R0,#+1 \ 00000060 8000A0E1 LSL R0,R0,#+1 \ 00000064 800084E5 STR R0,[R4, #+128] 356 if (sbw) { \ 00000068 900094E5 LDR R0,[R4, #+144] \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 0200000A BEQ ??InitSettings_0 357 FreeWS(sbw); \ 00000074 290100EF SWI +297 358 sbw = NULL; \ 00000078 0000A0E3 MOV R0,#+0 \ 0000007C 900084E5 STR R0,[R4, #+144] 359 } 360 sbw = AllocWS(viewlen); \ ??InitSettings_0: \ 00000080 800094E5 LDR R0,[R4, #+128] \ 00000084 250100EF SWI +293 \ 00000088 900084E5 STR R0,[R4, #+144] 361 if (sbw) return 1; else return 0; \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 0100A013 MOVNE R0,#+1 \ 00000094 3080BDE8 POP {R4,R5,PC} ;; return 362 } 363 364 //销毁索引 \ In segment CODE, align 4, keep-with-next 365 void KillIndex() { \ KillIndex: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 ........ LDR R4,??DataTable19 ;; inp_desc \ 00000008 400094E5 LDR R0,[R4, #+64] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} 366 while (fileindex) { 367 curblock = fileindex; \ ??KillIndex_0: \ 00000014 400094E5 LDR R0,[R4, #+64] \ 00000018 440084E5 STR R0,[R4, #+68] 368 fileindex = fileindex->next; \ 0000001C 001090E5 LDR R1,[R0, #+0] \ 00000020 401084E5 STR R1,[R4, #+64] 369 mfree(curblock); \ 00000024 150000EF SWI +21 370 } \ 00000028 400094E5 LDR R0,[R4, #+64] \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 F7FFFF1A BNE ??KillIndex_0 371 fileindex = NULL; 372 } \ 00000034 1080BDE8 POP {R4,PC} ;; return 373 374 //销毁 375 extern void kill_data(void *p, void (*func_p)(void *)); \ In segment CODE, align 4, keep-with-next 376 void ElfKiller(void) { \ ElfKiller: \ 00000000 10402DE9 PUSH {R4,LR} 377 KillIndex(); 378 mfree(buff); \ 00000004 ........ LDR R4,??DataTable19 ;; inp_desc \ 00000008 ........ BL KillIndex \ 0000000C 480094E5 LDR R0,[R4, #+72] \ 00000010 150000EF SWI +21 379 mfree(bookmark); \ 00000014 680094E5 LDR R0,[R4, #+104] \ 00000018 150000EF SWI +21 380 FreeWS(sbw); \ 0000001C 900094E5 LDR R0,[R4, #+144] \ 00000020 290100EF SWI +297 381 fclose(fd, &ul); \ 00000024 540094E5 LDR R0,[R4, #+84] \ 00000028 661F84E2 ADD R1,R4,#+408 \ 0000002C 0D0000EF SWI +13 382 fclose(bmkfd, &ul); \ 00000030 640094E5 LDR R0,[R4, #+100] \ 00000034 661F84E2 ADD R1,R4,#+408 \ 00000038 0D0000EF SWI +13 383 extern void *ELF_BEGIN; 384 kill_data(&ELF_BEGIN, (void (*)(void *))mfree_adr()); \ 0000003C 158000EF SWI +32789 \ 00000040 0010A0E1 MOV R1,R0 \ 00000044 04009FE5 LDR R0,??ElfKiller_0 ;; ELF_BEGIN \ 00000048 1040BDE8 POP {R4,LR} ;; Pop \ 0000004C ........ _BF kill_data,??kill_data??rA ;; tailcall \ ??ElfKiller_0: \ 00000050 ........ DC32 ELF_BEGIN 385 } 386 /* 387 =============================== 388 end 389 =============================== 390 */ 391 392 393 /* 394 =============================== 395 屏幕控制 396 =============================== 397 */ 398 \ In segment CODE, align 4, keep-with-next 399 void rowFluctuate(int param) { \ rowFluctuate: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 ........ LDR R5,??DataTable19 ;; inp_desc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 160000EA B ??rowFluctuate_0 400 401 if (!buffloaded || param == 0) return; 402 int i = 0, curwidth = 0, offset = viewlen; 403 if (param < 0) { 404 if (viewpos - viewlen < 0) { 405 if (curblock->prev != fileindex) { //载入上一块 406 curblock = curblock->prev; 407 loadBuffer(); 408 viewpos = viewpos - viewlen + rlen; 409 if (viewpos <= 0) { 410 viewpos = 0; 411 return; 412 } 413 } 414 else if (viewpos < 0) { 415 viewpos = 0; 416 return; 417 } 418 else { 419 offset = viewpos; 420 } 421 } 422 str2ws_unicode(sbw, buff + viewpos - offset, offset); 423 for (i = sbw->wsbody[0]; i > 0; i--) { 424 if (sbw->wsbody[i] == 0x0a && i > 1 && sbw->wsbody[i - 1] == 0x0d) { 425 if (param + 1 == 0) { 426 if (i != sbw->wsbody[0]) { 427 param++; 428 i++; 429 break; 430 } 431 else { 432 param--; 433 } 434 } 435 i--; 436 goto L_CALROW1; 437 } 438 else if (sbw->wsbody[i] == 0x0d) { \ ??rowFluctuate_1: \ 00000010 B010D0E1 LDRH R1,[R0, #+0] \ 00000014 0D0051E3 CMP R1,#+13 \ 00000018 0800000A BEQ ??rowFluctuate_2 439 goto L_CALROW1; 440 } 441 else { 442 curwidth += GetSymbolWidth(sbw->wsbody[i], font); \ 0000001C B000D0E1 LDRH R0,[R0, #+0] \ 00000020 ........ LDR R1,??DataTable20 ;; font \ 00000024 001091E5 LDR R1,[R1, #+0] \ 00000028 E10100EF SWI +481 \ 0000002C 066080E0 ADD R6,R0,R6 443 if (curwidth > winw) { \ 00000030 780095E5 LDR R0,[R5, #+120] \ 00000034 060050E1 CMP R0,R6 \ 00000038 370000AA BGE ??rowFluctuate_3 444 i++; \ 0000003C 0870A0E1 MOV R7,R8 445 L_CALROW1: 446 curwidth = 0; \ ??rowFluctuate_2: \ 00000040 0060A0E3 MOV R6,#+0 447 param++; \ 00000044 014094E2 ADDS R4,R4,#+1 448 if (param == 0) break; \ 00000048 3300001A BNE ??rowFluctuate_3 449 } 450 } 451 } 452 viewpos -= (sbw->wsbody[0] - i + 1) << 1; \ ??rowFluctuate_4: \ 0000004C 901095E5 LDR R1,[R5, #+144] \ 00000050 880095E5 LDR R0,[R5, #+136] \ 00000054 001091E5 LDR R1,[R1, #+0] \ 00000058 B010D1E1 LDRH R1,[R1, #+0] \ 0000005C 071041E0 SUB R1,R1,R7 \ 00000060 011081E2 ADD R1,R1,#+1 \ 00000064 810040E0 SUB R0,R0,R1, LSL #+1 \ 00000068 880085E5 STR R0,[R5, #+136] \ ??rowFluctuate_0: \ 0000006C 500095E5 LDR R0,[R5, #+80] \ 00000070 000050E3 CMP R0,#+0 \ 00000074 00005413 CMPNE R4,#+0 \ 00000078 F081BD08 POPEQ {R4-R8,PC} \ ??rowFluctuate_5: \ 0000007C 802095E5 LDR R2,[R5, #+128] \ 00000080 0060A0E3 MOV R6,#+0 \ 00000084 0270A0E1 MOV R7,R2 \ 00000088 000054E3 CMP R4,#+0 \ 0000008C 3B00005A BPL ??rowFluctuate_6 \ 00000090 880095E5 LDR R0,[R5, #+136] \ 00000094 021050E0 SUBS R1,R0,R2 \ 00000098 1300005A BPL ??rowFluctuate_7 \ 0000009C 441095E5 LDR R1,[R5, #+68] \ 000000A0 402095E5 LDR R2,[R5, #+64] \ 000000A4 041091E5 LDR R1,[R1, #+4] \ 000000A8 020051E1 CMP R1,R2 \ 000000AC 0B00000A BEQ ??rowFluctuate_8 \ 000000B0 441085E5 STR R1,[R5, #+68] \ 000000B4 ........ BL loadBuffer \ 000000B8 880095E5 LDR R0,[R5, #+136] \ 000000BC 801095E5 LDR R1,[R5, #+128] \ 000000C0 010040E0 SUB R0,R0,R1 \ 000000C4 5C1095E5 LDR R1,[R5, #+92] \ 000000C8 000081E0 ADD R0,R1,R0 \ 000000CC 880085E5 STR R0,[R5, #+136] \ 000000D0 010050E3 CMP R0,#+1 \ 000000D4 040000AA BGE ??rowFluctuate_7 \ ??rowFluctuate_9: \ 000000D8 0000A0E3 MOV R0,#+0 \ 000000DC 5B0000EA B ??rowFluctuate_10 \ ??rowFluctuate_8: \ 000000E0 000050E3 CMP R0,#+0 \ 000000E4 FBFFFF4A BMI ??rowFluctuate_9 \ 000000E8 0070A0E1 MOV R7,R0 \ ??rowFluctuate_7: \ 000000EC 881095E5 LDR R1,[R5, #+136] \ 000000F0 483095E5 LDR R3,[R5, #+72] \ 000000F4 0720A0E1 MOV R2,R7 \ 000000F8 000067E2 RSB R0,R7,#+0 \ 000000FC 031081E0 ADD R1,R1,R3 \ 00000100 011080E0 ADD R1,R0,R1 \ 00000104 900095E5 LDR R0,[R5, #+144] \ 00000108 ........ _BLF str2ws_unicode,??str2ws_unicode??rA \ 0000010C 900095E5 LDR R0,[R5, #+144] \ 00000110 000090E5 LDR R0,[R0, #+0] \ 00000114 B070D0E1 LDRH R7,[R0, #+0] \ 00000118 000000EA B ??rowFluctuate_11 \ ??rowFluctuate_3: \ 0000011C 017047E2 SUB R7,R7,#+1 \ ??rowFluctuate_11: \ 00000120 010057E3 CMP R7,#+1 \ 00000124 C8FFFFBA BLT ??rowFluctuate_4 \ 00000128 900095E5 LDR R0,[R5, #+144] \ 0000012C 018087E2 ADD R8,R7,#+1 \ 00000130 001090E5 LDR R1,[R0, #+0] \ 00000134 870081E0 ADD R0,R1,R7, LSL #+1 \ 00000138 B020D0E1 LDRH R2,[R0, #+0] \ 0000013C 0A0052E3 CMP R2,#+10 \ 00000140 B2FFFF1A BNE ??rowFluctuate_1 \ 00000144 020057E3 CMP R7,#+2 \ 00000148 B0FFFFBA BLT ??rowFluctuate_1 \ 0000014C B22050E1 LDRH R2,[R0, #-2] \ 00000150 0D0052E3 CMP R2,#+13 \ 00000154 ADFFFF1A BNE ??rowFluctuate_1 \ 00000158 010094E2 ADDS R0,R4,#+1 \ 0000015C 0500001A BNE ??rowFluctuate_12 \ 00000160 B010D1E1 LDRH R1,[R1, #+0] \ 00000164 010057E1 CMP R7,R1 \ 00000168 0040A011 MOVNE R4,R0 \ 0000016C 0870A011 MOVNE R7,R8 \ 00000170 B5FFFF1A BNE ??rowFluctuate_4 \ 00000174 014044E2 SUB R4,R4,#+1 \ ??rowFluctuate_12: \ 00000178 017047E2 SUB R7,R7,#+1 \ 0000017C AFFFFFEA B ??rowFluctuate_2 453 } 454 else if (param > 0) { \ ??rowFluctuate_6: \ 00000180 010054E3 CMP R4,#+1 \ 00000184 BCFFFFBA BLT ??rowFluctuate_5 455 str2ws_unicode(sbw, buff + viewpos, viewlen > rlen ? rlen : viewlen); \ 00000188 5C0095E5 LDR R0,[R5, #+92] \ 0000018C 481095E5 LDR R1,[R5, #+72] \ 00000190 020050E1 CMP R0,R2 \ 00000194 0020A0B1 MOVLT R2,R0 \ 00000198 880095E5 LDR R0,[R5, #+136] 456 for (i = 1; i <= sbw->wsbody[0]; i++) { \ 0000019C 0170A0E3 MOV R7,#+1 \ 000001A0 011080E0 ADD R1,R0,R1 \ 000001A4 900095E5 LDR R0,[R5, #+144] \ 000001A8 ........ _BLF str2ws_unicode,??str2ws_unicode??rA \ 000001AC 000000EA B ??rowFluctuate_13 \ ??rowFluctuate_14: \ 000001B0 017087E2 ADD R7,R7,#+1 \ ??rowFluctuate_13: \ 000001B4 900095E5 LDR R0,[R5, #+144] \ 000001B8 000090E5 LDR R0,[R0, #+0] \ 000001BC B010D0E1 LDRH R1,[R0, #+0] \ 000001C0 070051E1 CMP R1,R7 \ 000001C4 180000BA BLT ??rowFluctuate_15 457 if (sbw->wsbody[i] == 0x0a || sbw->wsbody[i] == 0x0d) { \ 000001C8 872080E0 ADD R2,R0,R7, LSL #+1 \ 000001CC B010D2E1 LDRH R1,[R2, #+0] \ 000001D0 0A0051E3 CMP R1,#+10 \ 000001D4 0D005113 CMPNE R1,#+13 \ 000001D8 0700001A BNE ??rowFluctuate_16 458 if (i < sbw->wsbody[0] && sbw->wsbody[i + 1] == 0x0a) i++; \ 000001DC B000D0E1 LDRH R0,[R0, #+0] \ 000001E0 000057E1 CMP R7,R0 \ 000001E4 0D0000AA BGE ??rowFluctuate_17 \ 000001E8 B200D2E1 LDRH R0,[R2, #+2] \ 000001EC 0A0050E3 CMP R0,#+10 \ 000001F0 0A00001A BNE ??rowFluctuate_17 \ 000001F4 017087E2 ADD R7,R7,#+1 \ 000001F8 080000EA B ??rowFluctuate_17 459 goto L_CALROW2; 460 } 461 else { 462 curwidth += GetSymbolWidth(sbw->wsbody[i], font); \ ??rowFluctuate_16: \ 000001FC ........ LDR R0,??DataTable20 ;; font \ 00000200 001090E5 LDR R1,[R0, #+0] \ 00000204 B000D2E1 LDRH R0,[R2, #+0] \ 00000208 E10100EF SWI +481 \ 0000020C 066080E0 ADD R6,R0,R6 463 if (curwidth > winw) { \ 00000210 780095E5 LDR R0,[R5, #+120] \ 00000214 060050E1 CMP R0,R6 \ 00000218 E4FFFFAA BGE ??rowFluctuate_14 464 i--; \ 0000021C 017047E2 SUB R7,R7,#+1 465 L_CALROW2: 466 curwidth = 0; \ ??rowFluctuate_17: \ 00000220 0060A0E3 MOV R6,#+0 467 param--; \ 00000224 014054E2 SUBS R4,R4,#+1 468 if (param == 0) break; \ 00000228 E0FFFF1A BNE ??rowFluctuate_14 469 } 470 } 471 } 472 viewpos += i << 1; \ ??rowFluctuate_15: \ 0000022C 881095E5 LDR R1,[R5, #+136] 473 if (rlen < viewlen) { \ 00000230 5C2095E5 LDR R2,[R5, #+92] \ 00000234 803095E5 LDR R3,[R5, #+128] \ 00000238 8700A0E1 LSL R0,R7,#+1 \ 0000023C 011080E0 ADD R1,R0,R1 \ 00000240 881085E5 STR R1,[R5, #+136] \ 00000244 030052E1 CMP R2,R3 \ 00000248 020000AA BGE ??rowFluctuate_18 474 viewpos -= i << 1; \ ??rowFluctuate_19: \ 0000024C 000041E0 SUB R0,R1,R0 \ ??rowFluctuate_10: \ 00000250 880085E5 STR R0,[R5, #+136] 475 return; \ 00000254 F081BDE8 POP {R4-R8,PC} 476 } 477 if (viewpos > curblock->uc16len) { \ ??rowFluctuate_18: \ 00000258 442095E5 LDR R2,[R5, #+68] \ 0000025C 0C3092E5 LDR R3,[R2, #+12] \ 00000260 010053E1 CMP R3,R1 \ 00000264 80FFFFAA BGE ??rowFluctuate_0 478 if (curblock->next) { \ 00000268 002092E5 LDR R2,[R2, #+0] \ 0000026C 000052E3 CMP R2,#+0 \ 00000270 F5FFFF0A BEQ ??rowFluctuate_19 479 viewpos -= curblock->uc16len; \ 00000274 030041E0 SUB R0,R1,R3 \ 00000278 880085E5 STR R0,[R5, #+136] 480 curblock = curblock->next; \ 0000027C 442085E5 STR R2,[R5, #+68] 481 loadBuffer(); \ 00000280 ........ BL loadBuffer 482 if (viewpos > rlen) { \ 00000284 5C0095E5 LDR R0,[R5, #+92] \ 00000288 881095E5 LDR R1,[R5, #+136] \ 0000028C 010050E1 CMP R0,R1 \ 00000290 75FFFFAA BGE ??rowFluctuate_0 \ 00000294 0000A0E3 MOV R0,#+0 \ 00000298 880085E5 STR R0,[R5, #+136] \ 0000029C F081BDE8 POP {R4-R8,PC} 483 viewpos = 0; 484 return; 485 } 486 } 487 else { 488 viewpos -= i << 1; 489 return; 490 } 491 } 492 } 493 rowFluctuate(param); 494 } 495 496 /* 497 //卷动条 498 void DrawIndication(void) { 499 500 int progress = winh * ((viewpos / curblock->uc16len) * (curblock->offset / fileindex->datalen)); 501 progress = progress * , ; 502 503 DrawRectangle(winw + winx - 3, 504 winy, 505 winw + winx - 1, 506 winy + winh, 507 1, //border-type 0=outline 1=dotted 2=inline 508 GetPaletteAdrByColorIndex(3), 509 GetPaletteAdrByColorIndex(3)); 510 int indh = div(winh, div(fileindex->uc16len, viewlen)); 511 if (indh < 3) indh = 3; 512 int indy = div(winh, progress); 513 DrawRectangle(winw + winx - 3, 514 winy + indy, 515 //winy + 70, 516 winw + winx - 1, 517 winy + indy + indh, 518 //winy + 100, 519 0, //border-type 0=outline 1=dotted 2=inline 520 GetPaletteAdrByColorIndex(5), 521 GetPaletteAdrByColorIndex(5)); 522 } 523 */ 524 //状态栏 \ In segment CODE, align 4, keep-with-next 525 void DrawStateBar(void) { \ DrawStateBar: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 526 DrawRectangle(winx, 527 winy + winh - GetFontYSIZE(FONT_SMALL_ITALIC_BOLD), 528 winx + winw, 529 winy + winh, 530 0, 531 //GetPaletteAdrByColorIndex(bgcolor), 532 //GetPaletteAdrByColorIndex(bgcolor) 533 statbgcolor, 534 statbgcolor 535 ); \ 00000004 ........ LDR R4,??DataTable19 ;; inp_desc \ 00000008 48529FE5 LDR R5,??DrawStateBar_0 ;; statbgcolor \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 0B00A0E3 MOV R0,#+11 \ 00000014 C50100EF SWI +453 \ 00000018 7C2094E5 LDR R2,[R4, #+124] \ 0000001C 0010A0E1 MOV R1,R0 \ 00000020 740094E5 LDR R0,[R4, #+116] \ 00000024 006082E0 ADD R6,R2,R0 \ 00000028 700094E5 LDR R0,[R4, #+112] \ 0000002C 0520A0E1 MOV R2,R5 \ 00000030 04002DE9 PUSH {R2} \ 00000034 04002DE9 PUSH {R2} \ 00000038 0630A0E1 MOV R3,R6 \ 0000003C 011046E0 SUB R1,R6,R1 \ 00000040 0020A0E3 MOV R2,#+0 \ 00000044 04002DE9 PUSH {R2} \ 00000048 782094E5 LDR R2,[R4, #+120] \ 0000004C 002082E0 ADD R2,R2,R0 \ 00000050 B40100EF SWI +436 536 WSHDR* ws = AllocWS(50); \ 00000054 3200A0E3 MOV R0,#+50 \ 00000058 250100EF SWI +293 \ 0000005C 0060A0E1 MOV R6,R0 537 TDate d; 538 TTime t; 539 GetDateTime(&d, &t); \ 00000060 0C108DE2 ADD R1,SP,#+12 \ 00000064 14008DE2 ADD R0,SP,#+20 \ 00000068 B40000EF SWI +180 540 int progress = div((viewpos + viewlen) * 1000, curblock->uc16len); \ 0000006C 880094E5 LDR R0,[R4, #+136] \ 00000070 802094E5 LDR R2,[R4, #+128] \ 00000074 447094E5 LDR R7,[R4, #+68] \ 00000078 000082E0 ADD R0,R2,R0 \ 0000007C 0C1097E5 LDR R1,[R7, #+12] \ 00000080 FA2FA0E3 MOV R2,#+1000 \ 00000084 920000E0 MUL R0,R2,R0 \ 00000088 ........ BL div \ 0000008C 0080A0E1 MOV R8,R0 541 if (progress <= 0) progress = 1; \ 00000090 0CD08DE2 ADD SP,SP,#+12 542 int factor = div((curblock->offset + curblock->datalen) * 1000, fileindex->datalen); \ 00000094 400094E5 LDR R0,[R4, #+64] \ 00000098 102097E5 LDR R2,[R7, #+16] \ 0000009C 101090E5 LDR R1,[R0, #+16] \ 000000A0 080097E5 LDR R0,[R7, #+8] \ 000000A4 010058E3 CMP R8,#+1 \ 000000A8 000082E0 ADD R0,R2,R0 \ 000000AC FA2FA0E3 MOV R2,#+1000 \ 000000B0 920000E0 MUL R0,R2,R0 \ 000000B4 0180A0B3 MOVLT R8,#+1 \ 000000B8 ........ BL div 543 if (factor <= 0) factor = 1; \ 000000BC 010050E3 CMP R0,#+1 \ 000000C0 0100A0B3 MOVLT R0,#+1 544 progress = progress * factor; 545 progress /= 1000; \ 000000C4 900801E0 MUL R1,R0,R8 \ 000000C8 8C019FE5 LDR R0,??DrawStateBar_0+0x4 ;; 0x10624dd3 \ 000000CC 9021C3E0 SMULL R2,R3,R0,R1 546 if (progress > 1000) progress = 1000; 547 wsprintf(ws, "%d%d%d.%d%c %d%d:%d%d", progress / 1000, progress / 100 % 10, progress / 10 % 10, progress % 10, '%', 548 t.hour / 10, t.hour % 10, t.min / 10, t.min % 10); \ 000000D0 0120DDE5 LDRB R2,[SP, #+1] \ 000000D4 4333A0E1 ASR R3,R3,#+6 \ 000000D8 A10F83E0 ADD R0,R3,R1, LSR #+31 \ 000000DC 7C319FE5 LDR R3,??DrawStateBar_0+0x8 ;; 0x66666667 \ 000000E0 E910A0E3 MOV R1,#+233 \ 000000E4 9273C8E0 SMULL R7,R8,R2,R3 \ 000000E8 0A70A0E3 MOV R7,#+10 \ 000000EC 4881A0E1 ASR R8,R8,#+2 \ 000000F0 970808E0 MUL R8,R7,R8 \ 000000F4 C01F81E3 ORR R1,R1,#0x300 \ 000000F8 010050E1 CMP R0,R1 \ 000000FC 0010DDE5 LDRB R1,[SP, #+0] \ 00000100 083042E0 SUB R3,R2,R8 \ 00000104 08002DE9 PUSH {R3} \ 00000108 50319FE5 LDR R3,??DrawStateBar_0+0x8 ;; 0x66666667 \ 0000010C FA0FA0A3 MOVGE R0,#+1000 \ 00000110 9372C8E0 SMULL R7,R8,R3,R2 \ 00000114 4881A0E1 ASR R8,R8,#+2 \ 00000118 A22F88E0 ADD R2,R8,R2, LSR #+31 \ 0000011C 04002DE9 PUSH {R2} \ 00000120 0320A0E1 MOV R2,R3 \ 00000124 9132C7E0 SMULL R3,R7,R1,R2 \ 00000128 0A30A0E3 MOV R3,#+10 \ 0000012C 4771A0E1 ASR R7,R7,#+2 \ 00000130 930707E0 MUL R7,R3,R7 \ 00000134 072041E0 SUB R2,R1,R7 \ 00000138 04002DE9 PUSH {R2} \ 0000013C 1C219FE5 LDR R2,??DrawStateBar_0+0x8 ;; 0x66666667 \ 00000140 9231C7E0 SMULL R3,R7,R2,R1 \ 00000144 4771A0E1 ASR R7,R7,#+2 \ 00000148 A11F87E0 ADD R1,R7,R1, LSR #+31 \ 0000014C 02002DE9 PUSH {R1} \ 00000150 2510A0E3 MOV R1,#+37 \ 00000154 02002DE9 PUSH {R1} \ 00000158 0210A0E1 MOV R1,R2 \ 0000015C 9021C3E0 SMULL R2,R3,R0,R1 \ 00000160 0A20A0E3 MOV R2,#+10 \ 00000164 4331A0E1 ASR R3,R3,#+2 \ 00000168 A03F83E0 ADD R3,R3,R0, LSR #+31 \ 0000016C 920303E0 MUL R3,R2,R3 \ 00000170 031040E0 SUB R1,R0,R3 \ 00000174 02002DE9 PUSH {R1} \ 00000178 E0109FE5 LDR R1,??DrawStateBar_0+0x8 ;; 0x66666667 \ 0000017C 9120C3E0 SMULL R2,R3,R1,R0 \ 00000180 D8209FE5 LDR R2,??DrawStateBar_0+0x8 ;; 0x66666667 \ 00000184 4331A0E1 ASR R3,R3,#+2 \ 00000188 A01F83E0 ADD R1,R3,R0, LSR #+31 \ 0000018C 9132C7E0 SMULL R3,R7,R1,R2 \ 00000190 0A30A0E3 MOV R3,#+10 \ 00000194 4771A0E1 ASR R7,R7,#+2 \ 00000198 A17F87E0 ADD R7,R7,R1, LSR #+31 \ 0000019C 930707E0 MUL R7,R3,R7 \ 000001A0 071041E0 SUB R1,R1,R7 \ 000001A4 02002DE9 PUSH {R1} \ 000001A8 B4109FE5 LDR R1,??DrawStateBar_0+0xC ;; 0x51eb851f \ 000001AC 9120C3E0 SMULL R2,R3,R1,R0 \ 000001B0 A8209FE5 LDR R2,??DrawStateBar_0+0x8 ;; 0x66666667 \ 000001B4 C332A0E1 ASR R3,R3,#+5 \ 000001B8 A01F83E0 ADD R1,R3,R0, LSR #+31 \ 000001BC 9132C7E0 SMULL R3,R7,R1,R2 \ 000001C0 0A30A0E3 MOV R3,#+10 \ 000001C4 4771A0E1 ASR R7,R7,#+2 \ 000001C8 A17F87E0 ADD R7,R7,R1, LSR #+31 \ 000001CC 930707E0 MUL R7,R3,R7 \ 000001D0 073041E0 SUB R3,R1,R7 \ 000001D4 80109FE5 LDR R1,??DrawStateBar_0+0x4 ;; 0x10624dd3 \ 000001D8 9120C7E0 SMULL R2,R7,R1,R0 \ 000001DC 84109FE5 LDR R1,??DrawStateBar_0+0x10 ;; `?` \ 000001E0 4773A0E1 ASR R7,R7,#+6 \ 000001E4 A02F87E0 ADD R2,R7,R0, LSR #+31 \ 000001E8 0600A0E1 MOV R0,R6 \ 000001EC 240100EF SWI +292 549 DrawString(ws, 550 winx, winy + winh - GetFontYSIZE(FONT_SMALL_ITALIC_BOLD), winx + winw - 1, winy + winh - 1, 551 statfont, 552 TEXT_ALIGNRIGHT, 553 statfontcolor, 554 statbgcolor 555 //GetPaletteAdrByColorIndex(fontcolor), 556 //GetPaletteAdrByColorIndex(bgcolor) 557 ); \ 000001F0 0B00A0E3 MOV R0,#+11 \ 000001F4 C50100EF SWI +453 \ 000001F8 741094E5 LDR R1,[R4, #+116] \ 000001FC 7C2094E5 LDR R2,[R4, #+124] \ 00000200 64309FE5 LDR R3,??DrawStateBar_0+0x14 ;; statfontcolor \ 00000204 012082E0 ADD R2,R2,R1 \ 00000208 701094E5 LDR R1,[R4, #+112] \ 0000020C 20002DE9 PUSH {R5} \ 00000210 08002DE9 PUSH {R3} \ 00000214 0430A0E3 MOV R3,#+4 \ 00000218 08002DE9 PUSH {R3} \ 0000021C 4C309FE5 LDR R3,??DrawStateBar_0+0x18 ;; statfont \ 00000220 003093E5 LDR R3,[R3, #+0] \ 00000224 08002DE9 PUSH {R3} \ 00000228 013042E2 SUB R3,R2,#+1 \ 0000022C 08002DE9 PUSH {R3} \ 00000230 783094E5 LDR R3,[R4, #+120] \ 00000234 002042E0 SUB R2,R2,R0 \ 00000238 0600A0E1 MOV R0,R6 \ 0000023C 013083E0 ADD R3,R3,R1 \ 00000240 013043E2 SUB R3,R3,#+1 \ 00000244 4C0100EF SWI +332 \ 00000248 30D08DE2 ADD SP,SP,#+48 558 FreeWS(ws); \ 0000024C 0600A0E1 MOV R0,R6 \ 00000250 290100EF SWI +297 559 } \ 00000254 FF81BDE8 POP {R0-R8,PC} ;; return \ ??DrawStateBar_0: \ 00000258 ........ DC32 statbgcolor \ 0000025C D34D6210 DC32 0x10624dd3 \ 00000260 67666666 DC32 0x66666667 \ 00000264 1F85EB51 DC32 0x51eb851f \ 00000268 ........ DC32 `?` \ 0000026C ........ DC32 statfontcolor \ 00000270 ........ DC32 statfont 560 561 //信息框 \ In segment CODE, align 4, keep-with-next 562 void DrawInfoDialog(void) { \ DrawInfoDialog: \ 00000000 10402DE9 PUSH {R4,LR} 563 char *s = malloc(100); \ 00000004 6400A0E3 MOV R0,#+100 \ 00000008 140000EF SWI +20 \ 0000000C 0040A0E1 MOV R4,R0 564 ShowMSG(1, (int)s); \ 00000010 0410A0E1 MOV R1,R4 \ 00000014 0100A0E3 MOV R0,#+1 \ 00000018 480100EF SWI +328 565 mfree(s); \ 0000001C 0400A0E1 MOV R0,R4 \ 00000020 150000EF SWI +21 566 } \ 00000024 1080BDE8 POP {R4,PC} ;; return 567 568 //主窗口 \ In segment CODE, align 4, keep-with-next 569 void DrawScreen(void) { //显示位置bug \ DrawScreen: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 570 571 DrawRectangle(winx, 572 winy, 573 winx + winw, 574 winy + winh, 575 0, //border-type 0=outline 1=dotted 2=inline 576 bgcolor, 577 bgcolor 578 ); \ 00000004 ........ LDR R4,??DataTable19 ;; inp_desc \ 00000008 CC519FE5 LDR R5,??DrawScreen_0 ;; bgcolor \ 0000000C 700094E5 LDR R0,[R4, #+112] \ 00000010 741094E5 LDR R1,[R4, #+116] \ 00000014 0520A0E1 MOV R2,R5 \ 00000018 04002DE9 PUSH {R2} \ 0000001C 04002DE9 PUSH {R2} \ 00000020 0020A0E3 MOV R2,#+0 \ 00000024 04002DE9 PUSH {R2} \ 00000028 7C2094E5 LDR R2,[R4, #+124] \ 0000002C 013082E0 ADD R3,R2,R1 \ 00000030 782094E5 LDR R2,[R4, #+120] \ 00000034 002082E0 ADD R2,R2,R0 \ 00000038 B40100EF SWI +436 579 if (!buffloaded) return; \ 0000003C 500094E5 LDR R0,[R4, #+80] \ 00000040 0CD08DE2 ADD SP,SP,#+12 \ 00000044 000050E3 CMP R0,#+0 \ 00000048 F08FBD08 POPEQ {R4-R11,PC} 580 bytelen = rlen - viewpos < viewlen ? rlen - viewpos : viewlen; \ 0000004C 880094E5 LDR R0,[R4, #+136] \ 00000050 5C1094E5 LDR R1,[R4, #+92] 581 str2ws_unicode(sbw, buff + viewpos, bytelen); 582 WSHDR *tws = AllocWS(sbw->wsbody[0]); //实际输出字符串,自动换行和行间距 583 int curwidth = 0, drawrow = 0; \ 00000054 0070A0E3 MOV R7,#+0 \ 00000058 002041E0 SUB R2,R1,R0 \ 0000005C 801094E5 LDR R1,[R4, #+128] \ 00000060 0080A0E3 MOV R8,#+0 \ 00000064 010052E1 CMP R2,R1 \ 00000068 0120A0A1 MOVGE R2,R1 \ 0000006C 481094E5 LDR R1,[R4, #+72] \ 00000070 842084E5 STR R2,[R4, #+132] \ 00000074 011080E0 ADD R1,R0,R1 \ 00000078 900094E5 LDR R0,[R4, #+144] 584 int i = 1, j = 1; \ 0000007C 01B0A0E3 MOV R11,#+1 \ 00000080 ........ _BLF str2ws_unicode,??str2ws_unicode??rA \ 00000084 900094E5 LDR R0,[R4, #+144] 585 for (i = 1; i <= sbw->wsbody[0]; i++) { \ 00000088 0B90A0E1 MOV R9,R11 \ 0000008C 000090E5 LDR R0,[R0, #+0] \ 00000090 B000D0E1 LDRH R0,[R0, #+0] \ 00000094 250100EF SWI +293 \ 00000098 0060A0E1 MOV R6,R0 \ 0000009C 090000EA B ??DrawScreen_1 586 if (sbw->wsbody[i] == 0x0a || sbw->wsbody[i] == 0x0d) { 587 if (i < sbw->wsbody[0] && sbw->wsbody[i + 1] == 0x0a) i++; 588 goto L_DRAWCHAR; 589 } 590 else { 591 curwidth += GetSymbolWidth(sbw->wsbody[i], font); 592 if (curwidth > winw) { 593 i--; 594 L_DRAWCHAR: 595 DrawString(tws, 596 1, 1 + winy + (space + GetFontYSIZE(font)) * drawrow++, (curwidth << 1), winy + winh - 1, 597 font, 598 TEXT_ALIGNLEFT, 599 fontcolor, 600 bgcolor 601 ); 602 curwidth = 0; 603 j = 1; 604 } 605 else { 606 tws->wsbody[j] = sbw->wsbody[i]; \ ??DrawScreen_2: \ 000000A0 902094E5 LDR R2,[R4, #+144] \ 000000A4 000096E5 LDR R0,[R6, #+0] \ 000000A8 002092E5 LDR R2,[R2, #+0] \ 000000AC 8B1080E0 ADD R1,R0,R11, LSL #+1 \ 000000B0 892082E0 ADD R2,R2,R9, LSL #+1 \ 000000B4 B020D2E1 LDRH R2,[R2, #+0] \ 000000B8 B020C1E1 STRH R2,[R1, #+0] 607 tws->wsbody[0] = j++; \ 000000BC B0B0C0E1 STRH R11,[R0, #+0] \ 000000C0 01B08BE2 ADD R11,R11,#+1 608 } \ ??DrawScreen_3: \ 000000C4 019089E2 ADD R9,R9,#+1 \ ??DrawScreen_1: \ 000000C8 900094E5 LDR R0,[R4, #+144] \ 000000CC ........ LDR R1,??DataTable20 ;; font \ 000000D0 000090E5 LDR R0,[R0, #+0] \ 000000D4 00A091E5 LDR R10,[R1, #+0] \ 000000D8 B010D0E1 LDRH R1,[R0, #+0] \ 000000DC 090051E1 CMP R1,R9 \ 000000E0 300000BA BLT ??DrawScreen_4 \ 000000E4 892080E0 ADD R2,R0,R9, LSL #+1 \ 000000E8 B010D2E1 LDRH R1,[R2, #+0] \ 000000EC 0A0051E3 CMP R1,#+10 \ 000000F0 0D005113 CMPNE R1,#+13 \ 000000F4 0700001A BNE ??DrawScreen_5 \ 000000F8 B000D0E1 LDRH R0,[R0, #+0] \ 000000FC 000059E1 CMP R9,R0 \ 00000100 0C0000AA BGE ??DrawScreen_6 \ 00000104 B200D2E1 LDRH R0,[R2, #+2] \ 00000108 0A0050E3 CMP R0,#+10 \ 0000010C 0900001A BNE ??DrawScreen_6 \ 00000110 019089E2 ADD R9,R9,#+1 \ 00000114 070000EA B ??DrawScreen_6 \ ??DrawScreen_5: \ 00000118 B000D2E1 LDRH R0,[R2, #+0] \ 0000011C 0A10A0E1 MOV R1,R10 \ 00000120 E10100EF SWI +481 \ 00000124 077080E0 ADD R7,R0,R7 \ 00000128 780094E5 LDR R0,[R4, #+120] \ 0000012C 070050E1 CMP R0,R7 \ 00000130 DAFFFFAA BGE ??DrawScreen_2 \ 00000134 019049E2 SUB R9,R9,#+1 \ ??DrawScreen_6: \ 00000138 0A00A0E1 MOV R0,R10 \ 0000013C C50100EF SWI +453 \ 00000140 741094E5 LDR R1,[R4, #+116] \ 00000144 0520A0E1 MOV R2,R5 \ 00000148 04002DE9 PUSH {R2} \ 0000014C 8C209FE5 LDR R2,??DrawScreen_0+0x4 ;; fontcolor \ 00000150 8730A0E1 LSL R3,R7,#+1 \ 00000154 04002DE9 PUSH {R2} \ 00000158 0070A0E3 MOV R7,#+0 \ 0000015C 01B0A0E3 MOV R11,#+1 \ 00000160 0120A0E3 MOV R2,#+1 \ 00000164 04002DE9 PUSH {R2} \ 00000168 00042DE9 PUSH {R10} \ 0000016C 7C2094E5 LDR R2,[R4, #+124] \ 00000170 022081E0 ADD R2,R1,R2 \ 00000174 012042E2 SUB R2,R2,#+1 \ 00000178 04002DE9 PUSH {R2} \ 0000017C ........ LDR R2,??DataTable21 ;; space \ 00000180 002092E5 LDR R2,[R2, #+0] \ 00000184 020080E0 ADD R0,R0,R2 \ 00000188 981020E0 MLA R0,R8,R0,R1 \ 0000018C 0110A0E3 MOV R1,#+1 \ 00000190 012080E2 ADD R2,R0,#+1 \ 00000194 0600A0E1 MOV R0,R6 \ 00000198 4C0100EF SWI +332 \ 0000019C 018088E2 ADD R8,R8,#+1 \ 000001A0 14D08DE2 ADD SP,SP,#+20 \ 000001A4 C6FFFFEA B ??DrawScreen_3 609 } 610 } 611 if (curwidth > 0 && i > sbw->wsbody[0]) { \ ??DrawScreen_4: \ 000001A8 010057E3 CMP R7,#+1 \ 000001AC 020000BA BLT ??DrawScreen_7 \ 000001B0 090051E1 CMP R1,R9 612 i = sbw->wsbody[0]; \ 000001B4 0190A0B1 MOVLT R9,R1 613 goto L_DRAWCHAR; \ 000001B8 DEFFFFBA BLT ??DrawScreen_6 614 } 615 FreeWS(tws); \ ??DrawScreen_7: \ 000001BC 0600A0E1 MOV R0,R6 \ 000001C0 290100EF SWI +297 616 617 //if (scroll) DrawIndication(); 618 if (status) DrawStateBar(); \ 000001C4 18009FE5 LDR R0,??DrawScreen_0+0x8 ;; status \ 000001C8 000090E5 LDR R0,[R0, #+0] \ 000001CC 000050E3 CMP R0,#+0 \ 000001D0 F08FBD08 POPEQ {R4-R11,PC} \ 000001D4 ........ BL DrawStateBar \ 000001D8 F08FBDE8 POP {R4-R11,PC} ;; return \ ??DrawScreen_0: \ 000001DC ........ DC32 bgcolor \ 000001E0 ........ DC32 fontcolor \ 000001E4 ........ DC32 status 619 //if (showinfo) DrawInfoDialog(); 620 } 621 /* 622 =============================== 623 end 624 =============================== 625 */ 626 627 628 /* 629 =============================== 630 菜单 631 =============================== 632 */ 633 /*---------软键----------*/ 634 int menusoftkeys[] = {0, 1, 2}; 635 SOFTKEY_DESC menu_sk[] = { 636 {0x0018, 0x0000, (int) "Select"}, 637 {0x0001, 0x0000, (int) "Back"}, 638 {0x003D, 0x0000, (int) LGP_DOIT_PIC} 639 }; 640 641 SOFTKEYSTAB menu_skt = { 642 menu_sk, 0 643 }; 644 645 646 /*--------主菜单---------*/ 647 //int create_menu_folder(void); 648 void open_select_file_gui(int); 649 int create_menu_goto(void); 650 int create_menu_bookmark(void); 651 \ In segment CODE, align 4, keep-with-next 652 void mainmenu_open(GUI *data) { \ mainmenu_open: \ 00000000 00402DE9 PUSH {LR} 653 GeneralFuncF1(1); \ 00000004 0100A0E3 MOV R0,#+1 \ 00000008 3B0100EF SWI +315 654 //create_menu_folder(); 655 open_select_file_gui(1); \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ B open_select_file_gui ;; tailcall 656 } 657 \ In segment CODE, align 4, keep-with-next 658 void mainmenu_quit(GUI *data) { \ mainmenu_quit: \ 00000000 00402DE9 PUSH {LR} 659 GeneralFuncF1(1); \ 00000004 0100A0E3 MOV R0,#+1 \ 00000008 3B0100EF SWI +315 660 Quit_Required = 1; \ 0000000C 08009FE5 LDR R0,??mainmenu_quit_0 ;; inp_desc + 60 \ 00000010 0110A0E3 MOV R1,#+1 \ 00000014 001080E5 STR R1,[R0, #+0] 661 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??mainmenu_quit_0: \ 0000001C ........ DC32 inp_desc + 60 662 \ In segment CODE, align 4, keep-with-next 663 int add2bmk(void) { \ add2bmk: \ 00000000 30402DE9 PUSH {R4,R5,LR} 664 665 if (!buffloaded) return 0; \ 00000004 ........ LDR R4,??DataTable37 ;; inp_desc \ 00000008 500094E5 LDR R0,[R4, #+80] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0100001A BNE ??add2bmk_0 \ ??add2bmk_1: \ 00000014 0000A0E3 MOV R0,#+0 \ 00000018 3080BDE8 POP {R4,R5,PC} 666 if (bookmark && bmknum == 0) { \ ??add2bmk_0: \ 0000001C 683094E5 LDR R3,[R4, #+104] \ 00000020 465FA0E3 MOV R5,#+280 \ 00000024 000053E3 CMP R3,#+0 \ 00000028 1A00000A BEQ ??add2bmk_2 \ 0000002C 6C0094E5 LDR R0,[R4, #+108] \ 00000030 000050E3 CMP R0,#+0 \ 00000034 1A00001A BNE ??add2bmk_3 667 bookmark[bmknum++] = curblock->offset + viewpos; \ 00000038 440094E5 LDR R0,[R4, #+68] \ 0000003C 882094E5 LDR R2,[R4, #+136] \ 00000040 081090E5 LDR R1,[R0, #+8] \ 00000044 011082E0 ADD R1,R2,R1 \ 00000048 001083E5 STR R1,[R3, #+0] \ 0000004C 6C1094E5 LDR R1,[R4, #+108] 668 bookmark[bmknum++] = curblock->offset + viewpos; \ 00000050 882094E5 LDR R2,[R4, #+136] \ 00000054 011081E2 ADD R1,R1,#+1 \ 00000058 6C1084E5 STR R1,[R4, #+108] \ 0000005C 080090E5 LDR R0,[R0, #+8] \ 00000060 000082E0 ADD R0,R2,R0 \ 00000064 010183E7 STR R0,[R3, +R1, LSL #+2] \ 00000068 6C0094E5 LDR R0,[R4, #+108] 669 writeAddrInt(procfile, &bmkfd, &ul, bookmark, bmknum, acbm); \ 0000006C ........ LDR R1,??DataTable26 ;; acbm \ 00000070 010080E2 ADD R0,R0,#+1 \ 00000074 001091E5 LDR R1,[R1, #+0] \ 00000078 6C0084E5 STR R0,[R4, #+108] \ 0000007C 02002DE9 PUSH {R1} \ 00000080 01002DE9 PUSH {R0} \ 00000084 662F84E2 ADD R2,R4,#+408 \ 00000088 641084E2 ADD R1,R4,#+100 \ 0000008C 040085E0 ADD R0,R5,R4 \ 00000090 ........ _BLF writeAddrInt,??writeAddrInt??rA \ 00000094 08D08DE2 ADD SP,SP,#+8 670 } 671 672 if (bookmark && bmknum < BOOK_NUM) { \ ??add2bmk_2: \ 00000098 680094E5 LDR R0,[R4, #+104] \ 0000009C 000050E3 CMP R0,#+0 \ 000000A0 3080BD08 POPEQ {R4,R5,PC} \ ??add2bmk_3: \ 000000A4 6C0094E5 LDR R0,[R4, #+108] \ 000000A8 640050E3 CMP R0,#+100 \ 000000AC D8FFFFAA BGE ??add2bmk_1 673 int bmkaddr = curblock->offset + viewpos; \ 000000B0 441094E5 LDR R1,[R4, #+68] \ 000000B4 882094E5 LDR R2,[R4, #+136] \ 000000B8 081091E5 LDR R1,[R1, #+8] 674 int i; 675 for (i = 2; i < bmknum; i++) { \ 000000BC 683094E5 LDR R3,[R4, #+104] \ 000000C0 011082E0 ADD R1,R2,R1 \ 000000C4 0220A0E3 MOV R2,#+2 \ 000000C8 030050E3 CMP R0,#+3 \ 000000CC 060000BA BLT ??add2bmk_4 \ 000000D0 08C083E2 ADD R12,R3,#+8 676 if (bmkaddr == bookmark[i]) break; \ ??add2bmk_5: \ 000000D4 ........ LDR LR,[R12], #+4 \ 000000D8 0E0051E1 CMP R1,LR \ 000000DC 0200000A BEQ ??add2bmk_4 677 } \ 000000E0 012082E2 ADD R2,R2,#+1 \ 000000E4 000052E1 CMP R2,R0 \ 000000E8 F9FFFFBA BLT ??add2bmk_5 678 if (i == bmknum) { \ ??add2bmk_4: \ 000000EC 000052E1 CMP R2,R0 \ 000000F0 C7FFFF1A BNE ??add2bmk_1 679 bookmark[bmknum++] = bmkaddr; \ 000000F4 001183E7 STR R1,[R3, +R0, LSL #+2] \ 000000F8 6C0094E5 LDR R0,[R4, #+108] 680 writeAddrInt(procfile, &bmkfd, &ul, bookmark, bmknum, acbm); \ 000000FC ........ LDR R1,??DataTable26 ;; acbm \ 00000100 010080E2 ADD R0,R0,#+1 \ 00000104 001091E5 LDR R1,[R1, #+0] \ 00000108 6C0084E5 STR R0,[R4, #+108] \ 0000010C 02002DE9 PUSH {R1} \ 00000110 01002DE9 PUSH {R0} \ 00000114 662F84E2 ADD R2,R4,#+408 \ 00000118 641084E2 ADD R1,R4,#+100 \ 0000011C 040085E0 ADD R0,R5,R4 \ 00000120 ........ _BLF writeAddrInt,??writeAddrInt??rA 681 return 1; \ 00000124 0100A0E3 MOV R0,#+1 \ 00000128 08D08DE2 ADD SP,SP,#+8 \ 0000012C 3080BDE8 POP {R4,R5,PC} ;; return 682 } 683 } 684 return 0; 685 } 686 \ In segment CODE, align 4, keep-with-next 687 int deletebmk(int n) { 688 if (!buffloaded || !bookmark || n > bmknum || bmknum < 3) return 0; \ deletebmk: \ 00000000 ........ LDR R12,??DataTable37 ;; inp_desc \ 00000004 00402DE9 PUSH {LR} \ 00000008 50109CE5 LDR R1,[R12, #+80] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 68309C15 LDRNE R3,[R12, #+104] \ 00000014 00005313 CMPNE R3,#+0 \ 00000018 0300000A BEQ ??deletebmk_0 \ 0000001C 6C109CE5 LDR R1,[R12, #+108] \ 00000020 000051E1 CMP R1,R0 \ 00000024 030051A3 CMPGE R1,#+3 \ 00000028 010000AA BGE ??deletebmk_1 \ ??deletebmk_0: \ 0000002C 0000A0E3 MOV R0,#+0 \ 00000030 0080BDE8 POP {PC} 689 bmknum--; \ ??deletebmk_1: \ 00000034 011041E2 SUB R1,R1,#+1 \ 00000038 6C108CE5 STR R1,[R12, #+108] 690 int i; 691 for (i = n; i < bmknum; i++) \ 0000003C 001183E0 ADD R1,R3,R0, LSL #+2 \ 00000040 020000EA B ??deletebmk_2 692 bookmark[i] = bookmark[i + 1]; \ ??deletebmk_3: \ 00000044 042091E5 LDR R2,[R1, #+4] \ 00000048 010080E2 ADD R0,R0,#+1 \ 0000004C ........ STR R2,[R1], #+4 \ ??deletebmk_2: \ 00000050 6C209CE5 LDR R2,[R12, #+108] \ 00000054 020050E1 CMP R0,R2 \ 00000058 F9FFFFBA BLT ??deletebmk_3 693 writeAddrInt(procfile, &bmkfd, &ul, bookmark, bmknum, acbm); \ 0000005C ........ LDR R0,??DataTable26 ;; acbm \ 00000060 64108CE2 ADD R1,R12,#+100 \ 00000064 000090E5 LDR R0,[R0, #+0] \ 00000068 01002DE9 PUSH {R0} \ 0000006C 04002DE9 PUSH {R2} \ 00000070 662F8CE2 ADD R2,R12,#+408 \ 00000074 460F8CE2 ADD R0,R12,#+280 \ 00000078 ........ _BLF writeAddrInt,??writeAddrInt??rA 694 return 1; \ 0000007C 0100A0E3 MOV R0,#+1 \ 00000080 08D08DE2 ADD SP,SP,#+8 \ 00000084 0080BDE8 POP {PC} ;; return 695 } 696 \ In segment CODE, align 4, keep-with-next 697 void mainmenu_add2bmk(GUI *data){ \ mainmenu_add2bmk: \ 00000000 00402DE9 PUSH {LR} 698 GeneralFuncF1(1); \ 00000004 0100A0E3 MOV R0,#+1 \ 00000008 3B0100EF SWI +315 699 add2bmk(); \ 0000000C ........ BL add2bmk 700 create_menu_bookmark(); \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ B create_menu_bookmark ;; tailcall 701 } 702 \ In segment CODE, align 4, keep-with-next 703 void mainmenu_search(GUI *data){ 704 705 } \ mainmenu_search: \ 00000000 1EFF2FE1 BX LR ;; return 706 \ In segment CODE, align 4, keep-with-next 707 void mainmenu_goto(GUI *data){ \ mainmenu_goto: \ 00000000 00402DE9 PUSH {LR} 708 GeneralFuncF1(1); \ 00000004 0100A0E3 MOV R0,#+1 \ 00000008 3B0100EF SWI +315 709 create_menu_goto(); \ 0000000C 0040BDE8 POP {LR} ;; Pop \ 00000010 ........ B create_menu_goto ;; tailcall 710 } 711 712 int LaunchEditor(void); \ In segment CODE, align 4, keep-with-next 713 void mainmenu_edit(GUI *data){ \ mainmenu_edit: \ 00000000 00402DE9 PUSH {LR} 714 GeneralFuncF1(1); \ 00000004 0100A0E3 MOV R0,#+1 \ 00000008 3B0100EF SWI +315 715 LaunchEditor(); \ 0000000C 0040BDE8 POP {LR} ;; Pop \ 00000010 ........ B LaunchEditor ;; tailcall 716 } 717 \ In segment CODE, align 4, keep-with-next 718 void mainmenu_sendsms(GUI *data) { 719 720 } \ mainmenu_sendsms: \ 00000000 1EFF2FE1 BX LR ;; return 721 \ In segment CODE, align 4, keep-with-next 722 void mainmenu_set(GUI *data){ \ mainmenu_set: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 723 WSHDR *ws = AllocWS(150); 724 int fd1; 725 if ((fd1 = fopen("4:\\ZBin\\etc\\SieTxtView.bcfg", A_ReadOnly + A_BIN, P_READ, &ul)) != -1) \ 00000004 64509FE5 LDR R5,??mainmenu_set_0 ;; `?` \ 00000008 ........ LDR R6,??DataTable37 ;; inp_desc \ 0000000C 9600A0E3 MOV R0,#+150 \ 00000010 250100EF SWI +293 \ 00000014 0040A0E1 MOV R4,R0 \ 00000018 663F86E2 ADD R3,R6,#+408 \ 0000001C 8020A0E3 MOV R2,#+128 \ 00000020 801CA0E3 MOV R1,#+32768 \ 00000024 1C0085E2 ADD R0,R5,#+28 \ 00000028 0A0000EF SWI +10 \ 0000002C 0070A0E1 MOV R7,R0 \ 00000030 010077E3 CMN R7,#+1 \ 00000034 8020A0E3 MOV R2,#+128 726 str_2ws(ws, "4:\\ZBin\\etc\\SieTxtView.bcfg", 128); \ 00000038 1C108512 ADDNE R1,R5,#+28 727 else 728 str_2ws(ws, "0:\\ZBin\\etc\\SieTxtView.bcfg", 128); \ 0000003C 0510A001 MOVEQ R1,R5 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 6C0100EF SWI +364 729 fclose(fd1, &ul); \ 00000048 661F86E2 ADD R1,R6,#+408 \ 0000004C 0700A0E1 MOV R0,R7 \ 00000050 0D0000EF SWI +13 730 ExecuteFile(ws, 0, 0); \ 00000054 0020A0E3 MOV R2,#+0 \ 00000058 0010A0E3 MOV R1,#+0 \ 0000005C 0400A0E1 MOV R0,R4 \ 00000060 940000EF SWI +148 731 FreeWS(ws); \ 00000064 0400A0E1 MOV R0,R4 \ 00000068 290100EF SWI +297 732 } \ 0000006C F080BDE8 POP {R4-R7,PC} ;; return \ ??mainmenu_set_0: \ 00000070 ........ DC32 `?` 733 \ In segment CODE, align 4, keep-with-next 734 void mainmenu_help(GUI *data){ 735 ShowMSG(1, (int)"Siemens Text Viewer v0.3f\nby HanikLZ\n2007"); \ mainmenu_help: \ 00000000 0C109FE5 LDR R1,??mainmenu_help_0 ;; `?` \ 00000004 00402DE9 PUSH {LR} \ 00000008 0100A0E3 MOV R0,#+1 \ 0000000C 480100EF SWI +328 736 } \ 00000010 0080BDE8 POP {PC} ;; return \ ??mainmenu_help_0: \ 00000014 ........ DC32 `?` 737 \ In segment DATA_C, align 4, align-sorted 738 const MENUPROCS_DESC mainmenu_HNDLS[9] = { \ mainmenu_HNDLS: \ 00000000 ............ DC32 mainmenu_open, mainmenu_add2bmk, mainmenu_search, mainmenu_goto \ ............ \ ........ \ 00000010 ............ DC32 mainmenu_edit, mainmenu_sendsms, mainmenu_set, mainmenu_help \ ............ \ ........ \ 00000020 ........ DC32 mainmenu_quit 739 mainmenu_open, 740 mainmenu_add2bmk, 741 mainmenu_search, 742 mainmenu_goto, 743 mainmenu_edit, 744 mainmenu_sendsms, 745 mainmenu_set, 746 mainmenu_help, 747 mainmenu_quit 748 }; 749 750 MENUITEM_DESC mainmenu_ITEMS[9] = { 751 {NULL, (int)"Open...", LGP_NULL, 0, NULL, MENU_FLAG3, MENU_FLAG2}, 752 {NULL, (int)"bookmark...", LGP_NULL, 0, NULL, MENU_FLAG3, MENU_FLAG2}, 753 {NULL, (int)"Search...", LGP_NULL, 0, NULL, MENU_FLAG3, MENU_FLAG2}, 754 {NULL, (int)"Go to...", LGP_NULL, 0, NULL, MENU_FLAG3, MENU_FLAG2}, 755 {NULL, (int)"Edit...", LGP_NULL, 0, NULL, MENU_FLAG3, MENU_FLAG2}, 756 {NULL, (int)"Send SMS...", LGP_NULL, 0, NULL, MENU_FLAG3, MENU_FLAG2}, 757 {NULL, (int)"Set...", LGP_NULL, 0, NULL, MENU_FLAG3, MENU_FLAG2}, 758 {NULL, (int)"Help", LGP_NULL, 0, NULL, MENU_FLAG3, MENU_FLAG2}, 759 {NULL, (int)"Quit", LGP_NULL, 0, NULL, MENU_FLAG3, MENU_FLAG2} 760 }; 761 762 HEADER_DESC mainmenu_HDR = {0, 0, 0, 0, 0 //icon 763 ,(int)"Main Menu", LGP_NULL}; 764 765 MENU_DESC mainmenu_STRUCT = { 766 8, NULL, NULL, NULL, 767 menusoftkeys, 768 &menu_skt, 769 0, 770 NULL, 771 mainmenu_ITEMS, 772 mainmenu_HNDLS, 773 9 774 }; 775 \ In segment CODE, align 4, keep-with-next 776 int create_menu_main(void) { \ create_menu_main: \ 00000000 10402DE9 PUSH {R4,LR} 777 patch_header(&mainmenu_HDR); \ 00000004 38409FE5 LDR R4,??create_menu_main_0 ;; mainmenu_HDR \ 00000008 0400A0E1 MOV R0,R4 \ 0000000C ........ _BLF patch_header,??patch_header??rA 778 return CreateMenu(0, 0, &mainmenu_STRUCT, &mainmenu_HDR, 0, 9, 0, 0); \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 01002DE9 PUSH {R0} \ 00000018 01002DE9 PUSH {R0} \ 0000001C 0430A0E1 MOV R3,R4 \ 00000020 142084E2 ADD R2,R4,#+20 \ 00000024 0010A0E3 MOV R1,#+0 \ 00000028 0900A0E3 MOV R0,#+9 \ 0000002C 01002DE9 PUSH {R0} \ 00000030 0000A0E3 MOV R0,#+0 \ 00000034 01002DE9 PUSH {R0} \ 00000038 520100EF SWI +338 \ 0000003C 10D08DE2 ADD SP,SP,#+16 \ 00000040 1080BDE8 POP {R4,PC} ;; return \ ??create_menu_main_0: \ 00000044 ........ DC32 mainmenu_HDR 779 } 780 /*----------end--------------*/ 781 782 /*--------GOTO---------*/ \ In segment CODE, align 4, keep-with-next 783 void gotomenu_start(GUI *data) { \ gotomenu_start: \ 00000000 00402DE9 PUSH {LR} 784 GeneralFuncF1(1); \ 00000004 0100A0E3 MOV R0,#+1 \ 00000008 3B0100EF SWI +315 785 gotoPos(0); \ 0000000C 0000A0E3 MOV R0,#+0 \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ B gotoPos ;; tailcall 786 } 787 \ In segment CODE, align 4, keep-with-next 788 void gotomenu_readed(GUI *data) { \ gotomenu_readed: \ 00000000 00402DE9 PUSH {LR} 789 790 GeneralFuncF1(1); \ 00000004 0100A0E3 MOV R0,#+1 \ 00000008 3B0100EF SWI +315 791 if (!bookmark || bmknum < 2 || !gotoPos(bookmark[1])) \ 0000000C ........ LDR R0,??DataTable37 ;; inp_desc \ 00000010 681090E5 LDR R1,[R0, #+104] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0600000A BEQ ??gotomenu_readed_0 \ 0000001C 6C0090E5 LDR R0,[R0, #+108] \ 00000020 020050E3 CMP R0,#+2 \ 00000024 030000BA BLT ??gotomenu_readed_0 \ 00000028 040091E5 LDR R0,[R1, #+4] \ 0000002C ........ BL gotoPos \ 00000030 000050E3 CMP R0,#+0 \ 00000034 0080BD18 POPNE {PC} 792 ShowMSG(1, (int) "Load bookmark failed!"); \ ??gotomenu_readed_0: \ 00000038 08109FE5 LDR R1,??gotomenu_readed_1 ;; `?` \ 0000003C 0100A0E3 MOV R0,#+1 \ 00000040 480100EF SWI +328 793 } \ 00000044 0080BDE8 POP {PC} ;; return \ ??gotomenu_readed_1: \ 00000048 ........ DC32 `?` 794 \ In segment CODE, align 4, keep-with-next 795 void gotomenu_end(GUI *data) { \ gotomenu_end: \ 00000000 00402DE9 PUSH {LR} 796 GeneralFuncF1(1); \ 00000004 0100A0E3 MOV R0,#+1 \ 00000008 3B0100EF SWI +315 797 if (!buffloaded) return; \ 0000000C ........ LDR R0,??DataTable37 ;; inp_desc \ 00000010 501090E5 LDR R1,[R0, #+80] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0080BD08 POPEQ {PC} \ 0000001C 401090E5 LDR R1,[R0, #+64] \ 00000020 800090E5 LDR R0,[R0, #+128] \ 00000024 041091E5 LDR R1,[R1, #+4] \ 00000028 0C2091E5 LDR R2,[R1, #+12] \ 0000002C 002042E0 SUB R2,R2,R0 \ 00000030 010052E3 CMP R2,#+1 \ 00000034 0C2091A5 LDRGE R2,[R1, #+12] \ 00000038 081091E5 LDR R1,[R1, #+8] \ 0000003C 000042A0 SUBGE R0,R2,R0 \ 00000040 0000A0B3 MOVLT R0,#+0 \ 00000044 010080E0 ADD R0,R0,R1 798 gotoPos(fileindex->prev->offset + 799 ((fileindex->prev->uc16len - viewlen) > 0 ? (fileindex->prev->uc16len - viewlen) : 0)); \ 00000048 ........ BL gotoPos 800 } \ 0000004C 0080BDE8 POP {PC} ;; return 801 \ In segment CODE, align 4, keep-with-next 802 void gotomenu_random(GUI *data) { \ gotomenu_random: \ 00000000 10402DE9 PUSH {R4,LR} 803 804 GeneralFuncF1(1); \ 00000004 0100A0E3 MOV R0,#+1 \ 00000008 3B0100EF SWI +315 805 if (!buffloaded) return; \ 0000000C 44009FE5 LDR R0,??gotomenu_random_0+0x4 ;; inp_desc + 80 \ 00000010 000090E5 LDR R0,[R0, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 1080BD08 POPEQ {R4,PC} 806 char *s = malloc(10); \ 0000001C 0A00A0E3 MOV R0,#+10 \ 00000020 140000EF SWI +20 \ 00000024 0040A0E1 MOV R4,R0 807 sprintf(s, "%d", Rand()); ^ Warning[Pe223]: function "Rand" declared implicitly \ 00000028 ........ _BLF Rand,??Rand??rA \ 0000002C 0020A0E1 MOV R2,R0 \ 00000030 071F8FE2 ADR R1,??gotomenu_random_0 ;; "%d" \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 160000EF SWI +22 808 ShowMSG(1, (int) s); \ 0000003C 0410A0E1 MOV R1,R4 \ 00000040 0100A0E3 MOV R0,#+1 \ 00000044 480100EF SWI +328 809 mfree(s); \ 00000048 0400A0E1 MOV R0,R4 \ 0000004C 150000EF SWI +21 810 } \ 00000050 1080BDE8 POP {R4,PC} ;; return \ ??gotomenu_random_0: \ 00000054 25640000 DC8 "%d",+0 \ 00000058 ........ DC32 inp_desc + 80 811 \ In segment CODE, align 4, keep-with-next 812 void gotomenu_bookmark(GUI *data) { \ gotomenu_bookmark: \ 00000000 00402DE9 PUSH {LR} 813 GeneralFuncF1(1); \ 00000004 0100A0E3 MOV R0,#+1 \ 00000008 3B0100EF SWI +315 814 create_menu_bookmark(); \ 0000000C 0040BDE8 POP {LR} ;; Pop \ 00000010 ........ B create_menu_bookmark ;; tailcall 815 } 816 \ In segment DATA_C, align 4, align-sorted 817 const MENUPROCS_DESC gotomenu_HNDLS[5] = { \ gotomenu_HNDLS: \ 00000000 ............ DC32 gotomenu_start, gotomenu_readed, gotomenu_end, gotomenu_random \ ............ \ ........ \ 00000010 ........ DC32 gotomenu_bookmark 818 gotomenu_start, 819 gotomenu_readed, 820 gotomenu_end, 821 gotomenu_random, 822 gotomenu_bookmark 823 }; 824 825 MENUITEM_DESC gotomenu_ITEMS[5] = { 826 {NULL, (int)"Start", LGP_NULL, 0, NULL, MENU_FLAG3, MENU_FLAG2}, 827 {NULL, (int)"Readed", LGP_NULL, 0, NULL, MENU_FLAG3, MENU_FLAG2}, 828 {NULL, (int)"End", LGP_NULL, 0, NULL, MENU_FLAG3, MENU_FLAG2}, 829 {NULL, (int)"Random position", LGP_NULL, 0, NULL, MENU_FLAG3, MENU_FLAG2}, 830 {NULL, (int)"Bookmark...", LGP_NULL, 0, NULL, MENU_FLAG3, MENU_FLAG2} 831 }; 832 833 HEADER_DESC gotomenu_HDR = {0, 0, 0, 0, 0 //icon 834 ,(int)"Go to...", LGP_NULL}; 835 836 MENU_DESC gotomenu_STRUCT = { 837 8, NULL, NULL, NULL, 838 menusoftkeys, 839 &menu_skt, 840 0, 841 NULL, 842 gotomenu_ITEMS, 843 gotomenu_HNDLS, 844 5 845 }; 846 \ In segment CODE, align 4, keep-with-next 847 int create_menu_goto(void) { \ create_menu_goto: \ 00000000 10402DE9 PUSH {R4,LR} 848 patch_header(&gotomenu_HDR); \ 00000004 38409FE5 LDR R4,??create_menu_goto_0 ;; gotomenu_HDR \ 00000008 0400A0E1 MOV R0,R4 \ 0000000C ........ _BLF patch_header,??patch_header??rA 849 return CreateMenu(0, 0, &gotomenu_STRUCT, &gotomenu_HDR, 0, 5, 0, 0); \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 01002DE9 PUSH {R0} \ 00000018 01002DE9 PUSH {R0} \ 0000001C 0430A0E1 MOV R3,R4 \ 00000020 142084E2 ADD R2,R4,#+20 \ 00000024 0010A0E3 MOV R1,#+0 \ 00000028 0500A0E3 MOV R0,#+5 \ 0000002C 01002DE9 PUSH {R0} \ 00000030 0000A0E3 MOV R0,#+0 \ 00000034 01002DE9 PUSH {R0} \ 00000038 520100EF SWI +338 \ 0000003C 10D08DE2 ADD SP,SP,#+16 \ 00000040 1080BDE8 POP {R4,PC} ;; return \ ??create_menu_goto_0: \ 00000044 ........ DC32 gotomenu_HDR 850 } 851 /*----------end--------------*/ 852 /* 853 =============================== 854 end 855 =============================== 856 */ 857 858 859 /* 860 =============================== 861 编辑框 862 =============================== 863 */ 864 \ In segment CODE, align 4, keep-with-next 865 int saveText(void) { \ saveText: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 866 fclose(fd, &ul); \ 00000004 ........ LDR R4,??DataTable37 ;; inp_desc \ 00000008 84D04DE2 SUB SP,SP,#+132 \ 0000000C 540094E5 LDR R0,[R4, #+84] \ 00000010 661F84E2 ADD R1,R4,#+408 \ 00000014 0D0000EF SWI +13 867 fd = -1; \ 00000018 0000E0E3 MVN R0,#+0 \ 0000001C 540084E5 STR R0,[R4, #+84] 868 char temp[128]; 869 strncpy(temp, procfile, strlen(procfile)); \ 00000020 465FA0E3 MOV R5,#+280 \ 00000024 040085E0 ADD R0,R5,R4 \ 00000028 1B0000EF SWI +27 \ 0000002C 0020A0E1 MOV R2,R0 \ 00000030 041085E0 ADD R1,R5,R4 \ 00000034 04008DE2 ADD R0,SP,#+4 \ 00000038 160100EF SWI +278 \ 0000003C 30139FE5 LDR R1,??saveText_0 ;; `?` + 16 \ 00000040 04008DE2 ADD R0,SP,#+4 870 strcat(temp, ".temp"); \ 00000044 170000EF SWI +23 871 872 unlink(temp, &ul); \ 00000048 661F84E2 ADD R1,R4,#+408 \ 0000004C 04008DE2 ADD R0,SP,#+4 \ 00000050 6B0100EF SWI +363 873 fmove(procfile, temp, &ul); \ 00000054 662F84E2 ADD R2,R4,#+408 \ 00000058 04108DE2 ADD R1,SP,#+4 \ 0000005C 040085E0 ADD R0,R5,R4 \ 00000060 8E0000EF SWI +142 874 int sfd = fopen(temp, A_ReadOnly, P_READ, &ul); \ 00000064 663F84E2 ADD R3,R4,#+408 \ 00000068 8020A0E3 MOV R2,#+128 \ 0000006C 0010A0E3 MOV R1,#+0 \ 00000070 04008DE2 ADD R0,SP,#+4 \ 00000074 0A0000EF SWI +10 \ 00000078 0060A0E1 MOV R6,R0 875 int dfd = fopen(procfile, A_ReadWrite + A_Create + A_Truncate, P_READ + P_WRITE, &ul); \ 0000007C 663F84E2 ADD R3,R4,#+408 \ 00000080 602FA0E3 MOV R2,#+384 \ 00000084 0210A0E3 MOV R1,#+2 \ 00000088 C01F81E3 ORR R1,R1,#0x300 \ 0000008C 040085E0 ADD R0,R5,R4 \ 00000090 0A0000EF SWI +10 \ 00000094 0070A0E1 MOV R7,R0 876 char *tbuff = malloc(BUF_LEN); \ 00000098 800CA0E3 MOV R0,#+32768 \ 0000009C 140000EF SWI +20 \ 000000A0 0080A0E1 MOV R8,R0 877 878 int maxlen = curblock->offset; \ 000000A4 440094E5 LDR R0,[R4, #+68] 879 int len = 0; \ 000000A8 0010A0E3 MOV R1,#+0 \ 000000AC 089090E5 LDR R9,[R0, #+8] \ 000000B0 00108DE5 STR R1,[SP, #+0] \ 000000B4 01A0A0E3 MOV R10,#+1 \ 000000B8 80AC8AE3 ORR R10,R10,#0x8000 \ 000000BC 010059E3 CMP R9,#+1 \ 000000C0 110000BA BLT ??saveText_1 880 while (maxlen > 0) { 881 if ((len = fread(sfd, tbuff, maxlen > BUF_LEN ? BUF_LEN : maxlen, &ul)) <= 0) break; \ ??saveText_2: \ 000000C4 0A0059E1 CMP R9,R10 \ 000000C8 802CA0A3 MOVGE R2,#+32768 \ 000000CC 0920A0B1 MOVLT R2,R9 \ 000000D0 663F84E2 ADD R3,R4,#+408 \ 000000D4 0810A0E1 MOV R1,R8 \ 000000D8 0600A0E1 MOV R0,R6 \ 000000DC 0B0000EF SWI +11 \ 000000E0 00008DE5 STR R0,[SP, #+0] \ 000000E4 010050E3 CMP R0,#+1 \ 000000E8 070000BA BLT ??saveText_1 882 fwrite(dfd, tbuff, len, &ul); \ 000000EC 663F84E2 ADD R3,R4,#+408 \ 000000F0 0020A0E1 MOV R2,R0 \ 000000F4 0810A0E1 MOV R1,R8 \ 000000F8 0700A0E1 MOV R0,R7 \ 000000FC 0C0000EF SWI +12 883 maxlen -= BUF_LEN; \ 00000100 809C49E2 SUB R9,R9,#+32768 884 } \ 00000104 010059E3 CMP R9,#+1 \ 00000108 EDFFFFAA BGE ??saveText_2 885 886 len = sbw->wsbody[0] << 1; \ ??saveText_1: \ 0000010C 901094E5 LDR R1,[R4, #+144] \ 00000110 001091E5 LDR R1,[R1, #+0] \ 00000114 B010D1E1 LDRH R1,[R1, #+0] \ 00000118 8110A0E1 LSL R1,R1,#+1 \ 0000011C 00108DE5 STR R1,[SP, #+0] 887 char *s = malloc(len); \ 00000120 0100A0E1 MOV R0,R1 \ 00000124 140000EF SWI +20 888 ws2str_unicode(s, sbw, &len); \ 00000128 901094E5 LDR R1,[R4, #+144] \ 0000012C 0090A0E1 MOV R9,R0 \ 00000130 0D20A0E1 MOV R2,SP \ 00000134 ........ _BLF ws2str_unicode,??ws2str_unicode??rA 889 890 maxlen = rlen - viewpos - bytelen; \ 00000138 840094E5 LDR R0,[R4, #+132] \ 0000013C 5C1094E5 LDR R1,[R4, #+92] \ 00000140 882094E5 LDR R2,[R4, #+136] \ 00000144 022041E0 SUB R2,R1,R2 \ 00000148 00B042E0 SUB R11,R2,R0 891 rlen = rlen - bytelen + len; \ 0000014C 000041E0 SUB R0,R1,R0 \ 00000150 00109DE5 LDR R1,[SP, #+0] \ 00000154 000081E0 ADD R0,R1,R0 \ 00000158 5C0084E5 STR R0,[R4, #+92] 892 if (rlen > BUF_LEN) { \ 0000015C 0A0050E1 CMP R0,R10 \ 00000160 040000BA BLT ??saveText_3 893 mfree(tbuff); \ 00000164 0800A0E1 MOV R0,R8 \ 00000168 150000EF SWI +21 894 tbuff = malloc(rlen); \ 0000016C 5C0094E5 LDR R0,[R4, #+92] \ 00000170 140000EF SWI +20 \ 00000174 0080A0E1 MOV R8,R0 895 } 896 897 memcpy(tbuff, buff, viewpos); \ ??saveText_3: \ 00000178 882094E5 LDR R2,[R4, #+136] \ 0000017C 481094E5 LDR R1,[R4, #+72] \ 00000180 0800A0E1 MOV R0,R8 \ 00000184 1E0100EF SWI +286 898 memcpy(tbuff + viewpos, s, len); \ 00000188 880094E5 LDR R0,[R4, #+136] \ 0000018C 00209DE5 LDR R2,[SP, #+0] \ 00000190 0910A0E1 MOV R1,R9 \ 00000194 080080E0 ADD R0,R0,R8 \ 00000198 1E0100EF SWI +286 899 memcpy(tbuff + viewpos + len, buff + viewpos + bytelen, maxlen); \ 0000019C 880094E5 LDR R0,[R4, #+136] \ 000001A0 841094E5 LDR R1,[R4, #+132] \ 000001A4 483094E5 LDR R3,[R4, #+72] \ 000001A8 0B20A0E1 MOV R2,R11 \ 000001AC 033080E0 ADD R3,R0,R3 \ 000001B0 031081E0 ADD R1,R1,R3 \ 000001B4 00309DE5 LDR R3,[SP, #+0] \ 000001B8 080080E0 ADD R0,R0,R8 \ 000001BC 000083E0 ADD R0,R3,R0 \ 000001C0 1E0100EF SWI +286 900 mfree(s); \ 000001C4 0900A0E1 MOV R0,R9 \ 000001C8 150000EF SWI +21 901 902 maxlen = curblock->offset + llen; \ 000001CC 440094E5 LDR R0,[R4, #+68] \ 000001D0 601094E5 LDR R1,[R4, #+96] \ 000001D4 080090E5 LDR R0,[R0, #+8] \ 000001D8 009081E0 ADD R9,R1,R0 903 char *tb = NULL; 904 switch (codetype) { \ 000001DC 4C0094E5 LDR R0,[R4, #+76] \ 000001E0 020050E2 SUBS R0,R0,#+2 \ 000001E4 0700000A BEQ ??saveText_4 \ 000001E8 010050E2 SUBS R0,R0,#+1 \ 000001EC 0D00000A BEQ ??saveText_5 \ 000001F0 010050E2 SUBS R0,R0,#+1 \ 000001F4 5C1084E2 ADD R1,R4,#+92 \ 000001F8 0800A0E1 MOV R0,R8 \ 000001FC 0F00000A BEQ ??saveText_6 905 case 1: //ansi 906 tb = unicode2gb(tbuff, &rlen); \ 00000200 ........ _BLF unicode2gb,??unicode2gb??rA \ 00000204 0E0000EA B ??saveText_7 907 break; 908 case 2: //unicode le 909 tb = malloc(rlen); \ ??saveText_4: \ 00000208 5C0094E5 LDR R0,[R4, #+92] \ 0000020C 140000EF SWI +20 910 memcpy(tbuff, tb, rlen); \ 00000210 5C2094E5 LDR R2,[R4, #+92] \ 00000214 00B0A0E1 MOV R11,R0 \ 00000218 0B10A0E1 MOV R1,R11 \ 0000021C 0800A0E1 MOV R0,R8 \ 00000220 1E0100EF SWI +286 \ 00000224 070000EA B ??saveText_8 911 break; 912 case 3: //unicode be 913 tb = unicodeSwitch(tbuff, rlen, &rlen, &llen); \ ??saveText_5: \ 00000228 5C1094E5 LDR R1,[R4, #+92] \ 0000022C 603084E2 ADD R3,R4,#+96 \ 00000230 5C2084E2 ADD R2,R4,#+92 \ 00000234 0800A0E1 MOV R0,R8 \ 00000238 ........ _BLF unicodeSwitch,??unicodeSwitch??rA \ 0000023C 000000EA B ??saveText_7 914 break; 915 case 4: //utf8 916 tb = unicode2utf8(tbuff, &rlen); \ ??saveText_6: \ 00000240 ........ _BLF unicode2utf8,??unicode2utf8??rA \ ??saveText_7: \ 00000244 00B0A0E1 MOV R11,R0 917 break; 918 default: 919 tb = unicode2gb(tbuff, &rlen); 920 break; 921 } 922 //WriteLog(tb, rlen); 923 fwrite(dfd, tb, rlen, &ul); \ ??saveText_8: \ 00000248 5C2094E5 LDR R2,[R4, #+92] \ 0000024C 663F84E2 ADD R3,R4,#+408 \ 00000250 0B10A0E1 MOV R1,R11 \ 00000254 0700A0E1 MOV R0,R7 \ 00000258 0C0000EF SWI +12 924 mfree(tb); \ 0000025C 0B00A0E1 MOV R0,R11 \ 00000260 150000EF SWI +21 925 if (lseek(sfd, maxlen, S_SET, &ul, &ul) == maxlen) { \ 00000264 660F84E2 ADD R0,R4,#+408 \ 00000268 01002DE9 PUSH {R0} \ 0000026C 663F84E2 ADD R3,R4,#+408 \ 00000270 0020A0E3 MOV R2,#+0 \ 00000274 0910A0E1 MOV R1,R9 \ 00000278 0600A0E1 MOV R0,R6 \ 0000027C 0F0000EF SWI +15 \ 00000280 090050E1 CMP R0,R9 \ 00000284 04D08DE2 ADD SP,SP,#+4 \ 00000288 1700001A BNE ??saveText_9 926 maxlen = fileindex->datalen - maxlen + 1; \ 0000028C 400094E5 LDR R0,[R4, #+64] \ 00000290 100090E5 LDR R0,[R0, #+16] \ 00000294 090040E0 SUB R0,R0,R9 \ 00000298 019080E2 ADD R9,R0,#+1 \ 0000029C 010059E3 CMP R9,#+1 \ 000002A0 110000BA BLT ??saveText_9 927 while (maxlen > 0) { 928 if ((len = fread(sfd, tbuff, maxlen > BUF_LEN ? BUF_LEN : maxlen, &ul)) <= 0) break; \ ??saveText_10: \ 000002A4 0A0059E1 CMP R9,R10 \ 000002A8 802CA0A3 MOVGE R2,#+32768 \ 000002AC 0920A0B1 MOVLT R2,R9 \ 000002B0 663F84E2 ADD R3,R4,#+408 \ 000002B4 0810A0E1 MOV R1,R8 \ 000002B8 0600A0E1 MOV R0,R6 \ 000002BC 0B0000EF SWI +11 \ 000002C0 00008DE5 STR R0,[SP, #+0] \ 000002C4 010050E3 CMP R0,#+1 \ 000002C8 070000BA BLT ??saveText_9 929 fwrite(dfd, tbuff, len, &ul); \ 000002CC 663F84E2 ADD R3,R4,#+408 \ 000002D0 0020A0E1 MOV R2,R0 \ 000002D4 0810A0E1 MOV R1,R8 \ 000002D8 0700A0E1 MOV R0,R7 \ 000002DC 0C0000EF SWI +12 930 maxlen -= BUF_LEN; \ 000002E0 809C49E2 SUB R9,R9,#+32768 931 } \ 000002E4 010059E3 CMP R9,#+1 \ 000002E8 EDFFFFAA BGE ??saveText_10 932 } 933 934 int addr = 0; 935 if (curblock) addr = curblock->offset + viewpos; \ ??saveText_9: \ 000002EC 440094E5 LDR R0,[R4, #+68] \ 000002F0 0090A0E3 MOV R9,#+0 \ 000002F4 000050E3 CMP R0,#+0 \ 000002F8 08009015 LDRNE R0,[R0, #+8] \ 000002FC 88109415 LDRNE R1,[R4, #+136] \ 00000300 00908110 ADDNE R9,R1,R0 936 937 /* 938 sprintf(tbuff, "%d\0", addr); 939 ShowMSG(1, (int) tbuff); 940 */ 941 mfree(tbuff); \ 00000304 0800A0E1 MOV R0,R8 \ 00000308 150000EF SWI +21 942 fclose(dfd, &ul); \ 0000030C 661F84E2 ADD R1,R4,#+408 \ 00000310 0700A0E1 MOV R0,R7 \ 00000314 0D0000EF SWI +13 943 fclose(sfd, &ul); \ 00000318 661F84E2 ADD R1,R4,#+408 \ 0000031C 0600A0E1 MOV R0,R6 \ 00000320 0D0000EF SWI +13 944 unlink(temp, &ul); \ 00000324 661F84E2 ADD R1,R4,#+408 \ 00000328 04008DE2 ADD R0,SP,#+4 \ 0000032C 6B0100EF SWI +363 945 if (loadFile(procfile)) { \ 00000330 040085E0 ADD R0,R5,R4 \ 00000334 ........ BL loadFile \ 00000338 000050E3 CMP R0,#+0 \ 0000033C 0400000A BEQ ??saveText_11 946 gotoPos(addr); \ 00000340 0900A0E1 MOV R0,R9 \ 00000344 ........ BL gotoPos 947 } 948 else { 949 rlen = llen = 0; 950 ShowMSG(1, (int) "File failed!"); 951 return 0; 952 } 953 return 1; \ 00000348 0100A0E3 MOV R0,#+1 \ 0000034C 84D08DE2 ADD SP,SP,#+132 \ 00000350 F08FBDE8 POP {R4-R11,PC} \ ??saveText_11: \ 00000354 ........ LDR R1,??DataTable36 ;; `?` \ 00000358 600084E5 STR R0,[R4, #+96] \ 0000035C 5C0084E5 STR R0,[R4, #+92] \ 00000360 0100A0E3 MOV R0,#+1 \ 00000364 480100EF SWI +328 \ 00000368 0000A0E3 MOV R0,#+0 \ 0000036C 84D08DE2 ADD SP,SP,#+132 \ 00000370 F08FBDE8 POP {R4-R11,PC} ;; return \ ??saveText_0: \ 00000374 ........ DC32 `?` + 16 954 } 955 \ In segment CODE, align 4, keep-with-next 956 int inp_onkey(GUI *gui, GUI_MSG *msg) { \ inp_onkey: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 957 958 EDITCONTROL ec; 959 960 if(msg->gbsmsg->submess == RED_BUTTON) { \ 00000008 042091E5 LDR R2,[R1, #+4] \ 0000000C 082092E5 LDR R2,[R2, #+8] \ 00000010 0C0052E3 CMP R2,#+12 \ 00000014 0100001A BNE ??inp_onkey_0 961 return 1; \ ??inp_onkey_1: \ 00000018 0100A0E3 MOV R0,#+1 \ 0000001C 130000EA B ??inp_onkey_2 962 } 963 964 if(msg->gbsmsg->submess == GREEN_BUTTON) { 965 966 967 } 968 969 if (msg->keys == 0x18) { \ ??inp_onkey_0: \ 00000020 F210D1E1 LDRSH R1,[R1, #+2] \ 00000024 180051E3 CMP R1,#+24 \ 00000028 1200001A BNE ??inp_onkey_3 970 971 ExtractEditControl(gui, 1, &ec); 972 if (sbw) FreeWS(sbw); \ 0000002C ........ LDR R4,??DataTable37 ;; inp_desc \ 00000030 0D20A0E1 MOV R2,SP \ 00000034 0110A0E3 MOV R1,#+1 \ 00000038 690100EF SWI +361 \ 0000003C 900094E5 LDR R0,[R4, #+144] \ 00000040 000050E3 CMP R0,#+0 \ 00000044 0000000A BEQ ??inp_onkey_4 \ 00000048 290100EF SWI +297 973 sbw = AllocWS(viewlen); \ ??inp_onkey_4: \ 0000004C 800094E5 LDR R0,[R4, #+128] \ 00000050 250100EF SWI +293 \ 00000054 900084E5 STR R0,[R4, #+144] 974 wstrcpy(sbw, ec.pWS); \ 00000058 28109DE5 LDR R1,[SP, #+40] \ 0000005C 1F0100EF SWI +287 975 /* char *s = malloc(100); 976 sprintf(s, "%d:%d", sbw->wsbody[0], ec.pWS->wsbody[0]); 977 ShowMSG(1, (int) s); 978 mfree(s);*/ 979 if(saveText()) { \ 00000060 ........ BL saveText \ 00000064 000050E3 CMP R0,#+0 \ 00000068 EAFFFF1A BNE ??inp_onkey_1 980 return 1; 981 } 982 /* 983 ExtractEditControl(gui, 1, &ec); 984 wstrcpy(editstr, ec.pWS); 985 patch_header(&menuhdr); 986 menu_gui_id = CreateMenu(0, 0, &tmenu, &menuhdr, 0, 4, editstr, 0);*/ 987 return -1; //do redraw \ 0000006C 0000E0E3 MVN R0,#+0 \ ??inp_onkey_2: \ 00000070 2CD08DE2 ADD SP,SP,#+44 \ 00000074 1080BDE8 POP {R4,PC} 988 } 989 return 0; //Do standart keys \ ??inp_onkey_3: \ 00000078 0000A0E3 MOV R0,#+0 \ 0000007C 2CD08DE2 ADD SP,SP,#+44 \ 00000080 1080BDE8 POP {R4,PC} ;; return 990 //1: close 991 } 992 993 \ In segment CODE, align 4, keep-with-next 994 void inp_ghook(GUI *gui, int cmd) { \ inp_ghook: \ 00000000 00402DE9 PUSH {LR} 995 996 static SOFTKEY_DESC sk = {0x0018, 0x0000, (int)"Save"}; 997 998 //WSHDR *editstr = EDIT_GetUserPointer(gui); 999 1000 if (cmd == 2) { 1001 //Called after onCreate 1002 } 1003 1004 if (cmd == 3) { 1005 //退出 1006 //FreeWS(tmostr); 1007 } 1008 if (cmd == 7) { \ 00000004 070051E3 CMP R1,#+7 \ 00000008 0080BD18 POPNE {PC} 1009 SetSoftKey(gui, &sk, SET_SOFT_KEY_N); \ 0000000C 08109FE5 LDR R1,??inp_ghook_0 ;; ??sk \ 00000010 0020A0E3 MOV R2,#+0 \ 00000014 680100EF SWI +360 1010 } 1011 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??inp_ghook_0: \ 0000001C ........ DC32 ??sk 1012 \ In segment CODE, align 4, keep-with-next 1013 void inp_locret(void){} \ inp_locret: \ 00000000 1EFF2FE1 BX LR ;; return 1014 1015 INPUTDIA_DESC inp_desc = { 1016 1, 1017 inp_onkey, 1018 inp_ghook, 1019 (void *)inp_locret, 1020 0, 1021 &menu_skt, 1022 {0, 22, 131, 153}, 1023 4, 1024 100, 1025 101, 1026 0, 1027 0, 1028 0x40000000 1029 }; 1030 1031 1032 HEADER_DESC inp_hdr = {0, 0, 131, 21,/*icon*/NULL, (int)"Edit", LGP_NULL}; 1033 \ In segment CODE, align 4, keep-with-next 1034 int LaunchEditor(void) { \ LaunchEditor: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 1035 if (!buffloaded) return 0; \ 00000004 C8409FE5 LDR R4,??LaunchEditor_0 ;; inp_desc \ 00000008 2CD04DE2 SUB SP,SP,#+44 \ 0000000C 500094E5 LDR R0,[R4, #+80] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 2C00000A BEQ ??LaunchEditor_1 1036 void *ma = malloc_adr(); \ 00000018 148000EF SWI +32788 \ 0000001C 0060A0E1 MOV R6,R0 1037 void *eq; 1038 EDITCONTROL ec; 1039 PrepareEditControl(&ec); \ 00000020 0D00A0E1 MOV R0,SP \ 00000024 640100EF SWI +356 1040 eq = AllocEQueue(ma, mfree_adr()); \ 00000028 158000EF SWI +32789 \ 0000002C 0010A0E1 MOV R1,R0 \ 00000030 0600A0E1 MOV R0,R6 \ 00000034 630100EF SWI +355 \ 00000038 0050A0E1 MOV R5,R0 1041 ConstructEditControl(&ec, 4, 0x40, sbw, viewlen); \ 0000003C 800094E5 LDR R0,[R4, #+128] \ 00000040 4020A0E3 MOV R2,#+64 \ 00000044 01002DE9 PUSH {R0} \ 00000048 903094E5 LDR R3,[R4, #+144] \ 0000004C 0410A0E3 MOV R1,#+4 \ 00000050 04008DE2 ADD R0,SP,#+4 \ 00000054 650100EF SWI +357 1042 AddEditControlToEditQend(eq, &ec, ma); \ 00000058 0620A0E1 MOV R2,R6 \ 0000005C 04108DE2 ADD R1,SP,#+4 \ 00000060 0500A0E1 MOV R0,R5 \ 00000064 660100EF SWI +358 1043 patch_header(&inp_hdr); \ 00000068 676FA0E3 MOV R6,#+412 \ 0000006C 040086E0 ADD R0,R6,R4 \ 00000070 ........ _BLF patch_header,??patch_header??rA 1044 patch_input(&inp_desc); \ 00000074 0000A0E3 MOV R0,#+0 \ 00000078 B801C4E1 STRH R0,[R4, #+24] \ 0000007C 8A8100EF SWI +33162 \ 00000080 190080E2 ADD R0,R0,#+25 \ 00000084 BA01C4E1 STRH R0,[R4, #+26] \ 00000088 888100EF SWI +33160 \ 0000008C 010040E2 SUB R0,R0,#+1 \ 00000090 BC01C4E1 STRH R0,[R4, #+28] \ 00000094 898100EF SWI +33161 \ 00000098 0070A0E1 MOV R7,R0 \ 0000009C 8B8100EF SWI +33163 \ 000000A0 000047E0 SUB R0,R7,R0 \ 000000A4 010040E2 SUB R0,R0,#+1 \ 000000A8 BE01C4E1 STRH R0,[R4, #+30] 1045 return CreateInputTextDialog(&inp_desc, &inp_hdr, eq, 1, sbw); \ 000000AC 900094E5 LDR R0,[R4, #+144] \ 000000B0 0130A0E3 MOV R3,#+1 \ 000000B4 01002DE9 PUSH {R0} \ 000000B8 0520A0E1 MOV R2,R5 \ 000000BC 041086E0 ADD R1,R6,R4 \ 000000C0 0400A0E1 MOV R0,R4 \ 000000C4 670100EF SWI +359 \ 000000C8 08D08DE2 ADD SP,SP,#+8 \ ??LaunchEditor_1: \ 000000CC 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000D0 F080BDE8 POP {R4-R7,PC} ;; return \ ??LaunchEditor_0: \ 000000D4 ........ DC32 inp_desc 1046 } 1047 1048 /* 1049 =============================== 1050 end 1051 =============================== 1052 */ 1053 1054 1055 /* need fix 1056 =============================== 1057 文件列表 1058 =============================== 1059 */ 1060 typedef struct { 1061 void *next; 1062 int is_folder; 1063 char *fullname; 1064 char *name; 1065 } FLIST; 1066 1067 typedef struct { 1068 void *gui; 1069 int type; 1070 } FVIEW; 1071 \ In segment DATA_Z, align 4, align-sorted 1072 volatile FLIST *fltop; \ fltop: \ 00000000 DS8 4 1073 enum TYPES {IS_BACK, IS_FOLDER, IS_FILE}; \ In segment DATA_C, align 4, align-sorted 1074 const char back[] = ".."; \ back: \ 00000000 2E2E00 DC8 ".." \ 00000003 00 DC8 0 \ 00000004 524F4F5400 DC8 "ROOT" \ 00000009 000000 DC8 0, 0, 0 1075 char header[128]; 1076 \ In segment CODE, align 4, keep-with-next 1077 void Free_FLIST(void) { \ Free_FLIST: \ 00000000 10402DE9 PUSH {R4,LR} 1078 1079 LockSched(); \ 00000004 460100EF SWI +326 1080 FLIST *fl = (FLIST *)fltop; \ 00000008 ........ LDR R0,??DataTable35 ;; fltop 1081 fltop = 0; \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 004090E5 LDR R4,[R0, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 1082 UnlockSched(); \ 00000018 470100EF SWI +327 \ 0000001C 000054E3 CMP R4,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} 1083 while (fl) { 1084 FLIST *fl_prev = fl; \ ??Free_FLIST_0: \ 00000024 0400A0E1 MOV R0,R4 1085 fl = fl->next; \ 00000028 004094E5 LDR R4,[R4, #+0] 1086 mfree(fl_prev); \ 0000002C 150000EF SWI +21 1087 } \ 00000030 000054E3 CMP R4,#+0 \ 00000034 FAFFFF1A BNE ??Free_FLIST_0 1088 } \ 00000038 1080BDE8 POP {R4,PC} ;; return 1089 \ In segment CODE, align 4, keep-with-next 1090 int strcmp_nocase(const char *s, const char *d) { 1091 1092 int cs; 1093 int ds; 1094 do { 1095 cs = *s++; \ strcmp_nocase: \ ??strcmp_nocase_0: \ 00000000 ........ LDRB R2,[R0], #+1 1096 if (cs & 0x40) cs &= 0xDF; 1097 ds = *d++; \ 00000004 ........ LDRB R3,[R1], #+1 \ 00000008 400012E3 TST R2,#0x40 \ 0000000C DF200212 ANDNE R2,R2,#0xDF 1098 if (ds & 0x40) ds &= 0xDF; \ 00000010 400013E3 TST R3,#0x40 \ 00000014 DF300312 ANDNE R3,R3,#0xDF 1099 cs -= ds; \ 00000018 032052E0 SUBS R2,R2,R3 1100 if (cs) break; \ 0000001C 0100001A BNE ??strcmp_nocase_1 1101 } 1102 while(ds); \ 00000020 000053E3 CMP R3,#+0 \ 00000024 F5FFFF1A BNE ??strcmp_nocase_0 1103 return(cs); \ ??strcmp_nocase_1: \ 00000028 0200A0E1 MOV R0,R2 \ 0000002C 1EFF2FE1 BX LR ;; return 1104 } 1105 \ In segment CODE, align 4, keep-with-next 1106 FLIST *AddToFList(const char* full_name, const char *name, int is_folder) { \ AddToFList: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 0050A0E1 MOV R5,R0 \ 00000008 0160A0E1 MOV R6,R1 \ 0000000C 0270A0E1 MOV R7,R2 1107 1108 int l_fname; 1109 FLIST *fl; 1110 FLIST *fn = malloc(sizeof (FLIST) + (l_fname = strlen(full_name)) + strlen(name) + 2); \ 00000010 1B0000EF SWI +27 \ 00000014 0080A0E1 MOV R8,R0 \ 00000018 0600A0E1 MOV R0,R6 \ 0000001C 1B0000EF SWI +27 \ 00000020 080080E0 ADD R0,R0,R8 \ 00000024 120080E2 ADD R0,R0,#+18 \ 00000028 140000EF SWI +20 \ 0000002C 0040A0E1 MOV R4,R0 1111 fn->fullname = (char *)fn + sizeof (FLIST); \ 00000030 100084E2 ADD R0,R4,#+16 \ 00000034 080084E5 STR R0,[R4, #+8] 1112 fn->name = (char *)fn + sizeof (FLIST) + l_fname + 1; \ 00000038 040088E0 ADD R0,R8,R4 \ 0000003C 110080E2 ADD R0,R0,#+17 \ 00000040 0C0084E5 STR R0,[R4, #+12] 1113 strcpy(fn->fullname, full_name); \ 00000044 080094E5 LDR R0,[R4, #+8] \ 00000048 0510A0E1 MOV R1,R5 1114 strcpy(fn->name, name); 1115 fn->is_folder = is_folder; 1116 fn->next = 0; 1117 fl = (FLIST *)fltop; \ 0000004C ........ LDR R5,??DataTable35 ;; fltop \ 00000050 1A0000EF SWI +26 \ 00000054 0C0094E5 LDR R0,[R4, #+12] \ 00000058 0610A0E1 MOV R1,R6 \ 0000005C 1A0000EF SWI +26 \ 00000060 047084E5 STR R7,[R4, #+4] \ 00000064 0000A0E3 MOV R0,#+0 \ 00000068 000084E5 STR R0,[R4, #+0] \ 0000006C 006095E5 LDR R6,[R5, #+0] 1118 if (fl) { \ 00000070 000056E3 CMP R6,#+0 \ 00000074 0A00000A BEQ ??AddToFList_0 1119 1120 FLIST *pr; 1121 pr = (FLIST *) &fltop; \ 00000078 0C7094E5 LDR R7,[R4, #+12] 1122 while (strcmp_nocase(fl->name, fn->name) < 0) { \ ??AddToFList_1: \ 0000007C 0C0096E5 LDR R0,[R6, #+12] \ 00000080 0710A0E1 MOV R1,R7 \ 00000084 ........ BL strcmp_nocase \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 0300005A BPL ??AddToFList_2 1123 pr = fl; \ 00000090 0650A0E1 MOV R5,R6 1124 fl = fl->next; \ 00000094 006096E5 LDR R6,[R6, #+0] 1125 if (!fl) break; \ 00000098 000056E3 CMP R6,#+0 \ 0000009C F6FFFF1A BNE ??AddToFList_1 1126 } 1127 fn->next = fl; \ ??AddToFList_2: \ 000000A0 006084E5 STR R6,[R4, #+0] 1128 pr->next = fn; 1129 } 1130 else { 1131 fltop=fn; \ ??AddToFList_0: \ 000000A4 004085E5 STR R4,[R5, #+0] 1132 } 1133 return (fn); \ 000000A8 0400A0E1 MOV R0,R4 \ 000000AC F081BDE8 POP {R4-R8,PC} ;; return 1134 } 1135 \ In segment CODE, align 4, keep-with-next 1136 int FindFiles(char *str, int type) {// type == 0 SelectFolder, type == 1 SelectFile \ FindFiles: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 C8D04DE2 SUB SP,SP,#+200 \ 00000008 40DE4DE2 SUB SP,SP,#+1024 \ 0000000C 0140A0E1 MOV R4,R1 1137 1138 DIR_ENTRY de; 1139 unsigned int err; 1140 char *rev, *s, *d; 1141 int i, c, n = 0; 1142 char path[256]; 1143 char name[128]; 1144 1145 strcpy(path, str); \ 00000010 0010A0E1 MOV R1,R0 \ 00000014 D20F8DE2 ADD R0,SP,#+840 \ 00000018 1A0000EF SWI +26 1146 Free_FLIST(); \ 0000001C ........ BL Free_FLIST 1147 s = path; \ 00000020 D20F8DE2 ADD R0,SP,#+840 1148 d = name; \ 00000024 48108DE2 ADD R1,SP,#+72 \ 00000028 401E81E2 ADD R1,R1,#+1024 1149 rev = 0; \ 0000002C 0050A0E3 MOV R5,#+0 \ 00000030 0020A0E3 MOV R2,#+0 \ 00000034 050000EA B ??FindFiles_0 1150 while ((c = *s++)) { 1151 *d++ = c; \ ??FindFiles_1: \ 00000038 ........ STRB R3,[R1], #+1 1152 if (c == '\\' && *s != '\0') rev = d; \ 0000003C 5C0053E3 CMP R3,#+92 \ 00000040 0200001A BNE ??FindFiles_0 \ 00000044 0030D0E5 LDRB R3,[R0, #+0] \ 00000048 000053E3 CMP R3,#+0 \ 0000004C 0120A011 MOVNE R2,R1 1153 } \ ??FindFiles_0: \ 00000050 ........ LDRB R3,[R0], #+1 \ 00000054 000053E3 CMP R3,#+0 \ 00000058 F6FFFF1A BNE ??FindFiles_1 1154 if(rev == 0) \ 0000005C 2C019FE5 LDR R0,??FindFiles_2 ;; back \ 00000060 000052E3 CMP R2,#+0 1155 AddToFList("ROOT", back, IS_BACK); \ 00000064 0010A001 MOVEQ R1,R0 \ 00000068 04008002 ADDEQ R0,R0,#+4 \ 0000006C 0400000A BEQ ??FindFiles_3 1156 else { 1157 *rev=0; \ 00000070 0050C2E5 STRB R5,[R2, #+0] 1158 AddToFList(name, back, IS_BACK); \ 00000074 0020A0E3 MOV R2,#+0 \ 00000078 0010A0E1 MOV R1,R0 \ 0000007C 48008DE2 ADD R0,SP,#+72 \ 00000080 400E80E2 ADD R0,R0,#+1024 \ ??FindFiles_3: \ 00000084 ........ BL AddToFList 1159 } 1160 n++; \ 00000088 0160A0E3 MOV R6,#+1 1161 1162 i = strlen(path); \ 0000008C D20F8DE2 ADD R0,SP,#+840 \ 00000090 1B0000EF SWI +27 \ 00000094 0090A0E1 MOV R9,R0 1163 path[i++] = '*'; \ 00000098 D20F8DE2 ADD R0,SP,#+840 \ 0000009C 000089E0 ADD R0,R9,R0 \ 000000A0 2A10A0E3 MOV R1,#+42 \ 000000A4 0010C0E5 STRB R1,[R0, #+0] 1164 path[i] = '\0'; \ 000000A8 0150C0E5 STRB R5,[R0, #+1] 1165 if (FindFirstFile(&de, path, &err)) { \ 000000AC 0D20A0E1 MOV R2,SP \ 000000B0 D21F8DE2 ADD R1,SP,#+840 \ 000000B4 04008DE2 ADD R0,SP,#+4 \ 000000B8 6B0000EF SWI +107 \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 5C70A0E3 MOV R7,#+92 \ 000000C4 2A00000A BEQ ??FindFiles_4 1166 do { 1167 i = strlen(de.folder_name); \ ??FindFiles_5: \ 000000C8 38008DE2 ADD R0,SP,#+56 \ 000000CC 1B0000EF SWI +27 \ 000000D0 0090A0E1 MOV R9,R0 1168 strcpy(path, de.folder_name); \ 000000D4 38108DE2 ADD R1,SP,#+56 \ 000000D8 D20F8DE2 ADD R0,SP,#+840 \ 000000DC 1A0000EF SWI +26 1169 path[i++] = '\\'; \ 000000E0 D20F8DE2 ADD R0,SP,#+840 \ 000000E4 000089E0 ADD R0,R9,R0 \ 000000E8 ........ STRB R7,[R0], #+1 1170 strcpy(path + i, de.file_name); \ 000000EC B9108DE2 ADD R1,SP,#+185 \ 000000F0 1A0000EF SWI +26 1171 if (de.file_attr & FA_DIRECTORY) { \ 000000F4 F003DDE1 LDRSH R0,[SP, #+48] \ 000000F8 018086E2 ADD R8,R6,#+1 \ 000000FC 100010E3 TST R0,#0x10 \ 00000100 0F00000A BEQ ??FindFiles_6 1172 i = strlen(path); \ 00000104 D20F8DE2 ADD R0,SP,#+840 \ 00000108 1B0000EF SWI +27 \ 0000010C 0090A0E1 MOV R9,R0 1173 path[i++] = '\\'; \ 00000110 D20F8DE2 ADD R0,SP,#+840 \ 00000114 000089E0 ADD R0,R9,R0 \ 00000118 0070C0E5 STRB R7,[R0, #+0] 1174 path[i] = 0; \ 0000011C 0150C0E5 STRB R5,[R0, #+1] 1175 name[0] = '\\'; \ 00000120 4874CDE5 STRB R7,[SP, #+1096] 1176 strcpy(name + 1, de.file_name); \ 00000124 B9108DE2 ADD R1,SP,#+185 \ 00000128 49008DE2 ADD R0,SP,#+73 \ 0000012C 400E80E2 ADD R0,R0,#+1024 \ 00000130 1A0000EF SWI +26 1177 AddToFList(path, name, IS_FOLDER); \ 00000134 0120A0E3 MOV R2,#+1 \ 00000138 48108DE2 ADD R1,SP,#+72 \ 0000013C 401E81E2 ADD R1,R1,#+1024 \ 00000140 030000EA B ??FindFiles_7 1178 n++; 1179 } 1180 else { 1181 if (type != 0) { \ ??FindFiles_6: \ 00000144 000054E3 CMP R4,#+0 \ 00000148 0400000A BEQ ??FindFiles_8 1182 AddToFList(path,de.file_name, IS_FILE); \ 0000014C 0220A0E3 MOV R2,#+2 \ 00000150 B9108DE2 ADD R1,SP,#+185 \ ??FindFiles_7: \ 00000154 D20F8DE2 ADD R0,SP,#+840 \ 00000158 ........ BL AddToFList 1183 n++; \ 0000015C 0860A0E1 MOV R6,R8 1184 } 1185 } 1186 } 1187 while(FindNextFile(&de, &err)); \ ??FindFiles_8: \ 00000160 0D10A0E1 MOV R1,SP \ 00000164 04008DE2 ADD R0,SP,#+4 \ 00000168 6C0000EF SWI +108 \ 0000016C 000050E3 CMP R0,#+0 \ 00000170 D4FFFF1A BNE ??FindFiles_5 1188 } 1189 FindClose(&de, &err); \ ??FindFiles_4: \ 00000174 0D10A0E1 MOV R1,SP \ 00000178 04008DE2 ADD R0,SP,#+4 \ 0000017C 6D0000EF SWI +109 1190 return n; \ 00000180 0600A0E1 MOV R0,R6 \ 00000184 C8D08DE2 ADD SP,SP,#+200 \ 00000188 40DE8DE2 ADD SP,SP,#+1024 \ 0000018C F083BDE8 POP {R4-R9,PC} ;; return \ ??FindFiles_2: \ 00000190 ........ DC32 back 1191 } 1192 \ In segment CODE, align 4, keep-with-next 1193 FLIST *FindFLISTtByNS(int *i, int si) { 1194 FLIST *fl; 1195 fl = (FLIST *)fltop; \ FindFLISTtByNS: \ 00000000 ........ LDR R2,??DataTable35 ;; fltop \ 00000004 010000EA B ??FindFLISTtByNS_0 1196 while (fl) { 1197 if (fl->is_folder == si) { 1198 if (!(*i)) return (fl); 1199 (*i)--; \ ??FindFLISTtByNS_1: \ 00000008 013043E2 SUB R3,R3,#+1 \ 0000000C 003080E5 STR R3,[R0, #+0] 1200 } 1201 fl = fl->next; \ ??FindFLISTtByNS_0: \ 00000010 002092E5 LDR R2,[R2, #+0] \ 00000014 000052E3 CMP R2,#+0 \ 00000018 0700000A BEQ ??FindFLISTtByNS_2 \ 0000001C 043092E5 LDR R3,[R2, #+4] \ 00000020 010053E1 CMP R3,R1 \ 00000024 F9FFFF1A BNE ??FindFLISTtByNS_0 \ 00000028 003090E5 LDR R3,[R0, #+0] \ 0000002C 000053E3 CMP R3,#+0 \ 00000030 F4FFFF1A BNE ??FindFLISTtByNS_1 \ 00000034 0200A0E1 MOV R0,R2 \ 00000038 1EFF2FE1 BX LR 1202 } 1203 return fl; \ ??FindFLISTtByNS_2: \ 0000003C 0000A0E3 MOV R0,#+0 \ 00000040 1EFF2FE1 BX LR ;; return 1204 } 1205 \ In segment CODE, align 4, keep-with-next 1206 FLIST *FindFLISTtByN(int n) { \ FindFLISTtByN: \ 00000000 01402DE9 PUSH {R0,LR} 1207 1208 FLIST *fl; 1209 fl = FindFLISTtByNS(&n, IS_BACK); if ((!n) && (fl)) return(fl); \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 0D00A0E1 MOV R0,SP \ 0000000C ........ BL FindFLISTtByNS \ 00000010 00109DE5 LDR R1,[SP, #+0] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0100001A BNE ??FindFLISTtByN_0 \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 0280BD18 POPNE {R1,PC} 1210 fl = FindFLISTtByNS(&n, IS_FOLDER); if ((!n) && (fl)) return(fl); \ ??FindFLISTtByN_0: \ 00000024 0110A0E3 MOV R1,#+1 \ 00000028 0D00A0E1 MOV R0,SP \ 0000002C ........ BL FindFLISTtByNS \ 00000030 00109DE5 LDR R1,[SP, #+0] \ 00000034 000051E3 CMP R1,#+0 \ 00000038 0100001A BNE ??FindFLISTtByN_1 \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 0280BD18 POPNE {R1,PC} 1211 fl = FindFLISTtByNS(&n, IS_FILE); if ((!n) && (fl)) return(fl); \ ??FindFLISTtByN_1: \ 00000044 0210A0E3 MOV R1,#+2 \ 00000048 0D00A0E1 MOV R0,SP \ 0000004C ........ BL FindFLISTtByNS \ 00000050 0280BDE8 POP {R1,PC} 1212 return fl; 1213 } 1214 \ In segment CODE, align 4, keep-with-next 1215 void SavePath(FLIST *fl) { \ SavePath: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 1216 1217 if (loadFile(fl->fullname)) { \ 00000008 080094E5 LDR R0,[R4, #+8] \ 0000000C ........ BL loadFile \ 00000010 000050E3 CMP R0,#+0 \ 00000014 0300000A BEQ ??SavePath_0 1218 //ShowMSG(1, (int)"File loaded!"); 1219 strcpy(procfile, fl->fullname); \ 00000018 081094E5 LDR R1,[R4, #+8] \ 0000001C 14009FE5 LDR R0,??SavePath_1 ;; inp_desc + 280 \ 00000020 1A0000EF SWI +26 \ 00000024 1080BDE8 POP {R4,PC} 1220 } 1221 else { 1222 ShowMSG(1, (int)"File failed!"); \ ??SavePath_0: \ 00000028 ........ LDR R1,??DataTable36 ;; `?` \ 0000002C 0100A0E3 MOV R0,#+1 \ 00000030 480100EF SWI +328 1223 } 1224 /* 1225 EDITCONTROL ec; 1226 EDIT_ExtractFocusedControl(ed_gui,&ec); 1227 WSHDR *ws=AllocWS(ec.maxlen); 1228 str_2ws(ws,fl->fullname,ec.maxlen); 1229 EDIT_SetTextToFocused(ed_gui,ws); 1230 FreeWS(ws);*/ 1231 } \ 00000034 1080BDE8 POP {R4,PC} ;; return \ ??SavePath_1: \ 00000038 ........ DC32 inp_desc + 280 1232 \ In segment CODE, align 4, keep-with-next 1233 int filelist_menu_onkey(void *data, GUI_MSG *msg) { \ filelist_menu_onkey: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0160A0E1 MOV R6,R1 1234 1235 FLIST *fl; 1236 int i, n; 1237 i = GetCurMenuItem(data); \ 0000000C 8F0100EF SWI +399 1238 fl = FindFLISTtByN(i); \ 00000010 ........ BL FindFLISTtByN \ 00000014 0050A0E1 MOV R5,R0 1239 1240 if (msg->keys == 0x3D || msg->keys == 0x18) { \ 00000018 F200D6E1 LDRSH R0,[R6, #+2] \ 0000001C 3D0050E3 CMP R0,#+61 \ 00000020 18005013 CMPNE R0,#+24 \ 00000024 2800001A BNE ??filelist_menu_onkey_0 1241 1242 if (fl) { \ 00000028 000055E3 CMP R5,#+0 \ 0000002C 2000000A BEQ ??filelist_menu_onkey_1 1243 if (fl->is_folder == IS_FOLDER || fl->is_folder == IS_BACK) { \ 00000030 040095E5 LDR R0,[R5, #+4] \ 00000034 010050E3 CMP R0,#+1 \ 00000038 00005013 CMPNE R0,#+0 \ 0000003C 1E00001A BNE ??filelist_menu_onkey_2 1244 int len; 1245 if (strcmp(fl->fullname, "ROOT")) { \ 00000040 080095E5 LDR R0,[R5, #+8] \ 00000044 88109FE5 LDR R1,??filelist_menu_onkey_3 ;; back + 4 \ 00000048 190000EF SWI +25 \ 0000004C 000050E3 CMP R0,#+0 \ 00000050 0F00000A BEQ ??filelist_menu_onkey_4 1246 strncpy(header, fl->fullname, sizeof (header) - 1); \ 00000054 ........ LDR R6,??DataTable37 ;; inp_desc \ 00000058 081095E5 LDR R1,[R5, #+8] \ 0000005C 7F20A0E3 MOV R2,#+127 \ 00000060 980086E2 ADD R0,R6,#+152 \ 00000064 160100EF SWI +278 1247 len = strlen(fl->fullname); \ 00000068 080095E5 LDR R0,[R5, #+8] \ 0000006C 1B0000EF SWI +27 1248 header[len > sizeof(header) - 1 ? sizeof (header) - 1 : len] = 0; \ 00000070 800050E3 CMP R0,#+128 \ 00000074 7F00A023 MOVCS R0,#+127 \ 00000078 060080E0 ADD R0,R0,R6 \ 0000007C 0010A0E3 MOV R1,#+0 \ 00000080 9810C0E5 STRB R1,[R0, #+152] 1249 n = FindFiles(fl->fullname, 1); \ 00000084 080095E5 LDR R0,[R5, #+8] \ 00000088 0110A0E3 MOV R1,#+1 \ 0000008C ........ BL FindFiles \ 00000090 000000EA B ??filelist_menu_onkey_5 1250 } 1251 else { 1252 int CreateRootMenu(); 1253 n = CreateRootMenu(); \ ??filelist_menu_onkey_4: \ 00000094 ........ BL CreateRootMenu \ ??filelist_menu_onkey_5: \ 00000098 0010A0E1 MOV R1,R0 1254 } 1255 Menu_SetItemCountDyn(data, n); \ 0000009C 0400A0E1 MOV R0,R4 \ 000000A0 E60100EF SWI +486 1256 SetCursorToMenuItem(data, 0); \ 000000A4 0010A0E3 MOV R1,#+0 \ 000000A8 0400A0E1 MOV R0,R4 \ 000000AC C40100EF SWI +452 1257 RefreshGUI(); \ 000000B0 960100EF SWI +406 1258 } 1259 else { 1260 SavePath(fl); 1261 return 1; 1262 } 1263 } 1264 // GeneralFunc_F1(1); 1265 return -1; \ ??filelist_menu_onkey_1: \ 000000B4 0000E0E3 MVN R0,#+0 \ 000000B8 7080BDE8 POP {R4-R6,PC} \ ??filelist_menu_onkey_2: \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 ........ BL SavePath \ 000000C4 0100A0E3 MOV R0,#+1 \ 000000C8 7080BDE8 POP {R4-R6,PC} 1266 } 1267 return 0; \ ??filelist_menu_onkey_0: \ 000000CC 0000A0E3 MOV R0,#+0 \ 000000D0 7080BDE8 POP {R4-R6,PC} ;; return \ ??filelist_menu_onkey_3: \ 000000D4 ........ DC32 back + 4 1268 } 1269 \ In segment CODE, align 4, keep-with-next 1270 void filelist_menu_ghook(void *data, int cmd) { \ filelist_menu_ghook: \ 00000000 00402DE9 PUSH {LR} 1271 if (cmd == 3) { \ 00000004 030051E3 CMP R1,#+3 \ 00000008 0100001A BNE ??filelist_menu_ghook_0 1272 Free_FLIST(); \ 0000000C 0040BDE8 POP {LR} ;; Pop \ 00000010 ........ B Free_FLIST ;; tailcall 1273 } 1274 if (cmd == 0x0A) { \ ??filelist_menu_ghook_0: \ 00000014 0A0051E3 CMP R1,#+10 \ 00000018 0080BD18 POPNE {PC} 1275 DisableIDLETMR(); \ 0000001C 7F0100EF SWI +383 1276 } 1277 } \ 00000020 0080BDE8 POP {PC} ;; return 1278 \ In segment CODE, align 4, keep-with-next 1279 void filelist_menu_iconhndl(void *data, int curitem, void *user_pointer) { \ filelist_menu_iconhndl: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 1280 1281 FLIST *fl; 1282 WSHDR *ws; 1283 void *item = AllocMenuItem(data); \ 0000000C 970100EF SWI +407 \ 00000010 0060A0E1 MOV R6,R0 1284 int len; 1285 fl = FindFLISTtByN(curitem); \ 00000014 0500A0E1 MOV R0,R5 \ 00000018 ........ BL FindFLISTtByN \ 0000001C 0070B0E1 MOVS R7,R0 1286 if (fl) { \ 00000020 1D00000A BEQ ??filelist_menu_iconhndl_0 1287 len = strlen(fl->name); \ 00000024 0C0097E5 LDR R0,[R7, #+12] \ 00000028 1B0000EF SWI +27 \ 0000002C 0080A0E1 MOV R8,R0 1288 ws = AllocMenuWS(data, len + 4); \ 00000030 041088E2 ADD R1,R8,#+4 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 980100EF SWI +408 \ 0000003C 0090A0E1 MOV R9,R0 1289 if (fl->is_folder == IS_BACK || fl->is_folder == IS_FOLDER) { \ 00000040 040097E5 LDR R0,[R7, #+4] \ 00000044 000050E3 CMP R0,#+0 \ 00000048 01005013 CMPNE R0,#+1 \ 0000004C 0D00001A BNE ??filelist_menu_iconhndl_1 1290 str_2ws(ws, fl->name,len); \ 00000050 0C1097E5 LDR R1,[R7, #+12] \ 00000054 0820A0E1 MOV R2,R8 \ 00000058 0900A0E1 MOV R0,R9 \ 0000005C 6C0100EF SWI +364 1291 wsInsertChar(ws, 0x0002, 1); \ 00000060 0120A0E3 MOV R2,#+1 \ 00000064 0210A0E3 MOV R1,#+2 \ 00000068 0900A0E1 MOV R0,R9 \ 0000006C 1D0000EF SWI +29 1292 wsInsertChar(ws, 0xE008, 1); \ 00000070 0120A0E3 MOV R2,#+1 \ 00000074 0810A0E3 MOV R1,#+8 \ 00000078 E01C81E3 ORR R1,R1,#0xE000 \ 0000007C 0900A0E1 MOV R0,R9 \ 00000080 1D0000EF SWI +29 \ 00000084 0A0000EA B ??filelist_menu_iconhndl_2 1293 } 1294 else { 1295 str_2ws(ws, fl->name, len); \ ??filelist_menu_iconhndl_1: \ 00000088 0C1097E5 LDR R1,[R7, #+12] \ 0000008C 0820A0E1 MOV R2,R8 \ 00000090 0900A0E1 MOV R0,R9 \ 00000094 6C0100EF SWI +364 \ 00000098 050000EA B ??filelist_menu_iconhndl_2 1296 } 1297 } 1298 else { 1299 ws = AllocMenuWS(data, 10); \ ??filelist_menu_iconhndl_0: \ 0000009C 0A10A0E3 MOV R1,#+10 \ 000000A0 0400A0E1 MOV R0,R4 \ 000000A4 980100EF SWI +408 \ 000000A8 0090A0E1 MOV R9,R0 1300 wsprintf(ws, "?"); \ 000000AC 061F8FE2 ADR R1,??filelist_menu_iconhndl_3 ;; "\?" \ 000000B0 240100EF SWI +292 1301 } 1302 SetMenuItemText(data, item, ws, curitem); \ ??filelist_menu_iconhndl_2: \ 000000B4 0530A0E1 MOV R3,R5 \ 000000B8 0920A0E1 MOV R2,R9 \ 000000BC 0610A0E1 MOV R1,R6 \ 000000C0 0400A0E1 MOV R0,R4 \ 000000C4 9A0100EF SWI +410 1303 } \ 000000C8 F083BDE8 POP {R4-R9,PC} ;; return \ ??filelist_menu_iconhndl_3: \ 000000CC 3F000000 DC8 "\?",+0,+0 1304 1305 HEADER_DESC filelist_HDR = {0, 0, 0, 0, NULL, (int)header, LGP_NULL}; 1306 1307 MENU_DESC filelist_STRUCT = { 1308 1309 8,filelist_menu_onkey,filelist_menu_ghook, NULL, 1310 menusoftkeys, 1311 &menu_skt, 1312 0x10, 1313 filelist_menu_iconhndl, 1314 NULL, //Items 1315 NULL, //Procs 1316 0 //n 1317 }; 1318 \ In segment CODE, align 4, keep-with-next 1319 int CreateRootMenu() { \ CreateRootMenu: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 24D04DE2 SUB SP,SP,#+36 1320 char path[32]; 1321 unsigned int err; 1322 int n = 0; \ 00000008 0040A0E3 MOV R4,#+0 1323 Free_FLIST(); 1324 for (int i = 0; i != 5; i++) { \ 0000000C 0050A0E3 MOV R5,#+0 \ 00000010 ........ BL Free_FLIST \ 00000014 5C60A0E3 MOV R6,#+92 \ 00000018 3A70A0E3 MOV R7,#+58 1325 path[0] = i+'0'; \ ??CreateRootMenu_0: \ 0000001C 301085E2 ADD R1,R5,#+48 \ 00000020 0410CDE5 STRB R1,[SP, #+4] 1326 path[1] = ':'; \ 00000024 0570CDE5 STRB R7,[SP, #+5] 1327 path[2] = '\\'; \ 00000028 0660CDE5 STRB R6,[SP, #+6] 1328 path[3] = 0; \ 0000002C 0010A0E3 MOV R1,#+0 \ 00000030 0710CDE5 STRB R1,[SP, #+7] 1329 if (isdir(path,&err)) { \ 00000034 0D10A0E1 MOV R1,SP \ 00000038 04008DE2 ADD R0,SP,#+4 \ 0000003C 910000EF SWI +145 \ 00000040 000050E3 CMP R0,#+0 \ 00000044 0400000A BEQ ??CreateRootMenu_1 1330 AddToFList(path, path, IS_FOLDER); \ 00000048 0120A0E3 MOV R2,#+1 \ 0000004C 04108DE2 ADD R1,SP,#+4 \ 00000050 04008DE2 ADD R0,SP,#+4 \ 00000054 ........ BL AddToFList 1331 n++; \ 00000058 014084E2 ADD R4,R4,#+1 1332 } 1333 } \ ??CreateRootMenu_1: \ 0000005C 015085E2 ADD R5,R5,#+1 \ 00000060 050055E3 CMP R5,#+5 \ 00000064 ECFFFF1A BNE ??CreateRootMenu_0 1334 strcpy(header, "Root"); \ 00000068 10109FE5 LDR R1,??CreateRootMenu_2 ;; `?` \ 0000006C 10009FE5 LDR R0,??CreateRootMenu_2+0x4 ;; inp_desc + 152 \ 00000070 1A0000EF SWI +26 1335 return (n); \ 00000074 0400A0E1 MOV R0,R4 \ 00000078 24D08DE2 ADD SP,SP,#+36 \ 0000007C F080BDE8 POP {R4-R7,PC} ;; return \ ??CreateRootMenu_2: \ 00000080 ........ DC32 `?` \ 00000084 ........ DC32 inp_desc + 152 1336 } 1337 1338 \ In segment CODE, align 4, keep-with-next 1339 void open_select_file_gui(int type) { \ open_select_file_gui: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 1340 char *s, *rev=0; 1341 int n, c, len; 1342 1343 s = procfile; \ 00000004 ........ LDR R4,??DataTable49 ;; inp_desc \ 00000008 0050A0E1 MOV R5,R0 \ 0000000C 0060A0E3 MOV R6,#+0 \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 467FA0E3 MOV R7,#+280 \ 00000018 041087E0 ADD R1,R7,R4 \ 0000001C 040000EA B ??open_select_file_gui_0 1344 while ((c = *s++)) { 1345 if (c == '\\' && *s != '\0') rev = s; \ ??open_select_file_gui_1: \ 00000020 5C0052E3 CMP R2,#+92 \ 00000024 0200001A BNE ??open_select_file_gui_0 \ 00000028 0020D1E5 LDRB R2,[R1, #+0] \ 0000002C 000052E3 CMP R2,#+0 \ 00000030 0100A011 MOVNE R0,R1 1346 } \ ??open_select_file_gui_0: \ 00000034 ........ LDRB R2,[R1], #+1 \ 00000038 000052E3 CMP R2,#+0 \ 0000003C F7FFFF1A BNE ??open_select_file_gui_1 1347 if (!rev) \ 00000040 000050E3 CMP R0,#+0 \ 00000044 0100001A BNE ??open_select_file_gui_2 1348 n = CreateRootMenu(); \ 00000048 ........ BL CreateRootMenu \ 0000004C 0D0000EA B ??open_select_file_gui_3 1349 else { 1350 *rev = 0; \ ??open_select_file_gui_2: \ 00000050 0060C0E5 STRB R6,[R0, #+0] 1351 strncpy(header, procfile, sizeof (header) - 1); \ 00000054 7F20A0E3 MOV R2,#+127 \ 00000058 041087E0 ADD R1,R7,R4 \ 0000005C 980084E2 ADD R0,R4,#+152 \ 00000060 160100EF SWI +278 1352 len = strlen(procfile); \ 00000064 040087E0 ADD R0,R7,R4 \ 00000068 1B0000EF SWI +27 1353 header[len > sizeof (header) - 1 ? sizeof (header) - 1 : len] = 0; \ 0000006C 800050E3 CMP R0,#+128 \ 00000070 7F00A023 MOVCS R0,#+127 \ 00000074 040080E0 ADD R0,R0,R4 \ 00000078 9860C0E5 STRB R6,[R0, #+152] 1354 n = FindFiles(procfile, type); \ 0000007C 0510A0E1 MOV R1,R5 \ 00000080 040087E0 ADD R0,R7,R4 \ 00000084 ........ BL FindFiles \ ??open_select_file_gui_3: \ 00000088 0050A0E1 MOV R5,R0 1355 } 1356 patch_header(&filelist_HDR); \ 0000008C 6C6FA0E3 MOV R6,#+432 \ 00000090 040086E0 ADD R0,R6,R4 \ 00000094 ........ _BLF patch_header,??patch_header??rA 1357 CreateMenu(0, 0, &filelist_STRUCT, &filelist_HDR, 0, n, 0, 0); \ 00000098 0000A0E3 MOV R0,#+0 \ 0000009C 01002DE9 PUSH {R0} \ 000000A0 01002DE9 PUSH {R0} \ 000000A4 20002DE9 PUSH {R5} \ 000000A8 01002DE9 PUSH {R0} \ 000000AC 043086E0 ADD R3,R6,R4 \ 000000B0 712F84E2 ADD R2,R4,#+452 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 520100EF SWI +338 1358 } \ 000000BC FF80BDE8 POP {R0-R7,PC} ;; return 1359 /* 1360 =============================== 1361 end 1362 =============================== 1363 */ 1364 1365 /* 1366 =============================== 1367 书签列表 1368 =============================== 1369 */ 1370 typedef struct BMKLIST { 1371 struct BMKLIST *next; 1372 struct BMKLIST *prior; 1373 int address; 1374 WSHDR *preview; 1375 } BMKLIST; 1376 1377 BMKLIST *bltop = NULL; \ In segment CODE, align 4, keep-with-next 1378 void Free_BLIST(void) { //清空列表 \ Free_BLIST: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 ........ LDR R4,??DataTable49 ;; inp_desc \ 00000008 940094E5 LDR R0,[R4, #+148] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 3080BD08 POPEQ {R4,R5,PC} 1379 BMKLIST *bl; 1380 while (bltop) { 1381 bl = bltop; \ ??Free_BLIST_0: \ 00000014 945094E5 LDR R5,[R4, #+148] 1382 bltop = bltop->next; \ 00000018 000095E5 LDR R0,[R5, #+0] \ 0000001C 940084E5 STR R0,[R4, #+148] 1383 FreeWS(bl->preview); \ 00000020 0C0095E5 LDR R0,[R5, #+12] \ 00000024 290100EF SWI +297 1384 mfree(bl); \ 00000028 0500A0E1 MOV R0,R5 \ 0000002C 150000EF SWI +21 1385 } \ 00000030 940094E5 LDR R0,[R4, #+148] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 F5FFFF1A BNE ??Free_BLIST_0 1386 } \ 0000003C 3080BDE8 POP {R4,R5,PC} ;; return 1387 \ In segment CODE, align 4, keep-with-next 1388 void Add_Blist_Item(int offset) { \ Add_Blist_Item: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 1389 1390 int len = 100; 1391 WSHDR *ws; 1392 BMKLIST* bl = bltop; \ 00000004 ........ LDR R5,??DataTable49 ;; inp_desc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 947095E5 LDR R7,[R5, #+148] 1393 if (!bl) { \ 00000010 0060A0E3 MOV R6,#+0 \ 00000014 000057E3 CMP R7,#+0 \ 00000018 0600001A BNE ??Add_Blist_Item_0 1394 bltop = bl = malloc(sizeof (BMKLIST)); \ 0000001C 1000A0E3 MOV R0,#+16 \ 00000020 140000EF SWI +20 \ 00000024 0070A0E1 MOV R7,R0 \ 00000028 947085E5 STR R7,[R5, #+148] 1395 bltop->prior = NULL; \ 0000002C 046080E5 STR R6,[R0, #+4] \ 00000030 080000EA B ??Add_Blist_Item_1 1396 } 1397 else { 1398 while (bl->next) bl = bl->next; \ ??Add_Blist_Item_2: \ 00000034 0070A0E1 MOV R7,R0 \ ??Add_Blist_Item_0: \ 00000038 000097E5 LDR R0,[R7, #+0] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 FBFFFF1A BNE ??Add_Blist_Item_2 1399 bl->next = malloc(sizeof (BMKLIST)); \ 00000044 1000A0E3 MOV R0,#+16 \ 00000048 140000EF SWI +20 \ 0000004C 000087E5 STR R0,[R7, #+0] 1400 bl->next->prior = bl; \ 00000050 047080E5 STR R7,[R0, #+4] 1401 bl = bl->next; \ 00000054 007097E5 LDR R7,[R7, #+0] 1402 } 1403 ws = AllocWS(len); \ ??Add_Blist_Item_1: \ 00000058 6400A0E3 MOV R0,#+100 \ 0000005C 250100EF SWI +293 \ 00000060 0080A0E1 MOV R8,R0 1404 char *tbuff = malloc(len); \ 00000064 6400A0E3 MOV R0,#+100 \ 00000068 140000EF SWI +20 1405 DataIndex *block = curblock; \ 0000006C 44A095E5 LDR R10,[R5, #+68] 1406 int view = viewpos; \ 00000070 88B095E5 LDR R11,[R5, #+136] \ 00000074 0090A0E1 MOV R9,R0 1407 gotoPos(offset); \ 00000078 0400A0E1 MOV R0,R4 \ 0000007C ........ BL gotoPos 1408 str2ws_unicode(ws, buff + viewpos, 20); \ 00000080 880095E5 LDR R0,[R5, #+136] \ 00000084 481095E5 LDR R1,[R5, #+72] \ 00000088 1420A0E3 MOV R2,#+20 \ 0000008C 011080E0 ADD R1,R0,R1 \ 00000090 0800A0E1 MOV R0,R8 \ 00000094 ........ _BLF str2ws_unicode,??str2ws_unicode??rA 1409 bl->preview = ws; \ 00000098 0C8087E5 STR R8,[R7, #+12] 1410 bl->next = NULL; \ 0000009C 006087E5 STR R6,[R7, #+0] 1411 bl->address = offset; \ 000000A0 084087E5 STR R4,[R7, #+8] 1412 mfree(tbuff); \ 000000A4 0900A0E1 MOV R0,R9 \ 000000A8 150000EF SWI +21 1413 curblock = block; \ 000000AC 44A085E5 STR R10,[R5, #+68] 1414 viewpos = view; \ 000000B0 88B085E5 STR R11,[R5, #+136] 1415 } \ 000000B4 F08FBDE8 POP {R4-R11,PC} ;; return 1416 \ In segment CODE, align 4, keep-with-next 1417 int Fill_BLIST() { \ Fill_BLIST: \ 00000000 10402DE9 PUSH {R4,LR} 1418 for (int i = 2; i < bmknum; i++) { \ 00000004 0240A0E3 MOV R4,#+2 \ 00000008 030000EA B ??Fill_BLIST_0 1419 Add_Blist_Item(bookmark[i]); \ ??Fill_BLIST_1: \ 0000000C 680091E5 LDR R0,[R1, #+104] \ 00000010 040190E7 LDR R0,[R0, +R4, LSL #+2] 1420 } \ 00000014 014084E2 ADD R4,R4,#+1 \ 00000018 ........ BL Add_Blist_Item \ ??Fill_BLIST_0: \ 0000001C ........ LDR R1,??DataTable49 ;; inp_desc \ 00000020 6C0091E5 LDR R0,[R1, #+108] \ 00000024 000054E1 CMP R4,R0 \ 00000028 F7FFFFBA BLT ??Fill_BLIST_1 1421 return bmknum; \ 0000002C 1080BDE8 POP {R4,PC} ;; return 1422 } 1423 \ In segment CODE, align 4, keep-with-next 1424 BMKLIST *FindBLISTtByN(int n) { 1425 BMKLIST *bl = bltop; \ FindBLISTtByN: \ 00000000 24109FE5 LDR R1,??FindBLISTtByN_0 ;; inp_desc + 148 1426 int i = 0; \ 00000004 0020A0E3 MOV R2,#+0 \ 00000008 001091E5 LDR R1,[R1, #+0] \ 0000000C 010000EA B ??FindBLISTtByN_1 1427 while(bl && (i != n)) { 1428 bl = bl->next; \ ??FindBLISTtByN_2: \ 00000010 001091E5 LDR R1,[R1, #+0] 1429 i++; \ 00000014 012082E2 ADD R2,R2,#+1 1430 } \ ??FindBLISTtByN_1: \ 00000018 000051E3 CMP R1,#+0 \ 0000001C 00005211 CMPNE R2,R0 \ 00000020 FAFFFF1A BNE ??FindBLISTtByN_2 1431 return bl; \ 00000024 0100A0E1 MOV R0,R1 \ 00000028 1EFF2FE1 BX LR ;; return \ ??FindBLISTtByN_0: \ 0000002C ........ DC32 inp_desc + 148 1432 } 1433 \ In segment CODE, align 4, keep-with-next 1434 int bmklist_menu_onkey(void *data, GUI_MSG *msg) { \ bmklist_menu_onkey: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 1435 int keycode = msg->keys; \ 00000004 F270D1E1 LDRSH R7,[R1, #+2] \ 00000008 0040A0E1 MOV R4,R0 1436 int i = GetCurMenuItem(data); \ 0000000C 8F0100EF SWI +399 \ 00000010 0080A0E1 MOV R8,R0 1437 BMKLIST* bl; 1438 bl = FindBLISTtByN(i); \ 00000014 ........ BL FindBLISTtByN \ 00000018 0060A0E1 MOV R6,R0 1439 if (keycode == 0x3D || keycode == 0x18) { \ 0000001C 3D0057E3 CMP R7,#+61 \ 00000020 18005713 CMPNE R7,#+24 \ 00000024 0500001A BNE ??bmklist_menu_onkey_0 1440 gotoPos(bl->address); \ 00000028 080096E5 LDR R0,[R6, #+8] \ 0000002C ........ BL gotoPos 1441 GeneralFuncF1(1); \ 00000030 0100A0E3 MOV R0,#+1 \ 00000034 3B0100EF SWI +315 \ 00000038 0000A0E3 MOV R0,#+0 \ 0000003C F081BDE8 POP {R4-R8,PC} 1442 } 1443 else if (keycode == 0x14) { //'*' 添加 \ ??bmklist_menu_onkey_0: \ 00000040 ........ LDR R5,??DataTable49 ;; inp_desc \ 00000044 140057E3 CMP R7,#+20 \ 00000048 0800001A BNE ??bmklist_menu_onkey_1 1444 if (add2bmk()) { \ 0000004C ........ BL add2bmk \ 00000050 000050E3 CMP R0,#+0 \ 00000054 F081BD08 POPEQ {R4-R8,PC} 1445 Add_Blist_Item(curblock->offset + viewpos); \ 00000058 440095E5 LDR R0,[R5, #+68] \ 0000005C 881095E5 LDR R1,[R5, #+136] \ 00000060 080090E5 LDR R0,[R0, #+8] \ 00000064 000081E0 ADD R0,R1,R0 \ 00000068 ........ BL Add_Blist_Item 1446 Menu_SetItemCountDyn(data, bmknum - 2); \ 0000006C 100000EA B ??bmklist_menu_onkey_2 1447 SetCursorToMenuItem(data, 0); 1448 } 1449 } 1450 else if (keycode == 0x15) { //'#' 删除 \ ??bmklist_menu_onkey_1: \ 00000070 150057E3 CMP R7,#+21 \ 00000074 1500001A BNE ??bmklist_menu_onkey_3 1451 if (deletebmk(i + 2)) { \ 00000078 020088E2 ADD R0,R8,#+2 \ 0000007C ........ BL deletebmk \ 00000080 000050E3 CMP R0,#+0 \ 00000084 F081BD08 POPEQ {R4-R8,PC} 1452 if (bl->prior) bl->prior->next = bl->next; \ 00000088 040096E5 LDR R0,[R6, #+4] \ 0000008C 001096E5 LDR R1,[R6, #+0] \ 00000090 000050E3 CMP R0,#+0 \ 00000094 00108015 STRNE R1,[R0, #+0] 1453 else bltop = bl->next; \ 00000098 94108505 STREQ R1,[R5, #+148] 1454 if (bl->next) bl->next->prior = bl->prior; \ 0000009C 000096E5 LDR R0,[R6, #+0] \ 000000A0 000050E3 CMP R0,#+0 \ 000000A4 04109615 LDRNE R1,[R6, #+4] \ 000000A8 04108015 STRNE R1,[R0, #+4] 1455 mfree(bl); \ 000000AC 0600A0E1 MOV R0,R6 \ 000000B0 150000EF SWI +21 1456 Menu_SetItemCountDyn(data, bmknum - 2); \ ??bmklist_menu_onkey_2: \ 000000B4 6C0095E5 LDR R0,[R5, #+108] \ 000000B8 021040E2 SUB R1,R0,#+2 \ 000000BC 0400A0E1 MOV R0,R4 \ 000000C0 E60100EF SWI +486 1457 SetCursorToMenuItem(data, 0); \ 000000C4 0010A0E3 MOV R1,#+0 \ 000000C8 0400A0E1 MOV R0,R4 \ 000000CC C40100EF SWI +452 1458 } 1459 } 1460 return 0; \ ??bmklist_menu_onkey_3: \ 000000D0 0000A0E3 MOV R0,#+0 \ 000000D4 F081BDE8 POP {R4-R8,PC} ;; return 1461 } 1462 \ In segment CODE, align 4, keep-with-next 1463 void bmklist_menu_ghook(void *data, int cmd) { \ bmklist_menu_ghook: \ 00000000 00402DE9 PUSH {LR} 1464 if (cmd == 3) { \ 00000004 030051E3 CMP R1,#+3 \ 00000008 0080BD18 POPNE {PC} 1465 Free_BLIST(); \ 0000000C ........ BL Free_BLIST 1466 //loadBuffer(curblock->offset, curblock->alen); 1467 } 1468 } \ 00000010 0080BDE8 POP {PC} ;; return 1469 \ In segment CODE, align 4, keep-with-next 1470 void bmklist_menu_iconhndl(void *data, int curitem, void *unk) { \ bmklist_menu_iconhndl: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 1471 BMKLIST *t; 1472 WSHDR *ws; 1473 void *item = AllocMenuItem(data); \ 0000000C 970100EF SWI +407 \ 00000010 0060A0E1 MOV R6,R0 1474 t = FindBLISTtByN(curitem); \ 00000014 0500A0E1 MOV R0,R5 \ 00000018 ........ BL FindBLISTtByN \ 0000001C 0070B0E1 MOVS R7,R0 1475 if (t) { \ 00000020 0800000A BEQ ??bmklist_menu_iconhndl_0 1476 ws = AllocMenuWS(data, t->preview->wsbody[0]); \ 00000024 0C0097E5 LDR R0,[R7, #+12] \ 00000028 000090E5 LDR R0,[R0, #+0] \ 0000002C B010D0E1 LDRH R1,[R0, #+0] \ 00000030 0400A0E1 MOV R0,R4 \ 00000034 980100EF SWI +408 1477 wstrcpy(ws, t->preview); \ 00000038 0C1097E5 LDR R1,[R7, #+12] \ 0000003C 0080A0E1 MOV R8,R0 \ 00000040 1F0100EF SWI +287 \ 00000044 050000EA B ??bmklist_menu_iconhndl_1 1478 } 1479 else { 1480 ws = AllocMenuWS(data, 10); \ ??bmklist_menu_iconhndl_0: \ 00000048 0A10A0E3 MOV R1,#+10 \ 0000004C 0400A0E1 MOV R0,R4 \ 00000050 980100EF SWI +408 1481 wsprintf(ws, "error"); \ 00000054 2C109FE5 LDR R1,??bmklist_menu_iconhndl_2 ;; `?` \ 00000058 0080A0E1 MOV R8,R0 \ 0000005C 240100EF SWI +292 1482 } 1483 //SetMenuItemIconArray(data, item, S_ICONS); 1484 SetMenuItemText(data, item, ws, curitem); \ ??bmklist_menu_iconhndl_1: \ 00000060 0530A0E1 MOV R3,R5 \ 00000064 0820A0E1 MOV R2,R8 \ 00000068 0610A0E1 MOV R1,R6 \ 0000006C 0400A0E1 MOV R0,R4 \ 00000070 9A0100EF SWI +410 1485 SetMenuItemIcon(data, curitem, 0); \ 00000074 0020A0E3 MOV R2,#+0 \ 00000078 0510A0E1 MOV R1,R5 \ 0000007C 0400A0E1 MOV R0,R4 \ 00000080 950100EF SWI +405 1486 } \ 00000084 F081BDE8 POP {R4-R8,PC} ;; return \ ??bmklist_menu_iconhndl_2: \ 00000088 ........ DC32 `?` \ In segment DATA_I, align 4, align-sorted \ inp_desc: \ 00000000 DS8 56 \ 00000038 REQUIRE `?` \ showinfo: \ 00000038 DS8 2 \ 0000003A REQUIRE `?` \ 0000003A DS8 2 \ Quit_Required: \ 0000003C DS8 4 \ 00000040 REQUIRE `?` \ fileindex: \ 00000040 DS8 4 \ 00000044 REQUIRE `?` \ curblock: \ 00000044 DS8 4 \ 00000048 REQUIRE `?` \ buff: \ 00000048 DS8 4 \ 0000004C REQUIRE `?` \ codetype: \ 0000004C DS8 4 \ 00000050 REQUIRE `?` \ buffloaded: \ 00000050 DS8 4 \ 00000054 REQUIRE `?` \ fd: \ 00000054 DS8 4 \ 00000058 REQUIRE `?` \ foffset: \ 00000058 DS8 4 \ 0000005C REQUIRE `?` \ rlen: \ 0000005C DS8 4 \ 00000060 REQUIRE `?` \ llen: \ 00000060 DS8 4 \ 00000064 REQUIRE `?` \ bmkfd: \ 00000064 DS8 4 \ 00000068 REQUIRE `?` \ bookmark: \ 00000068 DS8 4 \ 0000006C REQUIRE `?` \ bmknum: \ 0000006C DS8 4 \ 00000070 REQUIRE `?` \ winx: \ 00000070 DS8 4 \ 00000074 REQUIRE `?` \ winy: \ 00000074 DS8 4 \ 00000078 REQUIRE `?` \ winw: \ 00000078 DS8 4 \ 0000007C REQUIRE `?` \ winh: \ 0000007C DS8 4 \ 00000080 REQUIRE `?` \ viewlen: \ 00000080 DS8 4 \ 00000084 REQUIRE `?` \ bytelen: \ 00000084 DS8 4 \ 00000088 REQUIRE `?` \ viewpos: \ 00000088 DS8 4 \ 0000008C REQUIRE `?` \ viewrow: \ 0000008C DS8 4 \ 00000090 REQUIRE `?` \ sbw: \ 00000090 DS8 4 \ 00000094 REQUIRE `?` \ bltop: \ 00000094 DS8 4 \ 00000098 REQUIRE `?` \ header: \ 00000098 DS8 128 \ 00000118 REQUIRE `?` \ procfile: \ 00000118 DS8 128 \ 00000198 REQUIRE `?` \ ul: \ 00000198 DS8 4 \ 0000019C REQUIRE `?` \ inp_hdr: \ 0000019C DS8 20 \ 000001B0 REQUIRE `?` \ filelist_HDR: \ 000001B0 DS8 20 \ 000001C4 REQUIRE `?` \ filelist_STRUCT: \ 000001C4 DS8 44 \ 000001F0 REQUIRE `?` 1487 1488 HEADER_DESC bmklist_HDR = {0, 0, 0, 0, 0, (int)header, LGP_NULL}; \ bmklist_HDR: \ 000001F0 DS8 20 \ 00000204 REQUIRE `?` 1489 1490 MENU_DESC bmklist_STRUCT = { \ bmklist_STRUCT: \ 00000204 DS8 44 \ 00000230 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ menusoftkeys: \ 00000000 DS8 12 \ 0000000C REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ menu_sk: \ 00000000 DS8 24 \ 00000018 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ menu_skt: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ mainmenu_ITEMS: \ 00000000 DS8 252 \ 000000FC REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ mainmenu_HDR: \ 00000000 DS8 20 \ 00000014 REQUIRE `?` \ mainmenu_STRUCT: \ 00000014 DS8 44 \ 00000040 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ gotomenu_ITEMS: \ 00000000 DS8 140 \ 0000008C REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ gotomenu_HDR: \ 00000000 DS8 20 \ 00000014 REQUIRE `?` \ gotomenu_STRUCT: \ 00000014 DS8 44 \ 00000040 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ ??sk: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` 1491 8, bmklist_menu_onkey, bmklist_menu_ghook, NULL, 1492 menusoftkeys, 1493 &menu_skt, 1494 1 + 0x10, 1495 bmklist_menu_iconhndl, 1496 NULL, //Items 1497 NULL, //Procs 1498 0 //n 1499 }; 1500 \ In segment CODE, align 4, keep-with-next 1501 int create_menu_bookmark(void) { \ create_menu_bookmark: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1502 Free_BLIST(); 1503 Fill_BLIST(); 1504 strncpy(header, "Bookmarks", 10); \ 00000004 ........ LDR R4,??DataTable49 ;; inp_desc \ 00000008 ........ BL Free_BLIST \ 0000000C ........ BL Fill_BLIST \ 00000010 4C109FE5 LDR R1,??create_menu_bookmark_0 ;; `?` \ 00000014 0A20A0E3 MOV R2,#+10 \ 00000018 980084E2 ADD R0,R4,#+152 \ 0000001C 160100EF SWI +278 1505 patch_header(&bmklist_HDR); \ 00000020 7C5FA0E3 MOV R5,#+496 \ 00000024 040085E0 ADD R0,R5,R4 \ 00000028 ........ _BLF patch_header,??patch_header??rA 1506 int n = bmknum - 2; \ 0000002C 6C0094E5 LDR R0,[R4, #+108] 1507 if (n < 0) n = 0; 1508 return CreateMenu(0, 0, &bmklist_STRUCT, &bmklist_HDR, 0, n, 0, 0); \ 00000030 0010A0E3 MOV R1,#+0 \ 00000034 020050E2 SUBS R0,R0,#+2 \ 00000038 0000A043 MOVMI R0,#+0 \ 0000003C 02002DE9 PUSH {R1} \ 00000040 02002DE9 PUSH {R1} \ 00000044 01002DE9 PUSH {R0} \ 00000048 043085E0 ADD R3,R5,R4 \ 0000004C 812F84E2 ADD R2,R4,#+516 \ 00000050 0000A0E3 MOV R0,#+0 \ 00000054 01002DE9 PUSH {R0} \ 00000058 520100EF SWI +338 \ 0000005C 10D08DE2 ADD SP,SP,#+16 \ 00000060 3080BDE8 POP {R4,R5,PC} ;; return \ ??create_menu_bookmark_0: \ 00000064 ........ DC32 `?` 1509 } 1510 /* 1511 =============================== 1512 end 1513 =============================== 1514 */ 1515 1516 1517 /* 1518 =============================== 1519 GUI 1520 =============================== 1521 */ \ In segment DATA_C, align 4, align-sorted 1522 const int minus11 = -11; \ minus11: \ 00000000 F5FFFFFF DC32 -11 1523 const RECT Canvas = {0, 0, 0, 0}; //窗口 1524 1525 typedef struct { 1526 GUI gui; 1527 // WSHDR *ws1; 1528 // WSHDR *ws2; 1529 // int i1; 1530 } MAIN_GUI; 1531 1532 typedef struct { 1533 CSM_RAM csm; 1534 int gui_id; 1535 } MAIN_CSM; 1536 \ In segment CODE, align 4, keep-with-next 1537 void method0(MAIN_GUI *data) { \ method0: \ 00000000 00402DE9 PUSH {LR} 1538 if (data->gui.state == 2) { \ 00000004 0C00D0E5 LDRB R0,[R0, #+12] \ 00000008 020050E3 CMP R0,#+2 \ 0000000C 0080BD18 POPNE {PC} 1539 DrawScreen(); \ 00000010 ........ BL DrawScreen 1540 } 1541 } \ 00000014 0080BDE8 POP {PC} ;; return 1542 \ In segment CODE, align 4, keep-with-next 1543 void method1(MAIN_GUI *data, void *(*malloc_adr)(int)) { 1544 data->gui.state = 1; \ method1: \ 00000000 0110A0E3 MOV R1,#+1 \ 00000004 0C10C0E5 STRB R1,[R0, #+12] 1545 } \ 00000008 1EFF2FE1 BX LR ;; return 1546 \ In segment CODE, align 4, keep-with-next 1547 void method2(MAIN_GUI *data, void (*mfree_adr)(void *)) { 1548 data->gui.state = 0; \ method2: \ 00000000 0010A0E3 MOV R1,#+0 \ 00000004 0C10C0E5 STRB R1,[R0, #+12] 1549 } \ 00000008 1EFF2FE1 BX LR ;; return 1550 \ In segment CODE, align 4, keep-with-next 1551 void method3(MAIN_GUI *data, void *(*malloc_adr)(int), void (*mfree_adr)(void *)) { \ method3: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 1552 DisableIDLETMR(); \ 00000008 7F0100EF SWI +383 1553 data->gui.state = 2; \ 0000000C 0200A0E3 MOV R0,#+2 \ 00000010 0C00C4E5 STRB R0,[R4, #+12] 1554 } \ 00000014 1080BDE8 POP {R4,PC} ;; return 1555 \ In segment CODE, align 4, keep-with-next 1556 void method4(MAIN_GUI *data, void (*mfree_adr)(void *)) { 1557 if (data->gui.state != 2) return; \ method4: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 1558 data->gui.state = 1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 1559 } \ 00000010 1EFF2FE1 BX LR ;; return 1560 \ In segment CODE, align 4, keep-with-next 1561 void method7(MAIN_GUI *data, void (*mfree_adr)(void *)) { 1562 kill_data(data, mfree_adr); \ method7: \ 00000000 ........ _BF kill_data,??kill_data??rA ;; tailcall 1563 // mfree_adr(data); 1564 } 1565 \ In segment CODE, align 4, keep-with-next 1566 int method8(void){return 0;} \ method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 1567 \ In segment CODE, align 4, keep-with-next 1568 int method9(void){return 0;} \ method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 1569 \ In segment CODE, align 4, keep-with-next 1570 int method5(MAIN_GUI *data, GUI_MSG *msg) { \ method5: \ 00000000 10402DE9 PUSH {R4,LR} 1571 int result = 0; 1572 if (msg->gbsmsg->msg == KEY_DOWN || msg->gbsmsg->msg == LONG_PRESS) { \ 00000004 040091E5 LDR R0,[R1, #+4] \ 00000008 9320A0E3 MOV R2,#+147 \ 0000000C 041090E5 LDR R1,[R0, #+4] \ 00000010 402F82E3 ORR R2,R2,#0x100 \ 00000014 020051E1 CMP R1,R2 \ 00000018 02208212 ADDNE R2,R2,#+2 \ 0000001C 02005111 CMPNE R1,R2 \ 00000020 1A00001A BNE ??method5_1 1573 switch(msg->gbsmsg->submess) { \ 00000024 ........ LDR R4,??DataTable49 ;; inp_desc \ 00000028 080090E5 LDR R0,[R0, #+8] \ 0000002C 8C1094E5 LDR R1,[R4, #+140] \ 00000030 0120A0E3 MOV R2,#+1 \ 00000034 010040E2 SUB R0,R0,#+1 \ 00000038 3D0050E3 CMP R0,#+61 \ 0000003C 1300008A BHI ??method5_1 \ 00000040 013F8FE2 ADR R3,??method5_0 \ 00000044 0030D3E7 LDRB R3,[R3, R0] \ 00000048 03F18FE0 ADD PC,PC,R3, LSL #+2 \ ??method5_0: \ 0000004C 14101017 DC8 +20,+16,+16,+23 \ 00000050 10101010 DC8 +16,+16,+16,+16 \ 00000054 1010120F DC8 +16,+16,+18,+15 \ 00000058 10101010 DC8 +16,+16,+16,+16 \ 0000005C 10101010 DC8 +16,+16,+16,+16 \ 00000060 10101010 DC8 +16,+16,+16,+16 \ 00000064 10101010 DC8 +16,+16,+16,+16 \ 00000068 10101010 DC8 +16,+16,+16,+16 \ 0000006C 10101010 DC8 +16,+16,+16,+16 \ 00000070 10101010 DC8 +16,+16,+16,+16 \ 00000074 10101010 DC8 +16,+16,+16,+16 \ 00000078 10101010 DC8 +16,+16,+16,+16 \ 0000007C 10193434 DC8 +16,+25,+52,+52 \ 00000080 464B4D4D DC8 +70,+75,+77,+77 \ 00000084 1010194D DC8 +16,+16,+25,+77 \ 00000088 344B0000 DC8 +52,+75,+0,+0 1574 case RED_BUTTON: 1575 Quit_Required = 1; \ ??method5_2: \ 0000008C 3C2084E5 STR R2,[R4, #+60] 1576 /*result = 1;*/ 1577 break; 1578 case GREEN_BUTTON: 1579 LaunchEditor(); 1580 break; 1581 case ENTER_BUTTON: 1582 break; 1583 case LEFT_SOFT: 1584 create_menu_goto(); 1585 break; 1586 case RIGHT_SOFT: 1587 create_menu_main(); 1588 break; 1589 case '2': case UP_BUTTON: 1590 rowFluctuate(-1); 1591 if (bmknum > 1) { 1592 int offset = viewpos + curblock->offset; 1593 bookmark[0] = offset; 1594 if (offset > bookmark[1]) bookmark[1] = offset; 1595 writeAddrInt(procfile, &bmkfd, &ul, bookmark, bmknum, acbm); 1596 } 1597 REDRAW(); 1598 break; 1599 case VOL_UP_BUTTON: 1600 case '1': 1601 break; 1602 case '3': 1603 case '4': case LEFT_BUTTON: 1604 rowFluctuate(1 - viewrow); 1605 if (bookmark && bmknum > 1) { 1606 int offset = viewpos + curblock->offset; 1607 bookmark[0] = offset; 1608 if (offset > bookmark[1]) bookmark[1] = offset; 1609 writeAddrInt(procfile, &bmkfd, &ul, bookmark, bmknum, acbm); 1610 } 1611 REDRAW(); 1612 break; 1613 case '5': 1614 showinfo = !showinfo; 1615 //DrawInfoDialog(); 1616 break; 1617 case '6': case RIGHT_BUTTON: 1618 rowFluctuate(viewrow - 1); 1619 if (bookmark && bmknum > 1) { 1620 int offset = viewpos + curblock->offset; 1621 bookmark[0] = offset; 1622 if (offset > bookmark[1]) bookmark[1] = offset; 1623 writeAddrInt(procfile, &bmkfd, &ul, bookmark, bmknum, acbm); 1624 } 1625 REDRAW(); 1626 break; 1627 case '7': 1628 case '8': case DOWN_BUTTON: 1629 rowFluctuate(1); 1630 if (bookmark && bmknum > 1) { 1631 int offset = viewpos + curblock->offset; 1632 bookmark[0] = offset; 1633 if (offset > bookmark[1]) bookmark[1] = offset; 1634 writeAddrInt(procfile, &bmkfd, &ul, bookmark, bmknum, acbm); 1635 } 1636 REDRAW(); 1637 break; 1638 case '9': 1639 case '0': 1640 case '*': 1641 break; 1642 case '#': 1643 break; 1644 default: 1645 break; 1646 } 1647 return result; \ ??method5_1: \ 00000090 0000A0E3 MOV R0,#+0 \ 00000094 1080BDE8 POP {R4,PC} ;; return \ ??method5_3: \ 00000098 ........ BL LaunchEditor \ 0000009C 000000EA B ??method5_4 \ ??method5_5: \ 000000A0 ........ BL create_menu_goto \ ??method5_4: \ 000000A4 0000A0E3 MOV R0,#+0 \ 000000A8 1080BDE8 POP {R4,PC} \ ??method5_6: \ 000000AC ........ BL create_menu_main \ 000000B0 FBFFFFEA B ??method5_4 \ ??method5_7: \ 000000B4 000062E2 RSB R0,R2,#+0 \ 000000B8 ........ BL rowFluctuate \ 000000BC 6C0094E5 LDR R0,[R4, #+108] \ 000000C0 020050E3 CMP R0,#+2 \ 000000C4 130000BA BLT ??method5_8 \ 000000C8 441094E5 LDR R1,[R4, #+68] \ 000000CC 880094E5 LDR R0,[R4, #+136] \ 000000D0 081091E5 LDR R1,[R1, #+8] \ 000000D4 000081E0 ADD R0,R1,R0 \ 000000D8 681094E5 LDR R1,[R4, #+104] \ 000000DC 000081E5 STR R0,[R1, #+0] \ 000000E0 042091E5 LDR R2,[R1, #+4] \ 000000E4 000052E1 CMP R2,R0 \ 000000E8 040081B5 STRLT R0,[R1, #+4] \ ??method5_9: \ 000000EC ........ LDR R0,??DataTable45 ;; acbm \ 000000F0 662F84E2 ADD R2,R4,#+408 \ 000000F4 000090E5 LDR R0,[R0, #+0] \ 000000F8 641084E2 ADD R1,R4,#+100 \ 000000FC 01002DE9 PUSH {R0} \ 00000100 6C0094E5 LDR R0,[R4, #+108] \ 00000104 01002DE9 PUSH {R0} \ 00000108 683094E5 LDR R3,[R4, #+104] \ 0000010C 460F84E2 ADD R0,R4,#+280 \ 00000110 ........ _BLF writeAddrInt,??writeAddrInt??rA \ 00000114 08D08DE2 ADD SP,SP,#+8 \ ??method5_8: \ 00000118 720100EF SWI +370 \ 0000011C E0FFFFEA B ??method5_4 \ ??method5_10: \ 00000120 010061E2 RSB R0,R1,#+1 \ ??method5_11: \ 00000124 ........ BL rowFluctuate \ 00000128 680094E5 LDR R0,[R4, #+104] \ 0000012C 000050E3 CMP R0,#+0 \ 00000130 F8FFFF0A BEQ ??method5_8 \ 00000134 6C1094E5 LDR R1,[R4, #+108] \ 00000138 020051E3 CMP R1,#+2 \ 0000013C F5FFFFBA BLT ??method5_8 \ 00000140 442094E5 LDR R2,[R4, #+68] \ 00000144 881094E5 LDR R1,[R4, #+136] \ 00000148 082092E5 LDR R2,[R2, #+8] \ 0000014C 011082E0 ADD R1,R2,R1 \ 00000150 001080E5 STR R1,[R0, #+0] \ 00000154 042090E5 LDR R2,[R0, #+4] \ 00000158 010052E1 CMP R2,R1 \ 0000015C E2FFFFAA BGE ??method5_9 \ 00000160 041080E5 STR R1,[R0, #+4] \ 00000164 E0FFFFEA B ??method5_9 \ ??method5_12: \ 00000168 F803D4E1 LDRSH R0,[R4, #+56] \ 0000016C 000050E3 CMP R0,#+0 \ 00000170 0020A013 MOVNE R2,#+0 \ 00000174 B823C4E1 STRH R2,[R4, #+56] \ 00000178 C9FFFFEA B ??method5_4 \ ??method5_13: \ 0000017C 010041E2 SUB R0,R1,#+1 \ 00000180 E7FFFFEA B ??method5_11 \ ??method5_14: \ 00000184 0100A0E3 MOV R0,#+1 \ 00000188 E5FFFFEA B ??method5_11 1648 } 1649 return 0; 1650 } \ In segment DATA_C, align 4, align-sorted \ Canvas: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 1651 1652 const void * const gui_methods[11] = { \ gui_methods: \ 00000008 ............ DC32 method0, method1, method2, method3, method4, method5, 0H, method7 \ ............ \ ............ \ ............ \ 00000000.... \ .... \ 00000028 ............ DC32 method8, method9, 0H \ ....00000000 1653 (void *)method0, //Redraw 1654 (void *)method1, //Create 1655 (void *)method2, //Close 1656 (void *)method3, //Focus 1657 (void *)method4, //Unfocus 1658 (void *)method5, //OnKey 1659 0, 1660 (void *)method7, //Destroy 1661 (void *)method8, 1662 (void *)method9, 1663 0 1664 }; 1665 /* 1666 =============================== 1667 end 1668 =============================== 1669 */ 1670 1671 1672 /* 1673 =============================== 1674 CSM 1675 =============================== 1676 */ \ In segment DATA_Z, align 4, align-sorted 1677 unsigned short maincsm_name_body[140]; \ maincsm_name_body: \ 00000000 DS8 280 \ In segment CODE, align 4, keep-with-next 1678 void maincsm_oncreate(CSM_RAM *data) { \ maincsm_oncreate: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 1679 1680 MAIN_GUI *main_gui = malloc(sizeof (MAIN_GUI)); \ 00000008 3400A0E3 MOV R0,#+52 \ 0000000C 140000EF SWI +20 \ 00000010 0050A0E1 MOV R5,R0 1681 MAIN_CSM *csm = (MAIN_CSM *) data; 1682 zeromem(main_gui, sizeof (MAIN_GUI)); \ 00000014 3410A0E3 MOV R1,#+52 \ 00000018 1D0100EF SWI +285 1683 patch_rect((RECT*)&Canvas, 0, 0, ScreenW() - 1, ScreenH() - 1); \ 0000001C 898100EF SWI +33161 \ 00000020 0060A0E1 MOV R6,R0 \ 00000024 888100EF SWI +33160 \ 00000028 48209FE5 LDR R2,??maincsm_oncreate_0 ;; Canvas \ 0000002C 011046E2 SUB R1,R6,#+1 \ 00000030 010040E2 SUB R0,R0,#+1 \ 00000034 0060A0E3 MOV R6,#+0 \ 00000038 006082E5 STR R6,[R2, #+0] \ 0000003C B400C2E1 STRH R0,[R2, #+4] \ 00000040 B610C2E1 STRH R1,[R2, #+6] 1684 main_gui->gui.canvas = (void *)(&Canvas); \ 00000044 002085E5 STR R2,[R5, #+0] 1685 main_gui->gui.flag30 = 2; \ 00000048 0200A0E3 MOV R0,#+2 \ 0000004C 300085E5 STR R0,[R5, #+48] 1686 main_gui->gui.methods = (void *)gui_methods; \ 00000050 080082E2 ADD R0,R2,#+8 \ 00000054 040085E5 STR R0,[R5, #+4] 1687 main_gui->gui.item_ll.data_mfree = (void (*)(void *))mfree_adr(); \ 00000058 158000EF SWI +32789 \ 0000005C 200085E5 STR R0,[R5, #+32] 1688 csm->csm.state = 0; \ 00000060 106084E5 STR R6,[R4, #+16] 1689 csm->csm.unk1 = 0; \ 00000064 146084E5 STR R6,[R4, #+20] 1690 csm->gui_id = CreateGUI(main_gui); \ 00000068 0500A0E1 MOV R0,R5 \ 0000006C 370100EF SWI +311 \ 00000070 280084E5 STR R0,[R4, #+40] 1691 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return \ ??maincsm_oncreate_0: \ 00000078 ........ DC32 Canvas 1692 \ In segment CODE, align 4, keep-with-next 1693 void maincsm_onclose(CSM_RAM *csm) { 1694 SUBPROC((void *)ElfKiller); \ maincsm_onclose: \ 00000000 08009FE5 LDR R0,??maincsm_onclose_0 ;; ElfKiller \ 00000004 00402DE9 PUSH {LR} \ 00000008 710100EF SWI +369 1695 } \ 0000000C 0080BDE8 POP {PC} ;; return \ ??maincsm_onclose_0: \ 00000010 ........ DC32 ElfKiller 1696 \ In segment CODE, align 4, keep-with-next 1697 int maincsm_onmessage(CSM_RAM *data, GBS_MSG *msg) { \ maincsm_onmessage: \ 00000000 70402DE9 PUSH {R4-R6,LR} 1698 MAIN_CSM *csm = (MAIN_CSM *) data; 1699 1700 if (Quit_Required) { \ 00000004 ........ LDR R5,??DataTable49 ;; inp_desc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 3C0095E5 LDR R0,[R5, #+60] \ 00000010 0160A0E1 MOV R6,R1 \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0400000A BEQ ??maincsm_onmessage_0 1701 fclose(fd, &ul); \ 0000001C 540095E5 LDR R0,[R5, #+84] \ 00000020 661F85E2 ADD R1,R5,#+408 \ 00000024 0D0000EF SWI +13 1702 GeneralFuncF1(1); \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 3B0100EF SWI +315 1703 } 1704 1705 if (msg->msg == MSG_GUI_DESTROYED) { \ ??maincsm_onmessage_0: \ 00000030 040096E5 LDR R0,[R6, #+4] \ 00000034 0E10A0E3 MOV R1,#+14 \ 00000038 641C81E3 ORR R1,R1,#0x6400 \ 0000003C 010050E1 CMP R0,R1 \ 00000040 0700001A BNE ??maincsm_onmessage_1 1706 if ((int)msg->data0 == csm->gui_id) { \ 00000044 0C0096E5 LDR R0,[R6, #+12] \ 00000048 281094E5 LDR R1,[R4, #+40] \ 0000004C 010050E1 CMP R0,R1 \ 00000050 1D00001A BNE ??maincsm_onmessage_2 1707 csm->csm.state = -3; \ 00000054 0200E0E3 MVN R0,#+2 \ 00000058 100084E5 STR R0,[R4, #+16] \ 0000005C 0100A0E3 MOV R0,#+1 \ 00000060 7080BDE8 POP {R4-R6,PC} 1708 } 1709 } 1710 1711 else if (msg->msg == MSG_RECONFIGURE_REQ) { \ ??maincsm_onmessage_1: \ 00000064 AF10A0E3 MOV R1,#+175 \ 00000068 DE1C81E3 ORR R1,R1,#0xDE00 \ 0000006C 010050E1 CMP R0,R1 \ 00000070 1500001A BNE ??maincsm_onmessage_2 1712 LockSched(); \ 00000074 460100EF SWI +326 1713 InitSettings(); \ 00000078 ........ BL InitSettings 1714 if (buffloaded && charset != codetype) { \ 0000007C 500095E5 LDR R0,[R5, #+80] \ 00000080 000050E3 CMP R0,#+0 \ 00000084 0E00000A BEQ ??maincsm_onmessage_3 \ 00000088 ........ LDR R0,??DataTable47 ;; charset \ 0000008C 4C1095E5 LDR R1,[R5, #+76] \ 00000090 000090E5 LDR R0,[R0, #+0] \ 00000094 010050E1 CMP R0,R1 \ 00000098 0900000A BEQ ??maincsm_onmessage_3 1715 KillIndex(); \ 0000009C ........ BL KillIndex 1716 if (createIndex()) { \ 000000A0 ........ BL createIndex \ 000000A4 000050E3 CMP R0,#+0 \ 000000A8 0500000A BEQ ??maincsm_onmessage_3 1717 curblock = fileindex->next; \ 000000AC 400095E5 LDR R0,[R5, #+64] \ 000000B0 000090E5 LDR R0,[R0, #+0] \ 000000B4 440085E5 STR R0,[R5, #+68] 1718 loadBuffer(); \ 000000B8 ........ BL loadBuffer 1719 viewpos = 0; \ 000000BC 0000A0E3 MOV R0,#+0 \ 000000C0 880085E5 STR R0,[R5, #+136] 1720 } 1721 } 1722 UnlockSched(); \ ??maincsm_onmessage_3: \ 000000C4 470100EF SWI +327 1723 RefreshGUI(); \ 000000C8 960100EF SWI +406 1724 } 1725 return 1; \ ??maincsm_onmessage_2: \ 000000CC 0100A0E3 MOV R0,#+1 \ 000000D0 7080BDE8 POP {R4-R6,PC} ;; return 1726 } 1727 1728 const struct { 1729 CSM_DESC maincsm; 1730 WSHDR maincsm_name; \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 536965547874 DC8 "SieTxtView" \ 5669657700 \ 0000000B 00 DC8 0 \ 0000000C 416C6C6F6320 DC8 "Alloc memory error!" \ 6D656D6F7279 \ 206572726F72 \ 2100 1731 } MAINCSM = { \ MAINCSM: \ 00000020 ............ DC32 maincsm_onmessage, maincsm_oncreate, 0, 0, 0, 0, maincsm_onclose \ ....00000000 \ 000000000000 \ 000000000000 \ ........ \ 0000003C 2C0000000100 DC32 44, 1, minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0, 139 \ 0000........ \ ........CCCC \ AA5555AA3333 \ 000000008B00 \ 0000 1732 { 1733 maincsm_onmessage, 1734 maincsm_oncreate, 1735 #ifdef NEWSGOLD 1736 0, 1737 0, 1738 0, 1739 0, 1740 #endif 1741 maincsm_onclose, 1742 sizeof(MAIN_CSM), 1743 1, 1744 &minus11 1745 }, 1746 { 1747 maincsm_name_body, 1748 NAMECSM_MAGIC1, 1749 NAMECSM_MAGIC2, 1750 0x0, 1751 139 1752 } 1753 }; 1754 1755 //更新进程名称 \ In segment CODE, align 4, keep-with-next 1756 void UpdateCSMname(void) { 1757 wsprintf((WSHDR *)(&MAINCSM.maincsm_name), "SieTxtView"); \ UpdateCSMname: \ 00000000 ........ LDR R0,??DataTable50 ;; `?` \ 00000004 00402DE9 PUSH {LR} \ 00000008 0010A0E1 MOV R1,R0 \ 0000000C 480080E2 ADD R0,R0,#+72 \ 00000010 240100EF SWI +292 1758 1759 /* 1760 //中文名 1761 char csmname[] = {0}; 1762 str2ws_unicode((WSHDR *)(&MAINCSM.maincsm_name), csmname); 1763 */ 1764 } \ 00000014 0080BDE8 POP {PC} ;; return 1765 /* 1766 =============================== 1767 end 1768 =============================== 1769 */ 1770 1771 /* 1772 =============================== 1773 程序入口 1774 =============================== 1775 */ \ In segment CODE, align 4, keep-with-next 1776 int main(char *exename, char *fname) { \ main: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 \ 00000008 0140A0E1 MOV R4,R1 1777 1778 TDate d; 1779 TTime t; 1780 GetDateTime(&d, &t); \ 0000000C 08108DE2 ADD R1,SP,#+8 1781 srand((unsigned int)(d.year + d.month + d.day + t.hour + t.min + t.sec)); 1782 //打开文件 1783 buff = malloc(BUF_LEN); \ 00000010 ........ LDR R5,??DataTable49 ;; inp_desc 1784 if (!buff) { \ 00000014 ........ LDR R6,??DataTable50 ;; `?` \ 00000018 0D00A0E1 MOV R0,SP \ 0000001C B40000EF SWI +180 \ 00000020 0410DDE5 LDRB R1,[SP, #+4] \ 00000024 00009DE5 LDR R0,[SP, #+0] \ 00000028 000081E0 ADD R0,R1,R0 \ 0000002C 0510DDE5 LDRB R1,[SP, #+5] \ 00000030 000081E0 ADD R0,R1,R0 \ 00000034 0810DDE5 LDRB R1,[SP, #+8] \ 00000038 000081E0 ADD R0,R1,R0 \ 0000003C 0910DDE5 LDRB R1,[SP, #+9] \ 00000040 000081E0 ADD R0,R1,R0 \ 00000044 0A10DDE5 LDRB R1,[SP, #+10] \ 00000048 000081E0 ADD R0,R1,R0 \ 0000004C 060200EF SWI +518 \ 00000050 800CA0E3 MOV R0,#+32768 \ 00000054 140000EF SWI +20 \ 00000058 480085E5 STR R0,[R5, #+72] \ 0000005C 000050E3 CMP R0,#+0 \ 00000060 0500001A BNE ??main_0 1785 ShowMSG(1, (int)"Alloc memory error!"); \ 00000064 0C1086E2 ADD R1,R6,#+12 \ 00000068 0100A0E3 MOV R0,#+1 \ 0000006C 480100EF SWI +328 1786 return 0; \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 3CD08DE2 ADD SP,SP,#+60 \ 00000078 F080BDE8 POP {R4-R7,PC} 1787 } 1788 1789 if (fname && strlen(fname) < 128) \ ??main_0: \ 0000007C 467FA0E3 MOV R7,#+280 \ 00000080 000054E3 CMP R4,#+0 \ 00000084 0400000A BEQ ??main_1 \ 00000088 0400A0E1 MOV R0,R4 \ 0000008C 1B0000EF SWI +27 \ 00000090 800050E3 CMP R0,#+128 1790 strcpy(procfile, fname); \ 00000094 0410A031 MOVCC R1,R4 \ 00000098 0000003A BCC ??main_2 1791 else 1792 strcpy(procfile, LAST); \ ??main_1: \ 0000009C 40109FE5 LDR R1,??main_3 ;; LAST \ ??main_2: \ 000000A0 050087E0 ADD R0,R7,R5 \ 000000A4 1A0000EF SWI +26 1793 1794 if (!loadFile(procfile)) adjustWindowsSize(); \ 000000A8 050087E0 ADD R0,R7,R5 \ 000000AC ........ BL loadFile \ 000000B0 000050E3 CMP R0,#+0 \ 000000B4 0000001A BNE ??main_4 \ 000000B8 ........ BL adjustWindowsSize 1795 char dummy[sizeof(MAIN_CSM)]; 1796 LockSched(); \ ??main_4: \ 000000BC 460100EF SWI +326 1797 CreateCSM(&MAINCSM.maincsm, dummy, 0); \ 000000C0 0020A0E3 MOV R2,#+0 \ 000000C4 10108DE2 ADD R1,SP,#+16 \ 000000C8 200086E2 ADD R0,R6,#+32 \ 000000CC 070100EF SWI +263 1798 UnlockSched(); \ 000000D0 470100EF SWI +327 1799 UpdateCSMname(); \ 000000D4 ........ BL UpdateCSMname 1800 1801 //fclose(fd, &ul);} 1802 return 1; \ 000000D8 0100A0E3 MOV R0,#+1 \ 000000DC 3CD08DE2 ADD SP,SP,#+60 \ 000000E0 F080BDE8 POP {R4-R7,PC} ;; return \ ??main_3: \ 000000E4 ........ DC32 LAST 1803 1804 } \ In segment CODE, align 4, keep-with-next \ ??DataTable0: \ 00000000 ........ DC32 charset \ In segment CODE, align 4, keep-with-next \ ??DataTable19: \ 00000000 ........ DC32 inp_desc \ In segment CODE, align 4, keep-with-next \ ??DataTable20: \ 00000000 ........ DC32 font \ In segment CODE, align 4, keep-with-next \ ??DataTable21: \ 00000000 ........ DC32 space \ In segment CODE, align 4, keep-with-next \ ??DataTable26: \ 00000000 ........ DC32 acbm \ In segment CODE, align 4, keep-with-next \ ??DataTable35: \ 00000000 ........ DC32 fltop \ In segment CODE, align 4, keep-with-next \ ??DataTable36: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable37: \ 00000000 ........ DC32 inp_desc \ In segment CODE, align 4, keep-with-next \ ??DataTable45: \ 00000000 ........ DC32 acbm \ In segment CODE, align 4, keep-with-next \ ??DataTable47: \ 00000000 ........ DC32 charset \ In segment CODE, align 4, keep-with-next \ ??DataTable49: \ 00000000 ........ DC32 inp_desc \ In segment CODE, align 4, keep-with-next \ ??DataTable50: \ 00000000 ........ DC32 `?` \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 01000000.... DC32 1, inp_onkey, inp_ghook, inp_locret, 0, menu_skt \ ............ \ ........0000 \ 0000........ \ 00000018 000016008300 DC16 0, 22, 131, 153 \ 9900 \ 00000020 040000006400 DC32 4, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ `?`: \ 00000038 0000 DC16 0 \ 0000003A 0000 DC8 0, 0 \ `?`: \ 0000003C 00000000 DC32 0 \ `?`: \ 00000040 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000044 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000048 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000004C 00000000 DC32 0 \ `?`: \ 00000050 00000000 DC32 0 \ `?`: \ 00000054 00000000 DC32 0 \ `?`: \ 00000058 00000000 DC32 0 \ `?`: \ 0000005C 00000000 DC32 0 \ `?`: \ 00000060 00000000 DC32 0 \ `?`: \ 00000064 00000000 DC32 0 \ `?`: \ 00000068 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000006C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000070 00000000 DC32 0 \ `?`: \ 00000074 00000000 DC32 0 \ `?`: \ 00000078 00000000 DC32 0 \ `?`: \ 0000007C 00000000 DC32 0 \ `?`: \ 00000080 00000000 DC32 0 \ `?`: \ 00000084 00000000 DC32 0 \ `?`: \ 00000088 00000000 DC32 0 \ `?`: \ 0000008C 00000000 DC32 0 \ `?`: \ 00000090 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000094 00000000 DC32 0H \ `?`: \ 00000098 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000108 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000118 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000128 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000138 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000148 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000158 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000168 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000178 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000188 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000198 00000000 DC32 0 \ `?`: \ 0000019C 000000008300 DC16 0, 0, 131, 21 \ 1500 \ 000001A4 00000000.... DC32 0H, `?`, 2147483647 \ ....FFFFFF7F \ `?`: \ 000001B0 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 000001B8 00000000.... DC32 0H, header, 2147483647 \ ....FFFFFF7F \ `?`: \ 000001C4 08000000.... DC32 8, filelist_menu_onkey, filelist_menu_ghook, 0H, menusoftkeys \ ............ \ 00000000.... \ .... \ 000001D8 ........1000 DC32 menu_skt, 16, filelist_menu_iconhndl, 0H, 0H, 0 \ 0000........ \ 000000000000 \ 000000000000 \ `?`: \ 000001F0 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 000001F8 00000000.... DC32 0H, header, 2147483647 \ ....FFFFFF7F \ `?`: \ 00000204 08000000.... DC32 8, bmklist_menu_onkey, bmklist_menu_ghook, 0H, menusoftkeys \ ............ \ 00000000.... \ .... \ 00000218 ........1100 DC32 menu_skt, 17, bmklist_menu_iconhndl, 0H, 0H, 0 \ 0000........ \ 000000000000 \ 000000000000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 000000000100 DC32 0, 1, 2 \ 000002000000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 18000000 DC16 24, 0 \ 00000004 ........ DC32 `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 ........0000 DC32 menu_sk, 0 \ 0000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 00000000.... DC32 0H, `?`, 2147483647, 0, 0H, 3, 1442, 0H \ ....FFFFFF7F \ 000000000000 \ 000003000000 \ A20500000000 \ 0000 \ 00000020 ........FFFF DC32 `?`, 2147483647, 0, 0H, 3, 1442, 0H \ FF7F00000000 \ 000000000300 \ 0000A2050000 \ 00000000 \ 0000003C ........FFFF DC32 `?`, 2147483647, 0, 0H, 3, 1442, 0H \ FF7F00000000 \ 000000000300 \ 0000A2050000 \ 00000000 \ 00000058 ........FFFF DC32 `?`, 2147483647, 0, 0H, 3, 1442, 0H \ FF7F00000000 \ 000000000300 \ 0000A2050000 \ 00000000 \ 00000074 ........FFFF DC32 `?`, 2147483647, 0, 0H, 3, 1442, 0H \ FF7F00000000 \ 000000000300 \ 0000A2050000 \ 00000000 \ 00000090 ........FFFF DC32 `?`, 2147483647, 0, 0H, 3, 1442, 0H \ FF7F00000000 \ 000000000300 \ 0000A2050000 \ 00000000 \ 000000AC ........FFFF DC32 `?`, 2147483647, 0, 0H, 3, 1442, 0H \ FF7F00000000 \ 000000000300 \ 0000A2050000 \ 00000000 \ 000000C8 ........FFFF DC32 `?`, 2147483647, 0, 0H, 3, 1442, 0H \ FF7F00000000 \ 000000000300 \ 0000A2050000 \ 00000000 \ 000000E4 ........FFFF DC32 `?`, 2147483647, 0, 0H, 3, 1442 \ FF7F00000000 \ 000000000300 \ 0000A2050000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000008 00000000.... DC32 0H, `?`, 2147483647 \ ....FFFFFF7F \ `?`: \ 00000014 080000000000 DC32 8, 0H, 0H, 0H, menusoftkeys, menu_skt, 0, 0H, mainmenu_ITEMS \ 000000000000 \ 00000000.... \ ............ \ 000000000000 \ 0000........ \ 00000038 ........0900 DC32 mainmenu_HNDLS, 9 \ 0000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 00000000.... DC32 0H, `?`, 2147483647, 0, 0H, 3, 1442, 0H \ ....FFFFFF7F \ 000000000000 \ 000003000000 \ A20500000000 \ 0000 \ 00000020 ........FFFF DC32 `?`, 2147483647, 0, 0H, 3, 1442, 0H \ FF7F00000000 \ 000000000300 \ 0000A2050000 \ 00000000 \ 0000003C ........FFFF DC32 `?`, 2147483647, 0, 0H, 3, 1442, 0H \ FF7F00000000 \ 000000000300 \ 0000A2050000 \ 00000000 \ 00000058 ........FFFF DC32 `?`, 2147483647, 0, 0H, 3, 1442, 0H \ FF7F00000000 \ 000000000300 \ 0000A2050000 \ 00000000 \ 00000074 ........FFFF DC32 `?`, 2147483647, 0, 0H, 3, 1442 \ FF7F00000000 \ 000000000300 \ 0000A2050000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000008 00000000.... DC32 0H, `?`, 2147483647 \ ....FFFFFF7F \ `?`: \ 00000014 080000000000 DC32 8, 0H, 0H, 0H, menusoftkeys, menu_skt, 0, 0H, gotomenu_ITEMS \ 000000000000 \ 00000000.... \ ............ \ 000000000000 \ 0000........ \ 00000038 ........0500 DC32 gotomenu_HNDLS, 5 \ 0000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 18000000 DC16 24, 0 \ 00000004 ........ DC32 `?` \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 526F6F7400 DC8 "Root" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 53656E642053 DC8 "Send SMS..." \ 4D532E2E2E00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 456469742E2E DC8 "Edit..." \ 2E00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 476F20746F2E DC8 "Go to..." \ 2E2E00 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 626F6F6B6D61 DC8 "bookmark..." \ 726B2E2E2E00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4261636B00 DC8 "Back" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 556E6B6F6E77 DC8 "Unkonwn code type!" \ 6E20636F6465 \ 207479706521 \ 00 \ 00000013 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 53656C656374 DC8 "Select" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6572726F7200 DC8 "error" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 426F6F6B6D61 DC8 "Bookmarks" \ 726B7300 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 256400 DC8 "%d" \ In segment DATA_C, align 1, align-sorted \ 00000000 3F00 DC8 "?" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5361766500 DC8 "Save" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 46696C652066 DC8 "File failed!" \ 61696C656421 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ 00000010 2E74656D7000 DC8 ".temp" \ 00000016 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4C6F61642062 DC8 "Load bookmark failed!" \ 6F6F6B6D6172 \ 6B206661696C \ 65642100 \ 00000016 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5369656D656E DC8 "Siemens Text Viewer v0.3f\012by HanikLZ\0122007" \ 732054657874 \ 205669657765 \ 722076302E33 \ 660A62792048 \ 616E696B4C5A \ 0A3230303700 \ 0000002A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 303A5C5A4269 DC8 "0:\\ZBin\\etc\\SieTxtView.bcfg" \ 6E5C6574635C \ 536965547874 \ 566965772E62 \ 63666700 \ 0000001C 343A5C5A4269 DC8 "4:\\ZBin\\etc\\SieTxtView.bcfg" \ 6E5C6574635C \ 536965547874 \ 566965772E62 \ 63666700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 256425642564 DC8 "%d%d%d.%d%c %d%d:%d%d" \ 2E2564256320 \ 256425643A25 \ 64256400 \ 00000016 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6E6F20627566 DC8 "no buff?" \ 663F00 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4F70656E2E2E DC8 "Open..." \ 2E00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 303A5C746573 DC8 "0:\\test.log" \ 742E6C6F6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4564697400 DC8 "Edit" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 426F6F6B6D61 DC8 "Bookmark..." \ 726B2E2E2E00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 52616E646F6D DC8 "Random position" \ 20706F736974 \ 696F6E00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 456E6400 DC8 "End" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 526561646564 DC8 "Readed" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 537461727400 DC8 "Start" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4D61696E204D DC8 "Main Menu" \ 656E7500 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 536561726368 DC8 "Search..." \ 2E2E2E00 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5175697400 DC8 "Quit" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 48656C7000 DC8 "Help" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5365742E2E2E DC8 "Set..." \ 00 \ 00000007 00 DC8 0 1805 /* 1806 =============================== 1807 end 1808 =============================== 1809 */ Maximum stack usage in bytes: Function CSTACK -------- ------ AddToFList 24 Add_Blist_Item 36 CreateRootMenu 56 DrawInfoDialog 8 DrawScreen 56 DrawStateBar 88 ElfKiller 8 Fill_BLIST 8 FindBLISTtByN 0 FindFLISTtByN 8 FindFLISTtByNS 0 FindFiles 1252 Free_BLIST 12 Free_FLIST 8 InitSettings 12 KillIndex 8 LaunchEditor 72 SavePath 8 UpdateCSMname 4 WriteLog 20 add2bmk 20 adjustWindowsSize 8 bmklist_menu_ghook 4 bmklist_menu_iconhndl 24 bmklist_menu_onkey 24 createIndex 24 create_menu_bookmark 28 create_menu_goto 24 create_menu_main 24 deletebmk 12 div 0 filelist_menu_ghook 4 filelist_menu_iconhndl 28 filelist_menu_onkey 16 getStartOffset 0 gotoPos 8 gotomenu_bookmark 4 gotomenu_end 4 gotomenu_random 8 gotomenu_readed 4 gotomenu_start 4 inp_ghook 4 inp_locret 0 inp_onkey 52 loadBuffer 20 loadFile 20 main 80 maincsm_onclose 4 maincsm_oncreate 16 maincsm_onmessage 16 mainmenu_add2bmk 4 mainmenu_edit 4 mainmenu_goto 4 mainmenu_help 4 mainmenu_open 4 mainmenu_quit 4 mainmenu_search 0 mainmenu_sendsms 0 mainmenu_set 20 method0 4 method1 0 method2 0 method3 8 method4 0 method5 16 method7 4 method8 0 method9 0 openFile 12 open_select_file_gui 36 patch_header 8 rowFluctuate 24 saveText 172 strcmp_nocase 0 Segment part sizes: Function/Label Bytes -------------- ----- patch_header 52 getStartOffset 72 createIndex 496 WriteLog 108 openFile 156 loadBuffer 340 gotoPos 128 loadFile 208 div 64 adjustWindowsSize 60 InitSettings 152 KillIndex 56 ElfKiller 84 rowFluctuate 672 DrawStateBar 628 DrawInfoDialog 40 DrawScreen 488 mainmenu_open 24 mainmenu_quit 32 add2bmk 304 deletebmk 136 mainmenu_add2bmk 24 mainmenu_search 4 mainmenu_goto 20 mainmenu_edit 20 mainmenu_sendsms 4 mainmenu_set 116 mainmenu_help 24 mainmenu_HNDLS 36 create_menu_main 72 gotomenu_start 24 gotomenu_readed 76 gotomenu_end 80 gotomenu_random 92 gotomenu_bookmark 20 gotomenu_HNDLS 20 create_menu_goto 72 saveText 888 inp_onkey 132 inp_ghook 32 inp_locret 4 LaunchEditor 216 fltop 4 back 12 Free_FLIST 60 ??strcmp_nocase_0 48 AddToFList 176 FindFiles 404 FindFLISTtByNS 68 FindFLISTtByN 84 SavePath 60 filelist_menu_onkey 216 filelist_menu_ghook 36 filelist_menu_iconhndl 208 CreateRootMenu 136 open_select_file_gui 192 Free_BLIST 64 Add_Blist_Item 184 Fill_BLIST 48 FindBLISTtByN 48 bmklist_menu_onkey 216 bmklist_menu_ghook 20 bmklist_menu_iconhndl 140 inp_desc 560 menusoftkeys 12 menu_sk 24 menu_skt 8 mainmenu_ITEMS 252 mainmenu_HDR 64 gotomenu_ITEMS 140 gotomenu_HDR 64 sk 8 create_menu_bookmark 104 minus11 4 method0 24 method1 12 method2 12 method3 24 method4 20 method7 4 method8 8 method9 8 method5 396 Canvas 52 maincsm_name_body 280 maincsm_oncreate 124 maincsm_onclose 20 maincsm_onmessage 212 ? 92 UpdateCSMname 24 main 232 ??DataTable0 4 ??DataTable19 4 ??DataTable20 4 ??DataTable21 4 ??DataTable26 4 ??DataTable35 4 ??DataTable36 4 ??DataTable37 4 ??DataTable45 4 ??DataTable47 4 ??DataTable49 4 ??DataTable50 4 ? 560 ? 12 ? 24 ? 8 ? 252 ? 64 ? 140 ? 64 ? 8 ? 8 ? 12 ? 8 ? 12 ? 12 ? 8 ? 20 ? 8 ? 8 ? 12 ? 3 ? 2 ? 8 ? 24 ? 24 ? 44 ? 56 ? 24 ? 12 ? 8 ? 12 ? 8 ? 12 ? 16 ? 4 ? 8 ? 8 ? 12 ? 12 ? 8 ? 8 ? 8 Others 484 10 360 bytes in segment CODE 645 bytes in segment DATA_C 1 132 bytes in segment DATA_I 1 132 bytes in segment DATA_ID 284 bytes in segment DATA_Z 24 bytes in segment INITTAB 9 848 bytes of CODE memory (+ 536 bytes shared) 1 777 bytes of CONST memory 1 416 bytes of DATA memory Errors: none Warnings: 1