navi_ui.s01
来自「炬力方案176*132软件源码,适用于AK1025」· S01 代码 · 共 690 行
S01
690 行
NAME navi_ui(17)
RSEG APC_NAVI_UI(0)
RSEG APD_NAVI_UI(0)
EXTERN Count_Byte
EXTERN CurTotalNum
EXTERN PutS
EXTERN ResShowMultiString
EXTERN ResShowPic
EXTERN ScrollFlag
EXTERN ScrollString
EXTERN SetBackgdColor
EXTERN SetPenColor
EXTERN SetTextOutMode
EXTERN SetTextPos
EXTERN g_comval
PUBLIC i
PUBLIC list_num
EXTERN menu_pos_list
EXTERN menulist_bck_pic
EXTERN navi_buff
EXTERN region_scroll
EXTERN scroll_buf
PUBLIC ui_Navi_list
EXTERN ?CLZ80B_4_04_L00
EXTERN ?UC_MOD_L01
EXTERN ?S_MUL_L02
EXTERN ?SS_CMP_L02
EXTERN ?SL_MOD_L03
EXTERN ?SL_CMP_L03
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_LEAVE_DIRECT_L08
EXTERN ?ENT_AUTO_DIRECT_L09
EXTERN ?STRLEN_L11
RSEG APC_NAVI_UI
ui_Navi_list:
; 1. #include "ap_music.h"
; 2. #define Color_BULE_Scroll_def 0x0000001f//深蓝
; 3. extern handle Navifp;
; 4. extern long CurListoffset; //每个表的偏移量
; 5. extern long CurTotalNum;
; 6. extern long Navfileoffset; //当前表的已经读的偏移量
; 7. extern BOOL Navi_read(long fileoffset);
; 8.
; 9. #pragma memory=dataseg(APD_NAVI)
; 10. extern char navi_buff[NAVI_GROUP*30];
; 11. extern char buffer[512];
; 12.
; 13.
; 14.
; 15. #pragma memory=default
; 16. #pragma memory=dataseg(APD_NAVI_UI)
; 17.
; 18. int i;
; 19. BYTE list_num;
; 20.
; 21. #pragma memory=default
; 22. extern const char menu_pos_list[];
; 23. extern const WORD menulist_bck_pic[];
; 24. extern char ScrollFlag; //滚动标志位
; 25. extern char scroll_buf[]; //滚屏buffer区
; 26. extern region_t region_scroll; //滚屏区域
; 27.
; 28. #pragma codeseg(APC_NAVI_UI)
; 29. void ui_Navi_list(BYTE active,BYTE old_active,long file_active,char direct,bool scroll_flag)
; 30. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW 65534
; 31.
; 32. BYTE DisplayBytes;
; 33.
; 34. region_scroll.x=explorer_str_x_def;
LD A,32
LD (region_scroll),A
; 35. region_scroll.width=160;
LD A,160
LD (region_scroll+2),A
; 36. region_scroll.height=16;
LD A,16
LD (region_scroll+3),A
; 37. if(scroll_flag)
XOR A
OR (IX+16)
JR Z,?0003
?0002:
; 38. {
; 39. SetTextOutMode(0);
LD E,0
CALL LWRD SetTextOutMode
; 40. SetBackgdColor(Color_BULE_Scroll_def);
LD BC,0
LD DE,31
CALL LWRD SetBackgdColor
; 41. ScrollString(scroll_buf, FALSE,g_comval.langid,®ion_scroll);
LD HL,region_scroll
PUSH HL
LD HL,g_comval+12
LD C,(HL)
PUSH BC
LD C,0
CALL LWRD ?0058
POP HL
POP HL
; 42. SetTextOutMode(1);
LD E,1
CALL LWRD SetTextOutMode
; 43. }
; 44. else
JP LWRD ?0043
?0003:
; 45. {
; 46. SetTextOutMode(1);
LD E,1
CALL LWRD SetTextOutMode
; 47. SetPenColor(Color_WHITE_def);
LD BC,0
LD DE,65535
CALL LWRD SetPenColor
; 48. if(old_active!=active)
LD A,(IX+4)
CP (IX+2)
JP Z,?0006
?0005:
; 49. {
; 50. //清除旧的活动列表项
; 51. ResShowPic(menulist_bck_pic[old_active%NAVI_GROUP], menu_bck_x_def, menu_pos_list[old_active%7]-4);
LD B,7
CALL LWRD ?0061
PUSH BC
LD C,9
LD B,6
LD A,(IX+4)
CALL LWRD ?UC_MOD_L01
LD L,A
LD H,0
ADD HL,HL
LD DE,menulist_bck_pic
ADD HL,DE
LD E,(HL)
INC HL
LD D,(HL)
CALL LWRD ?0062
POP AF
; 52. ResShowPic(DHT,194,8);
LD C,8
PUSH BC
CALL LWRD ?0063
POP AF
; 53. if(*(navi_buff+(old_active)*30)==1)
LD C,(IX+4)
CALL LWRD ?0066
JR NZ,?0008
?0007:
; 54. ResShowPic(MDIR,10,menu_pos_list[old_active%NAVI_GROUP]-4);
CALL LWRD ?0061
PUSH BC
LD C,10
LD DE,175
JR ?0044
; 55. else
?0008:
; 56. ResShowPic(MFILE,13,menu_pos_list[old_active%NAVI_GROUP]-1);
CALL LWRD ?UC_MOD_L01
LD C,A
LD B,0
LD HL,menu_pos_list
ADD HL,BC
LD A,(HL)
ADD A,255
LD C,A
PUSH BC
LD C,13
LD DE,198
?0044:
CALL LWRD ?0062
POP AF
?0009:
; 57. SetTextPos(explorer_str_x_def, menu_pos_list[old_active%NAVI_GROUP]-2);
LD B,6
LD A,(IX+4)
CALL LWRD ?UC_MOD_L01
LD C,A
LD B,0
LD HL,menu_pos_list
ADD HL,BC
LD A,(HL)
ADD A,254
LD C,A
LD E,32
CALL LWRD SetTextPos
; 58. SetPenColor(Color_WHITE_def); //取列表名
LD BC,0
LD DE,65535
CALL LWRD SetPenColor
; 59. DisplayBytes = Count_Byte(&(navi_buff+old_active*30+1),g_comval.langid);
LD BC,(g_comval+12)
PUSH BC
LD HL,navi_buff+1
LD E,(IX+4)
LD D,0
LD BC,30
CALL LWRD ?S_MUL_L02
ADD HL,DE
EX DE,HL
LD A,BYTE3 Count_Byte
LD HL,LWRD Count_Byte
POP BC
CALL LWRD ?BANK_CALL_DIRECT_L08
; 60. PutS(&(navi_buff+old_active*30+1), DisplayBytes);
LD C,L
PUSH BC
LD HL,navi_buff+1
LD E,(IX+4)
LD D,0
LD BC,30
CALL LWRD ?S_MUL_L02
ADD HL,DE
EX DE,HL
POP BC
CALL LWRD PutS
; 61.
; 62. //显示当前活动项
; 63.
; 64. ResShowPic(FILEBCK, explorer_str_x_def-2, menu_pos_list[active%NAVI_GROUP]-4);
LD B,6
LD A,(IX+2)
CALL LWRD ?0061
PUSH BC
LD C,30
LD DE,44
CALL LWRD ?0062
POP AF
; 65. ResShowPic(DHTHK,194, menu_pos_list[active%NAVI_GROUP]+5);
LD B,6
LD A,(IX+2)
CALL LWRD ?UC_MOD_L01
LD C,A
LD B,0
LD HL,menu_pos_list
ADD HL,BC
LD A,(HL)
ADD A,5
LD C,A
PUSH BC
LD C,194
LD DE,39
CALL LWRD ?0062
POP AF
; 66. if(*(navi_buff+(active)*30)==1)
LD C,(IX+2)
CALL LWRD ?0066
JR NZ,?0011
?0010:
; 67. ResShowPic(MDIR,10,menu_pos_list[active%NAVI_GROUP]-4);
CALL LWRD ?0061
PUSH BC
LD C,10
LD DE,175
JR ?0045
; 68. else
?0011:
; 69. ResShowPic(MFILE,13,menu_pos_list[active%NAVI_GROUP]-1);
CALL LWRD ?UC_MOD_L01
LD C,A
LD B,0
LD HL,menu_pos_list
ADD HL,BC
LD A,(HL)
ADD A,255
LD C,A
PUSH BC
LD C,13
LD DE,198
?0045:
CALL LWRD ?0062
POP AF
?0012:
; 70.
; 71. region_scroll.y = menu_pos_list[active%NAVI_GROUP]-2;
CALL LWRD ?0060
; 72. memcpy(scroll_buf,&(navi_buff+(active)*30+1),27); //取要滚动的数据到buf
LD C,(IX+2)
CALL LWRD ?0065
; 73. ScrollString(scroll_buf,TRUE,g_comval.langid,®ion_scroll);
PUSH HL
LD HL,g_comval+12
LD C,(HL)
PUSH BC
CALL LWRD ?0059
POP HL
POP HL
; 74. if(strlen(scroll_buf)<20)
CALL LWRD ?0067
JR NC,?0014
?0013:
; 75. ScrollFlag=0;
XOR A
JR ?0046
; 76. else
?0014:
; 77. ScrollFlag=1;
LD A,1
?0046:
JP LWRD ?0052
?0015:
; 78. }
; 79. else
?0006:
; 80. {
; 81. if(direct==0)
XOR A
OR (IX+14)
JR NZ,?0018
?0017:
; 82. {
; 83. if((CurTotalNum-file_active+active)>NAVI_GROUP)
LD HL,(CurTotalNum)
LD C,(IX+10)
LD B,(IX+11)
SBC HL,BC
EX DE,HL
LD HL,(CurTotalNum+2)
LD C,(IX+12)
LD B,(IX+13)
SBC HL,BC
PUSH HL
PUSH DE
LD L,(IX+2)
LD E,A
LD H,E
LD D,A
POP BC
ADD HL,BC
EX DE,HL
POP BC
ADC HL,BC
PUSH HL
PUSH DE
LD C,A
LD B,A
LD HL,6
CALL LWRD ?SL_CMP_L03
JR C,?0057
?0019:
; 84. list_num = NAVI_GROUP;
; 85. else
?0020:
; 86. list_num = CurTotalNum-file_active+active;
LD A,(CurTotalNum)
SUB (IX+10)
ADD A,(IX+2)
JR ?0053
?0021:
?0018:
; 87. }
; 88. else if(direct==2) //尾处理
LD B,A
DEC B
DEC B
JR NZ,?0024
?0023:
; 89. {
; 90. if(CurTotalNum%NAVI_GROUP==0)
LD L,B
LD H,B
PUSH HL
LD L,6
PUSH HL
LD BC,(CurTotalNum+2)
LD HL,(CurTotalNum)
CALL LWRD ?SL_MOD_L03
LD A,L
OR H
OR C
OR B
JR Z,?0024
?0025:
; 91. list_num = NAVI_GROUP;
; 92. else
?0026:
; 93. list_num=CurTotalNum%NAVI_GROUP;
LD HL,0
PUSH HL
LD L,6
PUSH HL
LD BC,(CurTotalNum+2)
LD HL,(CurTotalNum)
CALL LWRD ?SL_MOD_L03
?0057:
LD A,L
JR ?0053
?0027:
; 94. }
; 95. else
?0024:
; 96. list_num = NAVI_GROUP;
LD A,6
?0053:
LD (list_num),A
?0028:
?0022:
; 97.
; 98. ResShowPic(MENUTWO,0,0); //显示背景画面
LD C,0
PUSH BC
LD DE,195
CALL LWRD ?0062
POP AF
; 99. ResShowMultiString(MDIRNAVI, g_comval.langid, list_str_x_def, list_str_y_def);//显示菜单头
LD C,148
PUSH BC
LD C,22
PUSH BC
LD BC,(g_comval+12)
LD DE,431
LD A,BYTE3 ResShowMultiString
LD HL,LWRD ResShowMultiString
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
POP AF
; 100. ResShowPic(DHT,194,8);
LD C,8
PUSH BC
CALL LWRD ?0063
POP AF
; 101.
; 102. for(i=0;i<list_num;i++)
LD HL,0
?0049:
LD (i),HL
?0030:
LD BC,(list_num)
LD B,0
CALL LWRD ?SS_CMP_L02
JP NC,?0029
?0031:
; 103. {
; 104. output8(0x4e,input8(0x4e) | 0x08);
IN A,(78)
SET 3,A
OUT (78),A
; 105. if(i==active%NAVI_GROUP)
LD B,6
LD A,(IX+2)
CALL LWRD ?UC_MOD_L01
LD C,A
LD B,0
AND A
SBC HL,BC
JR NZ,?0034
?0033:
; 106. {
; 107. ResShowPic(FILEBCK, explorer_str_x_def-2, menu_pos_list[i]-4);
LD HL,menu_pos_list
LD BC,(i)
ADD HL,BC
LD A,(HL)
ADD A,252
LD E,A
PUSH DE
LD C,30
LD DE,44
CALL LWRD ?0062
POP AF
; 108. ResShowPic(DHTHK,194, menu_pos_list[i]+5);
LD HL,menu_pos_list
LD BC,(i)
ADD HL,BC
LD A,(HL)
ADD A,5
LD E,A
PUSH DE
LD C,194
LD DE,39
CALL LWRD ?0062
POP AF
; 109. if(*(navi_buff+(i)*30)==1)
LD BC,30
CALL LWRD ?0064
JR NZ,?0036
?0035:
; 110. ResShowPic(MDIR,10,menu_pos_list[i]-4);
ADD A,252
LD C,A
PUSH BC
LD C,10
LD DE,175
JR ?0050
; 111. else
?0036:
; 112. ResShowPic(MFILE,13,menu_pos_list[i]-1);
ADD A,255
LD C,A
PUSH BC
LD C,13
LD DE,198
?0050:
CALL LWRD ?0062
POP AF
?0037:
; 113. continue;
JR ?0032
?0034:
; 114. }
; 115. if(*(navi_buff+(i)*30)==1)
LD C,30
CALL LWRD ?0064
JR NZ,?0039
?0038:
; 116. ResShowPic(MDIR,10,menu_pos_list[i]-4);
ADD A,252
LD C,A
PUSH BC
LD C,10
LD DE,175
JR ?0051
; 117. else
?0039:
; 118. ResShowPic(MFILE,13,menu_pos_list[i]-1);
ADD A,255
LD C,A
PUSH BC
LD C,13
LD DE,198
?0051:
CALL LWRD ?0062
POP AF
?0040:
; 119.
; 120. SetTextPos(explorer_str_x_def, menu_pos_list[i]-2);
LD HL,menu_pos_list
LD BC,(i)
ADD HL,BC
LD A,(HL)
ADD A,254
LD C,A
LD E,32
CALL LWRD SetTextPos
; 121. DisplayBytes = Count_Byte(&(navi_buff+(i)*30+1),g_comval.langid);
LD BC,(g_comval+12)
PUSH BC
LD HL,navi_buff+1
LD DE,30
LD BC,(i)
CALL LWRD ?S_MUL_L02
ADD HL,DE
EX DE,HL
LD A,BYTE3 Count_Byte
LD HL,LWRD Count_Byte
POP BC
CALL LWRD ?BANK_CALL_DIRECT_L08
; 122. PutS(&(navi_buff+(i)*30+1),DisplayBytes); //显示关键字
LD C,L
PUSH BC
LD HL,navi_buff+1
LD DE,30
LD BC,(i)
CALL LWRD ?S_MUL_L02
ADD HL,DE
EX DE,HL
POP BC
CALL LWRD PutS
?0032:
LD HL,(i)
INC HL
JP LWRD ?0049
?0029:
; 123. } //for
; 124. region_scroll.y= menu_pos_list[active%NAVI_GROUP]-2;
CALL LWRD ?0060
; 125. memcpy(scroll_buf,&(navi_buff+(active%NAVI_GROUP)*30+1),27);
LD B,6
LD A,(IX+2)
CALL LWRD ?UC_MOD_L01
LD C,A
LD B,0
CALL LWRD ?0065
; 126. ScrollString(scroll_buf, TRUE,g_comval.langid,®ion_scroll);
PUSH HL
LD HL,g_comval+12
LD C,(HL)
PUSH BC
CALL LWRD ?0059
POP HL
POP HL
; 127. if(strlen(scroll_buf)<20)
CALL LWRD ?0067
JR NC,?0042
?0041:
; 128. ScrollFlag=0;
XOR A
JR ?0052
; 129. else
?0042:
; 130. ScrollFlag=1;
LD A,1
?0052:
LD (ScrollFlag),A
?0043:
?0016:
?0004:
; 131. } //else active =old_active
; 132. } //else scroll_flag
; 133.
; 134. }
JP LWRD ?BANK_LEAVE_DIRECT_L08
?0059:
LD C,1
?0058:
LD DE,scroll_buf
LD A,BYTE3 ScrollString
LD HL,LWRD ScrollString
JP LWRD ?BANK_CALL_DIRECT_L08
?0060:
LD B,6
LD A,(IX+2)
CALL LWRD ?UC_MOD_L01
LD C,A
LD B,0
LD HL,menu_pos_list
ADD HL,BC
LD A,(HL)
ADD A,254
LD (region_scroll+1),A
LD HL,navi_buff+1
RET
?0061:
CALL LWRD ?UC_MOD_L01
LD C,A
LD B,0
LD HL,menu_pos_list
ADD HL,BC
LD A,(HL)
ADD A,252
LD C,A
RET
?0063:
LD C,194
LD DE,38
?0062:
LD A,BYTE3 ResShowPic
LD HL,LWRD ResShowPic
JP LWRD ?BANK_CALL_DIRECT_L08
?0064:
LD DE,(i)
CALL LWRD ?S_MUL_L02
LD HL,navi_buff
ADD HL,DE
LD B,(HL)
DEC B
LD HL,menu_pos_list
LD BC,(i)
ADD HL,BC
LD A,(HL)
RET
?0065:
LD DE,30
CALL LWRD ?S_MUL_L02
ADD HL,DE
LD DE,scroll_buf
LD C,27
LDIR
LD HL,region_scroll
RET
?0066:
LD B,0
LD DE,30
CALL LWRD ?S_MUL_L02
LD HL,navi_buff
ADD HL,DE
LD B,(HL)
DEC B
LD B,6
LD A,C
RET
?0067:
LD HL,scroll_buf
CALL LWRD ?STRLEN_L11
LD BC,20
AND A
SBC HL,BC
RET
; 135.
; 136.
RSEG APD_NAVI_UI
i:
DEFS 2
list_num:
DEFS 1
END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?