📄 multiedit.txt
字号:
000136 4638 MOV r0,r7
000138 f7fffffe BL _IsOverwriteAtThisChar
00013c b118 CBZ r0,|L23.326|
;;;1272 _DeleteChar(hObj, pObj);
00013e 4621 MOV r1,r4
000140 4638 MOV r0,r7
000142 f7fffffe BL _DeleteChar
|L23.326|
;;;1273 }
;;;1274 if (_InsertChar(hObj, pObj, Key)) {
000146 4632 MOV r2,r6
000148 4621 MOV r1,r4
00014a 4638 MOV r0,r7
00014c f7fffffe BL _InsertChar
000150 b118 CBZ r0,|L23.346|
|L23.338|
;;;1275 _SetCursorPos(hObj, pObj, pObj->CursorPosChar + 1);
000152 f8b42048 LDRH r2,[r4,#0x48]
000156 1c52 ADDS r2,r2,#1
000158 e7e0 B |L23.284|
|L23.346|
;;;1276 }
;;;1277 r = 1; /* Key has been consumed */
00015a 2501 MOVS r5,#1
|L23.348|
;;;1278 }
;;;1279 }
;;;1280 _InvalidateTextArea(hObj);
00015c 4638 MOV r0,r7
00015e f7fffffe BL _InvalidateTextArea
;;;1281 return r;
000162 4628 MOV r0,r5
;;;1282 }
000164 e8bd81fc POP {r2-r8,pc}
;;;1283
ENDP
AREA ||i._CalcNextValidCursorPos||, CODE, READONLY, ALIGN=1
_CalcNextValidCursorPos PROC
;;;693 */
;;;694 static int _CalcNextValidCursorPos(MULTIEDIT_HANDLE hObj, MULTIEDIT_OBJ* pObj, int CursorPosChar, int * pCursorPosByte, int * pCursorLine) {
000000 e92d5fff PUSH {r0-r12,lr}
;;;695 if (pObj->hText) {
000004 f9b10038 LDRSH r0,[r1,#0x38]
000008 f8dd9038 LDR r9,[sp,#0x38]
00000c 460d MOV r5,r1 ;694
00000e 4614 MOV r4,r2 ;694
000010 461f MOV r7,r3 ;694
000012 2800 CMP r0,#0
000014 d050 BEQ |L24.184|
;;;696 char *pNextLine, *pCursor, *pText;
;;;697 int CursorLine, NumChars, CursorPosByte;
;;;698 pText = (char*) GUI_ALLOC_h2p(pObj->hText);
000016 f7fffffe BL GUI_ALLOC_h2p
00001a 4683 MOV r11,r0
;;;699 NumChars = _GetNumChars(pObj);
00001c 4628 MOV r0,r5
00001e f7fffffe BL _GetNumChars
;;;700 /* Set offset in valid range */
;;;701 if (CursorPosChar < pObj->NumCharsPrompt) {
000022 8fe9 LDRH r1,[r5,#0x3e]
000024 42a1 CMP r1,r4
000026 dd00 BLE |L24.42|
;;;702 CursorPosChar = pObj->NumCharsPrompt;
000028 460c MOV r4,r1
|L24.42|
;;;703 }
;;;704 if (CursorPosChar > NumChars) {
00002a 4284 CMP r4,r0
00002c dd00 BLE |L24.48|
;;;705 CursorPosChar = NumChars;
00002e 4604 MOV r4,r0
|L24.48|
;;;706 }
;;;707 CursorPosByte = GUI_UC__NumChars2NumBytes(pText, CursorPosChar);
000030 4621 MOV r1,r4
000032 4658 MOV r0,r11
000034 f7fffffe BL GUI_UC__NumChars2NumBytes
000038 4682 MOV r10,r0
;;;708 CursorLine = _GetCursorLine(hObj, pObj, pText, CursorPosChar);
00003a 4623 MOV r3,r4
00003c 465a MOV r2,r11
00003e 4629 MOV r1,r5
000040 9800 LDR r0,[sp,#0]
000042 f7fffffe BL _GetCursorLine
000046 4606 MOV r6,r0
;;;709 pCursor = pText + CursorPosByte;
;;;710 pNextLine = _GetpLine(hObj, pObj, CursorLine);
000048 4602 MOV r2,r0
00004a eb0b080a ADD r8,r11,r10 ;709
00004e 4629 MOV r1,r5
000050 9800 LDR r0,[sp,#0]
000052 f7fffffe BL _GetpLine
;;;711 if (pNextLine > pCursor) {
000056 4540 CMP r0,r8
000058 d925 BLS |L24.166|
;;;712 if (pObj->CursorPosChar < CursorPosChar) {
00005a f8b51048 LDRH r1,[r5,#0x48]
00005e 42a1 CMP r1,r4
000060 db0f BLT |L24.130|
;;;713 pCursor = pNextLine;
;;;714 } else {
;;;715 char *pPrevLine;
;;;716 int NumChars;
;;;717 pPrevLine = _GetpLine(hObj, pObj, CursorLine - 1);
000062 1e72 SUBS r2,r6,#1
000064 4629 MOV r1,r5
000066 9800 LDR r0,[sp,#0]
000068 f7fffffe BL _GetpLine
00006c 4604 MOV r4,r0
;;;718 NumChars = _WrapGetNumCharsDisp(hObj, pObj, pPrevLine);
00006e 4602 MOV r2,r0
000070 4629 MOV r1,r5
000072 9800 LDR r0,[sp,#0]
000074 f7fffffe BL _WrapGetNumCharsDisp
;;;719 pPrevLine += GUI_UC__NumChars2NumBytes(pPrevLine, NumChars);
000078 4601 MOV r1,r0
00007a 4620 MOV r0,r4
00007c f7fffffe BL GUI_UC__NumChars2NumBytes
000080 4420 ADD r0,r0,r4
|L24.130|
;;;720 pCursor = pPrevLine;
;;;721 }
;;;722 CursorPosChar = GUI_UC__NumBytes2NumChars(pText, pCursor - pText);
000082 eba0010b SUB r1,r0,r11
000086 4658 MOV r0,r11
000088 f7fffffe BL GUI_UC__NumBytes2NumChars
00008c 4604 MOV r4,r0
;;;723 CursorPosByte = GUI_UC__NumChars2NumBytes(pText, CursorPosChar);
00008e 4601 MOV r1,r0
000090 4658 MOV r0,r11
000092 f7fffffe BL GUI_UC__NumChars2NumBytes
000096 4682 MOV r10,r0
;;;724 CursorLine = _GetCursorLine(hObj, pObj, pText, CursorPosChar);
000098 4623 MOV r3,r4
00009a 465a MOV r2,r11
00009c 4629 MOV r1,r5
00009e 9800 LDR r0,[sp,#0]
0000a0 f7fffffe BL _GetCursorLine
0000a4 4606 MOV r6,r0
|L24.166|
;;;725 }
;;;726 if (pCursorPosByte) {
0000a6 b10f CBZ r7,|L24.172|
;;;727 *pCursorPosByte = CursorPosByte;
0000a8 f8c7a000 STR r10,[r7,#0]
|L24.172|
;;;728 }
;;;729 if (pCursorLine) {
0000ac f1b90f00 CMP r9,#0
0000b0 d001 BEQ |L24.182|
;;;730 *pCursorLine = CursorLine;
0000b2 f8c96000 STR r6,[r9,#0]
|L24.182|
;;;731 }
;;;732 return CursorPosChar;
0000b6 4620 MOV r0,r4
|L24.184|
;;;733 }
;;;734 return 0;
;;;735 }
0000b8 b004 ADD sp,sp,#0x10
0000ba e8bd9ff0 POP {r4-r12,pc}
;;;736
ENDP
AREA ||i._CalcScrollParas||, CODE, READONLY, ALIGN=1
_CalcScrollParas PROC
;;;572 */
;;;573 static void _CalcScrollParas(MULTIEDIT_HANDLE hObj) {
000000 b570 PUSH {r4-r6,lr}
000002 4605 MOV r5,r0
;;;574 MULTIEDIT_OBJ* pObj = MULTIEDIT_H2P(hObj);
000004 f7fffffe BL GUI_ALLOC_h2p
000008 4604 MOV r4,r0
;;;575 /* Calc vertical scroll parameters */
;;;576 pObj->ScrollStateV.NumItems = _GetNumLines(hObj, pObj);
00000a 4601 MOV r1,r0
00000c 4628 MOV r0,r5
00000e f7fffffe BL _GetNumLines
;;;577 pObj->ScrollStateV.PageSize = _GetNumVisLines(hObj, pObj);
000012 65a0 STR r0,[r4,#0x58]
000014 4621 MOV r1,r4
000016 4628 MOV r0,r5
000018 f7fffffe BL _GetNumVisLines
;;;578 /* Calc horizontal scroll parameters */
;;;579 pObj->ScrollStateH.NumItems = _GetTextSizeX(hObj, pObj);
00001c 6620 STR r0,[r4,#0x60]
00001e 4621 MOV r1,r4
000020 4628 MOV r0,r5
000022 f7fffffe BL _GetTextSizeX
;;;580 pObj->ScrollStateH.PageSize = _GetXSize(hObj, pObj);
000026 6660 STR r0,[r4,#0x64]
000028 4621 MOV r1,r4
00002a 4628 MOV r0,r5
00002c f7fffffe BL _GetXSize
;;;581 _CalcScrollPos(hObj, pObj);
000030 66e0 STR r0,[r4,#0x6c]
000032 4621 MOV r1,r4
000034 4628 MOV r0,r5
000036 e8bd4070 POP {r4-r6,lr}
00003a f7ffbffe B.W _CalcScrollPos
;;;582 }
;;;583
ENDP
AREA ||i._CalcScrollPos||, CODE, READONLY, ALIGN=1
_CalcScrollPos PROC
;;;462 */
;;;463 static void _CalcScrollPos(MULTIEDIT_HANDLE hObj, MULTIEDIT_OBJ* pObj) {
000000 b57c PUSH {r2-r6,lr}
000002 4605 MOV r5,r0
000004 460c MOV r4,r1
;;;464 int xCursor, yCursor;
;;;465 _GetCursorXY(hObj, pObj, &xCursor, &yCursor);
000006 466b MOV r3,sp
000008 aa01 ADD r2,sp,#4
00000a f7fffffe BL _GetCursorXY
;;;466 yCursor /= GUI_GetYDistOfFont(pObj->pFont);
00000e 6f20 LDR r0,[r4,#0x70]
000010 f7fffffe BL GUI_GetYDistOfFont
000014 9900 LDR r1,[sp,#0]
;;;467 WM_CheckScrollPos(&pObj->ScrollStateV, yCursor, 0, 0); /* Vertical */
000016 2300 MOVS r3,#0
000018 fb91f1f0 SDIV r1,r1,r0 ;466
00001c 461a MOV r2,r3
00001e f1040058 ADD r0,r4,#0x58
000022 9100 STR r1,[sp,#0]
000024 f7fffffe BL WM_CheckScrollPos
;;;468 WM_CheckScrollPos(&pObj->ScrollStateH, xCursor, 30, 30); /* Horizontal */
000028 231e MOVS r3,#0x1e
00002a 461a MOV r2,r3
00002c f1040064 ADD r0,r4,#0x64
000030 9901 LDR r1,[sp,#4]
000032 f7fffffe BL WM_CheckScrollPos
;;;469 _SetScrollState(hObj);
000036 4628 MOV r0,r5
000038 f7fffffe BL _SetScrollState
;;;470 }
00003c bd7c POP {r2-r6,pc}
;;;471
ENDP
AREA ||i._ClearCache||, CODE, READONLY, ALIGN=1
_ClearCache PROC
;;;368 */
;;;369 static void _ClearCache(MULTIEDIT_OBJ* pObj) {
000000 2100 MOVS r1,#0
;;;370 pObj->CacheLineNumber = 0;
000002 3050 ADDS r0,r0,#0x50
000004 8041 STRH r1,[r0,#2]
;;;371 pObj->CacheLinePosByte = 0;
000006 8001 STRH r1,[r0,#0]
;;;372 pObj->CacheFirstVisibleByte = 0;
000008 80c1 STRH r1,[r0,#6]
;;;373 pObj->CacheFirstVisibleLine = 0;
00000a 8081 STRH r1,[r0,#4]
;;;374 }
00000c 4770 BX lr
;;;375
ENDP
AREA ||i._DeleteChar||, CODE, READONLY, ALIGN=1
_DeleteChar PROC
;;;1020 */
;;;1021 static void _DeleteChar(MULTIEDIT_HANDLE hObj, MULTIEDIT_OBJ* pObj) {
000000 e92d47f0 PUSH {r4-r10,lr}
000004 4681 MOV r9,r0
;;;1022 if (pObj->hText) {
000006 f9b10038 LDRSH r0,[r1,#0x38]
00000a 460c MOV r4,r1 ;1021
00000c 2800 CMP r0,#0
00000e d053 BEQ |L28.184|
;;;1023 unsigned CursorOffset;
;;;1024 char* s;
;;;1025 s = (char*) GUI_ALLOC_h2p(pObj->hText);
000010 f7fffffe BL GUI_ALLOC_h2p
000014 4680 MOV r8,r0
;;;1026 CursorOffset = pObj->CursorPosByte;
000016 f8b4504a LDRH r5,[r4,#0x4a]
;;;1027 if (CursorOffset < strlen(s)) {
00001a f7fffffe BL strlen
00001e 42a8 CMP r0,r5
000020 d94a BLS |L28.184|
;;;1028 char *pCursor, *pLine, *pEndLine;
;;;1029 int CursorLine, NumChars, NumBytes;
;;;1030 pCursor = s + CursorOffset;
000022 eb080605 ADD r6,r8,r5
;;;1031 CursorLine = pObj->CursorLine;
000026 f8b42046 LDRH r2,[r4,#0x46]
;;;1032 pLine = _GetpLine(hObj, pObj, CursorLine);
00002a 4621 MOV r1,r4
00002c 4648 MOV r0,r9
00002e f7fffffe BL _GetpLine
000032 4607 MOV r7,r0
;;;1033 NumChars = _WrapGetNumCharsDisp(hObj, pObj, pLine);
000034 4602 MOV r2,r0
000036 4621 MOV r1,r4
000
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -