📄 ap_common2.lst
字号:
##############################################################################
# #
# IAR Z80/64180 C-Compiler V4.04B/WIN #
# Front End V4.20N 27/Sep/107 17:39:21 #
# Global Optimizer V1.05D #
# #
# Target option = Z80 #
# Memory model = banked #
# Source file = d:\case_i_d913f\ap\common\ap_common2.c #
# List file = d:\case_i_d913f\ap\ap_setting\list\ap_common2.lst #
# Object file = d:\case_i_d913f\ap\ap_setting\release\obj\ap_common2.r01#
# Command line = -v0 -mb #
# -OD:\case_i_d913f\ap\ap_setting\release\Obj\ -e -K #
# -w -gA -s7 -RCODE -r0 -DNAPDEBUG #
# -LD:\case_i_d913f\ap\ap_setting\List\ -q -t8 #
# -Id:\sdk_i_913f\inc\ -Id:\case_i_d913f\inc\ #
# d:\case_i_d913f\AP\COMMON\ap_common2.c #
# #
# (c) Copyright IAR Systems 1996 #
##############################################################################
\ 0000 NAME ap_common2(17)
\ 0000 RSEG COM_RES(0)
\ 0000 RSEG UDATA0(0)
\ 0000 EXTERN PutS
\ 0000 PUBLIC ResShowMultiString
\ 0000 EXTERN SD_FRead
\ 0000 EXTERN SD_FSeek
\ 0000 EXTERN SetTextPos
\ 0000 PUBLIC dir_name
\ 0000 PUBLIC file_name
\ 0000 PUBLIC get_large_text_width
\ 0000 PUBLIC get_text_width
\ 0000 EXTERN res_entry
\ 0000 EXTERN res_fp
\ 0000 EXTERN ?CLZ80B_4_04_L00
\ 0000 EXTERN ?SS_DIV_L02
\ 0000 EXTERN ?L_LSH_L03
\ 0000 EXTERN ?L_ADDASG_L03
\ 0000 EXTERN ?BANK_CALL_DIRECT_L08
\ 0000 EXTERN ?BANK_FAST_LEAVE_L08
\ 0000 EXTERN ?STRLEN_L11
\ 0000 RSEG COM_RES
\ 0000 get_text_width:
1 /*
2 *******************************************************************************
3 * ACTOS AP
4 * ap common lib file, part 2
5 *
6 * (c) Copyright, Actions Co,Ld.
7 * All Right Reserved
8 *
9 * $Id: ap_common2.c,v 1.1.1.1 2006/05/22 03:23:59 selina Exp $
10 *******************************************************************************
11 */
12 #pragma codeseg(COM_RES)
13
14 #include "ap_common.h"
15
16 //========== global field ===============
17 char file_name[12];
18 char dir_name[30];
19 extern res_entry_t res_entry;
20 /*
21 ********************************************************************************
22 * Description : 获得字符串的显示宽度
23 *
24 * Arguments :
25 *
26 *
27 * Returns :
28 *
29 * Notes : 能够识别 \r \n, 中文作为2个TCHAR 识别
30 *
31 ********************************************************************************
32 */
33
34 int get_text_width(const char *string)
35 {
\ 0000 FDE5 PUSH IY
\ 0002 DDE5 PUSH IX
\ 0004 DD210000 LD IX,0
\ 0008 DD39 ADD IX,SP
\ 000A F5 PUSH AF
\ 000B D5 PUSH DE
\ 000C FDE1 POP IY
36 int w=0;
\ 000E AF XOR A
\ 000F DD77FE LD (IX-2),A
\ 0012 DD77FF LD (IX-1),A
\ 0015 ?0003:
37
38 ASSERT(string != NULL);
39
40 while(*string != 0)
\ 0015 AF XOR A
\ 0016 FDB600 OR (IY+0)
\ 0019 2833 JR Z,?0002
\ 001B ?0004:
41 {
42 if(*string == '\r'|| *string == '\n') {;} //不计算回车换行
\ 001B FD7E00 LD A,(IY+0)
\ 001E FE0D CP 13
\ 0020 2828 JR Z,?0026
\ 0022 FD7E00 LD A,(IY+0)
\ 0025 FE0A CP 10
\ 0027 2821 JR Z,?0026
\ 0029 ?0007:
\ 0029 ?0008:
\ 0029 ?0005:
\ 0029 ?0006:
43 else if(*string < 0x80) w += CHAR_WIDTH;
\ 0029 FD7E00 LD A,(IY+0)
\ 002C FE80 CP 128
\ 002E 300E JR NC,?0011
\ 0030 ?0010:
\ 0030 210000 LD HL,0
\ 0033 39 ADD HL,SP
\ 0034 7E LD A,(HL)
\ 0035 C606 ADD A,6
\ 0037 77 LD (HL),A
\ 0038 3010 JR NC,?0026
\ 003A 23 INC HL
\ 003B 34 INC (HL)
\ 003C 180C JR ?0026
\ 003E ?0011:
44 else w += TCHAR_WIDTH;
\ 003E 210000 LD HL,0
\ 0041 39 ADD HL,SP
\ 0042 7E LD A,(HL)
\ 0043 C608 ADD A,8
\ 0045 77 LD (HL),A
\ 0046 3002 JR NC,?0026
\ 0048 23 INC HL
\ 0049 34 INC (HL)
\ 004A ?0026:
\ 004A ?0012:
\ 004A ?0009:
45
46 string++;
\ 004A FD23 INC IY
\ 004C 18C7 JR ?0003
\ 004E ?0002:
47 }
48 return w;
\ 004E DD6EFE LD L,(IX-2)
\ 0051 DD66FF LD H,(IX-1)
49 }
\ 0054 DDF9 LD SP,IX
\ 0056 DDE1 POP IX
\ 0058 FDE1 POP IY
\ 005A C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 005D get_large_text_width:
50
51 /*
52 ********************************************************************************
53 * Description : 获得大字体字符串的显示宽度
54 *
55 * Arguments :
56 *
57 *
58 * Returns :
59 *
60 * Notes : 能够识别 \r \n, 中文作为2个TCHAR 识别
61 *
62 ********************************************************************************
63 */
64 int get_large_text_width(const char *string)
65 {
\ 005D DDE5 PUSH IX
\ 005F DD210000 LD IX,0
\ 0063 DD39 ADD IX,SP
\ 0065 D5 PUSH DE
66 //注意: 如果 LARGE_CHAR_WIDTH != TCHAR_WIDTH, 请使用注释起来的代码
67
68 ASSERT(LARGE_CHAR_WIDTH == TCHAR_WIDTH);
69 return strlen(string) * 8;
\ 0066 EB EX DE,HL
\ 0067 CD0000 CALL LWRD ?STRLEN_L11
\ 006A 29 ADD HL,HL
\ 006B 29 ADD HL,HL
\ 006C 29 ADD HL,HL
70
71
72 }
\ 006D DDF9 LD SP,IX
\ 006F DDE1 POP IX
\ 0071 C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 0074 ResShowMultiString:
73
74 /*
75 ********************************************************************************
76 * Description : 在指定位置显示多语言字符串
77 *
78 * Arguments : id, 资源代号
79 string_id, 语言代号
80 x, y, 屏幕坐标,x=255 表示x方向居中
81 *
82 * Returns : 成功, 1
83 失败, 0
84 *
85 * Notes :
86 *
87 ********************************************************************************
88 */
89 int ResShowMultiString(WORD id, BYTE string_id, uchar x, uchar y)
90 {
\ 0074 FDE5 PUSH IY
\ 0076 DDE5 PUSH IX
\ 0078 DD210000 LD IX,0
\ 007C DD39 ADD IX,SP
\ 007E C5 PUSH BC
\ 007F D5 PUSH DE
\ 0080 21CAFF LD HL,65482
\ 0083 39 ADD HL,SP
\ 0084 F9 LD SP,HL
91 //需要动态申请 string 的空间
92 char *p,AddBuf;
93 char buf[50];
94 BYTE StrLength,string_idtemp;
95
96 ASSERT(id <= UIID_MAX);
97
98 //读entry
99 SD_FSeek(res_fp, SEEK_SET, (long)id * sizeof(res_entry_t)); // 指针指向字符在文件中的位置
\ 0085 EB EX DE,HL
\ 0086 010000 LD BC,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -