ap_common2.lst
来自「MP3 整个 SDK」· LST 代码 · 共 523 行 · 第 1/2 页
LST
523 行
##############################################################################
# #
# IAR Z80/64180 C-Compiler V4.04B/WIN #
# Front End V4.20N 25/Dec/106 17:00:29 #
# Global Optimizer V1.05D #
# #
# Target option = Z80 #
# Memory model = banked #
# Source file = d:\case_i_d90f\ap\common\ap_common2.c #
# List file = d:\case_i_d90f\ap\ap_music\list\ap_common2.lst #
# Object file = d:\case_i_d90f\ap\ap_music\obj\ap_common2.r01 #
# ASM file = d:\case_i_d90f\ap\ap_music\list\ap_common2.s01 #
# Command line = -v0 -mb -OD:\case_i_d90f\ap\ap_music\Obj\ -e -K -w #
# -gA -z9 -RCODE -r0 -DNAPDEBUG #
# -LD:\case_i_d90f\ap\ap_music\List\ -q -t8 #
# -AD:\case_i_d90f\ap\ap_music\List\ #
# -ND:\case_i_d90f\ap\ap_music\List\ -X #
# -Id:\sdk_i_90f\inc\ -Id:\case_i_d90f\inc\ #
# d:\case_i_d90f\AP\COMMON\ap_common2.c #
# #
# (c) Copyright IAR Systems 1996 #
##############################################################################
\ 0000 NAME ap_common2(17)
\ 0000 RSEG COM_RES(0)
\ 0000 RSEG CONST(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 PUBLIC music_ext
\ 0000 EXTERN res_entry
\ 0000 EXTERN res_fp
\ 0000 PUBLIC voice_ext
\ 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_LEAVE_DIRECT_L08
\ 0000 EXTERN ?BANK_FAST_LEAVE_L08
\ 0000 EXTERN ?ENT_PARM_DIRECT_L09
\ 0000 EXTERN ?ENT_AUTO_DIRECT_L09
\ 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 //========== const field ===============
22 const char music_ext[][4] = {"MP3", "WMA", "ASF", "WMV", "OGG", "APE"};
23 const char voice_ext[][4] = {"WAV", "ACT"};
24
25
26
27 /*
28 ********************************************************************************
29 * Description : 获得字符串的显示宽度
30 *
31 * Arguments :
32 *
33 *
34 * Returns :
35 *
36 * Notes : 能够识别 \r \n, 中文作为2个TCHAR 识别
37 *
38 ********************************************************************************
39 */
40
41 int get_text_width(const char *string)
42 {
\ 0000 CD0000 CALL LWRD ?ENT_AUTO_DIRECT_L09
\ 0003 0000 DEFW 0
\ 0005 FDE5 PUSH IY
\ 0007 DD5E02 LD E,(IX+2)
\ 000A DD5603 LD D,(IX+3)
43 int w=0;
\ 000D FD210000 LD IY,0
\ 0011 ?0003:
44
45 ASSERT(string != NULL);
46
47 while(*string != 0)
\ 0011 6B LD L,E
\ 0012 62 LD H,D
\ 0013 AF XOR A
\ 0014 B6 OR (HL)
\ 0015 281C JR Z,?0002
\ 0017 ?0004:
48 {
49 if(*string == '\r'|| *string == '\n') {;} //不计算回车换行
\ 0017 7E LD A,(HL)
\ 0018 FE0D CP 13
\ 001A 2814 JR Z,?0012
\ 001C 7E LD A,(HL)
\ 001D FE0A CP 10
\ 001F 280F JR Z,?0012
\ 0021 ?0007:
\ 0021 ?0008:
\ 0021 ?0005:
\ 0021 ?0006:
50 else if(*string < 0x80) w += CHAR_WIDTH;
\ 0021 7E LD A,(HL)
\ 0022 FE80 CP 128
\ 0024 3005 JR NC,?0011
\ 0026 ?0010:
\ 0026 010600 LD BC,6
\ 0029 1803 JR ?0038
\ 002B ?0011:
51 else w += TCHAR_WIDTH;
\ 002B 010800 LD BC,8
\ 002E ?0038:
\ 002E FD09 ADD IY,BC
\ 0030 ?0012:
\ 0030 ?0009:
52
53 string++;
\ 0030 13 INC DE
\ 0031 18DE JR ?0003
\ 0033 ?0002:
54 }
55 return w;
\ 0033 FDE5 PUSH IY
\ 0035 E1 POP HL
56 }
\ 0036 FDE1 POP IY
\ 0038 C30000 JP LWRD ?BANK_LEAVE_DIRECT_L08
\ 003B get_large_text_width:
57
58 /*
59 ********************************************************************************
60 * Description : 获得大字体字符串的显示宽度
61 *
62 * Arguments :
63 *
64 *
65 * Returns :
66 *
67 * Notes : 能够识别 \r \n, 中文作为2个TCHAR 识别
68 *
69 ********************************************************************************
70 */
71
72 int get_large_text_width(const char *string)
73 {
\ 003B CD0000 CALL LWRD ?ENT_PARM_DIRECT_L09
74 //注意: 如果 LARGE_CHAR_WIDTH != TCHAR_WIDTH, 请使用注释起来的代码
75
76 ASSERT(LARGE_CHAR_WIDTH == TCHAR_WIDTH);
77 return strlen(string) * 8;
\ 003E EB EX DE,HL
\ 003F CD0000 CALL LWRD ?STRLEN_L11
\ 0042 29 ADD HL,HL
\ 0043 29 ADD HL,HL
\ 0044 29 ADD HL,HL
78
79
80 }
\ 0045 C30000 JP LWRD ?BANK_LEAVE_DIRECT_L08
\ 0048 ResShowMultiString:
81
82
83
84 /*
85 ********************************************************************************
86 * Description : 在指定位置显示多语言字符串
87 *
88 * Arguments : id, 资源代号
89 string_id, 语言代号
90 x, y, 屏幕坐标,x=255 表示x方向居中
91 *
92 * Returns : 成功, 1
93 失败, 0
94 *
95 * Notes :
96 *
97 ********************************************************************************
98 */
99
100
101 int ResShowMultiString(WORD id, BYTE string_id, uchar x, uchar y)
102 {
\ 0048 CD0000 CALL LWRD ?ENT_AUTO_DIRECT_L09
\ 004B C8FF DEFW 65480
103
104 //需要动态申请 string 的空间
105 char *p,AddBuf;
106 char buf[50];
107 BYTE StrLength,string_idtemp;
108
109 ASSERT(id <= UIID_MAX);
110
111 //读entry
112 SD_FSeek(res_fp, SEEK_SET, (long)id * sizeof(res_entry_t)); // 指针指向字符在文件中的位置
\ 004D DD6E02 LD L,(IX+2)
\ 0050 DD6603 LD H,(IX+3)
\ 0053 010000 LD BC,0
\ 0056 3E04 LD A,4
\ 0058 CD0000 CALL LWRD ?L_LSH_L03
\ 005B C5 PUSH BC
\ 005C E5 PUSH HL
\ 005D CDAF01 CALL LWRD ?0053
\ 0060 E1 POP HL
\ 0061 E1 POP HL
113 SD_FRead(res_fp, &res_entry, sizeof(res_entry_t)); //res_fp->&res_entry
\ 0062 211000 LD HL,16
\ 0065 E5 PUSH HL
\ 0066 010000 LD BC,res_entry
\ 0069 CDBA01 CALL LWRD ?0055
\ 006C F1 POP AF
114 if( res_entry.type != RES_TYPE_MSTRING) return 0; //非Multisring 返回
\ 006D 3A0600 LD A,(res_entry+6)
\ 0070 FE03 CP 3
\ 0072 2806 JR Z,?0014
\ 0074 ?0013:
\ 0074 210000 LD HL,0
115
116 ASSERT(res_entry.length <= sizeof(buf));
\ 0077 C3AC01 JP LWRD ?0037
\ 007A ?0014:
117
118 //读数据
119 SD_FSeek(res_fp, SEEK_SET, res_entry.offset);
\ 007A 2A0200 LD HL,(res_entry+2)
\ 007D E5 PUSH HL
\ 007E 2A0000 LD HL,(res_entry)
\ 0081 E5 PUSH HL
\ 0082 CDAF01 CALL LWRD ?0053
\ 0085 E1 POP HL
\ 0086 E1 POP HL
120 SD_FRead(res_fp, buf, 50);
\ 0087 213200 LD HL,50
\ 008A E5 PUSH HL
\ 008B 2E08 LD L,8
\ 008D 39 ADD HL,SP
\ 008E CDB801 CALL LWRD ?0056
\ 0091 F1 POP AF
121
122 //定位到 string_id
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?