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,&region_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,&region_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,&region_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 + -
显示快捷键?