📄 bookmark_menu.s01
字号:
NAME bookmark_menu(17)
RSEG CODE_1(0)
RSEG IDATA0(0)
RSEG CDATA0(0)
EXTERN add_bookmark
PUBLIC bookmark_op
EXTERN close_bookmark
EXTERN del_bookmark_id
EXTERN g_comval
EXTERN g_reader_vars
EXTERN get_bookmark
EXTERN get_num_bookmarks
EXTERN init_bookmark
EXTERN list
PUBLIC menuStr
EXTERN sub_list
EXTERN ui_bookmark_list
EXTERN ui_err_msg
EXTERN ui_popup_list
EXTERN ?CLZ80B_4_04_L00
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_FAST_LEAVE_L08
RSEG CODE_1
bookmark_op:
; 1. #include "actos.h"
; 2. #include "ap_common.h"
; 3. #include "display.h"
; 4. #include "ap_reader.h"
; 5. #include "bookmark.h"
; 6.
; 7. WORD menuStr[4]={MEB2,MEB4,MEB3,MSTOP5};
; 8. extern pop_up_list_t list;
; 9. extern pop_up_list_t sub_list;
; 10. #pragma codeseg(CODE_1)
; 11.
; 12. int bookmark_op(void) // interface to call
; 13. {
PUSH BC
PUSH DE
PUSH IY
PUSH IX
LD IX,0
ADD IX,SP
LD HL,65498
ADD HL,SP
LD SP,HL
; 14. int result,active;
; 15. byte i;
; 16. // pop_up_list_t list;
; 17. // function_menu_t Menu; // bookmark op menu
; 18. list.headid = PLAYMENU;
LD HL,416
LD (list+6),HL
; 19. list.total = 4;
LD HL,4
LD (list+2),HL
; 20. list.active = 0;
LD L,H
LD (list+4),HL
; 21. list.strid = menuStr;
LD HL,menuStr
LD (list),HL
; 22. list.string_id = g_comval.langid;
LD A,(g_comval+12)
LD (list+8),A
; 23. result = ui_popup_list(&list, NULL);
LD C,0
PUSH BC
LD L,C
LD H,C
PUSH HL
LD DE,list
LD A,BYTE3 ui_popup_list
LD HL,LWRD ui_popup_list
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
POP AF
PUSH HL
POP IY
; 24. if (result != 0)
LD A,L
OR H
JP NZ,?0038
?0002:
; 25. return result;
?0003:
; 26. if(list.active == 3) // return straightly
LD HL,(list+4)
LD A,3
XOR L
OR H
JP Z,?0031
?0004:
; 27. return RESULT_IGNORE;
?0005:
; 28.
; 29. /* we need to init bookmark data and prepare for op */
; 30. if( init_bookmark() )
LD A,BYTE3 init_bookmark
LD HL,LWRD init_bookmark
CALL LWRD ?BANK_CALL_DIRECT_L08
INC L
DEC L
JR Z,?0007
?0006:
; 31. {
; 32. // FIXME: please change to open bookmark error
; 33. ui_err_msg(EBOKMSG2,EBOKMSG2,g_comval.langid);
LD BC,(g_comval+12)
LD B,0
PUSH BC
CALL LWRD ?0044
POP AF
?0007:
; 34. }
; 35.
; 36. i = get_num_bookmarks(); // get bookmarks number
LD A,BYTE3 get_num_bookmarks
LD HL,LWRD get_num_bookmarks
CALL LWRD ?BANK_CALL_DIRECT_L08
LD (IX-34),L
; 37.
; 38. if(list.active == 0 )
LD HL,(list+4)
LD A,L
OR H
JP NZ,?0009
?0008:
; 39. {
; 40. /* select bookmark and view content according bookmark */
; 41. if( i == 0 )
OR (IX-34)
JR NZ,?0011
?0010:
; 42. {
; 43. ui_err_msg(EBOKMSG2,EBOKMSG2,g_comval.langid);
LD BC,(g_comval+12)
LD B,A
PUSH BC
CALL LWRD ?0044
POP AF
; 44. close_bookmark();
JP LWRD ?0043
; 45. return RESULT_IGNORE;
; 46. }
?0011:
; 47. else
; 48. {
; 49. bkmark_node tmp;
; 50. // FIXME:
; 51. //list.strid = play_text;
; 52. sub_list.total = i;
LD C,A
LD B,0
LD (sub_list+2),BC
; 53. sub_list.active = 0;
LD L,B
LD H,B
LD (sub_list+4),HL
; 54. sub_list.string_id = g_comval.langid;
LD A,(g_comval+12)
LD (sub_list+8),A
; 55. sub_list.headid = menuStr[list.active];
LD HL,(list+4)
ADD HL,HL
LD BC,menuStr
ADD HL,BC
LD B,(HL)
INC HL
LD H,(HL)
LD L,B
LD (sub_list+6),HL
; 56. result = ui_bookmark_list(&sub_list, NULL);
LD C,0
PUSH BC
LD L,C
LD H,C
PUSH HL
LD DE,sub_list
LD A,BYTE3 ui_bookmark_list
LD HL,LWRD ui_bookmark_list
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
POP AF
PUSH HL
POP IY
; 57.
; 58. if( result != 0 )
LD A,L
OR H
JP NZ,?0039
?0012:
; 59. {
; 60. close_bookmark();
; 61. return result;
; 62. }
?0013:
; 63.
; 64. active = sub_list.active;
LD HL,(sub_list+4)
LD (IX-36),L
; 65. if( active >= MAX_BKMARK_NUM )
LD BC,32784
LD A,B
XOR H
LD H,A
SBC HL,BC
JP NC,?0043
?0014:
; 66. {
; 67. close_bookmark();
; 68. return RESULT_IGNORE;
; 69. }
?0015:
; 70.
; 71. /* jump to offset of the bookmark */
; 72. tmp = get_bookmark(active);
LD HL,5
ADD HL,SP
PUSH HL
LD C,(IX-36)
LD HL,23
ADD HL,SP
EX DE,HL
LD A,BYTE3 get_bookmark
LD HL,LWRD get_bookmark
CALL LWRD ?BANK_CALL_DIRECT_L08
POP DE
LD BC,16
LDIR
; 73. g_reader_vars.g_txt.CurrentSeek = tmp.offset;
LD C,(IX-31)
LD B,(IX-30)
LD L,(IX-33)
LD H,(IX-32)
LD (g_reader_vars+59),HL
LD (g_reader_vars+61),BC
JP LWRD ?0029
?0009:
; 74. // FIXME:
; 75. // reload content and display
; 76. }
; 77. }
; 78. else if(list.active == 1)
LD A,1
XOR L
OR H
JP NZ,?0019
?0018:
; 79. {
; 80. /* del bookmark */
; 81. if( i == 0 )
OR (IX-34)
JR NZ,?0021
?0020:
; 82. {
; 83. // No bookmark at current
; 84. ui_err_msg(EBOKMSG2,EBOKMSG2,g_comval.langid);
LD BC,(g_comval+12)
LD B,A
PUSH BC
CALL LWRD ?0044
POP AF
; 85. }
; 86. else
JP LWRD ?0029
?0021:
; 87. {
; 88. // FIXME:
; 89. //list.strid = play_text;
; 90. sub_list.total = i;
LD C,A
LD B,0
LD (sub_list+2),BC
; 91. sub_list.active = 0;
LD L,B
LD H,B
LD (sub_list+4),HL
; 92. sub_list.string_id = g_comval.langid;
LD A,(g_comval+12)
LD (sub_list+8),A
; 93. sub_list.headid = menuStr[list.active];
LD HL,(list+4)
ADD HL,HL
LD BC,menuStr
ADD HL,BC
LD B,(HL)
INC HL
LD H,(HL)
LD L,B
LD (sub_list+6),HL
; 94. result = ui_bookmark_list(&sub_list, NULL);
LD C,0
PUSH BC
LD L,C
LD H,C
PUSH HL
LD DE,sub_list
LD A,BYTE3 ui_bookmark_list
LD HL,LWRD ui_bookmark_list
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
POP AF
PUSH HL
POP IY
; 95.
; 96. if( result != 0 )
LD A,L
OR H
JR Z,?0024
?0023:
; 97. {
; 98. close_bookmark();
?0039:
LD A,BYTE3 close_bookmark
LD HL,LWRD close_bookmark
CALL LWRD ?BANK_CALL_DIRECT_L08
; 99. return result;
?0038:
PUSH IY
POP HL
; 100. }
JP LWRD ?0032
?0024:
; 101.
; 102. active = sub_list.active;
LD HL,(sub_list+4)
LD (IX-36),L
; 103. if( active >= MAX_BKMARK_NUM )
LD BC,32784
LD A,B
XOR H
LD H,A
SBC HL,BC
JR C,?0026
?0025:
; 104. {
; 105. close_bookmark();
?0043:
LD A,BYTE3 close_bookmark
LD HL,LWRD close_bookmark
CALL LWRD ?BANK_CALL_DIRECT_L08
; 106. return RESULT_IGNORE;
JP LWRD ?0031
; 107. }
JP LWRD ?0032
?0026:
; 108.
; 109. /* del the bookmark */
; 110. del_bookmark_id(active);
LD E,(IX-36)
LD A,BYTE3 del_bookmark_id
LD HL,LWRD del_bookmark_id
CALL LWRD ?BANK_CALL_DIRECT_L08
?0022:
JR ?0029
?0019:
; 111. // FIXME:
; 112. // reload content and display bookmark list
; 113. }
; 114. }
; 115. else if(list.active == 2)
LD A,2
XOR L
OR H
JR NZ,?0029
?0028:
; 116. {
; 117. /* insert bookmark */
; 118. /* add the bookmark */
; 119. long CurrentLen_bak,PrevLen_bak;
; 120. CurrentLen_bak=g_reader_vars.g_txt.CurrentSeek;
LD HL,g_reader_vars+59
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD C,(HL)
INC HL
LD B,(HL)
EX DE,HL
LD (IX-33),L
LD (IX-32),H
LD (IX-31),C
LD (IX-30),B
; 121. PrevLen_bak=g_reader_vars.g_txt.PrevSeek;
LD HL,g_reader_vars+55
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD C,(HL)
INC HL
LD B,(HL)
EX DE,HL
LD (IX-29),L
LD (IX-28),H
LD (IX-27),C
LD (IX-26),B
; 122. /*
; 123. if(g_reader_vars.g_txt.BufSector==0&&g_reader_vars.g_txt.PrevSeek==0) //第一屏
; 124. {
; 125. g_reader_vars.g_txt.CurrentSeek=0;
; 126. }
; 127. else
; 128. {
; 129. view_page_up(&g_reader_vars.g_txt,NULL);
; 130. view_page_down(&g_reader_vars.g_txt, 1,NULL ); // 读当前屏到buffer,计算当前屏
; 131. */
; 132. g_reader_vars.g_txt.CurrentSeek=g_reader_vars.g_txt.PrevSeek; //取当前屏第一行的位置
LD HL,g_reader_vars+55
LD E,(HL)
INC HL
LD D,(HL)
EX DE,HL
LD (g_reader_vars+59),HL
LD (g_reader_vars+61),BC
; 133. add_bookmark(&g_reader_vars.g_txt, NULL, 0xFFFFFFFF);
LD HL,65535
PUSH HL
PUSH HL
LD C,A
LD B,A
LD DE,g_reader_vars+49
LD A,BYTE3 add_bookmark
LD HL,LWRD add_bookmark
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
POP AF
; 134. g_reader_vars.g_txt.CurrentSeek=CurrentLen_bak;
LD C,(IX-31)
LD B,(IX-30)
LD L,(IX-33)
LD H,(IX-32)
LD (g_reader_vars+59),HL
LD (g_reader_vars+61),BC
; 135. g_reader_vars.g_txt.PrevSeek=PrevLen_bak;
LD C,(IX-27)
LD B,(IX-26)
LD L,(IX-29)
LD H,(IX-28)
LD (g_reader_vars+55),HL
LD (g_reader_vars+57),BC
?0029:
?0027:
?0017:
; 136. // }
; 137. // FIXME:
; 138. // reload content and display bookmark list
; 139. }
; 140.
; 141. close_bookmark();
LD A,BYTE3 close_bookmark
LD HL,LWRD close_bookmark
CALL LWRD ?BANK_CALL_DIRECT_L08
; 142. if(list.active == 0)
LD HL,(list+4)
LD A,L
OR H
JR NZ,?0031
?0030:
; 143. return 0;
LD L,A
LD H,A
; 144. else
JR ?0032
?0031:
; 145. return RESULT_IGNORE;
LD HL,52
; 146. }
?0032:
LD SP,IX
POP IX
POP IY
POP DE
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
?0044:
LD BC,426
LD E,C
LD D,B
LD A,BYTE3 ui_err_msg
LD HL,LWRD ui_err_msg
JP LWRD ?BANK_CALL_DIRECT_L08
; 147.
; 148. #pragma function = default
RSEG IDATA0
menuStr:
DEFS 8
RSEG CDATA0
DEFW 422
DEFW 424
DEFW 423
DEFW 465
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -