Subversion Repositories Kolibri OS

Rev

Rev 3545 | Rev 4060 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3545 Rev 3981
Line 132... Line 132...
132
        dec     esi
132
        dec     esi
Line 133... Line 133...
133
 
133
 
Line 134... Line -...
134
        ret
-
 
135
 
-
 
136
 
-
 
137
align 4
-
 
138
find_window:                            ; esi is ptr to windowname
-
 
139
 
-
 
140
        push    esi
-
 
141
 
-
 
142
        mov     edi, esi
-
 
143
        call    compare_to_nick
-
 
144
        jne     .nochat
-
 
145
 
-
 
146
        mov     esi, servercommand+1
-
 
147
  .nochat:
-
 
148
 
-
 
149
; now search for window in list
-
 
150
        mov     ebx, windows
-
 
151
        mov     [window_print], ebx     ; set first window (server window) as default output window
-
 
152
  .scanloop:
-
 
153
        cmp     [ebx + window.data_ptr], 0
-
 
154
        je      .create_it
-
 
155
        push    esi
-
 
156
        lea     edi, [ebx + window.name]
-
 
157
        mov     ecx, MAX_WINDOWNAME_LEN
-
 
158
        repe    cmpsb
-
 
159
        pop     esi
-
 
160
        cmp     byte[edi-1], 0
-
 
161
        je      .got_it
-
 
162
        add     ebx, sizeof.window
-
 
163
        ; TODO: check buffer limits ?
-
 
164
        jmp     .scanloop
-
 
165
 
-
 
166
; create channel window - search for empty slot
-
 
167
  .create_it:
-
 
168
        mov     ebx, windows
-
 
169
        mov     ecx, MAX_WINDOWS
-
 
170
  .scanloop2:
-
 
171
        cmp     [ebx + window.data_ptr], 0
-
 
172
        je      .free_found
-
 
173
        add     ebx, sizeof.window
-
 
174
        dec     ecx
-
 
175
        jnz     .scanloop2
-
 
176
; Error: no more available windows!
-
 
177
        jmp     .just_skip
-
 
178
 
-
 
179
  .free_found:
-
 
180
        push    ebx
-
 
181
        call    window_create
-
 
182
        pop     ebx
-
 
183
        test    eax, eax
-
 
184
        jz      .just_skip
-
 
185
        mov     [ebx + window.data_ptr], eax
-
 
186
        mov     [ebx + window.type], WINDOWTYPE_CHAT
-
 
187
        mov     [ebx + window.flags], 0
-
 
188
 
-
 
189
        call    window_set_name
-
 
190
 
-
 
191
        mov     [window_open], ebx
-
 
192
        mov     [window_print], ebx
-
 
193
        call    window_refresh
-
 
194
 
-
 
195
        call    draw_windownames
-
 
196
        jmp     .just_skip
-
 
197
 
-
 
198
; found it!
-
 
199
  .got_it:
-
 
200
        mov     [window_print], ebx
-
 
201
        call    window_refresh
-
 
202
 
-
 
203
  .just_skip:
-
 
204
        pop     esi
-
 
205
  .skip1:
-
 
206
; skip text
-
 
207
        lodsb
-
 
208
        test    al, al
-
 
209
        jz      .quit
-
 
210
        cmp     al, ' '
-
 
211
        jne     .skip1
-
 
212
        dec     esi
-
 
213
; now skip trailing spaces and semicolons
-
 
214
  .skip2:
-
 
215
        lodsb
-
 
216
        test    al, al
-
 
217
        jz      .quit
-
 
218
        cmp     al, ' '
-
 
219
        je      .skip2
-
 
220
        cmp     al, ':'
-
 
221
        je      .skip2
-
 
222
        dec     esi
-
 
223
 
-
 
224
  .quit:
-
 
225
        ret
-
 
226
 
-
 
227
 
-
 
Line 228... Line 134...
228
 
134
        ret
229
 
135
 
230
 
136
 
231
 
137
 
Line 305... Line 211...
305
 
211
 
Line 306... Line 212...
306
 
212
 
307
cmd_privmsg:
213
cmd_privmsg:
Line 308... Line 214...
308
 
214
 
309
        add     esi, 8          ; skip 'PRIVMSG '
215
        add     esi, 8          ; skip 'PRIVMSG '
Line 310... Line 216...
310
        call    find_window     ; esi now points to end of destination name
216
        call    window_open     ; esi now points to end of destination name
Line 366... Line 272...
366
        mov     bl, 10
272
        mov     bl, 10
367
        call    print_character
273
        call    print_character
Line 368... Line 274...
368
 
274
 
Line -... Line 275...
-
 
275
        ret
-
 
276
 
369
        ret
277
 
370
 
278
 
Line 371... Line 279...
371
cmd_ctcp:
279
cmd_ctcp:
372
        inc     esi
280
        inc     esi
Line 518... Line 426...
518
 
426
 
519
cmd_part:
427
cmd_part:
520
        add     esi, 5  ; skip 'PART '
428
        add     esi, 5  ; skip 'PART '
521
        push    esi
429
        push    esi
522
        call    skip_nick
430
        call    skip_nick
523
        call    find_window
431
        call    window_open
Line 524... Line 432...
524
        pop     esi
432
        pop     esi
525
 
433
 
526
; Is it me who parted?
434
; Is it me who parted?
Line 593... Line 501...
593
        mov     [ebx + window.type], WINDOWTYPE_CHANNEL
501
        mov     [ebx + window.type], WINDOWTYPE_CHANNEL
594
        mov     [ebx + window.flags], 0
502
        mov     [ebx + window.flags], 0
Line 595... Line 503...
595
 
503
 
Line 596... Line 504...
596
        call    window_set_name
504
        call    window_set_name
597
 
505
 
598
        mov     [window_open], ebx
506
        mov     [window_active], ebx
Line 599... Line 507...
599
        mov     [window_print], ebx
507
        mov     [window_print], ebx
600
        call    window_refresh
508
        call    window_refresh
Line 617... Line 525...
617
 
525
 
Line 618... Line 526...
618
        ret
526
        ret
619
 
527
 
620
  .no_new_window:
528
  .no_new_window:
Line 621... Line 529...
621
        push    esi
529
        push    esi
622
        call    find_window
530
        call    window_open
Line 623... Line 531...
623
 
531
 
Line 724... Line 632...
724
 
632
 
725
  .not_me:
633
  .not_me:
726
; find the channel user has been kicked from
634
; find the channel user has been kicked from
727
        push    esi
635
        push    esi
728
        call    skip_nick
636
        call    skip_nick
Line 729... Line 637...
729
        call    find_window
637
        call    window_open
730
 
638
 
Line 731... Line 639...
731
        mov     esi, action_header_short
639
        mov     esi, action_header_short
Line 804... Line 712...
804
 
712
 
805
        add     esi, 4  ; skip '353 '
713
        add     esi, 4  ; skip '353 '
806
        call    skip_nick
714
        call    skip_nick
807
        inc     esi     ; channel type '*', '=' or '@'
715
        inc     esi     ; channel type '*', '=' or '@'
808
        inc     esi     ; ' '
716
        inc     esi     ; ' '
Line 809... Line 717...
809
        call    find_window
717
        call    window_open
810
 
718
 
811
; now find window ptr and check if this is the first 353 message
719
; now find window ptr and check if this is the first 353 message
812
        mov     ebx, [window_print]
720
        mov     ebx, [window_print]
Line 841... Line 749...
841
 
749
 
Line 842... Line 750...
842
cmd_366:        ; channel usernames end
750
cmd_366:        ; channel usernames end
843
 
751
 
844
        add     esi, 4          ; skip '366 '
752
        add     esi, 4          ; skip '366 '
Line 845... Line 753...
845
        call    skip_nick
753
        call    skip_nick
846
        call    find_window
754
        call    window_open
Line 847... Line 755...
847
 
755
 
Line 855... Line 763...
855
 
763
 
Line 856... Line 764...
856
cmd_topic:
764
cmd_topic:
857
 
765
 
858
        add     esi, 4          ; skip '332 '
766
        add     esi, 4          ; skip '332 '
Line 859... Line 767...
859
        call    skip_nick
767
        call    skip_nick
860
        call    find_window
768
        call    window_open
861
 
769
 
Line 877... Line 785...
877
 
785
 
Line 878... Line 786...
878
cmd_333:
786
cmd_333:
879
 
787
 
880
        add     esi, 4          ; skip '333 '
788
        add     esi, 4          ; skip '333 '
Line 881... Line 789...
881
        call    skip_nick               ;;;;
789
        call    skip_nick               ;;;;
882
        call    find_window
790
        call    window_open
883
 
791
 
884
;        mov     ecx, 2  ; number of spaces to find    ;;; CHECKME
792
;        mov     ecx, 2  ; number of spaces to find    ;;; CHECKME