Subversion Repositories Kolibri OS

Rev

Rev 6596 | Rev 7300 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3545 hidnplayr 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                                 ;;
7090 hidnplayr 3
;; Copyright (C) KolibriOS team 2004-2017. All rights reserved.    ;;
3545 hidnplayr 4
;; Distributed under terms of the GNU General Public License       ;;
5
;;                                                                 ;;
6
;;  IRC client for KolibriOS                                       ;;
7
;;                                                                 ;;
8
;;   Written by hidnplayr@kolibrios.org,                           ;;
9
;;     text encoder/decoder by Clevermouse.                        ;;
10
;;                                                                 ;;
11
;;         GNU GENERAL PUBLIC LICENSE                              ;;
12
;;          Version 2, June 1991                                   ;;
13
;;                                                                 ;;
14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
15
 
7090 hidnplayr 16
version equ '0.30'
3545 hidnplayr 17
 
18
; connection status
6023 hidnplayr 19
STATUS_DISCONNECTED     = 0
20
STATUS_RESOLVING        = 1
21
STATUS_CONNECTING       = 2
22
STATUS_CONNECTED        = 3
6027 hidnplayr 23
STATUS_LOGGED_IN        = 4
3545 hidnplayr 24
 
25
; window flags
6023 hidnplayr 26
FLAG_UPDATED            = 1 shl 0
27
FLAG_RECEIVING_NAMES    = 1 shl 1
28
FLAG_SCROLL_LOW         = 1 shl 2
3545 hidnplayr 29
 
30
; window types
6023 hidnplayr 31
WINDOWTYPE_NONE         = 0
32
WINDOWTYPE_SERVER       = 1
33
WINDOWTYPE_CHANNEL      = 2
34
WINDOWTYPE_CHAT         = 3
35
WINDOWTYPE_LIST         = 4
36
WINDOWTYPE_DCC          = 5
3545 hidnplayr 37
 
38
; supported encodings
6023 hidnplayr 39
CP866                   = 0
40
CP1251                  = 1
41
UTF8                    = 2
3545 hidnplayr 42
 
43
; settings
6023 hidnplayr 44
USERCMD_MAX_SIZE        = 400
3545 hidnplayr 45
 
6023 hidnplayr 46
WIN_MIN_X               = 600
6026 hidnplayr 47
WIN_MIN_Y               = 183
3545 hidnplayr 48
 
6026 hidnplayr 49
TEXT_X                  = 2
6023 hidnplayr 50
TEXT_Y                  = TOP_Y + 2
3545 hidnplayr 51
 
6023 hidnplayr 52
TOP_SPACE               = 2
53
TAB_HEIGHT              = 14
54
TAB_WIDTH               = 120
55
TAB_SPACE               = 5
56
TOP_Y                   = TOP_SPACE+ TAB_HEIGHT
57
INPUTBOX_HEIGHT         = 13
3545 hidnplayr 58
 
6023 hidnplayr 59
MAX_WINDOWS             = 20
60
MAX_USERS               = 4096
61
TEXT_BUFFERSIZE         = 1024*1024
3545 hidnplayr 62
 
6023 hidnplayr 63
MAX_NICK_LEN            = 32
64
MAX_REAL_LEN            = 32    ; realname
65
MAX_SERVER_NAME         = 256
3545 hidnplayr 66
 
6023 hidnplayr 67
MAX_CHANNEL_LEN         = 40
68
MAX_CHANNELS            = 37
3545 hidnplayr 69
 
6023 hidnplayr 70
MAX_COMMAND_LEN         = 512
3545 hidnplayr 71
 
6023 hidnplayr 72
TIMESTAMP               = 3     ; 3 = hh:mm:ss, 2 = hh:mm, 0 = no timestamp
3545 hidnplayr 73
 
6023 hidnplayr 74
MAX_WINDOWNAME_LEN      = 256
3545 hidnplayr 75
 
6023 hidnplayr 76
WINDOW_BTN_START        = 100
77
WINDOW_BTN_CLOSE        = 2
78
WINDOW_BTN_LIST         = 3
3545 hidnplayr 79
 
6023 hidnplayr 80
SCROLLBAR_WIDTH         = 14
6026 hidnplayr 81
USERLIST_WIDTH          = 160
3545 hidnplayr 82
 
6026 hidnplayr 83
FONT_WIDTH              = 8
84
FONT_HEIGHT             = 16
3545 hidnplayr 85
 
86
format binary as ""
87
 
88
use32
89
 
6023 hidnplayr 90
        org     0x0
3545 hidnplayr 91
 
6023 hidnplayr 92
        db      'MENUET01'              ; 8 byte id
93
        dd      1                       ; header version
94
        dd      START                   ; program start
95
        dd      I_END                   ; program image size
96
        dd      IM_END+2048             ; required amount of memory
97
        dd      IM_END+2048
98
        dd      param
99
        dd      path
3545 hidnplayr 100
 
3618 hidnplayr 101
include "../../macros.inc"
102
include "../../proc32.inc"
103
include "../../dll.inc"
104
include "../../network.inc"
105
include "../../struct.inc"
4477 hidnplayr 106
include "../../develop/libraries/box_lib/trunk/box_lib.mac"
3545 hidnplayr 107
 
6023 hidnplayr 108
struct  window
109
        data_ptr        dd ?
110
        flags           db ?
111
        type            db ?
112
        name            rb MAX_WINDOWNAME_LEN
113
        users           dd ?
114
        users_scroll    dd ?
115
        selected        dd ?            ; selected user, 0 if none selected
4143 hidnplayr 116
 
6023 hidnplayr 117
        text_start      dd ?            ; pointer to current textbox data
118
        text_end        dd ?
119
        text_print      dd ?            ; pointer to first character to print on screen
120
        text_line_print dd ?            ; line number of that character
121
        text_write      dd ?            ; write pointer
122
        text_lines      dd ?            ; total number of lines
123
        text_scanned    dd ?            ; pointer to beginning of unscanned data (we still need to count number of lines, insert newline characters,..)
4143 hidnplayr 124
 
3545 hidnplayr 125
ends
126
 
6023 hidnplayr 127
struct  window_data
128
        text            rb TEXT_BUFFERSIZE
129
        names           rb MAX_NICK_LEN * MAX_USERS
3545 hidnplayr 130
ends
131
 
132
include "encodings.inc"
4143 hidnplayr 133
include "window.inc"
3545 hidnplayr 134
include "serverparser.inc"
135
include "userparser.inc"
136
include "socket.inc"
137
include "gui.inc"
138
include "users.inc"
4060 hidnplayr 139
include "textbox.inc"
3545 hidnplayr 140
 
141
 
142
START:
143
 
6023 hidnplayr 144
        mcall   68, 11                  ; init heap so we can allocate memory dynamically
3545 hidnplayr 145
 
146
; wanted events
6023 hidnplayr 147
        mcall   40, EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_STACK+EVM_MOUSE+EVM_MOUSE_FILTER
3545 hidnplayr 148
 
149
; load libraries
6023 hidnplayr 150
        stdcall dll.Load, @IMPORT
151
        test    eax, eax
152
        jnz     exit
3545 hidnplayr 153
 
154
; find path to main settings file (ircc.ini)
6023 hidnplayr 155
        mov     edi, path               ; Calculate the length of zero-terminated string
156
        xor     al, al
157
        mov     ecx, 1024
158
        repne   scasb
159
        dec     edi
160
        mov     eax, '.ini'
161
        stosd
162
        xor     al, al
163
        stosb
3545 hidnplayr 164
 
165
; Fill the window buffer with zeros
6023 hidnplayr 166
        mov     edi, windows
167
        mov     ecx, (sizeof.window*MAX_WINDOWS+3)/4
168
        xor     eax, eax
169
        rep     stosd
3545 hidnplayr 170
 
171
; clear command area too
6023 hidnplayr 172
        mov     edi, servercommand
173
        mov     ecx, 600/4
174
        rep     stosd
3545 hidnplayr 175
 
176
; allocate window data block
6023 hidnplayr 177
        mov     ebx, windows
178
        call    window_create_textbox
179
        test    eax, eax
180
        jz      error
181
        mov     [ebx + window.type], WINDOWTYPE_SERVER
3545 hidnplayr 182
 
183
; get system colors
6023 hidnplayr 184
        mcall   48, 3, colors, 40
3545 hidnplayr 185
 
186
; set edit box and scrollbar colors
6023 hidnplayr 187
        mov     eax, [colors.work]
188
        mov     [scroll1.bg_color], eax
189
        mov     [scroll2.bg_color], eax
3545 hidnplayr 190
 
6023 hidnplayr 191
        mov     eax, [colors.work_button]
192
        mov     [scroll1.front_color], eax
193
        mov     [scroll2.front_color], eax
3545 hidnplayr 194
 
6023 hidnplayr 195
        mov     eax, [colors.work_text]
196
        mov     [scroll1.line_color], eax
197
        mov     [scroll2.line_color], eax
3545 hidnplayr 198
 
6023 hidnplayr 199
        mov     [scroll1.type], 1               ; 0 = simple, 1 = skinned
200
        mov     [scroll2.type], 1
4143 hidnplayr 201
 
3545 hidnplayr 202
; get settings from ini
6023 hidnplayr 203
        invoke  ini.get_str, path, str_user, str_nick, user_nick, MAX_NICK_LEN, default_nick
204
        invoke  ini.get_str, path, str_user, str_real, user_real_name, MAX_REAL_LEN, default_real
205
        invoke  ini.get_str, path, str_user, str_quitmsg, quit_msg, 250, default_quit
3545 hidnplayr 206
 
207
; Welcome user
6023 hidnplayr 208
        mov     esi, str_welcome
209
        call    print_asciiz
3545 hidnplayr 210
 
4477 hidnplayr 211
; Check if parameter contains an URL
6023 hidnplayr 212
        cmp     byte[param], 0
213
        je      @f
214
        mov     esi, param
215
        mov     ecx, 1024
216
        call    cmd_usr_server.now
4477 hidnplayr 217
  @@:
3545 hidnplayr 218
 
219
redraw:
6023 hidnplayr 220
        call    draw_window
3545 hidnplayr 221
 
4477 hidnplayr 222
mainloop:
6023 hidnplayr 223
        mcall   10              ; wait for event
3545 hidnplayr 224
 
6023 hidnplayr 225
        dec     eax
226
        jz      redraw
3545 hidnplayr 227
 
6023 hidnplayr 228
        dec     eax
229
        jz      main_window_key
3545 hidnplayr 230
 
6023 hidnplayr 231
        dec     eax
232
        jz      button
3545 hidnplayr 233
 
6023 hidnplayr 234
        cmp     al, 3
235
        je      mouse
3545 hidnplayr 236
 
6023 hidnplayr 237
        call    process_network_event
3545 hidnplayr 238
 
6023 hidnplayr 239
        mov     edi, [window_active]
240
        test    [edi + window.flags], FLAG_UPDATED
241
        jz      .no_update
242
        call    draw_channel_text
243
        mov     edi, [window_active]
244
        cmp     [edi + window.type], WINDOWTYPE_CHANNEL
245
        jne     .no_update
6026 hidnplayr 246
        call    draw_user_list
3545 hidnplayr 247
  .no_update:
6023 hidnplayr 248
        call    highlight_updated_tabs
3545 hidnplayr 249
 
6023 hidnplayr 250
        jmp     mainloop
3545 hidnplayr 251
 
252
button:
253
 
6023 hidnplayr 254
        mcall   17              ; get id
255
        ror     eax, 8
3545 hidnplayr 256
 
6023 hidnplayr 257
        cmp     ax, 1           ; close program
258
        je      exit
3545 hidnplayr 259
 
6023 hidnplayr 260
        cmp     ax, WINDOW_BTN_CLOSE
261
        jne     @f
262
        call    cmd_usr_close_window
263
        jmp     mainloop
3981 hidnplayr 264
 
265
  @@:
6023 hidnplayr 266
        cmp     ax, WINDOW_BTN_LIST
267
        jne     @f
3981 hidnplayr 268
 
6023 hidnplayr 269
        push    eax
3981 hidnplayr 270
 
6023 hidnplayr 271
        mcall   37, 1           ; Get mouse position
272
        sub     ax, TEXT_Y
273
        mov     bl, FONT_HEIGHT
274
        div     bl
275
        and     eax, 0x000000ff
276
        inc     eax
277
        add     eax, [scroll1.position]
278
        mov     ebx, [window_active]
279
        mov     [ebx + window.selected], eax
3545 hidnplayr 280
 
6026 hidnplayr 281
        call    draw_user_list
3545 hidnplayr 282
 
6023 hidnplayr 283
        pop     eax
284
        test    eax, 1 shl 25   ; Right mouse button pressed?
285
        jz      mainloop
3981 hidnplayr 286
 
4477 hidnplayr 287
; TODO: check if selected nick is my nick!
288
 
3981 hidnplayr 289
; Right mouse BTN was pressed, open chat window
6023 hidnplayr 290
        mov     ebx, [window_active]
291
        mov     eax, [ebx + window.selected]
292
        dec     eax
293
        imul    eax, MAX_NICK_LEN
294
        mov     ebx, [ebx + window.data_ptr]
295
        lea     esi, [ebx + window_data.names + eax]
7090 hidnplayr 296
; Strip user prefixes
297
        cmp     byte[esi], '~'
298
        je      .inc
299
        cmp     byte[esi], '&'
300
        je      .inc
301
        cmp     byte[esi], '@'
302
        je      .inc
303
        cmp     byte[esi], '%'
304
        je      .inc
305
        cmp     byte[esi], '+'
306
        je      .inc
307
  .open:
6023 hidnplayr 308
        call    window_open
309
        test    ebx, ebx
310
        jz      mainloop
311
        mov     [window_active], ebx
312
        call    redraw
3981 hidnplayr 313
 
6023 hidnplayr 314
        jmp     mainloop
7090 hidnplayr 315
  .inc:
316
        inc     esi
317
        jmp     .open
3545 hidnplayr 318
 
319
  @@:
6023 hidnplayr 320
        sub     ax, WINDOW_BTN_START
321
        jb      exit
3545 hidnplayr 322
 
6023 hidnplayr 323
        cmp     ax, MAX_WINDOWS
324
        ja      exit
3545 hidnplayr 325
 
4623 hidnplayr 326
; Save users scrollbar position
6023 hidnplayr 327
        push    [scroll1.position]
328
        mov     edx, [window_active]
329
        pop     [edx + window.users_scroll]
4623 hidnplayr 330
 
4143 hidnplayr 331
; OK, time to switch to another window.
6023 hidnplayr 332
        mov     dx, sizeof.window
333
        mul     dx
334
        shl     edx, 16
335
        mov     dx, ax
336
        add     edx, windows
337
        cmp     [edx + window.type], WINDOWTYPE_NONE
338
        je      exit
339
        mov     [window_active], edx
4143 hidnplayr 340
 
6023 hidnplayr 341
        push    [edx + window.text_line_print]
342
        pop     [scroll2.position]
4621 hidnplayr 343
 
6023 hidnplayr 344
        push    [edx + window.users_scroll]
345
        pop     [scroll1.position]
4623 hidnplayr 346
 
6023 hidnplayr 347
        call    draw_window
348
        jmp     mainloop
3981 hidnplayr 349
 
3545 hidnplayr 350
exit:
3981 hidnplayr 351
 
6023 hidnplayr 352
        cmp     [socketnum], 0
353
        je      @f
354
        mov     esi, quit_msg
355
        call    quit_server
3981 hidnplayr 356
  @@:
357
 
4143 hidnplayr 358
error:
359
 
6023 hidnplayr 360
        mcall   -1
3545 hidnplayr 361
 
362
 
363
 
364
main_window_key:
365
 
6023 hidnplayr 366
        mcall   2
3545 hidnplayr 367
 
6023 hidnplayr 368
        push    dword edit1
369
        call    [edit_box_key]
3545 hidnplayr 370
 
4143 hidnplayr 371
;        cmp     ah, 178
372
;        jne     .no_up
373
;
4477 hidnplayr 374
;        jmp     mainloop
4143 hidnplayr 375
;
376
;
377
;  .no_up:
378
;        cmp     ah, 177
379
;        jne     .no_down
380
;
4477 hidnplayr 381
;        jmp     mainloop
4143 hidnplayr 382
;
383
;  .no_down:
6023 hidnplayr 384
        cmp     ah, 13          ; enter
385
        jne     no_send2
3545 hidnplayr 386
 
6023 hidnplayr 387
        call    user_parser
3545 hidnplayr 388
 
6023 hidnplayr 389
        mov     eax, [edit1.size]
4143 hidnplayr 390
 
6023 hidnplayr 391
        mov     [edit1.size], 0
392
        mov     [edit1.pos], 0
3545 hidnplayr 393
 
6026 hidnplayr 394
        invoke  edit_box_draw, edit1
3545 hidnplayr 395
 
6023 hidnplayr 396
        call    draw_channel_text
3545 hidnplayr 397
 
6023 hidnplayr 398
        jmp     mainloop
3545 hidnplayr 399
  no_send2:
400
 
6023 hidnplayr 401
        jmp     mainloop
3545 hidnplayr 402
 
403
mouse:
6026 hidnplayr 404
        invoke  edit_box_mouse, edit1
3545 hidnplayr 405
 
4477 hidnplayr 406
;        mcall   37, 7
407
;        movsx   eax, ax
408
;        add     [scroll2.position], eax
409
 
4143 hidnplayr 410
; TODO: check if scrollbar is active?
6023 hidnplayr 411
        mov     edi, [window_active]
412
        cmp     [edi + window.type], WINDOWTYPE_CHANNEL
413
        jne     @f
414
        push    [scroll1.position]
6026 hidnplayr 415
        invoke  scrollbar_mouse, scroll1
6023 hidnplayr 416
        pop     eax
417
        cmp     eax, [scroll1.position] ; did the scrollbar move?
418
        je      @f
6026 hidnplayr 419
        call    draw_user_list
3545 hidnplayr 420
  @@:
421
 
4143 hidnplayr 422
; TODO: check if scrollbar is active?
6023 hidnplayr 423
        mov     edi, [window_active]
424
        mov     eax, [edi + window.text_lines]
425
        cmp     eax, [textbox_height]
426
        jbe     @f
6026 hidnplayr 427
        invoke  scrollbar_mouse, scroll2
6023 hidnplayr 428
        mov     edi, [window_active]
429
        and     [edi+window.flags], not FLAG_SCROLL_LOW
430
        mov     edx, [scroll2.position]
431
        add     edx, [scroll2.cur_area]
432
        sub     edx, [scroll2.max_area]
433
        jne     .not_low
434
        or      [edi+window.flags], FLAG_SCROLL_LOW
4828 gtament 435
  .not_low:
6023 hidnplayr 436
        mov     edx, [scroll2.position]
437
        sub     edx, [edi + window.text_line_print]
438
        je      @f
439
        call    draw_channel_text.scroll_to_pos
4143 hidnplayr 440
  @@:
441
 
6023 hidnplayr 442
        jmp     mainloop
3545 hidnplayr 443
 
444
 
445
; DATA AREA
446
 
447
encoding_text:
6023 hidnplayr 448
db      'CP866 '
449
db      'CP1251'
450
db      'UTF-8 '
3545 hidnplayr 451
encoding_text_len = 6
452
 
6023 hidnplayr 453
join_header             db 3, '3* ', 0
454
quit_header             db 3, '5* ', 0
455
nick_header             db 3, '2* ', 0
456
kick_header             db 3, '5* ', 0
457
mode_header             db 3, '2* ', 0
458
part_header             db 3, '5* ', 0
459
topic_header            db 3, '3* ', 0
460
action_header           db 3, '6* ', 0
461
ctcp_header             db 3, '13-> [', 0
462
msg_header              db 3, '7-> *', 0
463
ctcp_version            db '] VERSION', 10, 0
464
ctcp_ping               db '] PING', 10, 0
465
ctcp_time               db '] TIME', 10, 0
4477 hidnplayr 466
 
6023 hidnplayr 467
has_left_channel        db ' has left ', 0
468
joins_channel           db ' has joined ', 0
469
is_now_known_as         db ' is now known as ', 0
470
has_quit_irc            db ' has quit IRC', 10, 0
4477 hidnplayr 471
 
6023 hidnplayr 472
sets_mode               db ' sets mode ', 0
473
str_kicked              db ' is kicked from ', 0
474
str_by                  db ' by ', 0
475
str_nickchange          db 'Nickname is now ', 0
476
str_realchange          db 'Real name is now ', 0
477
str_talking             db 'Now talking in ', 0
478
str_topic               db 'Topic is "', 0
479
str_topic_end           db '"', 10, 0
480
str_setby               db 'Set by ', 0
3545 hidnplayr 481
 
