forked from KolibriOS/kolibrios
network/icq: sources uploaded to SVN
git-svn-id: svn://kolibrios.org@1832 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
36e43113ac
commit
fc9a00e362
160
programs/network/icq/trunk/2000.inc
Normal file
160
programs/network/icq/trunk/2000.inc
Normal file
@ -0,0 +1,160 @@
|
||||
; constants
|
||||
FLAP_HEAD_SIZE = 6
|
||||
SNAC_HEAD_SIZE = 10
|
||||
|
||||
;AUTH_MESSAGE = 0008h
|
||||
;USER_ADDED_MESS = 000Ch
|
||||
;AUTH_REQ_MESS = 0006h
|
||||
;URL_MESS = 0004h
|
||||
;WEB_MESS = 000dh
|
||||
;EMAIL_MESS = 000eh
|
||||
;MASS_MESS_MASK = 8000h
|
||||
;MRURL_MESS = 8004h
|
||||
;NORM_MESS = 0001h
|
||||
;MRNORM_MESS = 8001h
|
||||
;CONTACT_MESS = 0013h
|
||||
;MRCONTACT_MESS = 8013h
|
||||
;
|
||||
;
|
||||
;
|
||||
;CAP_PRECAP = "\x09\x46\x13"
|
||||
;CAP_PRERTF = "\x97\xb1\x27"
|
||||
;CAP_POSCAP = "\x4c\x7f\x11\xd1\x82\x22\x44\x45\x53\x54\x00\x00"
|
||||
;CAP_POSRTF = "\x24\x3c\x43\x34\xad\x22\xd6\xab\xf7\x3f\x14\x92"
|
||||
|
||||
;
|
||||
;Fingerprinting Capabilities
|
||||
;
|
||||
;CAP_M2001 = "\x2e\x7a\x64" "\x75" "\xfa\xdf\x4d\xc8\x88\x6f\xea\x35\x95\xfd\xb6\xdf"
|
||||
;CAP_M2001_2 = "\xa0\xe9\x3f" "\x37" "\x4f\xe9\xd3\x11\xbc\xd2\x00\x04\xac\x96\xdd\x96"
|
||||
;CAP_M2002 = "\x10\xcf\x40" "\xd1" "\x4f\xe9\xd3\x11\xbc\xd2\x00\x04\xac\x96\xdd\x96"
|
||||
;CAP_MLITE = "\x56\x3f\xc8" "\x09" "\x0b\x6f\x41\xbd\x9f\x79\x42\x26\x09\xdf\xa2\xf3"
|
||||
;CAP_SIMICQ = "\x97\xb1\x27" "\x51" "\x24\x3c\x43\x34\xad\x22\xd6\xab\xf7\x3f\x14\x48"
|
||||
;CAP_MICQ = "mICQ \xa9 R.K. \x00\x00\x00\x00"
|
||||
;CAP_TRILL_NORM = "\x97\xb1\x27" "\x51" "\x24\x3c\x43\x34\xad\x22\xd6\xab\xf7\x3f\x14\x09"
|
||||
;CAP_TRILL_CRYPT= "\xf2\xe7\xc7" "\xf4" "\xfe\xad\x4d\xfb\xb2\x35\x36\x79\x8b\xdf\x00\x00"
|
||||
;CAP_LICQ = "\x09\x49\x13"
|
||||
|
||||
;
|
||||
;DC Packet Types
|
||||
;
|
||||
;PEER_INIT = 0ffh
|
||||
;PEER_INITACK = 01h
|
||||
;PEER_MSG = 02h
|
||||
;PEER_INIT2 = 03h
|
||||
;PEER_FILE_INIT = 00h
|
||||
;PEER_FILE_INIT_ACK = 01h
|
||||
;PEER_FILE_START = 02h
|
||||
;PEER_FILE_START_ACK = 03h
|
||||
;PEER_FILE_STOP = 04h
|
||||
;PEER_FILE_SPEED = 05h
|
||||
;PEER_FILE_DATA = 06h
|
||||
|
||||
|
||||
ICQ_PORT = 5190
|
||||
;
|
||||
; FLAP transport
|
||||
;
|
||||
FLAP_ID = 02ah
|
||||
|
||||
struc FLAP_head
|
||||
{
|
||||
.bId db FLAP_ID ;id byte
|
||||
.bCh db ? ;channel
|
||||
.wSn dw ? ;seq number
|
||||
.wDs dw ? ;data size
|
||||
}
|
||||
;
|
||||
; Channels ID
|
||||
;
|
||||
|
||||
NEW_CONNECTION = 01h
|
||||
SNAC_DATA = 02h
|
||||
FLAP_ERROR = 03h
|
||||
CLOSE_CONNECTION = 04h
|
||||
KEEP_ALIVE = 05h
|
||||
|
||||
;
|
||||
; SNAC
|
||||
;
|
||||
struc SNAC_head
|
||||
{
|
||||
.wFid dw ?; Family id
|
||||
.wSid dw ?; subtype id
|
||||
.wDf dw ?; SNAC flags
|
||||
.dRi dd ?; SNAC Request id
|
||||
}
|
||||
|
||||
;
|
||||
;
|
||||
; Familes/SNACs list
|
||||
;
|
||||
|
||||
GENERIC_SN = 0001h
|
||||
LOCATION_SN = 0002h
|
||||
BUDDY_LIST_SN = 0003h
|
||||
ICBM_SN = 0004h
|
||||
PRIVACY_SN = 0009h
|
||||
BUDDY_ICONS_SN = 0010h
|
||||
SSI_SN = 0013h
|
||||
AUTH_REG_SN = 0017h
|
||||
|
||||
;
|
||||
; TLV
|
||||
;
|
||||
struc TLV_head
|
||||
{
|
||||
.wTn dw ?; TLV type number
|
||||
.wLv dw ?; TLV length value
|
||||
}
|
||||
|
||||
;
|
||||
; userinfo block
|
||||
;
|
||||
struc UI_head
|
||||
{
|
||||
.bUinLength db 0 ; UIN/screenname length
|
||||
.bUin db 11 dup 0 ; string
|
||||
.wWl dw 0 ; Warning level
|
||||
.dUserClass dd 0
|
||||
.dCreateTime dd 0
|
||||
.dSignonTime dd 0
|
||||
.wIdleTime dw 0
|
||||
.dCreationTime dd 0
|
||||
.dUserStatus dd 0
|
||||
.dIpAddress dd 0
|
||||
.dOnlineTime dd 0
|
||||
|
||||
}
|
||||
|
||||
;
|
||||
;Roasting array
|
||||
;
|
||||
ROASTING_ARRAY db 0F3h, 026h, 081h, 0C4h, 039h, 086h, 0DBh, 092h, 071h, 0A3h, 0B9h, 0E6h, 053h, 07Ah, 095h, 07Ch
|
||||
|
||||
;
|
||||
; Status flags
|
||||
;
|
||||
;
|
||||
|
||||
STATUS_WEBAWARE = 0x0001 ;Status webaware flag
|
||||
STATUS_SHOWIP = 0x0002 ;Status show ip flag
|
||||
STATUS_BIRTHDAY = 0x0008 ;User birthday flag
|
||||
STATUS_WEBFRONT = 0x0020 ;User active webfront flag
|
||||
STATUS_DCDISABLED = 0x0100 ;Direct connection not supported
|
||||
STATUS_DCAUTH = 0x1000 ;Direct connection upon authorization
|
||||
STATUS_DCCONT = 0x2000 ;DC only with contact users
|
||||
|
||||
;
|
||||
; Status
|
||||
;
|
||||
|
||||
STATUS_ONLINE = 0x0000 ;Status is online
|
||||
STATUS_AWAY = 0x0001 ;Status is away
|
||||
STATUS_DND = 0x0002 ;Status is no not disturb (DND)
|
||||
STATUS_NA = 0x0004 ;Status is not available (N/A)
|
||||
STATUS_OCCUPIED = 0x0010 ;Status is occupied (BISY)
|
||||
STATUS_FREE4CHAT = 0x0020 ;Status is free for chat
|
||||
STATUS_INVISIBLE = 0x0100 ;Status is invisible
|
||||
|
||||
|
275
programs/network/icq/trunk/EDITBOX.INC
Normal file
275
programs/network/icq/trunk/EDITBOX.INC
Normal file
@ -0,0 +1,275 @@
|
||||
; SEE YOU File FAQ.txt and HISTORY. Good Like!
|
||||
;;;;;;;;;;;;;;;;;;
|
||||
include 'editbox.mac' ;¬ ªà®á ª®â®àë© ¤®«¦¥ ®¡«¥£ç¨âì ¦¨§ì :) á¯¥æ¨ «ì® ¤«ï editbox
|
||||
;;;;;;;;;;;;;;;;;;
|
||||
macro use_edit_box procinfo,scr_h,scr_w
|
||||
{
|
||||
edit_box:
|
||||
ed_width equ [edi] ;è¨à¨ ª®¬¯®¥â
|
||||
ed_left equ [edi+4] ;¯®«®¦¥¨¥ ¯® ®á¨ å
|
||||
ed_top equ [edi+8] ;¯®«®¦¥¨¥ ¯® ®á¨ ã
|
||||
ed_color equ [edi+12] ;梥â ä® ª®¬¯®¥â
|
||||
shift_color equ [edi+16] ;=0x6a9480
|
||||
ed_focus_border_color equ [edi+20] ;梥â à ¬ª¨ ª®¬¯®¥â
|
||||
ed_blur_border_color equ [edi+24] ;梥⠥ ªâ¨¢®£® ª®¬¯®¥â
|
||||
ed_text_color equ [edi+28] ;梥â ⥪áâ
|
||||
ed_max equ [edi+32] ;ª®«-¢® ᨬ¢®«®¢ ª®â®àë¥ ¬®¦® ¬ ªá¨¬ «ì® ¢¢¥áâ¨
|
||||
ed_text equ [edi+36] ;㪠§ â¥«ì ¡ãä¥à
|
||||
ed_flags equ [edi+40] ;ä« £¨
|
||||
ed_size equ [edi+42] ;ª®«-¢® ᨬ¢®«®¢
|
||||
ed_pos equ [edi+46] ;¯®§¨æ¨ï ªãàá®à
|
||||
ed_offset equ [edi+50] ;ᬥ饨¥
|
||||
cl_curs_x equ [edi+54] ;¯à¥¤ë¤ã饥 ª®®à¤¨ â ªãàá®à ¯® å
|
||||
cl_curs_y equ [edi+58] ;¯à¥¤ë¤ã饥 ª®®à¤¨ â ªãàá®à ¯® ã
|
||||
ed_shift_pos equ [edi+62] ;¯®«®¦¥¨¥ ªãàá®à
|
||||
ed_shift_pos_old equ [edi+66] ;áâ ஥ ¯®«®¦¥¨¥ ªãàá®à
|
||||
;==========================================================
|
||||
;=== ¯à®æ¥¤ãà ¯à®à¨á®¢ª¨ =================================
|
||||
;==========================================================
|
||||
.draw:
|
||||
pusha
|
||||
;--- à¨á㥬 à ¬ªã ---
|
||||
call .draw_border ; ”ãªæ¨ï áâ ¡¨«ì
|
||||
.draw_bg_cursor_text:
|
||||
;--- ¨§¬¥ï¥¬ ᬥ饨¥, ¥á«¨ ¤® ---
|
||||
call .check_offset ;¢ëç¨á«¥¨¥ ¯®§¨æ¨¨ ªãàá®à áâ ¡¨«ì
|
||||
;--- à¨á㥬 ¢ãâà¥îî ®¡« áâì ---
|
||||
call .draw_bg ; à¨á®¢ âì ¯àאַ㣮«ì¨ª à ¡®ç¥© ®¡« áâ¨
|
||||
;---- à¨á㥬 ¢ë¤¥«¥¨¥, ¯® shift ¥á«¨ ¥áâì
|
||||
call .draw_shift
|
||||
.draw_cursor_text:
|
||||
;--- à¨á㥬 ªãàá®à ---
|
||||
;--- ¬®¦¥â ¥£® ¥ ¤® à¨á®¢ âì ----
|
||||
test word ed_flags,ed_focus
|
||||
je @f
|
||||
call .draw_cursor
|
||||
@@:
|
||||
call .draw_text
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;Ž¡é¨© ¢ë室 ¨§ editbox ¤«ï ¢á¥å äãªæ¨© ¨ ¯®áâ ®¡à ¡®â稪®¢
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
.editbox_exit:
|
||||
edit_ex
|
||||
;==========================================================
|
||||
;=== ®¡à ¡®âª ª« ¢¨ âãàë =================================
|
||||
;==========================================================
|
||||
.key:
|
||||
pusha
|
||||
test word ed_flags,ed_focus ; ¥á«¨ ¥ ¢ 䮪ãá¥, ¢ë室¨¬
|
||||
je .editbox_exit
|
||||
;<3B>஢¥àª ¦ â shift ?
|
||||
call .check_shift
|
||||
;----------------------------------------------------------
|
||||
;--- ¯à®¢¥à塞, çâ® ¦ â® --------------------------------
|
||||
;----------------------------------------------------------
|
||||
use_key_process backspase,delete,left,right,home,end,insert
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;‡ £«ãèª ®¡à ¡®âªã ª« ¢¨è ¢¢¥àå ¨ ¢¨§ â.¥. ¯à¨ ®¡ à㦥¨¨ íâ¨å ª®¤®¢ ¯à®¨á室¨â ¢ë室 ¨§ ®¡à ¡®â稪
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
use_key_no_process up,down,esc
|
||||
;--- ¦ â ¤àã£ ï ª« ¢¨è ---
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;<3B>஢¥àª ãáâ ®¢«¥ «¨ ä« £ ¯à¨ ª®â®à®¬ 㦮 ¢ë¢®¤¨âì ⮫쪮 æ¨äàë ¢ 㦮¬ ¡®ªá¥ ¥á«¨ â ª®©¥®¡å®¤¨¬®á⨠¥â 㦮 § ª®¬¥â¨à®¢ âì ¬ ªà®á
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
use_key_figures_only
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;¯à®¢¥àª shift ¡ë« «¨ ¦ â
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
are_key_shift_press
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; ¯à®¢¥à塞, 室¨âáï «¨ ªãàá®à ¢ ª®æ¥ + ¤ «ì¥©è ï ®¡à ¡®âª
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
are_key_cur_end
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;Ž¡à ¡®âª ª« ¢¨è insert,delete.backspase,home,end,left,right
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
use_work_key
|
||||
;==========================================================
|
||||
;=== ®¡à ¡®âª ¬ëè¨ =======================================
|
||||
;==========================================================
|
||||
.mouse:
|
||||
pusha
|
||||
;debug
|
||||
;----------------------------------------------------------
|
||||
;--- ¯®«ãç ¥¬ á®áâ®ï¨¥ ª®¯®ª ¬ëè¨ -----------------------
|
||||
;----------------------------------------------------------
|
||||
mcall 37,2
|
||||
;----------------------------------------------------------
|
||||
;--- ¯à®¢¥à塞 á®áâ®ï¨¥ ----------------------------------
|
||||
;----------------------------------------------------------
|
||||
test eax,1
|
||||
jnz .mouse_left_button
|
||||
and word ed_flags,ed_mouse_on_off
|
||||
xor ebx,ebx
|
||||
mov dword [mouse_flag],ebx
|
||||
jmp .editbox_exit
|
||||
.mouse_left_button:
|
||||
;----------------------------------------------------------
|
||||
;--- ¡«®ª¨à®¢ª ®â 䮪ãá¨à®¢ª¨ ¢ ¤àã£¨å ¡®ªá å ¯à¨ ¯®¯ ¤ ¨¨ ¨å ªãàá®à
|
||||
;----------------------------------------------------------
|
||||
mov eax,dword [mouse_flag]
|
||||
test eax,eax
|
||||
jz @f
|
||||
cmp eax,edi
|
||||
je @f
|
||||
jmp ._blur
|
||||
;----------------------------------------------------------
|
||||
;--- ¯®«ãç ¥¬ ª®®à¤¨ âë ¬ëè¨ ®â®á¨â¥«ì® 0 â.¥ ¢á¥© ®¡« á⨠íªà
|
||||
;----------------------------------------------------------
|
||||
@@: mcall 37,0
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;”ãªæ¨ï ®¡à ¡®âª¨ ¬ë誨 ¯®«ã票¥ ª®®à¤¨ â ¨ ¯à®¢¥àª ¨å + ¢ë¤¥«¥¨ï
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
use_work_mause scr_h,scr_w
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;Ž¡é¨¥ äãªæ¨¨ ®¡à ¡®âª¨
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
use_general_func
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;”ãªæ¨¨ ¤«ï à ¡®âë á key
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
use_key_func
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;”ãªæ¨¨ ¤«ï à ¡®âë á mouse
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
use_mouse_func scr_w
|
||||
}
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;Bit mask from editbox
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
ed_figure_only= 1000000000000000b ;®¤¨ ᨬ¢®«ë
|
||||
ed_always_focus= 100000000000000b
|
||||
ed_focus= 10b ;䮪ãá ¯à¨«®¦¥¨ï
|
||||
ed_shift_on= 1000b ;¥á«¨ ¥ ãáâ ®¢«¥ -§ ç¨â ¢¯¥à¢ë¥ ¦ â shift,¥á«¨ ¡ë« ãáâ ®¢«¥, § ç¨â ¬ë 㦥 çâ® - â® ¤¥« «¨ 㤥ন¢ ï shift
|
||||
ed_shift_on_off=1111111111110111b
|
||||
ed_shift= 100b ;¢ª«îç ¥âáï ¯à¨ ¦ ⨨ shift â.¥. ¥á«¨ ¦¨¬ î
|
||||
ed_shift_off= 1111111111111011b
|
||||
ed_shift_bac= 10000b ;¡¨â ¤«ï ®ç¨á⪨ ¢ë¤¥«¥®£® shift â.¥. ¯à¨ ãáâ ®¢ª¥ £®¢®à¨â çâ® ¥áâì ¢ë¤¥«¥¨¥
|
||||
ed_shift_bac_cl=1111111111101111b ;®ç¨á⪠¯à¨ 㤠«¥¨¨ ¢ë¤¥«¥¨ï
|
||||
ed_shift_cl= 1111111111100011b
|
||||
ed_shift_mcl= 1111111111111011b
|
||||
ed_left_fl= 100000b
|
||||
ed_right_fl= 1111111111011111b
|
||||
ed_offset_fl= 1000000b
|
||||
ed_offset_cl= 1111111110111111b
|
||||
ed_insert= 10000000b
|
||||
ed_insert_cl= 1111111101111111b
|
||||
ed_mouse_on = 100000000b
|
||||
ed_mous_adn_b= 100011000b
|
||||
ed_mouse_on_off=1111111011111111b
|
||||
ed_height=14 ; ¢ëá®â
|
||||
macro draw_edit_boxes start,_end,use_f9,procinfo
|
||||
{
|
||||
if use_f9 eq
|
||||
else
|
||||
mcall 9,procinfo,-1
|
||||
end if
|
||||
mov edi,start
|
||||
mov ecx,((_end-start)/ed_struc_size)
|
||||
@@:
|
||||
call edit_box.draw
|
||||
add edi,ed_struc_size
|
||||
loop @b
|
||||
}
|
||||
|
||||
macro mouse_edit_boxes start,_end
|
||||
{
|
||||
mov edi,start
|
||||
mov ecx,((_end-start)/ed_struc_size)
|
||||
@@:
|
||||
call edit_box.mouse
|
||||
add edi,ed_struc_size
|
||||
loop @b
|
||||
}
|
||||
|
||||
macro key_edit_boxes start,end
|
||||
{
|
||||
mov edi,start
|
||||
mov ecx,((end-start)/ed_struc_size)
|
||||
@@:
|
||||
call edit_box.key
|
||||
add edi,ed_struc_size
|
||||
loop @b
|
||||
}
|
||||
ed_struc_size=70
|
||||
struc edit_box width,left,top,color,shift_color,focus_border_color,\
|
||||
blur_border_color,text_color,max,text,flags,size,pos
|
||||
{
|
||||
.width dd width
|
||||
.left dd left
|
||||
.top dd top
|
||||
.color dd color
|
||||
.shift_color dd shift_color
|
||||
.focus_border_color dd focus_border_color
|
||||
.blur_border_color dd blur_border_color
|
||||
.text_color dd text_color
|
||||
.max dd max
|
||||
.text dd text
|
||||
.flags dw flags+0
|
||||
.size dd size+0
|
||||
.pos dd pos+0
|
||||
.offset dd 0
|
||||
.cl_curs_x dd 0
|
||||
.cl_curs_y dd 0
|
||||
.shift dd 0
|
||||
.shift_old dd 0
|
||||
}
|
||||
|
||||
|
||||
macro edit_boxes_set_sys_color start,end,color_table
|
||||
{
|
||||
mov edi,start
|
||||
mov ecx,((end-start)/ed_struc_size)
|
||||
mov esi,color_table
|
||||
@@:
|
||||
mov eax,[esi+36]
|
||||
mov ebx,[esi+20]
|
||||
mov ed_focus_border_color,eax
|
||||
shr bh,1
|
||||
shr bl,1
|
||||
shr ah,1
|
||||
shr al,1
|
||||
add ah,bh
|
||||
add al,bl
|
||||
ror eax,16
|
||||
ror ebx,16
|
||||
shr bl,1
|
||||
shr al,1
|
||||
add al,bl
|
||||
ror eax,16
|
||||
mov ed_blur_border_color,eax
|
||||
add edi,ed_struc_size
|
||||
loop @b
|
||||
}
|
||||
|
||||
macro draw_edit_box ed_ptr,use_f9,procinfo
|
||||
{
|
||||
if use_f9 eq
|
||||
else
|
||||
mcall 9,procinfo,-1
|
||||
end if
|
||||
mov edi,ed_ptr
|
||||
call edit_box.draw
|
||||
}
|
||||
|
||||
macro mouse_edit_box ed_ptr
|
||||
{
|
||||
mov edi,ed_ptr
|
||||
call edit_box.mouse
|
||||
}
|
||||
|
||||
macro key_edit_box ed_ptr
|
||||
{
|
||||
mov edi,ed_ptr
|
||||
call edit_box.key
|
||||
}
|
||||
macro default_box ed_ptr
|
||||
{
|
||||
pusha
|
||||
; xor eax,eax
|
||||
; mov ed_shift_pos,eax
|
||||
; mov ed_shift_pos_old,eax
|
||||
and word ed_flags,ed_shift_cl
|
||||
; mov ed_offset,eax
|
||||
popa
|
||||
}
|
60
programs/network/icq/trunk/README.TXT
Normal file
60
programs/network/icq/trunk/README.TXT
Normal file
@ -0,0 +1,60 @@
|
||||
v 0.01
|
||||
|
||||
|
||||
Версия тестовая, поэтому много недоработок
|
||||
и выводятся отладочные сообщения
|
||||
|
||||
Поддерживается:
|
||||
* Локальный контакт-лист, пока жестко зашит в код
|
||||
* передача/прием сообщений plain-text
|
||||
* Перекодировка CP866<->CP1251
|
||||
* Прием offline сообщений
|
||||
* Отправка сообщения пользователю не в контакт-листе
|
||||
/UIN Сообщение
|
||||
|
||||
Недоработки: Много :-)
|
||||
* Отключено закрытие сокетов - моя VM (Parallels) наглухо виснет, при
|
||||
попытке закрыть сокет
|
||||
|
||||
* Все сообщения от разных юзеров в одном поле вывода
|
||||
* Нельзя сменить статус
|
||||
* Нельзя отключится, опять же из-за закрытия сокетов
|
||||
* Не поддерживается UTF-8 и RTF сообщения
|
||||
* Из информации о юзере доступен только ник
|
||||
* editbox иногда ведет себя странно :-)
|
||||
* ..........
|
||||
|
||||
Для изменения уина/пароля надо перекомпилировать программу
|
||||
- файл ki.asm, переменные UIN и PASS
|
||||
|
||||
|
||||
|
||||
Для внесения юзеров в КЛ - файл comp.inc, функция loaduin,
|
||||
перемнные U1, U2, U3 ....
|
||||
(Скорее всего, потом будет переписано для загрузки из файла)
|
||||
|
||||
Т.к. я тестировал программу только под VM, возможно, что ничего и не заработает
|
||||
Тестирование проводилось с локальным сервером SIQ под Windows, VM Parallels
|
||||
и с основным сервером аси под Menuet, VM VMware (т.к. в parallels нет поддержки NAT,
|
||||
а Kolibri не поддерживает сетевую карту в VMware, может, я и ошибаюсь :-))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Выражаю благодарность всем разработчикам OS Kolibri
|
||||
за прекрасные инструменты и документацию, без которой я бы
|
||||
ничего не написал :-)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Все пожелания о дальнейшей судьбе проекта (закрыть, например :-))шлите на lv4evil@ya.ru
|
||||
|
||||
;Только за кривой код и ужасный английский ногами не бейте :-)
|
2
programs/network/icq/trunk/build_ru.bat
Normal file
2
programs/network/icq/trunk/build_ru.bat
Normal file
@ -0,0 +1,2 @@
|
||||
@fasm ki.asm ki
|
||||
|
926
programs/network/icq/trunk/comp.inc
Normal file
926
programs/network/icq/trunk/comp.inc
Normal file
@ -0,0 +1,926 @@
|
||||
;
|
||||
; à¨á®¢ âì ¯àאַ㣮«ì¨ª
|
||||
; x1,y1 ---------|
|
||||
; | |
|
||||
; | |
|
||||
; |-------------x2,y2
|
||||
;
|
||||
macro rect x1, y1, x2, y2, color
|
||||
{
|
||||
pushad
|
||||
|
||||
mov edx, color
|
||||
; ------------
|
||||
mov eax, 38
|
||||
mov ebx, x1
|
||||
shl ebx, 16
|
||||
add ebx, x2
|
||||
mov ecx, y1
|
||||
shl ecx, 16
|
||||
add ecx, y1
|
||||
int 40h
|
||||
|
||||
; ------------
|
||||
mov eax, 38
|
||||
mov ebx, x1
|
||||
shl ebx, 16
|
||||
add ebx, x2
|
||||
mov ecx, y2
|
||||
shl ecx, 16
|
||||
add ecx, y2
|
||||
int 40h
|
||||
; |
|
||||
; |
|
||||
; |
|
||||
mov eax, 38
|
||||
mov ebx, x1
|
||||
shl ebx, 16
|
||||
add ebx, x1
|
||||
mov ecx, y1
|
||||
shl ecx, 16
|
||||
add ecx, y2
|
||||
int 40h
|
||||
; |
|
||||
; |
|
||||
; |
|
||||
mov eax, 38
|
||||
mov ebx, x2
|
||||
shl ebx, 16
|
||||
add ebx, x2
|
||||
mov ecx, y1
|
||||
shl ecx, 16
|
||||
add ecx, y2
|
||||
int 40h
|
||||
|
||||
popad
|
||||
}
|
||||
|
||||
;
|
||||
; ‚뢮¤ íªà ¡ãä¥à á® áâப ¬¨
|
||||
;
|
||||
|
||||
scbuff db 512*128 dup 0
|
||||
; 512 - ¤«¨ áâப¨
|
||||
; 128 - ª®«¨ç¥á⢮ áâப
|
||||
;
|
||||
ind db 0 ; ’¥ªã騩 ¨¤¥ªá
|
||||
;
|
||||
;
|
||||
x_s dw 15 ; Š®®à¤¨ âë «¥¢®£® ¢¥à奣® 㣫 FIXIT
|
||||
y_s dw 38 ;
|
||||
|
||||
; ‚ëá®â áâப¨
|
||||
SH = 10
|
||||
|
||||
xlen dw 512 ; ¤«¨ áâப¨
|
||||
;ylen dw 128 ; ª®«¨ç¥á⢮ áâப
|
||||
ylen dw 40
|
||||
|
||||
;<EFBFBD>®á«¥¤¨¥ 4 ¡ ©â ¢ áâப¥ ®¡®§ ç îâ 梥â
|
||||
|
||||
printbuff:
|
||||
pushad
|
||||
|
||||
;
|
||||
; <EFBFBD> à¨á㥬 ¡¥«ë© ¯àאַ㣮«ì¨ª
|
||||
;
|
||||
mov eax, 13
|
||||
mov ebx, 15*65536+480
|
||||
mov ecx, 31*65536+418
|
||||
mov edx, 0FFFFFFh
|
||||
int 40h
|
||||
|
||||
|
||||
|
||||
xor ecx, ecx ; ‘ç¥â稪
|
||||
;xor eax, eax
|
||||
xor ebx, ebx
|
||||
;xor edx, edx
|
||||
|
||||
pb_loop:
|
||||
xor edx, edx
|
||||
xor eax, eax
|
||||
mov dl, [ind] ; ˆ¤¥ªá
|
||||
mov ax, [ylen]
|
||||
;mul edx
|
||||
cmp ecx, eax
|
||||
ja pr_end
|
||||
;
|
||||
;
|
||||
add edx, ecx ;<EFBFBD>ਡ ¢¨¬ áç¥â稪
|
||||
xor eax, eax
|
||||
mov ax, [ylen]
|
||||
cmp edx, eax ;ˆ¤¥ªá ¬¥ìè¥ ª®«¨ç¥á⢠áâப
|
||||
jna @f ;<=
|
||||
sub edx, eax ;…᫨ ¡®«ìè¥, áç¨â ¥¬ á ç «
|
||||
dec edx
|
||||
@@:
|
||||
;
|
||||
mov bx, [x_s] ; Š®®à¤¨ â X
|
||||
shl ebx, 16 ;
|
||||
push ecx
|
||||
mov eax, SH ; ‚ëç¨á«ï¥¬ ¬¥á⮯®«®¦¥¨¥ áâப¨
|
||||
imul eax, ecx ;
|
||||
;mov ecx, eax
|
||||
;xor eax, eax
|
||||
|
||||
;mov ax , [x_s]
|
||||
xor ecx, ecx
|
||||
mov cx, [y_s]
|
||||
add ecx, eax
|
||||
add ebx, ecx ; Š®®à¤¨ â Y
|
||||
;
|
||||
xor eax, eax
|
||||
mov ax, [xlen] ;¤«¨ áâப¨
|
||||
imul edx, eax ;“¬®¦ ¥¬ áç¥â稪 ¤«¨ã áâப¨, ¯®«ãç ¥¬ ᬥ饨¥ ®â®á¨â¥«ì® ç « ¡ãä¥à
|
||||
;mov edx, eax
|
||||
add edx, scbuff
|
||||
|
||||
xor eax, eax
|
||||
mov ax, [xlen]
|
||||
sub eax, 4
|
||||
xor ecx, ecx
|
||||
mov ecx, dword [edx+eax] ; <EFBFBD>®á«¥¤¨¥ 4 <EFBFBD> ©â á 梥⮬
|
||||
or ecx, 0x80000000 ; ‚뢮¤¨âì ASCIIZ
|
||||
mov eax, 4
|
||||
mov esi, -1 ; For Menuet
|
||||
int 40h
|
||||
pop ecx
|
||||
inc ecx
|
||||
jmp pb_loop
|
||||
|
||||
|
||||
pr_end:
|
||||
popad
|
||||
ret
|
||||
|
||||
;
|
||||
; Žâ« ¤®çë¥ á®®¡é¥¨ï
|
||||
;
|
||||
macro write_debug str
|
||||
{
|
||||
local ..string, ..label, ..end, ..loop, ..fin
|
||||
jmp ..label
|
||||
|
||||
..string db str, 0
|
||||
|
||||
..label:
|
||||
pushad
|
||||
xor eax, eax
|
||||
xor ebx, ebx
|
||||
xor ecx, ecx
|
||||
xor edx, edx
|
||||
|
||||
mov bl, [ind]
|
||||
mov ax, [xlen]
|
||||
imul ebx, eax
|
||||
add ebx, scbuff
|
||||
|
||||
..loop:
|
||||
mov dl, [..string+ecx]
|
||||
cmp dl, 0
|
||||
jz ..end
|
||||
mov [ebx+ecx], dl
|
||||
inc ecx
|
||||
jmp ..loop
|
||||
|
||||
..end:
|
||||
mov [ebx+ecx], dl
|
||||
xor ebx, ebx
|
||||
mov bl, [ind]
|
||||
cmp bx, [ylen]
|
||||
jz @f
|
||||
inc bl
|
||||
jmp ..fin
|
||||
@@:
|
||||
xor bl, bl
|
||||
|
||||
..fin:
|
||||
mov [ind], bl
|
||||
call printbuff
|
||||
;call draw_window
|
||||
popad
|
||||
}
|
||||
|
||||
;
|
||||
; Š®¯ª
|
||||
;
|
||||
macro draw_button x, y, xlen, ylen, id, str
|
||||
{
|
||||
pushad
|
||||
local ..string, ..label
|
||||
jmp ..label
|
||||
..string db str, 0
|
||||
|
||||
..label:
|
||||
mov eax, 8
|
||||
mov ebx, x*65536+xlen
|
||||
mov ecx, y*65536+ylen
|
||||
mov edx, id
|
||||
mov esi, 0x4466aa
|
||||
int 40h
|
||||
|
||||
mov eax, 4
|
||||
mov ebx, (x+5)*65536+y+ylen/2-3
|
||||
xor ecx, ecx
|
||||
or ecx, 0x80FFFFFF
|
||||
mov edx, ..string
|
||||
int 40h
|
||||
|
||||
popad
|
||||
}
|
||||
|
||||
;
|
||||
; Žâ« ¤®çë© ¢ë¢®¤ ¤ ëå
|
||||
;
|
||||
macro data_debug str, rg
|
||||
{
|
||||
pushad
|
||||
local ..string, ..end, ..loop, ..strend, ..fin, ..label
|
||||
jmp ..label
|
||||
..string db str, 20h, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||
..strend:
|
||||
|
||||
..label:
|
||||
;xor eax, eax
|
||||
;xor ebx, ebx
|
||||
xor ecx, ecx
|
||||
xor edx, edx
|
||||
|
||||
mov eax, rg
|
||||
lea ebx, [..strend-9]
|
||||
call int2str
|
||||
|
||||
xor eax, eax
|
||||
xor ebx, ebx
|
||||
|
||||
mov bl, [ind]
|
||||
mov ax, [xlen]
|
||||
imul ebx, eax
|
||||
add ebx, scbuff
|
||||
|
||||
..loop:
|
||||
mov dl, [..string+ecx]
|
||||
cmp dl, 0
|
||||
jz ..end
|
||||
mov [ebx+ecx], dl
|
||||
inc ecx
|
||||
jmp ..loop
|
||||
|
||||
..end:
|
||||
mov [ebx+ecx], dl
|
||||
xor ebx, ebx
|
||||
mov bl, [ind]
|
||||
cmp bx, [ylen]
|
||||
jz @f
|
||||
inc bl
|
||||
jmp ..fin
|
||||
@@:
|
||||
xor bl, bl
|
||||
|
||||
..fin:
|
||||
mov [ind], bl
|
||||
|
||||
|
||||
|
||||
call printbuff
|
||||
;call draw_window
|
||||
|
||||
popad
|
||||
}
|
||||
|
||||
; <--EAX
|
||||
; -->[ebx]
|
||||
;
|
||||
int2str:
|
||||
pushf
|
||||
;push ebx
|
||||
push ecx
|
||||
push edx
|
||||
push esi
|
||||
|
||||
;xor ebx, ebx
|
||||
xor ecx, ecx
|
||||
|
||||
i_loop:
|
||||
mov edx, eax
|
||||
push ecx
|
||||
shl ecx, 2
|
||||
mov esi, 28
|
||||
sub esi, ecx
|
||||
mov ecx, esi
|
||||
shr edx, cl
|
||||
pop ecx
|
||||
and dl, 0fh ;Žâ¤¥«¨âì ¬« ¤è¨¥ 4 ¡¨â
|
||||
cmp dl, 0Ah ;<EFBFBD>㪢
|
||||
jnc @f
|
||||
or dl, 0x30
|
||||
jmp i_n1
|
||||
|
||||
@@:
|
||||
sub dl, 9
|
||||
or dl, 0x40
|
||||
i_n1:
|
||||
mov [ebx+ecx], dl
|
||||
inc ecx
|
||||
cmp ecx, 8
|
||||
jnz i_loop
|
||||
|
||||
|
||||
pop esi
|
||||
pop edx
|
||||
pop ecx
|
||||
;pop ebx
|
||||
popf
|
||||
ret
|
||||
|
||||
;
|
||||
;
|
||||
CP866 db '€<>‚ƒ„…†‡ˆ‰Š‹Œ<E280B9>Ž<EFBFBD><C5BD>‘’“”•–—˜™š›œ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬®¯àáâãäåæçèéêëìíîï'
|
||||
|
||||
;
|
||||
; <EFBFBD>¥à¥ª®¤¨à®¢ª ¨§ cp1251 ¢ cp866
|
||||
;
|
||||
; [eax] <-- Null-terminated string
|
||||
;
|
||||
|
||||
win2dos:
|
||||
pushad
|
||||
pushf
|
||||
|
||||
xor ebx, ebx
|
||||
xor ecx, ecx
|
||||
;xor edx, edx
|
||||
|
||||
w2d_loop:
|
||||
mov bl, [eax+ecx]
|
||||
cmp bl, 0
|
||||
jz w2d_end
|
||||
cmp bl, 0A8h ; ð
|
||||
jz w2d_yo1
|
||||
cmp bl, 0B8h ; ñ
|
||||
jz w2d_yo2
|
||||
cmp bl, 0C0h ; <EFBFBD>ãááª ï ¡ãª¢
|
||||
jnc w2d_rchar
|
||||
inc ecx
|
||||
jmp w2d_loop
|
||||
|
||||
w2d_yo1:
|
||||
mov [eax+ecx], byte 0F0h
|
||||
inc ecx
|
||||
jmp w2d_loop
|
||||
|
||||
w2d_yo2:
|
||||
mov [eax+ecx], byte 0F1h
|
||||
inc ecx
|
||||
jmp w2d_loop
|
||||
|
||||
w2d_rchar:
|
||||
sub bl, 0C0h
|
||||
mov bl, [CP866+ebx]
|
||||
mov [eax+ecx], bl
|
||||
inc ecx
|
||||
jmp w2d_loop
|
||||
|
||||
|
||||
w2d_end:
|
||||
|
||||
popf
|
||||
popad
|
||||
ret
|
||||
|
||||
|
||||
CP1251 db 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'
|
||||
|
||||
;
|
||||
; <EFBFBD>¥à¥ª®¤¨à®¢ª ¨§ CP866 ¢ CP1251
|
||||
; [eax] <-- Null termainated string
|
||||
;
|
||||
|
||||
dos2win:
|
||||
pushf
|
||||
pushad
|
||||
|
||||
xor ebx, ebx
|
||||
xor ecx, ecx
|
||||
|
||||
dec ecx
|
||||
|
||||
d2w_loop:
|
||||
inc ecx
|
||||
mov bl, [eax+ecx]
|
||||
cmp bl, 0
|
||||
jz d2w_end
|
||||
cmp bl, 80h
|
||||
jnc d2w_rchar
|
||||
|
||||
;inc ecx
|
||||
jmp d2w_loop
|
||||
|
||||
d2w_yo1:
|
||||
mov byte [eax+ecx], 0A8h
|
||||
;inc ecx
|
||||
jmp d2w_loop
|
||||
|
||||
d2w_yo2:
|
||||
mov byte [eax+ecx], 0B8h
|
||||
;inc ecx
|
||||
jmp d2w_loop
|
||||
|
||||
d2w_rchar:
|
||||
cmp bl, 0B0h
|
||||
jnc d2w_rchar2
|
||||
|
||||
sub bl, 80h
|
||||
mov bl, [CP1251+ebx]
|
||||
mov [eax+ecx], bl
|
||||
jmp d2w_loop
|
||||
|
||||
d2w_rchar2:
|
||||
cmp bl, 0E0h
|
||||
jc d2w_loop
|
||||
cmp bl, 0F0h
|
||||
jz d2w_yo1
|
||||
cmp bl, 0F1h
|
||||
jz d2w_yo2
|
||||
cmp bl, 0F2h
|
||||
jnc d2w_loop
|
||||
add bl, 10h
|
||||
mov [eax+ecx], bl
|
||||
jmp d2w_loop
|
||||
|
||||
|
||||
d2w_end:
|
||||
|
||||
popad
|
||||
popf
|
||||
ret
|
||||
|
||||
|
||||
;
|
||||
; „«ï ¢ë¢®¤ á®®¡é¥¨©
|
||||
; [eax] <-- null-terminated string
|
||||
; ebx <-- color
|
||||
;
|
||||
writemsg:
|
||||
pushad
|
||||
push ebx
|
||||
push eax
|
||||
|
||||
xor eax, eax
|
||||
xor ebx, ebx
|
||||
|
||||
mov bl, [ind]
|
||||
mov ax, [xlen]
|
||||
imul ebx, eax
|
||||
add ebx, scbuff
|
||||
|
||||
pop eax
|
||||
mov edx, eax
|
||||
call strlen
|
||||
mov ecx, eax
|
||||
mov eax, edx
|
||||
call strcpy
|
||||
|
||||
mov [ebx+ecx], byte 0x00
|
||||
|
||||
xor eax, eax
|
||||
mov ax, [xlen]
|
||||
sub eax, 4
|
||||
pop ecx
|
||||
mov dword [ebx+eax], ecx ; <EFBFBD>®á«¥¤¨¥ 4 <EFBFBD> ©â á 梥⮬
|
||||
|
||||
|
||||
xor ebx, ebx
|
||||
mov bl, [ind]
|
||||
cmp bx, [ylen]
|
||||
jz @f
|
||||
inc bl
|
||||
jmp ..fin
|
||||
@@:
|
||||
xor bl, bl
|
||||
|
||||
..fin:
|
||||
mov [ind], bl
|
||||
|
||||
call printbuff
|
||||
;call draw_window
|
||||
|
||||
popad
|
||||
ret
|
||||
|
||||
;
|
||||
;
|
||||
|
||||
|
||||
|
||||
; <--EAX <EFBFBD>¥à¥¢®¤ ¨§ 16 ¢ 10 ä®à¬ã
|
||||
; -->[ebx]
|
||||
; --> eax ¤«¨
|
||||
int2strd:
|
||||
pushf
|
||||
;push ebx
|
||||
push ecx
|
||||
push edx
|
||||
push esi
|
||||
;push edi
|
||||
|
||||
;xor ebx, ebx
|
||||
xor ecx, ecx
|
||||
mov esi, 10
|
||||
|
||||
|
||||
id_loop:
|
||||
xor edx, edx
|
||||
|
||||
div esi
|
||||
|
||||
and dl, 0fh ;Žâ¤¥«¨âì ¬« ¤è¨¥ 4 ¡¨â
|
||||
or dl, 0x30
|
||||
|
||||
mov [ebx+ecx], dl
|
||||
cmp eax, 10
|
||||
inc ecx
|
||||
jnc id_loop
|
||||
|
||||
and al, 0fh ;Žâ¤¥«¨âì ¬« ¤è¨¥ 4 ¡¨â
|
||||
or al, 0x30
|
||||
|
||||
mov [ebx+ecx], al
|
||||
;mov [ebx+ecx+1], byte 0
|
||||
inc ecx
|
||||
mov eax, ecx
|
||||
; ¯¥à¥¢¥àãâì ¯®«ãç¥ãî áâபã
|
||||
;
|
||||
;xor edx, edx
|
||||
|
||||
;mov esi, 2
|
||||
;div esi
|
||||
shr eax, 1
|
||||
|
||||
xor edx, edx
|
||||
|
||||
id_loop2:
|
||||
cmp eax, 0
|
||||
jz id_end
|
||||
|
||||
|
||||
mov dl, [ebx+eax-1]
|
||||
lea esi, [ebx+ecx]
|
||||
sub esi, eax
|
||||
mov dh, [esi]
|
||||
|
||||
mov [ebx+eax-1], dh
|
||||
mov [esi], dl
|
||||
|
||||
dec eax
|
||||
jmp id_loop2
|
||||
|
||||
|
||||
|
||||
|
||||
id_end:
|
||||
mov eax, ecx
|
||||
|
||||
;pop edi
|
||||
pop esi
|
||||
pop edx
|
||||
pop ecx
|
||||
;pop ebx
|
||||
popf
|
||||
ret
|
||||
|
||||
;
|
||||
;
|
||||
;
|
||||
x_bb dw 550 ; Š®®à¤¨ âë «¥¢®£® ¢¥à奣® 㣫
|
||||
y_bb dw 30 ;
|
||||
;
|
||||
bb_width dw 100 ; ˜¨à¨ ª®¯®ª
|
||||
bb_height dw 15 ; ¢ëá®â ª®¯®ª
|
||||
;
|
||||
bb_dist dw 10 ; <EFBFBD> ááâ®ï¨¥ ¬¥¦¤ã ª®¯ª ¬¨
|
||||
|
||||
; ˆ¤¥â¨ä¨ª â®àë ª®¯®ª ç¨ ï á 100
|
||||
;
|
||||
; „«ï Š‹
|
||||
;
|
||||
;
|
||||
buttonbox:
|
||||
pushad
|
||||
pushf
|
||||
|
||||
xor ecx, ecx
|
||||
xor eax, eax
|
||||
xor ebx, ebx
|
||||
|
||||
bb_loop:
|
||||
|
||||
; <EFBFBD>஢¥à塞 ¯¥à¢ë© ¡ ©â 㨠, ¥á«¨ 0, ª®¯ªã à¨á®¢ âì ¥ ¤®
|
||||
mov ebx, NAME_LEN
|
||||
imul ebx, ecx
|
||||
|
||||
mov al, [names+ebx]
|
||||
cmp al, 0
|
||||
jz bb_end
|
||||
; à¨á㥬 ª®¯ªã
|
||||
; –¢¥â § ¢¨á¨â ®â áâ âãá UIN
|
||||
mov ebx, 4
|
||||
imul ebx, ecx
|
||||
mov eax, [stats+ebx] ; ‚ áâ à襬 á«®¢¥ ¤®¯®«¨â¥«ìë© áâ âãá
|
||||
cmp ax, -1
|
||||
jz bb_offline
|
||||
cmp ax, 1
|
||||
jz bb_away
|
||||
cmp ax, 2
|
||||
jz bb_dnd
|
||||
cmp ax, 4
|
||||
jz bb_na
|
||||
cmp ax, 10h
|
||||
jz bb_bisy
|
||||
cmp ax, 20h
|
||||
jz bb_free4chat
|
||||
cmp ax, 100h
|
||||
jz bb_invis
|
||||
; Online
|
||||
mov esi, 0x4466AA
|
||||
jmp bb_dr
|
||||
|
||||
bb_offline:
|
||||
mov esi, 0xBEBEBE
|
||||
jmp bb_dr
|
||||
|
||||
bb_away:
|
||||
mov esi, 0x14dcc3
|
||||
jmp bb_dr
|
||||
|
||||
bb_dnd:
|
||||
mov esi, 0x14dcc3
|
||||
jmp bb_dr
|
||||
|
||||
bb_na:
|
||||
mov esi, 0x14dcc3
|
||||
jmp bb_dr
|
||||
|
||||
bb_bisy:
|
||||
mov esi, 0x14dcc3
|
||||
jmp bb_dr
|
||||
|
||||
bb_free4chat:
|
||||
mov esi, 0x2233FF
|
||||
jmp bb_dr
|
||||
|
||||
bb_invis:
|
||||
mov esi, 0xD0D0D0
|
||||
|
||||
bb_dr:
|
||||
|
||||
mov bx, [x_bb]
|
||||
shl ebx, 16
|
||||
mov bx, [bb_width]
|
||||
;push ecx
|
||||
mov edx, ecx
|
||||
lea edx, [edx+100] ; ID
|
||||
mov edi, ecx
|
||||
mov cx, [y_bb]
|
||||
movzx eax, [bb_height]
|
||||
add ax, [bb_dist]
|
||||
imul eax, edi
|
||||
add ecx, eax
|
||||
shl ecx, 16
|
||||
mov cx, [bb_height]
|
||||
mov eax, 8
|
||||
int 40h
|
||||
|
||||
;
|
||||
; <EFBFBD> ¤¯¨áì ª®¯ª¥
|
||||
;
|
||||
add ebx, 50000h ; ‘¬¥é¥¨¥ ®â «¥¢®£® ªà ï
|
||||
shr ecx, 16
|
||||
movzx eax, [bb_height]
|
||||
shr eax, 1 ; /2
|
||||
sub eax, 3 ; ᬥ饨¥ ¢¢¥àå ®â æ¥âà
|
||||
add ecx, eax ; + ¯®«®¢¨ à §¬¥à ª®¯ª¨
|
||||
mov bx, cx
|
||||
mov ecx, 0x80FFFFFF ; –¢¥â
|
||||
mov edx, names
|
||||
mov esi, NAME_LEN
|
||||
imul esi, edi
|
||||
add edx, esi
|
||||
;mov esi, -1
|
||||
mov eax, 4
|
||||
int 40h
|
||||
|
||||
mov ecx, edi
|
||||
inc ecx
|
||||
cmp ecx, UINS
|
||||
ja bb_end
|
||||
jmp bb_loop
|
||||
|
||||
|
||||
bb_end:
|
||||
popf
|
||||
popad
|
||||
ret
|
||||
;
|
||||
; Œ áᨢ á UIN
|
||||
;
|
||||
UIN_LEN = 11 ; „«¨
|
||||
UINS = 15 ; Š®«¨ç¥á⢮
|
||||
;
|
||||
uins db UIN_LEN*UINS dup 0
|
||||
;
|
||||
; ¬ áᨢ á® áâ âãá ¬¨
|
||||
;
|
||||
stats dd UINS dup -1
|
||||
;
|
||||
; Œ áᨢ á ¨¬¥ ¬¨
|
||||
;
|
||||
NAME_LEN = 30
|
||||
|
||||
names db NAME_LEN*UINS dup 0
|
||||
|
||||
;
|
||||
;
|
||||
U1 db '123456789',0
|
||||
U2 db '123456789',0
|
||||
U3 db '123456789',0
|
||||
;
|
||||
; ‡ £à㧪 ¬ áᨢ UIN
|
||||
;
|
||||
loaduin:
|
||||
pushad
|
||||
mov eax, U1
|
||||
mov ebx, uins
|
||||
mov ecx, 9
|
||||
call strcpy
|
||||
|
||||
mov ebx, names
|
||||
call strcpy
|
||||
|
||||
mov eax, U2
|
||||
mov ebx, uins+UIN_LEN
|
||||
mov ecx, 9
|
||||
call strcpy
|
||||
|
||||
mov ebx, names+NAME_LEN
|
||||
call strcpy
|
||||
|
||||
mov eax, U3
|
||||
mov ebx, uins+UIN_LEN*2
|
||||
mov ecx, 9
|
||||
call strcpy
|
||||
|
||||
mov ebx, names+NAME_LEN*2
|
||||
call strcpy
|
||||
|
||||
|
||||
popad
|
||||
ret
|
||||
|
||||
;
|
||||
; ”ãªæ¨ï ¤«ï § £à㧪¨ Š‹ ¨ª ¬¨ ¨ áâ âãá ¬¨
|
||||
; eax <-- <EFBFBD>®¬¥à 㨠¯® ¯®à浪㠢 ¬ áᨢ¥ uins, ç¨ ï á 0
|
||||
; [ebx] <-- 㪠§ ⥫ì null-terminated áâபã á ®¢ë¬ ¨¬¥¥¬
|
||||
; ecx <-- <EFBFBD>®¢ë© áâ âãá
|
||||
;
|
||||
loadbb:
|
||||
pushad
|
||||
pushf
|
||||
;
|
||||
; <EFBFBD>஢¥à塞 ®¬¥à
|
||||
;
|
||||
cmp eax, UINS
|
||||
jnc loadbb_end ;>=
|
||||
|
||||
|
||||
;
|
||||
; “¤ «ï¥¬ ª®¯ªã
|
||||
;
|
||||
push ecx
|
||||
push ebx
|
||||
push eax
|
||||
|
||||
lea edx, [eax+100]
|
||||
or edx, 0x80000000
|
||||
mov eax, 8
|
||||
int 40h
|
||||
|
||||
;
|
||||
; ‘®åà 塞 ®¢ë© áâ âãá ¢ ¬ áᨢ¥ áâ âãᮢ
|
||||
;
|
||||
pop eax
|
||||
mov edx, 4 ; DWORD
|
||||
imul edx, eax
|
||||
mov [stats+edx], ecx
|
||||
;
|
||||
; ‘®åà 塞 ®¢®¥ ¨¬ï
|
||||
;
|
||||
mov edi, eax ; edi <-- Uin number
|
||||
pop eax ; <-- offset of string
|
||||
mov ebx, eax
|
||||
call strlen
|
||||
mov ecx, eax ; Len
|
||||
|
||||
|
||||
mov eax, ebx ;Source
|
||||
mov edx, NAME_LEN
|
||||
imul edx, edi
|
||||
lea ebx, [names+edx] ; Dest
|
||||
call strcpy
|
||||
mov [names+edx+ecx], byte 0
|
||||
|
||||
xchg edi, eax ; eax - áç¥â¨ª, edi - 㪠§ ⥫ì áâபã
|
||||
|
||||
pop ecx
|
||||
push edi
|
||||
; à¨á㥬 ª®¯ªã
|
||||
; –¢¥â § ¢¨á¨â ®â áâ âãá UIN
|
||||
|
||||
cmp cx, -1
|
||||
jz l_offline
|
||||
cmp cx, 1
|
||||
jz l_away
|
||||
cmp cx, 2
|
||||
jz l_dnd
|
||||
cmp cx, 4
|
||||
jz l_na
|
||||
cmp cx, 10h
|
||||
jz l_bisy
|
||||
cmp cx, 20h
|
||||
jz l_free4chat
|
||||
cmp cx, 100h
|
||||
jz l_invis
|
||||
; Online
|
||||
mov esi, 0x4466AA
|
||||
jmp l_dr
|
||||
|
||||
l_offline:
|
||||
mov esi, 0xBEBEBE
|
||||
jmp l_dr
|
||||
|
||||
l_away:
|
||||
mov esi, 0x14dcc3
|
||||
jmp l_dr
|
||||
|
||||
l_dnd:
|
||||
mov esi, 0x14dcc3
|
||||
jmp l_dr
|
||||
|
||||
l_na:
|
||||
mov esi, 0x14dcc3
|
||||
jmp l_dr
|
||||
|
||||
l_bisy:
|
||||
mov esi, 0x14dcc3
|
||||
jmp l_dr
|
||||
|
||||
l_free4chat:
|
||||
mov esi, 0x2233FF
|
||||
jmp l_dr
|
||||
|
||||
l_invis:
|
||||
mov esi, 0xD0D0D0
|
||||
|
||||
l_dr:
|
||||
|
||||
mov bx, [x_bb]
|
||||
shl ebx, 16
|
||||
mov bx, [bb_width]
|
||||
;push ecx
|
||||
mov edx, eax
|
||||
lea edx, [edx+100] ; ID
|
||||
mov edi, eax
|
||||
mov cx, [y_bb]
|
||||
movzx eax, [bb_height]
|
||||
add ax, [bb_dist]
|
||||
imul eax, edi
|
||||
add ecx, eax
|
||||
shl ecx, 16
|
||||
mov cx, [bb_height]
|
||||
mov eax, 8
|
||||
int 40h
|
||||
|
||||
;
|
||||
; <EFBFBD> ¤¯¨áì ª®¯ª¥
|
||||
;
|
||||
add ebx, 50000h ; ‘¬¥é¥¨¥ ®â «¥¢®£® ªà ï
|
||||
shr ecx, 16
|
||||
movzx eax, [bb_height]
|
||||
shr eax, 1 ; /2
|
||||
sub eax, 3 ; ᬥ饨¥ ¢¢¥àå ®â æ¥âà
|
||||
add ecx, eax ; + ¯®«®¢¨ à §¬¥à ª®¯ª¨
|
||||
mov bx, cx
|
||||
mov ecx, 0x80FFFFFF ; –¢¥â
|
||||
pop edx
|
||||
mov esi, -1
|
||||
mov eax, 4
|
||||
int 40h
|
||||
|
||||
|
||||
|
||||
loadbb_end:
|
||||
|
||||
popf
|
||||
popad
|
||||
ret
|
1
programs/network/icq/trunk/config.inc
Normal file
1
programs/network/icq/trunk/config.inc
Normal file
@ -0,0 +1 @@
|
||||
__CPU_type fix p5
|
1078
programs/network/icq/trunk/editbox.mac
Normal file
1078
programs/network/icq/trunk/editbox.mac
Normal file
File diff suppressed because it is too large
Load Diff
3496
programs/network/icq/trunk/ki.asm
Normal file
3496
programs/network/icq/trunk/ki.asm
Normal file
File diff suppressed because it is too large
Load Diff
1
programs/network/icq/trunk/lang.inc
Normal file
1
programs/network/icq/trunk/lang.inc
Normal file
@ -0,0 +1 @@
|
||||
lang fix ru
|
502
programs/network/icq/trunk/macros.inc
Normal file
502
programs/network/icq/trunk/macros.inc
Normal file
@ -0,0 +1,502 @@
|
||||
@^ fix macro comment {
|
||||
^@ fix }
|
||||
|
||||
|
||||
macro m2m dest,src {
|
||||
push src
|
||||
pop dest
|
||||
}
|
||||
|
||||
|
||||
macro iglobal {
|
||||
IGlobals equ IGlobals,
|
||||
macro __IGlobalBlock { }
|
||||
|
||||
macro uglobal {
|
||||
UGlobals equ UGlobals,
|
||||
macro __UGlobalBlock { }
|
||||
|
||||
endg fix } ; Use endg for ending iglobal and uglobal blocks.
|
||||
|
||||
|
||||
macro IncludeIGlobals{
|
||||
macro IGlobals dummy,[n] \{ __IGlobalBlock
|
||||
purge __IGlobalBlock \}
|
||||
match I, IGlobals \{ I \} }
|
||||
|
||||
macro IncludeUGlobals{
|
||||
macro UGlobals dummy,[n] \{
|
||||
\common
|
||||
\local begin, size
|
||||
begin = $
|
||||
virtual at $
|
||||
\forward
|
||||
__UGlobalBlock
|
||||
purge __UGlobalBlock
|
||||
\common
|
||||
size = $ - begin
|
||||
end virtual
|
||||
rb size
|
||||
\}
|
||||
match U, UGlobals \{ U \} }
|
||||
|
||||
uglobal
|
||||
endg
|
||||
|
||||
iglobal
|
||||
endg
|
||||
|
||||
|
||||
; new application structure
|
||||
macro meos_app_start
|
||||
{
|
||||
use32
|
||||
org 0x0
|
||||
|
||||
db 'MENUET01'
|
||||
dd 0x01
|
||||
dd __start
|
||||
dd __end
|
||||
dd __memory
|
||||
dd __stack
|
||||
|
||||
if used __params & ~defined __params
|
||||
dd __params
|
||||
else
|
||||
dd 0x0
|
||||
end if
|
||||
|
||||
dd 0x0
|
||||
}
|
||||
MEOS_APP_START fix meos_app_start
|
||||
|
||||
macro code
|
||||
{
|
||||
__start:
|
||||
}
|
||||
CODE fix code
|
||||
|
||||
macro data
|
||||
{
|
||||
__data:
|
||||
IncludeIGlobals
|
||||
}
|
||||
DATA fix data
|
||||
|
||||
macro udata
|
||||
{
|
||||
if used __params & ~defined __params
|
||||
__params:
|
||||
db 0
|
||||
__end:
|
||||
rb 255
|
||||
else
|
||||
__end:
|
||||
end if
|
||||
__udata:
|
||||
IncludeUGlobals
|
||||
}
|
||||
UDATA fix udata
|
||||
|
||||
macro meos_app_end
|
||||
{
|
||||
align 32
|
||||
rb 2048
|
||||
__stack:
|
||||
__memory:
|
||||
}
|
||||
MEOS_APP_END fix meos_app_end
|
||||
|
||||
|
||||
; macro for defining multiline text data
|
||||
struc mstr [sstring]
|
||||
{
|
||||
forward
|
||||
local ssize
|
||||
virtual at 0
|
||||
db sstring
|
||||
ssize = $
|
||||
end virtual
|
||||
dd ssize
|
||||
db sstring
|
||||
common
|
||||
dd -1
|
||||
}
|
||||
|
||||
; macro for defining multiline text data
|
||||
struc mls [sstring]
|
||||
{
|
||||
forward
|
||||
local ssize
|
||||
virtual at 0
|
||||
db sstring ; mod
|
||||
ssize = $
|
||||
end virtual
|
||||
db ssize
|
||||
db sstring
|
||||
common
|
||||
db -1 ; mod
|
||||
}
|
||||
|
||||
|
||||
|
||||
; strings
|
||||
macro sz name,[data] { ; from MFAR [mike.dld]
|
||||
common
|
||||
if used name
|
||||
name db data
|
||||
.size = $-name
|
||||
end if
|
||||
}
|
||||
|
||||
macro lsz name,[lng,data] { ; from MFAR [mike.dld]
|
||||
common
|
||||
if used name
|
||||
label name
|
||||
forward
|
||||
if lang eq lng
|
||||
db data
|
||||
end if
|
||||
common
|
||||
.size = $-name
|
||||
end if
|
||||
}
|
||||
|
||||
macro szc name,elsz,[data] { ; from MFAR [mike.dld]
|
||||
common
|
||||
local s,m
|
||||
m = 0
|
||||
if used name
|
||||
label name
|
||||
forward
|
||||
virtual at 0
|
||||
db data
|
||||
s = $
|
||||
end virtual
|
||||
d#elsz s
|
||||
if m < s
|
||||
m = s
|
||||
end if
|
||||
db data
|
||||
common
|
||||
.size = $-name
|
||||
.maxl = m
|
||||
end if
|
||||
}
|
||||
|
||||
macro lszc name,elsz,[lng,data] { ; from MFAR [mike.dld]
|
||||
common
|
||||
local s,m,c
|
||||
m = 0
|
||||
c = 0
|
||||
if used name
|
||||
label name
|
||||
forward
|
||||
if lang eq lng
|
||||
virtual at 0
|
||||
db data
|
||||
s = $
|
||||
end virtual
|
||||
d#elsz s
|
||||
if m < s
|
||||
m = s
|
||||
end if
|
||||
db data
|
||||
c = c+1
|
||||
end if
|
||||
common
|
||||
.size = $-name
|
||||
.maxl = m
|
||||
.count = c
|
||||
end if
|
||||
}
|
||||
|
||||
|
||||
; easy system call macro
|
||||
macro mpack dest, hsrc, lsrc
|
||||
{
|
||||
if (hsrc eqtype 0) & (lsrc eqtype 0)
|
||||
mov dest, (hsrc) shl 16 + lsrc
|
||||
else
|
||||
if (hsrc eqtype 0) & (~lsrc eqtype 0)
|
||||
mov dest, (hsrc) shl 16
|
||||
add dest, lsrc
|
||||
else
|
||||
mov dest, hsrc
|
||||
shl dest, 16
|
||||
add dest, lsrc
|
||||
end if
|
||||
end if
|
||||
}
|
||||
|
||||
macro __mov reg,a,b { ; mike.dld
|
||||
if (~a eq)&(~b eq)
|
||||
mpack reg,a,b
|
||||
else if (~a eq)&(b eq)
|
||||
mov reg,a
|
||||
end if
|
||||
}
|
||||
|
||||
|
||||
include 'config.inc'
|
||||
;__CPU_type equ p5
|
||||
SYSENTER_VAR equ 0
|
||||
|
||||
macro mcall a,b,c,d,e,f { ; mike.dld, updated by Ghost for Fast System Calls
|
||||
local ..ret_point
|
||||
__mov eax,a
|
||||
__mov ebx,b
|
||||
__mov ecx,c
|
||||
__mov edx,d
|
||||
__mov esi,e
|
||||
__mov edi,f
|
||||
|
||||
if __CPU_type eq p5
|
||||
int 0x40
|
||||
else
|
||||
if __CPU_type eq p6
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
push ..ret_point ; it may be 2 or 5 byte
|
||||
sysenter
|
||||
..ret_point:
|
||||
pop edx
|
||||
pop ecx
|
||||
|
||||
else
|
||||
if __CPU_type eq k6
|
||||
push ecx
|
||||
syscall
|
||||
pop ecx
|
||||
else
|
||||
display 'ERROR : unknown CPU type (set to p5)', 10, 13
|
||||
__CPU_type equ p5
|
||||
int 0x40
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
}
|
||||
|
||||
|
||||
; -------------------------
|
||||
macro header a,[b] {
|
||||
common
|
||||
use32
|
||||
org 0
|
||||
db 'MENUET',a
|
||||
forward
|
||||
if b eq
|
||||
dd 0
|
||||
else
|
||||
dd b
|
||||
end if }
|
||||
macro section name { align 16
|
||||
label name }
|
||||
macro func name {
|
||||
if ~used name
|
||||
display 'FUNC NOT USED: ',`name,13,10
|
||||
else
|
||||
align 4
|
||||
name:
|
||||
;diff16 `name,0,name
|
||||
;pushad
|
||||
;pushfd
|
||||
;dps `name
|
||||
;newline
|
||||
;mcall 5,1
|
||||
;popfd
|
||||
;popad
|
||||
}
|
||||
macro endf { end if }
|
||||
|
||||
macro diff16 title,l1,l2
|
||||
{
|
||||
local s,d
|
||||
s = l2-l1
|
||||
display title,': 0x'
|
||||
repeat 8
|
||||
d = '0' + s shr ((8-%) shl 2) and $0F
|
||||
if d > '9'
|
||||
d = d + 'A'-'9'-1
|
||||
end if
|
||||
display d
|
||||
end repeat
|
||||
display 13,10
|
||||
}
|
||||
|
||||
macro diff10 title,l1,l2
|
||||
{
|
||||
local s,d,z,m
|
||||
s = l2-l1
|
||||
z = 0
|
||||
m = 1000000000
|
||||
display title,': '
|
||||
repeat 10
|
||||
d = '0' + s / m
|
||||
s = s - (s/m)*m
|
||||
m = m / 10
|
||||
if d <> '0'
|
||||
z = 1
|
||||
end if
|
||||
if z <> 0
|
||||
display d
|
||||
end if
|
||||
end repeat
|
||||
display 13,10
|
||||
}
|
||||
|
||||
; optimize the code for size
|
||||
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
|
||||
|
||||
macro add arg1,arg2
|
||||
{
|
||||
if (arg2 eqtype 0)
|
||||
if (arg2) = 1
|
||||
inc arg1
|
||||
else
|
||||
add arg1,arg2
|
||||
end if
|
||||
else
|
||||
add arg1,arg2
|
||||
end if
|
||||
}
|
||||
|
||||
macro sub arg1,arg2
|
||||
{
|
||||
if (arg2 eqtype 0)
|
||||
if (arg2) = 1
|
||||
dec arg1
|
||||
else
|
||||
sub arg1,arg2
|
||||
end if
|
||||
else
|
||||
sub arg1,arg2
|
||||
end if
|
||||
}
|
||||
|
||||
macro mov arg1,arg2
|
||||
{
|
||||
if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0'))
|
||||
if (arg2) = 0
|
||||
xor arg1,arg1
|
||||
else if (arg2) = 1
|
||||
xor arg1,arg1
|
||||
inc arg1
|
||||
else if (arg2) = -1
|
||||
or arg1,-1
|
||||
else if (arg2) > -128 & (arg2) < 128
|
||||
push arg2
|
||||
pop arg1
|
||||
else
|
||||
mov arg1,arg2
|
||||
end if
|
||||
else
|
||||
mov arg1,arg2
|
||||
end if
|
||||
}
|
||||
|
||||
|
||||
macro RGB [a] {
|
||||
common
|
||||
match (r=,g=,b),a \{
|
||||
\dd ((r) shl 16) or ((g) shl 8) or (b)
|
||||
\}
|
||||
}
|
||||
|
||||
|
||||
struc POINT _t,_dx,_dy {
|
||||
.x _t _dx
|
||||
.y _t _dy
|
||||
}
|
||||
|
||||
; structure definition helper
|
||||
include 'struct.inc'
|
||||
|
||||
struct RECT
|
||||
left dd ?
|
||||
top dd ?
|
||||
right dd ?
|
||||
bottom dd ?
|
||||
ends
|
||||
|
||||
struct BOX
|
||||
left dd ?
|
||||
top dd ?
|
||||
width dd ?
|
||||
height dd ?
|
||||
ends
|
||||
|
||||
; structures used in MeOS
|
||||
struct process_information
|
||||
cpu_usage dd ? ; +0
|
||||
window_stack_position dw ? ; +4
|
||||
window_stack_value dw ? ; +6
|
||||
dw ? ; +8
|
||||
process_name rb 12 ; +10
|
||||
memory_start dd ? ; +22
|
||||
used_memory dd ? ; +26
|
||||
PID dd ? ; +30
|
||||
box BOX ; +34
|
||||
slot_state dw ? ; +50
|
||||
dw ? ; +52
|
||||
client_box BOX ; +54
|
||||
wnd_state db ? ; +70
|
||||
rb (1024-71)
|
||||
ends
|
||||
|
||||
struct system_colors
|
||||
frame dd ?
|
||||
grab dd ?
|
||||
grab_button dd ?
|
||||
grab_button_text dd ?
|
||||
grab_text dd ?
|
||||
work dd ?
|
||||
work_button dd ?
|
||||
work_button_text dd ?
|
||||
work_text dd ?
|
||||
work_graph dd ?
|
||||
ends
|
||||
|
||||
struct FILEDATE
|
||||
Second db ?
|
||||
Minute db ?
|
||||
Hour db ?
|
||||
db ?
|
||||
Day db ?
|
||||
Month db ?
|
||||
Year dw ?
|
||||
ends
|
||||
|
||||
struct FILEINFO
|
||||
Attributes dd ?
|
||||
IsUnicode db ?
|
||||
db 3 dup(?)
|
||||
DateCreate FILEDATE
|
||||
DateAccess FILEDATE
|
||||
DateModify FILEDATE
|
||||
Size dq ?
|
||||
ends
|
||||
|
||||
; constants
|
||||
|
||||
; events
|
||||
EV_IDLE = 0
|
||||
EV_TIMER = 0
|
||||
EV_REDRAW = 1
|
||||
EV_KEY = 2
|
||||
EV_BUTTON = 3
|
||||
EV_EXIT = 4
|
||||
EV_BACKGROUND = 5
|
||||
EV_MOUSE = 6
|
||||
EV_IPC = 7
|
||||
EV_STACK = 8
|
||||
|
||||
; event mask bits for function 40
|
||||
EVM_REDRAW = 1b
|
||||
EVM_KEY = 10b
|
||||
EVM_BUTTON = 100b
|
||||
EVM_EXIT = 1000b
|
||||
EVM_BACKGROUND = 10000b
|
||||
EVM_MOUSE = 100000b
|
||||
EVM_IPC = 1000000b
|
||||
EVM_STACK = 10000000b
|
180
programs/network/icq/trunk/struct.inc
Normal file
180
programs/network/icq/trunk/struct.inc
Normal file
@ -0,0 +1,180 @@
|
||||
|
||||
; Macroinstructions for defining data structures
|
||||
|
||||
macro struct name
|
||||
{ fields@struct equ name
|
||||
match child parent, name \{ fields@struct equ child,fields@\#parent \}
|
||||
sub@struct equ
|
||||
struc db [val] \{ \common fields@struct equ fields@struct,.,db,<val> \}
|
||||
struc dw [val] \{ \common fields@struct equ fields@struct,.,dw,<val> \}
|
||||
struc du [val] \{ \common fields@struct equ fields@struct,.,du,<val> \}
|
||||
struc dd [val] \{ \common fields@struct equ fields@struct,.,dd,<val> \}
|
||||
struc dp [val] \{ \common fields@struct equ fields@struct,.,dp,<val> \}
|
||||
struc dq [val] \{ \common fields@struct equ fields@struct,.,dq,<val> \}
|
||||
struc dt [val] \{ \common fields@struct equ fields@struct,.,dt,<val> \}
|
||||
struc rb count \{ fields@struct equ fields@struct,.,db,count dup (?) \}
|
||||
struc rw count \{ fields@struct equ fields@struct,.,dw,count dup (?) \}
|
||||
struc rd count \{ fields@struct equ fields@struct,.,dd,count dup (?) \}
|
||||
struc rp count \{ fields@struct equ fields@struct,.,dp,count dup (?) \}
|
||||
struc rq count \{ fields@struct equ fields@struct,.,dq,count dup (?) \}
|
||||
struc rt count \{ fields@struct equ fields@struct,.,dt,count dup (?) \}
|
||||
macro db [val] \{ \common \local anonymous
|
||||
fields@struct equ fields@struct,anonymous,db,<val> \}
|
||||
macro dw [val] \{ \common \local anonymous
|
||||
fields@struct equ fields@struct,anonymous,dw,<val> \}
|
||||
macro du [val] \{ \common \local anonymous
|
||||
fields@struct equ fields@struct,anonymous,du,<val> \}
|
||||
macro dd [val] \{ \common \local anonymous
|
||||
fields@struct equ fields@struct,anonymous,dd,<val> \}
|
||||
macro dp [val] \{ \common \local anonymous
|
||||
fields@struct equ fields@struct,anonymous,dp,<val> \}
|
||||
macro dq [val] \{ \common \local anonymous
|
||||
fields@struct equ fields@struct,anonymous,dq,<val> \}
|
||||
macro dt [val] \{ \common \local anonymous
|
||||
fields@struct equ fields@struct,anonymous,dt,<val> \}
|
||||
macro rb count \{ \local anonymous
|
||||
fields@struct equ fields@struct,anonymous,db,count dup (?) \}
|
||||
macro rw count \{ \local anonymous
|
||||
fields@struct equ fields@struct,anonymous,dw,count dup (?) \}
|
||||
macro rd count \{ \local anonymous
|
||||
fields@struct equ fields@struct,anonymous,dd,count dup (?) \}
|
||||
macro rp count \{ \local anonymous
|
||||
fields@struct equ fields@struct,anonymous,dp,count dup (?) \}
|
||||
macro rq count \{ \local anonymous
|
||||
fields@struct equ fields@struct,anonymous,dq,count dup (?) \}
|
||||
macro rt count \{ \local anonymous
|
||||
fields@struct equ fields@struct,anonymous,dt,count dup (?) \}
|
||||
macro union \{ fields@struct equ fields@struct,,union,<
|
||||
sub@struct equ union \}
|
||||
macro struct \{ fields@struct equ fields@struct,,substruct,<
|
||||
sub@struct equ substruct \}
|
||||
virtual at 0 }
|
||||
|
||||
macro ends
|
||||
{ match , sub@struct \{ restruc db,dw,du,dd,dp,dq,dt
|
||||
restruc rb,rw,rd,rp,rq,rt
|
||||
purge db,dw,du,dd,dp,dq,dt
|
||||
purge rb,rw,rd,rp,rq,rt
|
||||
purge union,struct
|
||||
match name=,fields,fields@struct \\{ fields@struct equ
|
||||
make@struct name,fields
|
||||
fields@\\#name equ fields \\}
|
||||
end virtual \}
|
||||
match any, sub@struct \{ fields@struct equ fields@struct> \}
|
||||
restore sub@struct }
|
||||
|
||||
macro make@struct name,[field,type,def]
|
||||
{ common
|
||||
if $
|
||||
display 'Error: definition of ',`name,' contains illegal instructions.',0Dh,0Ah
|
||||
err
|
||||
end if
|
||||
local define
|
||||
define equ name
|
||||
forward
|
||||
local sub
|
||||
match , field \{ make@substruct type,name,sub def
|
||||
define equ define,.,sub, \}
|
||||
match any, field \{ define equ define,.#field,type,<def> \}
|
||||
common
|
||||
match fields, define \{ define@struct fields \} }
|
||||
|
||||
macro define@struct name,[field,type,def]
|
||||
{ common
|
||||
local list
|
||||
list equ
|
||||
forward
|
||||
if ~ field eq .
|
||||
name#field type def
|
||||
sizeof.#name#field = $ - name#field
|
||||
else
|
||||
rb sizeof.#type
|
||||
end if
|
||||
local value
|
||||
match any, list \{ list equ list, \}
|
||||
list equ list <value>
|
||||
common
|
||||
sizeof.#name = $
|
||||
restruc name
|
||||
match values, list \{
|
||||
struc name value \\{
|
||||
match any, fields@struct \\\{ fields@struct equ fields@struct,.,name,<values> \\\}
|
||||
match , fields@struct \\\{ label .
|
||||
forward
|
||||
match , value \\\\{ field type def \\\\}
|
||||
match any, value \\\\{ field type value
|
||||
if ~ field eq .
|
||||
rb sizeof.#name#field - ($-field)
|
||||
end if \\\\}
|
||||
common \\\} \\} \} }
|
||||
|
||||
macro enable@substruct
|
||||
{ macro make@substruct substruct,parent,name,[field,type,def]
|
||||
\{ \common
|
||||
\local define
|
||||
define equ parent,name
|
||||
\forward
|
||||
\local sub
|
||||
match , field \\{ match any, type \\\{ enable@substruct
|
||||
make@substruct type,name,sub def
|
||||
purge make@substruct
|
||||
define equ define,.,sub, \\\} \\}
|
||||
match any, field \\{ define equ define,.\#field,type,<def> \\}
|
||||
\common
|
||||
match fields, define \\{ define@\#substruct fields \\} \} }
|
||||
|
||||
enable@substruct
|
||||
|
||||
macro define@union parent,name,[field,type,def]
|
||||
{ common
|
||||
virtual at 0
|
||||
forward
|
||||
if ~ field eq .
|
||||
virtual at 0
|
||||
parent#field type def
|
||||
sizeof.#parent#field = $ - parent#field
|
||||
end virtual
|
||||
if sizeof.#parent#field > $
|
||||
rb sizeof.#parent#field - $
|
||||
end if
|
||||
else if sizeof.#type > $
|
||||
rb sizeof.#type - $
|
||||
end if
|
||||
common
|
||||
sizeof.#name = $
|
||||
end virtual
|
||||
struc name [value] \{ \common
|
||||
label .\#name
|
||||
last@union equ
|
||||
forward
|
||||
match any, last@union \\{ virtual at .\#name
|
||||
field type def
|
||||
end virtual \\}
|
||||
match , last@union \\{ match , value \\\{ field type def \\\}
|
||||
match any, value \\\{ field type value \\\} \\}
|
||||
last@union equ field
|
||||
common rb sizeof.#name - ($ - .\#name) \} }
|
||||
|
||||
macro define@substruct parent,name,[field,type,def]
|
||||
{ common
|
||||
virtual at 0
|
||||
forward
|
||||
if ~ field eq .
|
||||
parent#field type def
|
||||
sizeof.#parent#field = $ - parent#field
|
||||
else
|
||||
rb sizeof.#type
|
||||
end if
|
||||
local value
|
||||
common
|
||||
sizeof.#name = $
|
||||
end virtual
|
||||
struc name value \{
|
||||
label .\#name
|
||||
forward
|
||||
match , value \\{ field type def \\}
|
||||
match any, value \\{ field type value
|
||||
if ~ field eq .
|
||||
rb sizeof.#parent#field - ($-field)
|
||||
end if \\}
|
||||
common \} }
|
Loading…
Reference in New Issue
Block a user