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 | ; |
||
3 | ; TERMINAL |
||
4 | ; |
||
5 | ; Compile with FASM for Menuet |
||
6 | ; |
||
7 | |||
8 | use32 |
||
661 | ataualpa | 9 | org 0x0 |
10 | db 'MENUET01' ; header |
||
11 | dd 0x01 ; header version |
||
12 | dd START ; entry point |
||
13 | dd I_END ; image size |
||
14 | dd I_END+0x10000 ; required memory |
||
15 | dd I_END+0x10000 ; esp |
||
16 | dd 0x0 , 0x0 ; I_Param , I_Path |
||
31 | halyavin | 17 | |
18 | |||
19 | include 'lang.inc' |
||
661 | ataualpa | 20 | include 'macros.inc' |
31 | halyavin | 21 | |
661 | ataualpa | 22 | START: ; start of execution |
31 | halyavin | 23 | |
24 | ; Clear the screen memory |
||
25 | mov eax, ' ' |
||
26 | mov edi,text |
||
27 | mov ecx,80*30 /4 |
||
28 | cld |
||
29 | rep stosd |
||
30 | |||
31 | |||
32 | call draw_window |
||
33 | |||
34 | |||
35 | still: |
||
36 | ; check connection status |
||
37 | mov eax,53 |
||
38 | mov ebx,6 |
||
39 | mov ecx,[socket] |
||
485 | heavyiron | 40 | mcall |
31 | halyavin | 41 | |
42 | mov ebx, [socket_status] |
||
43 | mov [socket_status], eax |
||
44 | |||
45 | cmp eax, ebx |
||
661 | ataualpa | 46 | je waitev |
31 | halyavin | 47 | |
485 | heavyiron | 48 | red: |
31 | halyavin | 49 | call draw_window |
50 | |||
51 | waitev: |
||
661 | ataualpa | 52 | mov eax,23 ; wait here for event |
31 | halyavin | 53 | mov ebx,20 |
485 | heavyiron | 54 | mcall |
31 | halyavin | 55 | |
661 | ataualpa | 56 | cmp eax,1 ; redraw request ? |
57 | je red |
||
58 | cmp eax,2 ; key in buffer ? |
||
59 | je key |
||
60 | cmp eax,3 ; button in buffer ? |
||
61 | je button |
||
31 | halyavin | 62 | |
63 | ; any data from the socket? |
||
64 | |||
65 | mov eax, 53 |
||
66 | mov ebx, 2 |
||
67 | mov ecx, [socket] |
||
485 | heavyiron | 68 | mcall |
31 | halyavin | 69 | cmp eax, 0 |
70 | jne read_input |
||
71 | |||
72 | jmp still |
||
73 | |||
74 | |||
75 | read_input: |
||
76 | |||
77 | push ecx |
||
78 | mov eax, 53 |
||
79 | mov ebx, 3 |
||
80 | mov ecx, [socket] |
||
485 | heavyiron | 81 | mcall |
31 | halyavin | 82 | pop ecx |
83 | |||
84 | call handle_data |
||
85 | |||
86 | push ecx |
||
87 | mov eax, 53 |
||
88 | mov ebx, 2 |
||
89 | mov ecx, [socket] |
||
485 | heavyiron | 90 | mcall |
31 | halyavin | 91 | pop ecx |
92 | cmp eax, 0 |
||
93 | |||
94 | |||
95 | jne read_input |
||
96 | call draw_text |
||
97 | jmp still |
||
98 | |||
99 | |||
100 | |||
101 | handle_data: |
||
102 | ; Telnet servers will want to negotiate options about our terminal window |
||
103 | ; just reject them all. |
||
104 | ; Telnet options start with the byte 0xff and are 3 bytes long. |
||
105 | |||
106 | mov al, [telnetstate] |
||
107 | cmp al, 0 |
||
661 | ataualpa | 108 | je state0 |
31 | halyavin | 109 | cmp al, 1 |
661 | ataualpa | 110 | je state1 |
31 | halyavin | 111 | cmp al, 2 |
661 | ataualpa | 112 | je state2 |
31 | halyavin | 113 | jmp hd001 |
114 | |||
115 | state0: |
||
116 | cmp bl, 255 |
||
117 | jne hd001 |
||
118 | mov al, 1 |
||
119 | mov [telnetstate], al |
||
120 | ret |
||
121 | |||
122 | state1: |
||
123 | mov al, 2 |
||
124 | mov [telnetstate], al |
||
125 | ret |
||
126 | |||
127 | state2: |
||
128 | mov al, 0 |
||
129 | mov [telnetstate], al |
||
130 | mov [telnetrep+2], bl |
||
131 | |||
132 | mov edx, 3 |
||
133 | mov eax,53 |
||
134 | mov ebx,7 |
||
135 | mov ecx,[socket] |
||
136 | mov esi, telnetrep |
||
485 | heavyiron | 137 | mcall |
31 | halyavin | 138 | ret |
139 | |||
140 | hd001: |
||
661 | ataualpa | 141 | cmp bl,13 ; BEGINNING OF LINE |
31 | halyavin | 142 | jne nobol |
143 | mov ecx,[pos] |
||
144 | add ecx,1 |
||
145 | boll1: |
||
146 | sub ecx,1 |
||
147 | mov eax,ecx |
||
148 | xor edx,edx |
||
149 | mov ebx,80 |
||
150 | div ebx |
||
151 | cmp edx,0 |
||
152 | jne boll1 |
||
153 | mov [pos],ecx |
||
154 | jmp newdata |
||
155 | nobol: |
||
156 | |||
661 | ataualpa | 157 | cmp bl,10 ; LINE DOWN |
31 | halyavin | 158 | jne nolf |
159 | addx1: |
||
160 | add [pos],dword 1 |
||
161 | mov eax,[pos] |
||
162 | xor edx,edx |
||
163 | mov ecx,80 |
||
164 | div ecx |
||
165 | cmp edx,0 |
||
166 | jnz addx1 |
||
167 | mov eax,[pos] |
||
168 | jmp cm1 |
||
169 | nolf: |
||
170 | |||
661 | ataualpa | 171 | cmp bl,8 ; BACKSPACE |
31 | halyavin | 172 | jne nobasp |
173 | mov eax,[pos] |
||
174 | dec eax |
||
175 | mov [pos],eax |
||
176 | mov [eax+text],byte 32 |
||
177 | mov [eax+text+60*80],byte 0 |
||
178 | jmp newdata |
||
179 | nobasp: |
||
180 | |||
661 | ataualpa | 181 | cmp bl,15 ; CHARACTER |
31 | halyavin | 182 | jbe newdata |
183 | mov eax,[pos] |
||
184 | mov [eax+text],bl |
||
185 | mov eax,[pos] |
||
186 | add eax,1 |
||
187 | cm1: |
||
188 | mov ebx,[scroll+4] |
||
189 | imul ebx,80 |
||
190 | cmp eax,ebx |
||
661 | ataualpa | 191 | jb noeaxz |
31 | halyavin | 192 | mov esi,text+80 |
193 | mov edi,text |
||
194 | mov ecx,ebx |
||
195 | cld |
||
196 | rep movsb |
||
197 | mov eax,ebx |
||
198 | sub eax,80 |
||
199 | noeaxz: |
||
200 | mov [pos],eax |
||
201 | newdata: |
||
202 | ret |
||
203 | |||
661 | ataualpa | 204 | key: ; KEY |
205 | mov eax,2 ; send to modem |
||
485 | heavyiron | 206 | mcall |
31 | halyavin | 207 | |
208 | mov ebx, [socket_status] |
||
661 | ataualpa | 209 | cmp ebx, 4 ; connection open? |
210 | jne still ; no, so ignore key |
||
31 | halyavin | 211 | |
212 | shr eax,8 |
||
661 | ataualpa | 213 | cmp eax,178 ; ARROW KEYS |
31 | halyavin | 214 | jne noaup |
215 | mov al,'A' |
||
216 | call arrow |
||
217 | jmp still |
||
218 | noaup: |
||
219 | cmp eax,177 |
||
220 | jne noadown |
||
221 | mov al,'B' |
||
222 | call arrow |
||
223 | jmp still |
||
224 | noadown: |
||
225 | cmp eax,179 |
||
226 | jne noaright |
||
227 | mov al,'C' |
||
228 | call arrow |
||
229 | jmp still |
||
230 | noaright: |
||
231 | cmp eax,176 |
||
232 | jne noaleft |
||
233 | mov al,'D' |
||
234 | call arrow |
||
235 | jmp still |
||
236 | noaleft: |
||
237 | modem_out: |
||
238 | |||
239 | call to_modem |
||
240 | |||
241 | jmp still |
||
242 | |||
661 | ataualpa | 243 | button: ; BUTTON |
31 | halyavin | 244 | mov eax,17 |
485 | heavyiron | 245 | mcall |
661 | ataualpa | 246 | cmp ah,1 ; CLOSE PROGRAM |
31 | halyavin | 247 | jne noclose |
248 | |||
249 | mov eax,53 |
||
250 | mov ebx,8 |
||
251 | mov ecx,[socket] |
||
485 | heavyiron | 252 | mcall |
31 | halyavin | 253 | |
485 | heavyiron | 254 | or eax,-1 |
255 | mcall |
||
31 | halyavin | 256 | noclose: |
661 | ataualpa | 257 | cmp ah, 2 ; Set IP |
31 | halyavin | 258 | jne notip |
259 | |||
260 | mov [string_x], dword 78 |
||
261 | mov [string_y], dword 276 |
||
262 | mov [string_length], dword 15 |
||
263 | call read_string |
||
264 | mov esi,string-1 |
||
265 | mov edi,ip_address |
||
266 | xor eax,eax |
||
267 | ip1: |
||
268 | inc esi |
||
269 | cmp [esi],byte '0' |
||
661 | ataualpa | 270 | jb ip2 |
31 | halyavin | 271 | cmp [esi],byte '9' |
661 | ataualpa | 272 | jg ip2 |
31 | halyavin | 273 | imul eax,10 |
274 | movzx ebx,byte [esi] |
||
275 | sub ebx,48 |
||
276 | add eax,ebx |
||
277 | jmp ip1 |
||
278 | ip2: |
||
279 | mov [edi],al |
||
280 | xor eax,eax |
||
281 | inc edi |
||
282 | cmp edi,ip_address+3 |
||
283 | jbe ip1 |
||
284 | call draw_window |
||
285 | |||
286 | |||
287 | jmp still |
||
288 | |||
289 | notip: |
||
661 | ataualpa | 290 | cmp ah, 3 ; set port |
31 | halyavin | 291 | jne notport |
292 | |||
293 | mov [string_x], dword 215 |
||
294 | mov [string_y], dword 276 |
||
295 | mov [string_length], dword 4 |
||
296 | call read_string |
||
297 | mov esi,string-1 |
||
298 | mov edi,port |
||
299 | xor eax,eax |
||
300 | ip11: |
||
301 | inc esi |
||
302 | cmp [esi],byte '0' |
||
661 | ataualpa | 303 | jb ip21 |
31 | halyavin | 304 | cmp [esi],byte '9' |
661 | ataualpa | 305 | jg ip21 |
31 | halyavin | 306 | imul eax,10 |
307 | movzx ebx,byte [esi] |
||
308 | sub ebx,48 |
||
309 | add eax,ebx |
||
310 | jmp ip11 |
||
311 | ip21: |
||
312 | mov [edi],al |
||
313 | inc edi |
||
314 | mov [edi],ah |
||
315 | call draw_window |
||
316 | |||
317 | |||
318 | jmp still |
||
319 | |||
320 | notport: |
||
661 | ataualpa | 321 | cmp ah, 4 ; connect |
31 | halyavin | 322 | jne notcon |
323 | |||
324 | mov eax, [socket_status] |
||
325 | cmp eax, 4 |
||
661 | ataualpa | 326 | je still |
31 | halyavin | 327 | call connect |
328 | |||
329 | jmp still |
||
330 | |||
331 | notcon: |
||
661 | ataualpa | 332 | cmp ah,5 ; disconnect |
31 | halyavin | 333 | jne notdiscon |
334 | |||
335 | call disconnect |
||
336 | jmp still |
||
337 | |||
661 | ataualpa | 338 | notdiscon: ; Echo Toggle |
31 | halyavin | 339 | cmp ah, 6 |
340 | jne still |
||
341 | |||
342 | mov al, [echo] |
||
343 | not al |
||
344 | mov [echo], al |
||
345 | |||
346 | call draw_window |
||
347 | jmp still |
||
348 | |||
349 | arrow: |
||
350 | |||
351 | push eax |
||
352 | mov al,27 |
||
353 | call to_modem |
||
354 | mov al,'[' |
||
355 | call to_modem |
||
356 | pop eax |
||
357 | call to_modem |
||
358 | |||
359 | ret |
||
360 | |||
361 | |||
362 | to_modem: |
||
363 | pusha |
||
364 | push ax |
||
365 | mov [tx_buff], al |
||
366 | mov edx, 1 |
||
367 | cmp al, 13 |
||
368 | jne tm_000 |
||
369 | mov edx, 2 |
||
370 | tm_000: |
||
371 | mov eax,53 |
||
372 | mov ebx,7 |
||
373 | mov ecx,[socket] |
||
374 | mov esi, tx_buff |
||
485 | heavyiron | 375 | mcall |
31 | halyavin | 376 | pop bx |
377 | mov al, [echo] |
||
378 | cmp al, 0 |
||
661 | ataualpa | 379 | je tm_001 |
31 | halyavin | 380 | |
381 | push bx |
||
382 | call handle_data |
||
383 | pop bx |
||
384 | |||
385 | cmp bl, 13 |
||
386 | jne tm_002 |
||
387 | |||
388 | mov bl, 10 |
||
389 | call handle_data |
||
390 | |||
391 | tm_002: |
||
392 | call draw_text |
||
393 | |||
394 | tm_001: |
||
395 | popa |
||
396 | ret |
||
397 | |||
398 | |||
399 | |||
400 | disconnect: |
||
401 | mov eax,53 |
||
402 | mov ebx,8 |
||
403 | mov ecx,[socket] |
||
485 | heavyiron | 404 | mcall |
31 | halyavin | 405 | ret |
406 | |||
407 | |||
408 | |||
409 | connect: |
||
410 | pusha |
||
411 | |||
661 | ataualpa | 412 | mov ecx, 1000 ; local port starting at 1000 |
31 | halyavin | 413 | |
414 | getlp: |
||
661 | ataualpa | 415 | inc ecx |
31 | halyavin | 416 | push ecx |
661 | ataualpa | 417 | mov eax, 53 |
418 | mov ebx, 9 |
||
485 | heavyiron | 419 | mcall |
661 | ataualpa | 420 | pop ecx |
421 | cmp eax, 0 ; is this local port in use? |
||
422 | jz getlp ; yes - so try next |
||
31 | halyavin | 423 | |
424 | mov eax,53 |
||
425 | mov ebx,5 |
||
426 | mov dl, [ip_address + 3] |
||
427 | shl edx, 8 |
||
428 | mov dl, [ip_address + 2] |
||
429 | shl edx, 8 |
||
430 | mov dl, [ip_address + 1] |
||
431 | shl edx, 8 |
||
432 | mov dl, [ip_address] |
||
433 | mov esi, edx |
||
661 | ataualpa | 434 | movzx edx, word [port] ; telnet port id |
31 | halyavin | 435 | mov edi,1 ; active open |
485 | heavyiron | 436 | mcall |
31 | halyavin | 437 | mov [socket], eax |
438 | |||
439 | popa |
||
440 | |||
441 | ret |
||
442 | |||
443 | |||
444 | |||
445 | ; ********************************************* |
||
446 | ; ******* WINDOW DEFINITIONS AND DRAW ******** |
||
447 | ; ********************************************* |
||
448 | |||
449 | |||
450 | draw_window: |
||
451 | |||
452 | pusha |
||
453 | |||
454 | mov eax,12 |
||
455 | mov ebx,1 |
||
485 | heavyiron | 456 | mcall |
31 | halyavin | 457 | |
661 | ataualpa | 458 | xor eax,eax ; DRAW WINDOW |
31 | halyavin | 459 | mov ebx,100*65536+491 + 8 +15 |
460 | mov ecx,100*65536+270 + 20 ; 20 for status bar |
||
661 | ataualpa | 461 | mov edx,0x14000000 |
485 | heavyiron | 462 | mov edi,title |
463 | mcall |
||
31 | halyavin | 464 | |
465 | ; draw status bar |
||
466 | mov eax, 13 |
||
467 | mov ebx, 4*65536+484 + 8 +15 |
||
468 | mov ecx, 270*65536 + 3 |
||
469 | mov edx, 0x00557799 |
||
485 | heavyiron | 470 | mcall |
31 | halyavin | 471 | |
661 | ataualpa | 472 | mov eax,8 ; BUTTON 2: SET IP |
31 | halyavin | 473 | mov ebx,4*65536+70 |
474 | mov ecx,273*65536+12 |
||
475 | mov esi, 0x00557799 |
||
476 | mov edx,2 |
||
485 | heavyiron | 477 | mcall |
31 | halyavin | 478 | |
661 | ataualpa | 479 | mov eax,4 ; Button text |
31 | halyavin | 480 | mov ebx,6*65536+276 |
481 | mov ecx,0x00ffffff |
||
482 | mov edx,setipt |
||
483 | mov esi,setiplen-setipt |
||
485 | heavyiron | 484 | mcall |
31 | halyavin | 485 | |
486 | |||
485 | heavyiron | 487 | mov eax,47 |
661 | ataualpa | 488 | mov edi,ip_address ; display IP address |
31 | halyavin | 489 | mov edx,78*65536+276 |
490 | mov esi,0x00ffffff |
||
491 | mov ebx,3*65536 |
||
492 | ipdisplay: |
||
493 | movzx ecx,byte [edi] |
||
485 | heavyiron | 494 | mcall |
31 | halyavin | 495 | add edx,6*4*65536 |
496 | inc edi |
||
497 | cmp edi,ip_address+4 |
||
661 | ataualpa | 498 | jb ipdisplay |
31 | halyavin | 499 | |
661 | ataualpa | 500 | mov eax,8 ; BUTTON 3: SET PORT |
31 | halyavin | 501 | mov ebx,173*65536+38 |
502 | mov ecx,273*65536+12 |
||
503 | mov edx,3 |
||
504 | mov esi, 0x00557799 |
||
485 | heavyiron | 505 | mcall |
31 | halyavin | 506 | |
661 | ataualpa | 507 | mov eax,4 ; Button text |
31 | halyavin | 508 | mov ebx,178*65536+276 |
509 | mov ecx,0x00ffffff |
||
510 | mov edx,setportt |
||
511 | mov esi,setportlen-setportt |
||
485 | heavyiron | 512 | mcall |
31 | halyavin | 513 | |
514 | |||
661 | ataualpa | 515 | mov edx,216*65536+276 ; display port |
31 | halyavin | 516 | mov esi,0x00ffffff |
517 | mov ebx,4*65536 |
||
518 | mov eax,47 |
||
519 | movzx ecx,word [port] |
||
485 | heavyiron | 520 | mcall |
31 | halyavin | 521 | |
661 | ataualpa | 522 | mov eax,8 ; BUTTON 4: Connect |
31 | halyavin | 523 | mov ebx,250*65536+50 |
524 | mov ecx,273*65536+12 |
||
525 | mov esi, 0x00557799 |
||
526 | mov edx,4 |
||
485 | heavyiron | 527 | mcall |
31 | halyavin | 528 | |
661 | ataualpa | 529 | mov eax,4 ; Button text |
31 | halyavin | 530 | mov ebx,255*65536+276 |
531 | mov ecx,0x00ffffff |
||
532 | mov edx,cont |
||
533 | mov esi,conlen-cont |
||
485 | heavyiron | 534 | mcall |
31 | halyavin | 535 | |
536 | |||
661 | ataualpa | 537 | mov eax,8 ; BUTTON 5: disconnect |
31 | halyavin | 538 | mov ebx,303*65536+70 |
539 | mov ecx,273*65536+12 |
||
540 | mov edx,5 |
||
541 | mov esi, 0x00557799 |
||
485 | heavyiron | 542 | mcall |
31 | halyavin | 543 | |
544 | |||
661 | ataualpa | 545 | mov eax,4 ; Button text |
31 | halyavin | 546 | mov ebx,307*65536+276 |
547 | mov ecx,0x00ffffff |
||
548 | mov edx,dist |
||
549 | mov esi,dislen-dist |
||
485 | heavyiron | 550 | mcall |
31 | halyavin | 551 | |
552 | |||
661 | ataualpa | 553 | mov esi,contlen-contt ; display connected status |
31 | halyavin | 554 | mov edx, contt |
555 | mov eax, [socket_status] |
||
661 | ataualpa | 556 | cmp eax, 4 ; 4 is connected |
557 | je pcon |
||
31 | halyavin | 558 | mov esi,discontlen-discontt |
559 | mov edx, discontt |
||
560 | pcon: |
||
561 | |||
661 | ataualpa | 562 | mov eax,4 ; status text |
31 | halyavin | 563 | mov ebx,380*65536+276 |
564 | mov ecx,0x00ffffff |
||
485 | heavyiron | 565 | mcall |
31 | halyavin | 566 | |
567 | |||
661 | ataualpa | 568 | mov eax,8 ; BUTTON 6: echo |
31 | halyavin | 569 | mov ebx,460*65536+50 |
570 | mov ecx,273*65536+12 |
||
571 | mov edx,6 |
||
572 | mov esi, 0x00557799 |
||
485 | heavyiron | 573 | mcall |
31 | halyavin | 574 | |
575 | mov edx,echot |
||
576 | mov esi,echolen-echot |
||
577 | mov al, [echo] |
||
578 | cmp al, 0 |
||
579 | jne peo |
||
580 | mov edx,echoot |
||
581 | mov esi,echoolen-echoot |
||
582 | |||
583 | peo: |
||
661 | ataualpa | 584 | mov eax,4 ; Button text |
31 | halyavin | 585 | mov ebx,463*65536+276 |
586 | mov ecx,0x00ffffff |
||
485 | heavyiron | 587 | mcall |
31 | halyavin | 588 | |
589 | |||
590 | xor eax,eax |
||
591 | mov edi,text+80*30 |
||
592 | mov ecx,80*30 /4 |
||
593 | cld |
||
594 | rep stosd |
||
595 | |||
596 | call draw_text |
||
597 | |||
598 | mov eax,12 |
||
599 | mov ebx,2 |
||
485 | heavyiron | 600 | mcall |
31 | halyavin | 601 | |
602 | popa |
||
603 | |||
604 | ret |
||
605 | |||
606 | |||
607 | draw_text: |
||
608 | |||
609 | pusha |
||
610 | |||
611 | mov esi,text |
||
612 | mov eax,0 |
||
613 | mov ebx,0 |
||
614 | newletter: |
||
615 | mov cl,[esi] |
||
616 | cmp cl,[esi+30*80] |
||
617 | jne yesletter |
||
618 | jmp noletter |
||
619 | yesletter: |
||
620 | mov [esi+30*80],cl |
||
621 | |||
622 | ; erase character |
||
623 | |||
624 | pusha |
||
661 | ataualpa | 625 | mov edx, 0 ; bg colour |
31 | halyavin | 626 | mov ecx, ebx |
627 | add ecx, 26 |
||
628 | shl ecx, 16 |
||
629 | mov cx, 9 |
||
630 | mov ebx, eax |
||
631 | add ebx, 6 |
||
632 | shl ebx, 16 |
||
633 | mov bx, 6 |
||
634 | mov eax, 13 |
||
485 | heavyiron | 635 | mcall |
31 | halyavin | 636 | popa |
637 | |||
638 | ; draw character |
||
639 | |||
640 | pusha |
||
641 | mov ecx, 0x00ffffff |
||
642 | push bx |
||
643 | mov ebx,eax |
||
644 | add ebx,6 |
||
645 | shl ebx,16 |
||
646 | pop bx |
||
647 | add bx,26 |
||
648 | mov eax,4 |
||
649 | mov edx,esi |
||
650 | mov esi,1 |
||
485 | heavyiron | 651 | mcall |
31 | halyavin | 652 | popa |
653 | |||
654 | noletter: |
||
655 | |||
656 | add esi,1 |
||
657 | add eax,6 |
||
658 | cmp eax,80*6 |
||
661 | ataualpa | 659 | jb newletter |
31 | halyavin | 660 | mov eax,0 |
661 | add ebx,10 |
||
662 | cmp ebx,24*10 |
||
661 | ataualpa | 663 | jb newletter |
31 | halyavin | 664 | |
665 | popa |
||
666 | ret |
||
667 | |||
668 | |||
669 | read_string: |
||
670 | |||
671 | mov edi,string |
||
672 | mov eax,'_' |
||
673 | mov ecx,[string_length] |
||
674 | inc ecx |
||
675 | cld |
||
676 | rep stosb |
||
677 | call print_text |
||
678 | |||
679 | mov edi,string |
||
680 | f11: |
||
681 | mov eax,10 |
||
485 | heavyiron | 682 | mcall |
31 | halyavin | 683 | cmp eax,2 |
684 | jne read_done |
||
685 | mov eax,2 |
||
485 | heavyiron | 686 | mcall |
31 | halyavin | 687 | shr eax,8 |
688 | cmp eax,13 |
||
661 | ataualpa | 689 | je read_done |
31 | halyavin | 690 | cmp eax,8 |
691 | jnz nobsl |
||
692 | cmp edi,string |
||
661 | ataualpa | 693 | jz f11 |
31 | halyavin | 694 | sub edi,1 |
695 | mov [edi],byte '_' |
||
696 | call print_text |
||
697 | jmp f11 |
||
698 | nobsl: |
||
699 | cmp eax,dword 31 |
||
700 | jbe f11 |
||
701 | cmp eax,dword 95 |
||
661 | ataualpa | 702 | jb keyok |
31 | halyavin | 703 | sub eax,32 |
704 | keyok: |
||
705 | mov [edi],al |
||
706 | call print_text |
||
707 | |||
708 | inc edi |
||
709 | mov esi,string |
||
710 | add esi,[string_length] |
||
711 | cmp esi,edi |
||
712 | jnz f11 |
||
713 | |||
714 | read_done: |
||
715 | |||
716 | call print_text |
||
717 | |||
718 | ret |
||
719 | |||
720 | |||
721 | print_text: |
||
722 | |||
723 | pusha |
||
724 | |||
725 | mov eax,13 |
||
726 | mov ebx,[string_x] |
||
727 | shl ebx,16 |
||
728 | add ebx,[string_length] |
||
729 | imul bx,6 |
||
730 | mov ecx,[string_y] |
||
731 | shl ecx,16 |
||
732 | mov cx,8 |
||
733 | mov edx,0x00000000 |
||
485 | heavyiron | 734 | mcall |
31 | halyavin | 735 | |
736 | mov eax,4 |
||
737 | mov ebx,[string_x] |
||
738 | shl ebx,16 |
||
739 | add ebx,[string_y] |
||
740 | mov ecx,0x00ffffff |
||
741 | mov edx,string |
||
742 | mov esi,[string_length] |
||
485 | heavyiron | 743 | mcall |
31 | halyavin | 744 | |
745 | popa |
||
746 | ret |
||
747 | |||
748 | |||
749 | |||
750 | |||
751 | ; DATA AREA |
||
752 | |||
661 | ataualpa | 753 | telnetrep db 0xff,0xfc,0x00 |
754 | telnetstate db 0 |
||
31 | halyavin | 755 | |
756 | string_length dd 16 |
||
757 | string_x dd 200 |
||
758 | string_y dd 60 |
||
759 | |||
661 | ataualpa | 760 | string db '________________' |
31 | halyavin | 761 | |
661 | ataualpa | 762 | tx_buff db 0, 10 |
763 | ip_address db 001,002,003,004 |
||
764 | port db 0,0 |
||
765 | echo db 0 |
||
766 | socket dd 0x0 |
||
767 | socket_status dd 0x0 |
||
768 | pos dd 80 * 1 |
||
769 | scroll dd 1 |
||
770 | dd 24 |
||
771 | wcolor dd 0x000000 |
||
772 | title db 'Telnet v0.1',0 |
||
773 | setipt db 'IP Address: . . .' |
||
31 | halyavin | 774 | setiplen: |
661 | ataualpa | 775 | setportt db 'Port:' |
31 | halyavin | 776 | setportlen: |
661 | ataualpa | 777 | cont db 'Connect' |
31 | halyavin | 778 | conlen: |
661 | ataualpa | 779 | dist db 'Disconnect' |
31 | halyavin | 780 | dislen: |
661 | ataualpa | 781 | contt db 'Connected' |
31 | halyavin | 782 | contlen: |
661 | ataualpa | 783 | discontt db 'Disconnected' |
31 | halyavin | 784 | discontlen: |
661 | ataualpa | 785 | echot db 'Echo On' |
31 | halyavin | 786 | echolen: |
661 | ataualpa | 787 | echoot db 'Echo Off' |
31 | halyavin | 788 | echoolen: |
789 | |||
790 | |||
791 | |||
792 | text: |
||
793 | I_END: |