6023 hidnplayr 482
str_connecting          db 3, '3* Connecting to ', 0
483
str_sockerr             db 3, '5* Socket error', 10, 0
484
str_dnserr              db 3, '5* Unable to resolve hostname', 10, 0
485
str_refused             db 3, '5* Connection refused', 10, 0
486
str_srv_disconnected    db 3, '5* Server disconnected', 10, 0
487
str_disconnected        db 3, '5* Disconnected', 10, 0
488
str_reconnect           db 3, '5* Connection reset by user', 10, 0
6027 hidnplayr 489
str_notconnected        db 3, '5* You are not connected', 10, 0
6023 hidnplayr 490
str_notchannel          db 3, '5* You are not on a channel', 10, 0
6027 hidnplayr 491
str_notloggedin         db 3, '5* You are not logged in to the server', 10, 0
4477 hidnplayr 492
 
6023 hidnplayr 493
str_1                   db 3, '13 -', 0
494
str_2                   db '- ', 0
4477 hidnplayr 495
 
6023 hidnplayr 496
str_list                db 'list', 0
4623 hidnplayr 497
 
6023 hidnplayr 498
str_help                db 'The following commands are available:', 10
499
                        db 10
500
                        db '/nick         : change nickname', 10
501
                        db '/real    : change real name', 10
502
                        db '/server 
: connect to server', 10
503
                        db '/code         : change codepage (cp866, cp1251, or utf8)', 10
504
                        db '/join      : join a channel', 10
505
                        db '/part      : part from a channel', 10
506
                        db '/quit               : quit server', 10
507
                        db '/msg          : send a private message', 10
508
                        db '/ctcp         : send a message using client to client protocol', 10
509
                        db 10
510
                        db 'Other commands are send straight to server.', 10
511
                        db 10, 0
4477 hidnplayr 512
 
6023 hidnplayr 513
str_welcome             db 3, '3 ___', 3, '7__________', 3, '6_________  ', 3, '4         __   __               __', 10
514
                        db 3, '3|   \', 3, '7______   \', 3, '6_   ___ \ ', 3, '4   ____ |  | |__| ____   _____/  |_', 10
515
                        db 3, '3|   |', 3, '7|       _/', 3, '6    \  \/ ', 3, '4 _/ ___\|  | |  |/ __ \ /    \   __\', 10
516
                        db 3, '3|   |', 3, '7|    |   \', 3, '6     \____', 3, '4 \  \___|  |_|  \  ___/|   |  \  |', 10
517
                        db 3, '3|___|', 3, '7|____|_  /', 3, '6\______  /', 3, '4  \___  >____/__|\___  >___|  /__|', 10
518
                        db 3, '3     ', 3, '7       \/ ', 3, '6       \/ ', 3, '4      \/             \/     \/', 10
519
                        db 'Welcome to KolibriOS IRC client ', version, 10
6026 hidnplayr 520
                        db 'Type /help for help', 10, 0
4477 hidnplayr 521
 
6023 hidnplayr 522
str_version             db 'VERSION KolibriOS '
523
str_programname         db 'IRC client ', version, 0
3545 hidnplayr 524
 
6023 hidnplayr 525
str_user                db 'user', 0
526
str_nick                db 'nick', 0
527
str_real                db 'realname', 0
528
str_email               db 'email', 0
529
str_quitmsg             db 'quitmsg', 0
3545 hidnplayr 530
 
6023 hidnplayr 531
default_nick            db 'kolibri_user', 0
532
default_real            db 'Kolibri User', 0
533
default_quit            db 'KolibriOS forever', 0
3545 hidnplayr 534
 
6023 hidnplayr 535
irc_colors              dd 0xffffff     ;  0 white
536
                        dd 0x000000     ;  1 black
537
                        dd 0x00007f     ;  2 blue (navy)
538
                        dd 0x009300     ;  3 green
539
                        dd 0xff0000     ;  4 red
540
                        dd 0x7f0000     ;  5 brown (maroon)
541
                        dd 0x9c009c     ;  6 purple
542
                        dd 0xfc7f00     ;  7 olive
543
                        dd 0xffff00     ;  8 yellow
544
                        dd 0x00fc00     ;  9 light green
545
                        dd 0x009393     ; 10 teal
546
                        dd 0x00ffff     ; 11 cyan
547
                        dd 0x0000fc     ; 12 royal blue
548
                        dd 0xff00ff     ; 13 pink
549
                        dd 0x7f7f7f     ; 14 grey
550
                        dd 0xd4d0c4     ; 15 light grey (silver)
4143 hidnplayr 551
 
