Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
31 halyavin 1
;
2
;    NetSend(Server)
661 ataualpa 3
;
31 halyavin 4
;    Автор: Hex
5
;    Сайт: www.mestack.narod.ru
661 ataualpa 6
;
31 halyavin 7
;    Описание:
8
;    Программа для обмена сообщениями в сети.Серверная часть.
9
;
10
;    Compile with FASM for Menuet
11
;    Компилируется FASM'ом для Менуэт ОС
12
;
661 ataualpa 13
 
31 halyavin 14
use32
661 ataualpa 15
 org    0x0
16
 db     'MENUET01'    ; header
17
 dd     0x01          ; header version
18
 dd     START         ; entry point
19
 dd     I_END         ; image size
20
 dd     I_END+0x10000 ; required memory
21
 dd     I_END+0x10000 ; esp
22
 dd     0x0 , 0x0     ; I_Param , I_Path
23
 
31 halyavin 24
include 'lang.inc'
661 ataualpa 25
include 'macros.inc'
31 halyavin 26
remote_ip  db  192,168,0,1
661 ataualpa 27
 
28
 
31 halyavin 29
START:                      ; start of execution
661 ataualpa 30
 
31 halyavin 31
    mov  eax, 53                  ; open receiver socket
32
    mov  ebx, 0
33
    mov  ecx, 0x5000              ; local port
34
    mov  edx, 0xffff              ; remote port
35
    mov  esi, dword [remote_ip]   ; remote IP
485 heavyiron 36
    mcall
31 halyavin 37
    mov  [socketNum],eax
38
    mov  [0],eax                  ; save for remote code
485 heavyiron 39
 
661 ataualpa 40
red:
31 halyavin 41
    call draw_window            ; at first, draw the window
661 ataualpa 42
 
31 halyavin 43
still:
661 ataualpa 44
 
31 halyavin 45
    mov  eax,23                 ; wait here for event
46
    mov  ebx,1
485 heavyiron 47
    mcall
661 ataualpa 48
 
31 halyavin 49
    cmp  eax,1                  ; redraw request ?
50
    jz   red
51
    cmp  eax,2                  ; key in buffer ?
52
    jz   key
53
    cmp  eax,3                  ; button in buffer ?
54
    jz   button
661 ataualpa 55
 
31 halyavin 56
    mov  eax,53                 ; data from cluster terminal ?
57
    mov  ebx,2
58
    mov  ecx,[socketNum]
485 heavyiron 59
    mcall
661 ataualpa 60
 
31 halyavin 61
    cmp  eax,0
62
    jne  data_arrived
661 ataualpa 63
 
31 halyavin 64
    jmp  still
661 ataualpa 65
 
31 halyavin 66
key:
67
    mov  eax,2
485 heavyiron 68
    mcall
31 halyavin 69
    jmp  still
661 ataualpa 70
 
31 halyavin 71
button:
661 ataualpa 72
 
31 halyavin 73
    mov  eax,53
74
    mov  ebx,1
75
    mov  ecx,[socketNum]
485 heavyiron 76
    mcall
77
    or  eax,-1
78
    mcall
661 ataualpa 79
 
80
 
31 halyavin 81
data_arrived:
661 ataualpa 82
 
31 halyavin 83
    mov  eax,5                 ; wait a second for everything to arrive
84
    mov  ebx,10
485 heavyiron 85
    mcall
661 ataualpa 86
 
31 halyavin 87
    mov  edi,I_END
661 ataualpa 88
 
31 halyavin 89
  get_data:
661 ataualpa 90
 
31 halyavin 91
    mov  eax,53
92
    mov  ebx,3
93
    mov  ecx,[socketNum]
485 heavyiron 94
    mcall
661 ataualpa 95
 
31 halyavin 96
    mov  [edi],bl
97
    inc  edi
661 ataualpa 98
 
31 halyavin 99
    mov  eax,53
100
    mov  ebx,2
101
    mov  ecx,[socketNum]
485 heavyiron 102
    mcall
661 ataualpa 103
 
31 halyavin 104
    cmp  eax,0
105
    jne  get_data
661 ataualpa 106
 
31 halyavin 107
    mov  eax,4
108
    mov  ebx,10*65536+60
109
    add  ebx,[y]
110
    mov  ecx,0x000000
111
    mov  edx,I_END
112
    mov  esi,100
485 heavyiron 113
    mcall
661 ataualpa 114
 
31 halyavin 115
    add  [y],10
661 ataualpa 116
 
31 halyavin 117
    jmp  still
661 ataualpa 118
 
31 halyavin 119
y   dd   0x10
661 ataualpa 120
 
121
 
122
 
31 halyavin 123
;   *********************************************
124
;   *******  WINDOW DEFINITIONS AND DRAW ********
125
;   *********************************************
661 ataualpa 126
 
127
 
31 halyavin 128
draw_window:
661 ataualpa 129
 
31 halyavin 130
    mov  eax,12                    ; function 12:tell os about windowdraw
131
    mov  ebx,1                     ; 1, start of draw
485 heavyiron 132
    mcall
661 ataualpa 133
 
31 halyavin 134
                                   ; DRAW WINDOW
135
    mov  eax,0                     ; function 0 : define and draw window
136
    mov  ebx,100*65536+300         ; [x start] *65536 + [x size]
137
    mov  ecx,100*65536+330         ; [y start] *65536 + [y size]
661 ataualpa 138
    mov  edx,0x14ffffff            ; color of work area RRGGBB
485 heavyiron 139
    mov  edi,title                 ; WINDOW LABEL
140
    mcall
661 ataualpa 141
 
142
 
31 halyavin 143
    ; Re-draw the screen text
144
    cld
485 heavyiron 145
    mov  eax,4
31 halyavin 146
    mov  ebx,10*65536+30           ; draw info text with function 4
147
    mov  ecx,0x000000
148
    mov  edx,text
149
    mov  esi,40
150
  newline:
485 heavyiron 151
    mcall
31 halyavin 152
    add  ebx,16
153
    add  edx,40
154
    cmp  [edx],byte 'x'
155
    jnz  newline
661 ataualpa 156
 
157
 
31 halyavin 158
    mov  eax,12                    ; function 12:tell os about windowdraw
159
    mov  ebx,2                     ; 2, end of draw
485 heavyiron 160
    mcall
661 ataualpa 161
 
31 halyavin 162
    ret
661 ataualpa 163
 
164
 
31 halyavin 165
; DATA AREA
661 ataualpa 166
 
167
if lang eq ru
31 halyavin 168
text:
169
    db 'Данный адрес        : 192.168.0.2       '
170
    db 'Прослушиваемый порт : 0x5000            '
171
    db 'Присланные сообщения:                   '
131 diamond 172
    db 'x' ; <- END MARKER, DONT DELETE
173
else
174
text:
175
    db 'This address     : 192.168.0.2          '
176
    db 'Used port        : 0x5000               '
177
    db 'Received messages:                      '
178
    db 'x' ; <- END MARKER, DONT DELETE
179
end if
661 ataualpa 180
 
485 heavyiron 181
title  db  'NetSend(Server)',0
661 ataualpa 182
 
31 halyavin 183
socketNum   dd  0x0
184
 
661 ataualpa 185
 
31 halyavin 186
I_END: