Rev 1285 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1285 | Rev 1303 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | ; ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj |
1 | ; ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj |
2 | ; ýëåìåíò TreeList äëÿ Kolibri OS |
2 | ; ýëåìåíò TreeList äëÿ Kolibri OS |
3 | ; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 24.11.2009 IgorA |
3 | ; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 2.12.2009 IgorA |
4 | ; íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ |
4 | ; íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ |
Line 5... | Line 5... | ||
5 | 5 | ||
6 | 6 | ||
Line 30... | Line 30... | ||
30 | tl_box_left equ dword[edi+58] |
30 | tl_box_left equ dword[edi+58] |
31 | tl_box_top equ dword[edi+62] |
31 | tl_box_top equ dword[edi+62] |
32 | tl_box_width equ dword[edi+66] |
32 | tl_box_width equ dword[edi+66] |
33 | tl_box_height equ dword[edi+70] |
33 | tl_box_height equ dword[edi+70] |
34 | tl_capt_cy equ word[edi+74] ;âûñîòà ïîäïèñè |
34 | tl_capt_cy equ word[edi+74] ;âûñîòà ïîäïèñè |
35 | tl_info_capt_offs equ dword[edi+76] ;ñäâèã äëÿ íà÷àëà òåêñòà (ïîäïèñè óçëà) |
35 | tl_info_capt_offs equ word[edi+76] ;ñäâèã äëÿ íà÷àëà òåêñòà (ïîäïèñè óçëà) |
- | 36 | tl_info_capt_len equ word[edi+78] ;äëèííà òåêñòà ïîäïèñè óçëà (åñëè = 0 òî äî êîíöà ñòðóêòóðû) |
|
36 | tl_el_focus equ dword[edi+80] ;óêàçàòåëü íà ñòðóêòóðó ýëåìåíòà â ôîêóñå |
37 | tl_el_focus equ dword[edi+80] ;óêàçàòåëü íà ñòðóêòóðó ýëåìåíòà â ôîêóñå |
37 | tl_p_scrol equ dword[edi+84] ;óêàçàòåëü íà ñòðóêòóðó ñêðîëëèíãà |
38 | tl_p_scrol equ dword[edi+84] ;óêàçàòåëü íà ñòðóêòóðó ñêðîëëèíãà |
38 | tl_sb_draw equ dword[edi+88] ;óêàçàòåëü íà ôóíêöèþ ïåðåðèñîâûâàþùóþ ñêðîëëèíã |
39 | tl_sb_draw equ dword[edi+88] ;óêàçàòåëü íà ôóíêöèþ ïåðåðèñîâûâàþùóþ ñêðîëëèíã |
39 | tl_on_press equ dword[edi+96] ;óêàçàòåëü íà ôóíêöèþ, êîòîðàÿ âûçûâàåòñÿ ïðè íàæàòèè Enter |
40 | tl_on_press equ dword[edi+96] ;óêàçàòåëü íà ôóíêöèþ, êîòîðàÿ âûçûâàåòñÿ ïðè íàæàòèè Enter |
Line 40... | Line 41... | ||
40 | 41 | ||
41 | ;êîíñòàíòû ñòèëÿ |
42 | ;êîíñòàíòû ñòèëÿ |
42 | tl_key_no_edit equ 1b ;ýëåìåíò íåëüçÿ ðåäàêòèðîâàòü íà êëàâèàòóðå (èçìåíÿòü óðîâíè, óäàëÿòü) |
43 | tl_key_no_edit equ 1b ;ýëåìåíò íåëüçÿ ðåäàêòèðîâàòü íà êëàâèàòóðå (èçìåíÿòü óðîâíè, óäàëÿòü) |
43 | tl_draw_par_line equ 10b ;ðèñîâàòü ëèíèè ê ðîäèòåëüñêîìó óçëó |
44 | tl_draw_par_line equ 10b ;ðèñîâàòü ëèíèè ê ðîäèòåëüñêîìó óçëó |
Line -... | Line 45... | ||
- | 45 | tl_list_box_mode equ 100b ;ñòèëü íå îòîáðàæàåò óðîâíè (êàê â ListBox âñå îäíîãî óðîâíÿ) |
|
- | 46 | ||
- | 47 | ;êîíñòàíòû äëÿ ôóíêöèé |
|
- | 48 | tl_err_save_memory_size equ 10b ;íå õâàòàåò ïàìÿòè äëÿ ñîõðàíåíèÿ ýëåìåíòà |
|
- | 49 | tl_err_load_caption equ 1b ;â ïàìÿòè íåò çàãîëîâêà 'tree' |
|
- | 50 | tl_err_load_info_size equ 100b ;íå ñîâïàäàåò ðàçìåð èíôîðìàöèîííîé ñòðóêòóðû ïðè îòêðûòèè |
|
- | 51 | tl_load_mode_add equ 0x20000 ;îïöèÿ ñ÷èòûâàíèÿ â ðåæèìå äîáàâëåíèÿ èíôîðìàöèè |
|
44 | tl_list_box_mode equ 100b ;ñòèëü íå îòîáðàæàåò óðîâíè (êàê â ListBox âñå îäíîãî óðîâíÿ) |
52 | tl_save_load_heder_size equ 26 ;ðàçìåð çàãîëîâêà äëÿ çàïèñè/÷òåíèÿ ýëåìåíòîâ |
45 | 53 | ||
46 | ;data_info dd ? ;+ 0 óêàçàòåëü íà îñíîâíûå äàíûå |
54 | ;data_info dd ? ;+ 0 óêàçàòåëü íà îñíîâíûå äàíûå |
47 | ;info_max_count dd ? ;+ 6 ìàêñèìàëüíîå êîëëè÷åñòâî ñòðóêòóð |
55 | ;info_max_count dd ? ;+ 6 ìàêñèìàëüíîå êîëëè÷åñòâî ñòðóêòóð |
48 | ;data_img dd ? ;+18 óêàçàòåëü íà èçîáðàæåíèÿ |
56 | ;data_img dd ? ;+18 óêàçàòåëü íà èçîáðàæåíèÿ |
Line 49... | Line 57... | ||
49 | ;ls_tim dd ? ;+34 âðåìÿ ïîñëåäíåãî ñîõðàíåíèÿ |
57 | ;ls_tim dd ? ;+34 âðåìÿ ïîñëåäíåãî ñîõðàíåíèÿ |
50 | ;on_activate dd ? ;+92 óêàçàòåëü íà ôóíêöèþ ïðè àêòèâèðîâàíèè óçëà |
58 | ;on_activate dd ? ;+92 óêàçàòåëü íà ôóíêöèþ ïðè àêòèâèðîâàíèè óçëà |
51 | 59 | ||
52 | struc tree_list info_size,info_max_count,style, img_cx,img_cy,\ |
60 | struc tree_list info_size,info_max_count,style, img_cx,img_cy,\ |
53 | col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\ |
61 | col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\ |
54 | el_focus, p_scrol,p_sb_draw,on_press { |
62 | info_capt_len,el_focus, p_scrol,p_sb_draw,on_press { |
55 | .data_info dd 0 |
63 | .data_info dd 0 |
56 | .info_size dw info_size |
64 | .info_size dw info_size |
Line 66... | Line 74... | ||
66 | .tim_undo dd 0 |
74 | .tim_undo dd 0 |
67 | .cur_pos dd 0 |
75 | .cur_pos dd 0 |
68 | .col_bkg dd col_bkg |
76 | .col_bkg dd col_bkg |
69 | .col_zag dd col_zag |
77 | .col_zag dd col_zag |
70 | .col_txt dd col_txt |
78 | .col_txt dd col_txt |
71 | .box_lert dd box_l |
79 | .box_left dd box_l |
72 | .box_top dd box_t |
80 | .box_top dd box_t |
73 | .box_width dd box_w |
81 | .box_width dd box_w |
74 | .box_height dd box_h |
82 | .box_height dd box_h |
75 | .capt_cy dw capt_cy |
83 | .capt_cy dw capt_cy |
76 | .info_capt_offs dd info_capt_offs |
84 | .info_capt_offs dw info_capt_offs |
- | 85 | .info_capt_len dw info_capt_len |
|
77 | .el_focus dd el_focus |
86 | .el_focus dd el_focus |
78 | .p_scrol dd p_scrol |
87 | .p_scrol dd p_scrol |
79 | .p_sb_draw dd p_sb_draw |
88 | .p_sb_draw dd p_sb_draw |
80 | .on_activate dd 0 |
89 | .on_activate dd 0 |
81 | .on_press dd on_press |
90 | .on_press dd on_press |
Line 203... | Line 212... | ||
203 | mov byte[eax],0 ;÷èñòèì óçëû 0-ìè |
212 | mov byte[eax],0 ;÷èñòèì óçëû 0-ìè |
204 | inc eax |
213 | inc eax |
205 | loop @b |
214 | loop @b |
206 | mov eax,tl_data_nodes ;óêàçàòåëü íà 0-é óçåë |
215 | mov eax,tl_data_nodes ;óêàçàòåëü íà 0-é óçåë |
207 | mov dword[eax+8],1 ;óêàçàòåëü next â 0-ì óçëå ïðèðàâíèâàåì ê 1 |
216 | mov dword[eax+8],1 ;óêàçàòåëü next â 0-ì óçëå ïðèðàâíèâàåì ê 1 |
- | 217 | ||
208 | call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà |
218 | cmp tl_p_scrol,0 ;îáðàáîòêà ñêðîëëèíãà |
- | 219 | je @f |
|
- | 220 | mov eax,tl_p_scrol |
|
- | 221 | mov dword[eax+24],0 ;+24 .position |
|
- | 222 | call tb_scrol_resize |
|
- | 223 | @@: |
|
209 | pop edi ecx eax |
224 | pop edi ecx eax |
210 | pop ebp |
225 | pop ebp |
211 | ret 4 |
226 | ret 4 |
Line 212... | Line 227... | ||
212 | 227 | ||
213 | 228 | ||
214 | align 4 |
229 | align 4 |
215 | tl_key: ;ðåàêöèÿ íà êëàâèàòóðó |
230 | tl_key: ;ðåàêöèÿ íà êëàâèàòóðó |
216 | push ebp |
231 | push ebp |
217 | mov ebp,esp |
232 | mov ebp,esp |
Line 218... | Line 233... | ||
218 | push ebx edi |
233 | push ebx ecx edi |
219 | mov edi,dword[ebp+8] |
234 | mov edi,dword[ebp+8] |
220 | 235 | ||
Line -... | Line 236... | ||
- | 236 | mov ebx,tl_el_focus |
|
- | 237 | cmp dword[ebx],edi |
|
- | 238 | jne .no_focus ;ýëåìåíò íå â ôîêóñå |
|
- | 239 | ||
- | 240 | push eax |
|
- | 241 | mov eax,66 |
|
- | 242 | mov ebx,2 |
|
- | 243 | int 0x40 ;ïîëó÷èòü ðåæèì ââîäà ñ êëàâèàòóðû |
|
- | 244 | ||
- | 245 | lea ecx,[tl_key_scan] |
|
- | 246 | cmp eax,1 ;1 = ñêàíêîäû |
|
- | 247 | je @f |
|
221 | mov ebx,tl_el_focus |
248 | lea ecx,[tl_key_ascii] |
222 | cmp dword[ebx],edi |
249 | @@: |
223 | jne .no_focus ;ýëåìåíò íå â ôîêóñå |
250 | pop eax |
224 | 251 | ||
225 | xor bx,bx |
252 | xor bx,bx |
226 | cmp ah,13 ;Enter |
253 | cmp ah,byte[ecx] ;Enter |
227 | jne @f |
254 | jne @f |
228 | cmp tl_on_press,0 |
255 | cmp tl_on_press,0 |
229 | je @f |
256 | je @f |
230 | call tl_on_press |
257 | call tl_on_press |
231 | @@: |
258 | @@: |
232 | cmp ah,32 ;Space |
259 | cmp ah,byte[ecx+1] ;Space |
233 | jne @f |
260 | jne @f |
234 | push dword edi |
261 | push dword edi |
235 | call tl_node_close_open |
262 | call tl_node_close_open |
236 | @@: |
263 | @@: |
237 | cmp ah,178 ;Up |
264 | cmp ah,byte[ecx+2] ;Up |
238 | jne @f |
265 | jne @f |
239 | push dword edi |
266 | push dword edi |
240 | call tl_cur_perv |
267 | call tl_cur_perv |
241 | @@: |
268 | @@: |
242 | cmp ah,177 ;Down |
269 | cmp ah,byte[ecx+3] ;Down |
- | 270 | jne @f |
|
- | 271 | push dword edi |
|
- | 272 | call tl_cur_next |
|
- | 273 | @@: |
|
- | 274 | cmp ah,byte[ecx+7] ;Page Up |
|
- | 275 | jne @f |
|
- | 276 | push dword edi |
|
- | 277 | call tl_cur_page_up |
|
- | 278 | @@: |
|
- | 279 | cmp ah,byte[ecx+8] ;Page Down |
|
Line 243... | Line 280... | ||
243 | jne @f |
280 | jne @f |
244 | push dword edi |
281 | push dword edi |
245 | call tl_cur_next |
282 | call tl_cur_page_down |
246 | @@: |
283 | @@: |
247 | 284 | ||
248 | bt tl_style,0 ;tl_key_no_edit |
285 | bt tl_style,0 ;tl_key_no_edit |
249 | jc .no_edit |
286 | jc .no_edit |
250 | cmp ah,176 ;Left |
287 | cmp ah,byte[ecx+4] ;Left |
251 | jne @f |
288 | jne @f |
252 | push dword edi |
289 | push dword edi |
253 | call tl_node_lev_dec |
290 | call tl_node_lev_dec |
254 | mov bx,1 |
291 | mov bx,1 |
255 | @@: |
292 | @@: |
256 | cmp ah,179 ;Right |
293 | cmp ah,byte[ecx+5] ;Right |
257 | jne @f |
294 | jne @f |
258 | push dword edi |
295 | push dword edi |
259 | call tl_node_lev_inc |
296 | call tl_node_lev_inc |
260 | mov bx,1 |
297 | mov bx,1 |
261 | @@: |
298 | @@: |
262 | cmp ah,182 ;Delete |
299 | cmp ah,byte[ecx+6] ;Delete |
Line 271... | Line 308... | ||
271 | jne .no_focus |
308 | jne .no_focus |
272 | push dword edi |
309 | push dword edi |
273 | call tl_draw |
310 | call tl_draw |
274 | .no_focus: |
311 | .no_focus: |
Line 275... | Line 312... | ||
275 | 312 | ||
276 | pop edi ebx |
313 | pop edi ecx ebx |
277 | pop ebp |
314 | pop ebp |
Line 278... | Line 315... | ||
278 | ret 4 |
315 | ret 4 |
279 | 316 | ||
Line 1111... | Line 1148... | ||
1111 | tl_draw_node_caption: |
1148 | tl_draw_node_caption: |
1112 | push ebx ecx edx esi |
1149 | push ebx ecx edx esi |
Line 1113... | Line 1150... | ||
1113 | 1150 | ||
1114 | xor esi,esi |
1151 | xor esi,esi |
1115 | mov si,tl_info_size |
1152 | mov si,tl_info_size |
1116 | cmp esi,tl_info_capt_offs |
1153 | cmp si,tl_info_capt_offs |
Line 1117... | Line 1154... | ||
1117 | jle @f ;if caption size <= 0 |
1154 | jle @f ;if caption size <= 0 |
1118 | 1155 | ||
1119 | push eax |
1156 | push eax |
1120 | call tl_get_node_index ;eax = node index |
1157 | call tl_get_node_index ;eax = node index |
- | 1158 | imul esi,eax |
|
1121 | imul esi,eax |
1159 | pop eax |
1122 | pop eax |
- | |
1123 | add esi,dword[edi] |
1160 | add si,tl_info_capt_offs |
Line 1124... | Line 1161... | ||
1124 | add esi,tl_info_capt_offs |
1161 | add esi,dword[edi] |
1125 | mov edx,esi |
1162 | mov edx,esi |
1126 | 1163 | ||
Line 1221... | Line 1258... | ||
1221 | jne .u0 |
1258 | jne .u0 |
1222 | cmp dword [edx+16],0 |
1259 | cmp dword [edx+16],0 |
1223 | jne .u0 |
1260 | jne .u0 |
Line 1224... | Line 1261... | ||
1224 | 1261 | ||
1225 | inc tl_ch_tim |
1262 | inc tl_ch_tim |
1226 | push word[ebp+14] ;get type |
1263 | mov cx,word[ebp+14] ;get type |
- | 1264 | mov word[edx],cx |
|
- | 1265 | mov cl,byte[ebp+13] |
|
1227 | pop word[edx] |
1266 | mov byte[edx+3],cl ;node[i].clo |
1228 | mov byte[edx+2], 0 ;node[i].lev=0 |
1267 | mov byte[edx+2], 0 ;node[i].lev=0 |
1229 | bt tl_style,2 ;tl_list_box_mode |
1268 | bt tl_style,2 ;tl_list_box_mode |
1230 | jc .l_box_m |
1269 | jc .l_box_m |
1231 | mov cl,byte[ebp+12] |
1270 | mov cl,byte[ebp+12] |
Line 1249... | Line 1288... | ||
1249 | xchg edi,esi |
1288 | xchg edi,esi |
1250 | rep movsb |
1289 | rep movsb |
Line 1251... | Line 1290... | ||
1251 | 1290 | ||
1252 | mov esi,edi |
1291 | mov esi,edi |
1253 | mov edi,dword[ebp+16] ;restore edi |
1292 | mov edi,dword[ebp+16] ;restore edi |
1254 | mov ecx,tl_info_capt_offs |
1293 | mov cx,tl_info_capt_offs |
1255 | cmp cx,tl_info_size |
1294 | cmp cx,tl_info_size |
- | 1295 | jge .no_text_data |
|
- | 1296 | cmp tl_info_capt_len,0 ;ïðîâåðÿåì åñòü ëè îãðàíè÷åíèå íà äëèííó ñòðîêè |
|
- | 1297 | je .no_len_ogran |
|
- | 1298 | add cx,tl_info_capt_len |
|
- | 1299 | and ecx,0xffff |
|
- | 1300 | add esi,ecx |
|
- | 1301 | mov cx,tl_info_size |
|
- | 1302 | sub esi,ecx |
|
1256 | jge .no_text_data |
1303 | .no_len_ogran: |
1257 | dec esi |
1304 | dec esi |
1258 | mov byte[esi],0 |
1305 | mov byte[esi],0 |
1259 | .no_text_data: |
1306 | .no_text_data: |
Line 1332... | Line 1379... | ||
1332 | mov esi,dword[ebp+8] ;pointer to node data |
1379 | mov esi,dword[ebp+8] ;pointer to node data |
1333 | rep movsb |
1380 | rep movsb |
Line 1334... | Line 1381... | ||
1334 | 1381 | ||
1335 | mov esi,edi |
1382 | mov esi,edi |
1336 | mov edi,dword[ebp+12] ;restore edi |
1383 | mov edi,dword[ebp+12] ;restore edi |
1337 | mov ecx,tl_info_capt_offs |
1384 | mov cx,tl_info_capt_offs |
1338 | cmp cx,tl_info_size |
1385 | cmp cx,tl_info_size |
- | 1386 | jge .no_text_data |
|
- | 1387 | mov ax,tl_info_capt_len ;ïðîâåðÿåì åñòü ëè îãðàíè÷åíèå íà äëèííó òåêñòà |
|
- | 1388 | cmp ax,0 |
|
- | 1389 | je .no_limit |
|
- | 1390 | add cx,ax ;cx = tl_info_capt_offs + tl_info_capt_len |
|
- | 1391 | and ecx,0xffff |
|
- | 1392 | xor eax,eax |
|
- | 1393 | mov ax,tl_info_size |
|
- | 1394 | cmp eax,ecx |
|
- | 1395 | jl .no_limit ;ïîëüçîâàòåëü çàäàë ñëèøêîì áîëüøóþ äëèííó òåêñòà |
|
- | 1396 | add esi,ecx |
|
- | 1397 | sub esi,eax |
|
1339 | jge .no_text_data |
1398 | .no_limit: |
1340 | dec esi |
- | |
- | 1399 | dec esi |
|
1341 | mov byte[esi],0 |
1400 | mov byte[esi],0 ;îáíóëÿåì ïîñëåäíèé ñèìâîë ïîäïèñè, ÷òî-áû íå ãëþ÷èëî åñëè ïîëüçîâàòåëü çàäàë íåïðàâèëüíóþ ñòðóêòóðó |
Line 1342... | Line 1401... | ||
1342 | .no_text_data: |
1401 | .no_text_data: |
1343 | 1402 | ||
1344 | @@: |
1403 | @@: |
Line 1597... | Line 1656... | ||
1597 | jmp @b |
1656 | jmp @b |
1598 | @@: |
1657 | @@: |
1599 | pop edx ecx |
1658 | pop edx ecx |
1600 | ret |
1659 | ret |
Line -... | Line 1660... | ||
- | 1660 | ||
- | 1661 | ;input: |
|
- | 1662 | ; edi = pointer 'tl' struct |
|
- | 1663 | ;output: |
|
- | 1664 | ; eax = struct index of current node |
|
- | 1665 | align 4 |
|
- | 1666 | tl_get_node_count_all: ;áåðåò ÷èñëî âñåõ âèäèìûõ óçëîâ (ñ÷èòàÿ çàêðûòûå äî÷åðíèå) |
|
- | 1667 | push ecx edx |
|
- | 1668 | ;cycle to nodes |
|
- | 1669 | xor eax,eax |
|
- | 1670 | mov edx,tl_data_nodes |
|
- | 1671 | mov ecx,edx |
|
- | 1672 | add ecx,sizeof.TreeList |
|
- | 1673 | @@: |
|
- | 1674 | call tl_iterat_next_all |
|
- | 1675 | cmp edx,ecx |
|
- | 1676 | jle @f |
|
- | 1677 | inc eax |
|
- | 1678 | jmp @b |
|
- | 1679 | @@: |
|
- | 1680 | pop edx ecx |
|
- | 1681 | ret |
|
1601 | 1682 | ||
1602 | align 4 |
1683 | align 4 |
1603 | tl_cur_perv: ;ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ âûøå |
1684 | tl_cur_perv: ;ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ âûøå |
1604 | push ebp |
1685 | push ebp |
1605 | mov ebp,esp |
1686 | mov ebp,esp |
Line 1639... | Line 1720... | ||
1639 | pop esi edi eax |
1720 | pop esi edi eax |
1640 | pop ebp |
1721 | pop ebp |
1641 | ret 4 |
1722 | ret 4 |
Line 1642... | Line 1723... | ||
1642 | 1723 | ||
- | 1724 | align 4 |
|
- | 1725 | tl_cur_page_up: ;ïåðåíåñòè êóðñîð íà 1 ñòðàíèöó âûøå |
|
- | 1726 | push ebp |
|
- | 1727 | mov ebp,esp |
|
- | 1728 | push eax edi esi |
|
- | 1729 | mov edi,dword[ebp+8] |
|
- | 1730 | ||
- | 1731 | cmp tl_p_scrol,0 ;åñëè åñòü óêàçàòåëü íà ñêðîëëèíã |
|
- | 1732 | je .no_redraw |
|
- | 1733 | ||
- | 1734 | mov esi,tl_p_scrol |
|
- | 1735 | call tl_get_rows_count ;eax = rows count |
|
- | 1736 | ||
- | 1737 | cmp tl_cur_pos,0 |
|
- | 1738 | jne @f |
|
- | 1739 | cmp dword[esi+24],0 ;åñëè ñêðîëëèíã íà âåðõó, âûõîäèì |
|
- | 1740 | jne @f |
|
- | 1741 | jmp .no_redraw |
|
- | 1742 | @@: |
|
- | 1743 | cmp tl_cur_pos,eax ;ïðîâåðÿåì ïîçèöèþ êóðñîðà è êîë-âî ñòîê íà ñòðàíèöå |
|
- | 1744 | jl @f ;åñëè ìåíüøå, òî ïðèðàâíèâàåì ê 0, ÷òî-áû íå îòíÿòü áîëüøå ÷åì íàäî |
|
- | 1745 | sub tl_cur_pos,eax |
|
- | 1746 | jmp .cursor |
|
- | 1747 | @@: |
|
- | 1748 | mov tl_cur_pos,0 |
|
- | 1749 | .cursor: |
|
- | 1750 | cmp dword[esi+24],eax |
|
- | 1751 | jl @f |
|
- | 1752 | sub dword[esi+24],eax |
|
- | 1753 | jmp .scroll |
|
- | 1754 | @@: |
|
- | 1755 | mov dword[esi+24],0 |
|
- | 1756 | .scroll: |
|
- | 1757 | ;ïåðåðèñîâêè îêíà è ñêðîëëèíãà |
|
- | 1758 | push dword edi |
|
- | 1759 | call tl_draw ;draw window |
|
- | 1760 | push dword esi |
|
- | 1761 | mov eax,dword[ebp+8] |
|
- | 1762 | mov eax,tl_sb_draw ;.redraw |
|
- | 1763 | call dword[eax] |
|
- | 1764 | .no_redraw: |
|
- | 1765 | pop esi edi eax |
|
- | 1766 | pop ebp |
|
- | 1767 | ret 4 |
|
- | 1768 | ||
- | 1769 | align 4 |
|
- | 1770 | tl_cur_page_down: ;ïåðåíåñòè êóðñîð íà 1 ñòðàíèöó íèæå |
|
- | 1771 | push ebp |
|
- | 1772 | mov ebp,esp |
|
- | 1773 | push eax ebx ecx edi esi |
|
- | 1774 | ;eax - êîë-âî ñòðîê íà ñòðàíèöå |
|
- | 1775 | ;ebx - ìàêñ. ïîçèöèÿ êóðñîðà |
|
- | 1776 | ;ecx - ìàêñ. ïîçèöèÿ ñêðîëëèíãà |
|
- | 1777 | mov edi,dword[ebp+8] |
|
- | 1778 | ||
- | 1779 | cmp tl_p_scrol,0 ;åñëè åñòü óêàçàòåëü íà ñêðîëëèíã |
|
- | 1780 | je .no_redraw |
|
- | 1781 | ||
- | 1782 | mov esi,tl_p_scrol |
|
- | 1783 | call tl_get_node_count ;eax = node count |
|
- | 1784 | mov ebx,eax |
|
- | 1785 | call tl_get_rows_count ;eax = rows count |
|
- | 1786 | ||
- | 1787 | mov ecx,ebx |
|
- | 1788 | inc ecx ;åñëè íèæíèé óçåë âèäåí íà ïîëîâèíó |
|
- | 1789 | cmp ecx,eax ;if (ecx>eax) { ecx=ecx-eax } else { ecx=0 } |
|
- | 1790 | jl @f |
|
- | 1791 | sub ecx,eax ;óìåíüøàåì ìàêñèìàëüíóþ ïîçèöèþ ñêðîëëèíãà, òàê ÷òî-áû áûëè âèäíû ïîñëåäíèå óçëû |
|
- | 1792 | jmp .control |
|
- | 1793 | @@: |
|
- | 1794 | xor ecx,ecx ;ecx=0 - âñå óçëû âëàçÿò â ýêðàí, ñêðîëëèíã íå íóæåí |
|
- | 1795 | .control: |
|
- | 1796 | ||
- | 1797 | cmp tl_cur_pos,ebx ;êóðñîð âíèçó ? |
|
- | 1798 | jl @f |
|
- | 1799 | cmp dword[esi+24],ecx ;ñêðîëëèíã âíèçó ? |
|
- | 1800 | jl @f |
|
- | 1801 | jmp .no_redraw |
|
- | 1802 | @@: |
|
- | 1803 | ||
- | 1804 | add tl_cur_pos,eax ;ïåðåìåùàåì êóðñîð |
|
- | 1805 | cmp tl_cur_pos,ebx |
|
- | 1806 | jl @f |
|
- | 1807 | mov tl_cur_pos,ebx |
|
- | 1808 | @@: |
|
- | 1809 | ||
- | 1810 | add dword[esi+24],eax ;ïåðåìåùàåì ñêðîëëèíã |
|
- | 1811 | cmp dword[esi+24],ecx |
|
- | 1812 | jl @f |
|
- | 1813 | mov dword[esi+24],ecx |
|
- | 1814 | @@: |
|
- | 1815 | ||
- | 1816 | ;ïåðåðèñîâêè îêíà è ñêðîëëèíãà |
|
- | 1817 | push dword edi |
|
- | 1818 | call tl_draw ;draw window |
|
- | 1819 | push dword esi |
|
- | 1820 | mov eax,dword[ebp+8] |
|
- | 1821 | mov eax,tl_sb_draw ;.redraw |
|
- | 1822 | call dword[eax] |
|
- | 1823 | .no_redraw: |
|
- | 1824 | pop esi edi ecx ebx eax |
|
- | 1825 | pop ebp |
|
- | 1826 | ret 4 |
|
- | 1827 | ||
1643 | align 4 |
1828 | align 4 |
1644 | tl_node_close_open: ;îòêðûòü/çàêðûòü óçåë (ðàáîòàåò ñ óçëàìè êîòîðûå èìåþò äî÷åðíèå óçëû) |
1829 | tl_node_close_open: ;îòêðûòü/çàêðûòü óçåë (ðàáîòàåò ñ óçëàìè êîòîðûå èìåþò äî÷åðíèå óçëû) |
1645 | push ebp |
1830 | push ebp |
1646 | mov ebp,esp |
1831 | mov ebp,esp |
1647 | push eax edx edi |
1832 | push eax edx edi |
Line 1872... | Line 2057... | ||
1872 | int 0x40 |
2057 | int 0x40 |
1873 | pop esi edi edx ecx ebx eax |
2058 | pop esi edi edx ecx ebx eax |
1874 | @@: |
2059 | @@: |
1875 | ret |
2060 | ret |
Line -... | Line 2061... | ||
- | 2061 | ||
- | 2062 | ;input: |
|
- | 2063 | ;dword[ebp+ 8] - memory size |
|
- | 2064 | ;dword[ebp+12] - pointer to memory |
|
- | 2065 | ;dword[ebp+16] - options: 0 - first element, 1 - add next element |
|
- | 2066 | ;dword[ebp+20] - pointer to 'TreeList' struct |
|
- | 2067 | ;output: |
|
- | 2068 | ;dword[ebp+ 8] - error code |
|
- | 2069 | align 4 |
|
- | 2070 | tl_save_mem: |
|
- | 2071 | push ebp |
|
- | 2072 | mov ebp,esp |
|
- | 2073 | push eax ebx ecx edx edi esi |
|
- | 2074 | mov esi,dword[ebp+12] |
|
- | 2075 | mov edi,dword[ebp+20] |
|
- | 2076 | ||
- | 2077 | cmp dword[ebp+16],0 ;add mode |
|
- | 2078 | je @f |
|
- | 2079 | .beg_cycle: |
|
- | 2080 | cmp dword[esi],0x65657274 ;0x65657274 = 'tree' |
|
- | 2081 | jne @f |
|
- | 2082 | xor ebx,ebx |
|
- | 2083 | mov bx,word[esi+4] |
|
- | 2084 | imul ebx,dword[esi+6] |
|
- | 2085 | add ebx,tl_save_load_heder_size |
|
- | 2086 | add esi,ebx |
|
- | 2087 | jmp .beg_cycle |
|
- | 2088 | @@: |
|
- | 2089 | ||
- | 2090 | xor ebx,ebx |
|
- | 2091 | mov bx,tl_info_size |
|
- | 2092 | ||
- | 2093 | call tl_get_node_count_all ;eax = all node count |
|
- | 2094 | ||
- | 2095 | mov ecx,eax ;âû÷èñëÿåì ñêîëüêî ïàìÿòè äîëæíî áûòü çàïîëíåíî |
|
- | 2096 | imul ecx,ebx ;óìíîæàåì íà ðàçìåð ñòðóêòóðû óçëà |
|
- | 2097 | add ecx,tl_save_load_heder_size+1 ;element header +1 end element sumbol |
|
- | 2098 | add ecx,esi ;äîáàâëÿåì óêàçàòåëü íà íà÷àëî ïàìÿòè (ñ ó÷åòîì ðàíåå çàïèñàííûõ ñòðóêòóð) |
|
- | 2099 | sub ecx,dword[ebp+12] ;îòíèìàåì óêàçàòåëü íà íà÷àëî ïàìÿòè (áåç ðàíåå çàïèñàííûõ ñòðóêòóð) |
|
- | 2100 | cmp ecx,dword[ebp+8] ;ecx = element memory size |
|
- | 2101 | jg .err_mem_size |
|
- | 2102 | ||
- | 2103 | ;save tree params |
|
- | 2104 | mov dword[esi],0x65657274 ;0x65657274 = 'tree' |
|
- | 2105 | mov word[esi+4],bx |
|
- | 2106 | mov dword[esi+6],eax ;element count |
|
- | 2107 | add esi,10 |
|
- | 2108 | ||
- | 2109 | mov eax,tl_style |
|
- | 2110 | mov dword[esi],eax |
|
- | 2111 | add esi,4 |
|
- | 2112 | ||
- | 2113 | mov eax,tl_cur_pos |
|
- | 2114 | mov dword[esi],eax |
|
- | 2115 | add esi,4 |
|
- | 2116 | ||
- | 2117 | mov ax,tl_info_capt_offs |
|
- | 2118 | mov word[esi],ax |
|
- | 2119 | add esi,2 |
|
- | 2120 | ||
- | 2121 | mov ax,tl_info_capt_len |
|
- | 2122 | mov word[esi],ax |
|
- | 2123 | add esi,2+4 |
|
- | 2124 | ||
- | 2125 | ;cycle to nodes |
|
- | 2126 | mov edx,tl_data_nodes |
|
- | 2127 | mov ecx,edx |
|
- | 2128 | add ecx,sizeof.TreeList |
|
- | 2129 | @@: |
|
- | 2130 | call tl_iterat_next_all |
|
- | 2131 | cmp edx,ecx |
|
- | 2132 | jle @f |
|
- | 2133 | ;save node params |
|
- | 2134 | call tl_get_node_index ;eax = index of pointer [edx] |
|
- | 2135 | mov dword[esi],eax |
|
- | 2136 | ||
- | 2137 | add esi,4 |
|
- | 2138 | mov eax,dword[edx] ;eax = (type; lev; clo) |
|
- | 2139 | mov dword[esi],eax |
|
- | 2140 | add esi,4 |
|
- | 2141 | ||
- | 2142 | ;push dword edi |
|
- | 2143 | ;call tl_node_get_data |
|
- | 2144 | ;pop eax |
|
- | 2145 | push dword edi |
|
- | 2146 | push dword edx |
|
- | 2147 | call tl_node_poi_get_data |
|
- | 2148 | pop dword eax |
|
- | 2149 | ||
- | 2150 | ;call tl_node_copy_data |
|
- | 2151 | push ecx edi |
|
- | 2152 | mov edi,eax |
|
- | 2153 | mov ecx,ebx |
|
- | 2154 | xchg esi,edi |
|
- | 2155 | rep movsb |
|
- | 2156 | mov esi,edi |
|
- | 2157 | pop edi ecx |
|
- | 2158 | ;add esi,ebx |
|
- | 2159 | jmp @b |
|
- | 2160 | @@: |
|
- | 2161 | mov byte[esi],0 ;end of 'treelist' |
|
- | 2162 | mov dword[ebp+20],0 ;return error code |
|
- | 2163 | jmp @f |
|
- | 2164 | .err_mem_size: |
|
- | 2165 | or dword[ebp+20],tl_err_save_memory_size |
|
- | 2166 | @@: |
|
- | 2167 | pop esi edi edx ecx ebx eax |
|
- | 2168 | pop ebp |
|
- | 2169 | ret 12 |
|
- | 2170 | ||
- | 2171 | ;input: |
|
- | 2172 | ;dword[ebp+ 8] - memory size |
|
- | 2173 | ;dword[ebp+12] - pointer to memory |
|
- | 2174 | ;word[ebp+16] - options: element index |
|
- | 2175 | ;word[ebp+18] - options: 2*(add mode)+(init mode) |
|
- | 2176 | ;dword[ebp+20] - pointer to 'TreeList' struct |
|
- | 2177 | ;output: |
|
- | 2178 | ;dword[ebp+ 8] - error code |
|
- | 2179 | align 4 |
|
- | 2180 | tl_load_mem: |
|
- | 2181 | push ebp |
|
- | 2182 | mov ebp,esp |
|
- | 2183 | push eax ebx ecx edx edi esi |
|
- | 2184 | mov esi,dword[ebp+12] |
|
- | 2185 | mov edi,dword[ebp+20] |
|
- | 2186 | ||
- | 2187 | mov dword[ebp+20],0 ;return error code |
|
- | 2188 | ||
- | 2189 | xor ecx,ecx |
|
- | 2190 | mov cx,word[ebp+16] |
|
- | 2191 | cmp cx,0 ;load in array mode |
|
- | 2192 | je @f |
|
- | 2193 | .beg_cycle: |
|
- | 2194 | cmp dword[esi],0x65657274 ;0x65657274 = 'tree' |
|
- | 2195 | jne .no_tree |
|
- | 2196 | xor ebx,ebx |
|
- | 2197 | mov bx,word[esi+4] |
|
- | 2198 | imul ebx,dword[esi+6] |
|
- | 2199 | add ebx,tl_save_load_heder_size |
|
- | 2200 | add esi,ebx |
|
- | 2201 | loop .beg_cycle |
|
- | 2202 | @@: |
|
- | 2203 | ||
- | 2204 | cmp dword[esi],0x65657274 ;0x65657274 = 'tree' |
|
- | 2205 | jne .no_tree |
|
- | 2206 | bt word[ebp+18],1 ;load in add mode |
|
- | 2207 | jc @f |
|
- | 2208 | push dword edi |
|
- | 2209 | call tl_info_clear |
|
- | 2210 | @@: |
|
- | 2211 | ||
- | 2212 | xor ebx,ebx |
|
- | 2213 | mov bx,word[esi+4] ;info_size |
|
- | 2214 | cmp bx,tl_info_size |
|
- | 2215 | je @f |
|
- | 2216 | or dword[ebp+20],tl_err_load_info_size |
|
- | 2217 | @@: |
|
- | 2218 | mov ecx,dword[esi+6] ;count nodes |
|
- | 2219 | cmp ecx,1 |
|
- | 2220 | jl .end_f |
|
- | 2221 | add esi,tl_save_load_heder_size |
|
- | 2222 | ||
- | 2223 | @@: |
|
- | 2224 | ;load node params |
|
- | 2225 | push dword edi |
|
- | 2226 | mov eax,dword[esi+4] |
|
- | 2227 | ror eax,16 |
|
- | 2228 | push dword eax ;options (type; lev; clo) |
|
- | 2229 | add esi,8 |
|
- | 2230 | push dword esi |
|
- | 2231 | call tl_node_add |
|
- | 2232 | ||
- | 2233 | push dword edi |
|
- | 2234 | call tl_cur_next |
|
- | 2235 | ;... |
|
- | 2236 | add esi,ebx |
|
- | 2237 | loop @b |
|
- | 2238 | ||
- | 2239 | jmp .end_f |
|
- | 2240 | .no_tree: |
|
- | 2241 | mov dword[ebp+20],tl_err_load_caption |
|
- | 2242 | .end_f: |
|
- | 2243 | pop esi edi edx ecx ebx eax |
|
- | 2244 | pop ebp |
|
- | 2245 | ret 12 |
|
- | 2246 | ||
- | 2247 | ;ascii scan key |
|
- | 2248 | ; 13 28 Enter |
|
- | 2249 | ; 32 57 Space |
|
- | 2250 | ; 178 72 Up |
|
- | 2251 | ; 177 80 Down |
|
- | 2252 | ; 176 75 Left |
|
- | 2253 | ; 179 77 Right |
|
- | 2254 | ; 182 83 Delete |
|
- | 2255 | ; 184 73 Pg Up |
|
- | 2256 | ; 183 81 Pg Dn |
|
- | 2257 | ||
- | 2258 | tl_key_ascii db 13,32,178,177,176,179,182,184,183 |
|
- | 2259 | tl_key_scan db 28,57, 72, 80, 75, 77, 83, 73, 81 |
|
1876 | 2260 | ||
1877 | txt_capt_cur db 'âப ',0 |
2261 | txt_capt_cur db 'âப ',0 |
1878 | txt_capt_otm db '⬥ë',0 |
2262 | txt_capt_otm db '⬥ë',0 |
1879 | } |
2263 | } |