3545 hidnplayr 552
sockaddr1:
6023 hidnplayr 553
        dw AF_INET4
554
.port   dw 0x0b1a       ; 6667          FIXMEEEEEE
555
.ip     dd 0
556
        rb 10
3545 hidnplayr 557
 
558
 
6023 hidnplayr 559
status                  dd STATUS_DISCONNECTED
3545 hidnplayr 560
 
6023 hidnplayr 561
window_active           dd windows
562
window_print            dd windows
3545 hidnplayr 563
 
564
align 4
565
@IMPORT:
566
 
6023 hidnplayr 567
library network,        'network.obj',\
568
        libini,         'libini.obj',\
569
        boxlib,         'box_lib.obj'
3545 hidnplayr 570
 
6023 hidnplayr 571
import  network,\
572
        getaddrinfo,    'getaddrinfo',\
573
        freeaddrinfo,   'freeaddrinfo',\
574
        inet_ntoa,      'inet_ntoa'
3545 hidnplayr 575
 
6023 hidnplayr 576
import  libini,\
577
        ini.get_str,    'ini_get_str',\
578
        ini.get_int,    'ini_get_int'
3545 hidnplayr 579
 
6023 hidnplayr 580
import  boxlib,\
581
        edit_box_draw,  'edit_box',\
582
        edit_box_key,   'edit_box_key',\
583
        edit_box_mouse, 'edit_box_mouse',\
584
        scrollbar_draw, 'scrollbar_v_draw',\
585
        scrollbar_mouse,'scrollbar_v_mouse'
3545 hidnplayr 586
 
6023 hidnplayr 587
        ;         width, left, top
6027 hidnplayr 588
edit1   edit_box  0, 0, 0, 0xffffff, 0x6f9480, 0, 0, 0x000000, USERCMD_MAX_SIZE, input_text, mouse_dd, ed_always_focus, 25, 25
6023 hidnplayr 589
        ;         xsize, xpos, ysize, ypos, btn_height, max, cur, pos, bgcol, frcol, linecol
4143 hidnplayr 590
scroll1 scrollbar SCROLLBAR_WIDTH, 0, 0, TOP_Y, SCROLLBAR_WIDTH, 0, 0, 0, 0, 0, 0, 1
591
scroll2 scrollbar SCROLLBAR_WIDTH, 0, 0, TOP_Y, SCROLLBAR_WIDTH, 0, 0, 0, 0, 0, 0, 1
3545 hidnplayr 592
 
6027 hidnplayr 593
input_text      db '/server chat.freenode.net', 0
6023 hidnplayr 594
                rb MAX_COMMAND_LEN
3618 hidnplayr 595
 
4477 hidnplayr 596
I_END:
597
 
6027 hidnplayr 598
user_command    rb MAX_COMMAND_LEN*4
599
.size           dd ?
600
 
6023 hidnplayr 601
utf8_bytes_rest dd ?            ; bytes rest in current UTF8 sequence
602
utf8_char       dd ?            ; first bits of current UTF8 character
4477 hidnplayr 603
 
6023 hidnplayr 604
packetbuf       rb 1024         ; buffer for packets to server
605
path            rb 1024
606
param           rb 1024
3545 hidnplayr 607
 
6023 hidnplayr 608
servercommand   rb 600
3545 hidnplayr 609
 
6023 hidnplayr 610
thread_info     process_information
611
xsize           dd ?
612
ysize           dd ?
613
mouse_dd        dd ?
3545 hidnplayr 614
 
6023 hidnplayr 615
textbox_height  dd ?            ; in characters
616
textbox_width   dd ?            ; in characters, not pixels ;)
4621 hidnplayr 617
 
6023 hidnplayr 618
colors          system_colors
3545 hidnplayr 619
 
6023 hidnplayr 620
irc_server_name rb MAX_SERVER_NAME      ; TODO: move this server URL into window struct
621
socketnum       dd ?                    ; TODO: same for socket
3545 hidnplayr 622
 
6023 hidnplayr 623
user_nick       rb MAX_NICK_LEN
624
user_real_name  rb MAX_REAL_LEN
625
quit_msg        rb 250
3545 hidnplayr 626
 
6023 hidnplayr 627
windows         rb MAX_WINDOWS*sizeof.window
3545 hidnplayr 628
 
4623 hidnplayr 629
IM_END: