📄 ui_dialog.s01
字号:
NAME ui_dialog(17)
RSEG COM_CTRL(0)
EXTERN ClearScreen
EXTERN PutS
EXTERN ResShowMultiString
EXTERN ResShowPic
EXTERN SetTextPos
EXTERN UpdateScreen
EXTERN ap_get_message
EXTERN ap_handle_hotkey
EXTERN ui_auto_update
PUBLIC ui_dialog
EXTERN ?CLZ80B_4_04_L00
EXTERN ?C_V_SWITCH_L06
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_LEAVE_DIRECT_L08
EXTERN ?BANK_FAST_LEAVE_L08
EXTERN ?ENT_AUTO_DIRECT_L09
RSEG COM_CTRL
ui_dialog:
; 1. /*
; 2. *******************************************************************************
; 3. * ACTOS AP
; 4. * ap common lib, file/folder delete control file
; 5. *
; 6. * (c) Copyright, Actions Co,Ld.
; 7. * All Right Reserved
; 8. *
; 9. * $Id: ui_dialog.c,v 1.1.1.1 2006/05/22 03:24:01 selina Exp $
; 10. *******************************************************************************
; 11. */
; 12. #pragma codeseg(COM_CTRL)
; 13.
; 14. #include "ap_music.h"
; 15.
; 16. /*
; 17. //===================================================================
; 18. 接口: int ui_dialog(dialog_t *dialog, int string_id)
; 19. input:
; 20. typedef struct
; 21. {
; 22. WORD HeadIcon;//头部图标的ID值
; 23. WORD HeadStr;//头部信息的ID值
; 24. char *string;//信息显示区的显示的字串首址
; 25. }dialog_t;
; 26.
; 27. dialog_t dialog: 要显示的对话框的信息
; 28. int string_id: 显示用的语言
; 29.
; 30. output:
; 31. return int: NULL: 选中了OK
; 32. RESULT_IGNORE: 时间到了未按确定,按了PLAY键,或选中了NO
; 33. 其他非0的值: 当热键返回
; 34. //===================================================================
; 35. */
; 36.
; 37. int ui_dialog(dialog_t *dialog,int string_id)
; 38. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW 65532
PUSH IY
LD L,(IX+2)
LD H,(IX+3)
PUSH HL
POP IY
; 39. char key;
; 40. bool Selectflag = FALSE; //false(NO); true(YES)
; 41. bool need_draw = TRUE;
; 42.
; 43. // SetAsciiFont(FONT_TYPE_LARGE); //ASCII码用大字体
; 44. ClearScreen(NULL);
LD DE,0
CALL LWRD ClearScreen
; 45. ui_auto_update = FALSE;
XOR A
LD (ui_auto_update),A
; 46.
; 47.
; 48. //显示要求显示的信息
; 49. if (dialog->string != NULL)
LD (IX-3),A
LD A,(IY+4)
OR (IY+5)
JR Z,?0003
?0002:
; 50. {
; 51. SetTextPos(0, 16);
LD C,16
LD E,0
CALL LWRD SetTextPos
; 52. PutS(dialog->string, -1);
LD C,255
LD E,(IY+4)
LD D,(IY+5)
CALL LWRD PutS
?0003:
; 53. }
; 54.
; 55. //显示头部图标
; 56. if (dialog->HeadIcon != NULL)
LD A,(IY+0)
OR (IY+1)
JR Z,?0005
?0004:
; 57. {
; 58. ResShowPic(dialog->HeadIcon, 0, 0);
LD C,0
PUSH BC
LD E,(IY+0)
LD D,(IY+1)
CALL LWRD ?0030
POP AF
?0005:
; 59. }
; 60.
; 61. //显示头部的信息
; 62. if (dialog->HeadStr != NULL)
LD A,(IY+2)
OR (IY+3)
JR Z,?0007
?0006:
; 63. {
; 64. ResShowMultiString(dialog->HeadStr, string_id, 16, 0);
LD C,0
PUSH BC
LD C,16
PUSH BC
LD C,(IX+4)
LD E,(IY+2)
LD D,(IY+3)
LD A,BYTE3 ResShowMultiString
LD HL,LWRD ResShowMultiString
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
POP AF
?0007:
; 65. }
; 66.
; 67. //显示选择按钮(默认N0)
; 68. ResShowPic(DELNO,100,0);
LD C,0
PUSH BC
CALL LWRD ?0031
POP AF
?0009:
; 69.
; 70. while(1)
; 71. {
; 72. UpdateScreen(NULL);
LD DE,0
CALL LWRD UpdateScreen
; 73. key = ap_get_message(); //获取消息
CALL LWRD ap_get_message
; 74.
; 75. switch (key)
LD E,A
CALL LWRD ?C_V_SWITCH_L06
DEFW 7
DEFB 5
DEFB 6
DEFB 30
DEFB 33
DEFB 48
DEFB 69
DEFB 70
DEFW ?0021
DEFW ?0012
DEFW ?0012
DEFW ?0016
DEFW ?0016
DEFW ?0016
DEFW ?0012
DEFW ?0012
?0012:
; 76. {
; 77. case AP_KEY_NEXT: //YES和NO之间切换
; 78. case AP_KEY_PREV:
; 79. case AP_KEY_NEXT | AP_KEY_HOLD:
; 80. case AP_KEY_PREV | AP_KEY_HOLD:
; 81. if(Selectflag)
XOR A
OR (IX-3)
JR Z,?0014
?0013:
; 82. {
; 83. Selectflag = FALSE;
; 84. ResShowPic(DELNO,100,0);
LD C,0
PUSH BC
CALL LWRD ?0031
POP AF
LD (IX-3),0
; 85. }
; 86. else
JR ?0009
?0014:
; 87. {
; 88. Selectflag = TRUE;
; 89. ResShowPic(DELYES,100,0);
LD C,A
PUSH BC
LD C,100
LD DE,2
CALL LWRD ?0030
POP AF
LD (IX-3),1
?0015:
; 90. }
; 91. break;
JR ?0009
?0016:
; 92.
; 93. case AP_KEY_MODE | AP_KEY_UP:
; 94. if(Selectflag)
?0017:
; 95. {//YES时按下MODE键的处理
; 96. }
; 97. else
?0018:
; 98. {
; 99. return RESULT_IGNORE;//NO时按下MODE键的处理
; 100. }
?0019:
?0020:
; 101.
; 102. case AP_MSG_WAIT_TIMEOUT://8秒退出
; 103. case AP_KEY_PLAY | AP_KEY_UP:
; 104. return RESULT_IGNORE;
LD HL,52
; 105.
; 106.
; 107. default:
JR ?0027
?0021:
; 108. key=ap_handle_hotkey(key);//热键处理
CALL LWRD ap_handle_hotkey
LD (IX-4),A
; 109. if(key == RESULT_REDRAW)
CP 50
JR Z,?0009
?0022:
; 110. {
; 111. need_draw=TRUE;
?0023:
; 112. }
; 113. else if(key!=0)
XOR A
OR (IX-4)
JR Z,?0009
?0025:
; 114. {
; 115. return key;
LD L,A
LD H,0
; 116. }
?0027:
POP IY
JP LWRD ?BANK_LEAVE_DIRECT_L08
?0031:
LD C,100
LD DE,1
?0030:
LD A,BYTE3 ResShowPic
LD HL,LWRD ResShowPic
JP LWRD ?BANK_CALL_DIRECT_L08
?0026:
?0024:
?0011:
; 117. }//switch(key)
; 118. }//while(1)
; 119. }
; 120.
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -