Rev 1882 | Details | Compare with Previous | Last modification | View Log
Rev | Author | Line No. | Line |
---|---|---|---|
159 | demige | 1 | DEVICE ZXSPECTRUM128 |
2 | include "../_sdk/sys_h.asm" |
||
3 | |||
4 | org PROGSTART |
||
5 | dns_err_count=25 |
||
6 | |||
7 | TN_CMD_SE EQU 0xF0 ;suboption end |
||
8 | TN_CMD_NOP EQU 0xF1 |
||
9 | TN_CMD_DATAMARK EQU 0xF2 |
||
10 | TN_CMD_BREAK EQU 0xF3 |
||
11 | TN_CMD_INTERRUPTPROCESS EQU 0xF4 |
||
12 | TN_CMD_ABORTOUTPUT EQU 0xF5 |
||
13 | TN_CMD_AREYOUTHERE EQU 0xF6 |
||
14 | TN_CMD_ERASECHAR EQU 0xF7 |
||
15 | TN_CMD_ERASELINE EQU 0xF8 |
||
16 | TN_CMD_GOAHEAD EQU 0xF9 |
||
17 | TN_CMD_SB EQU 0xFA ;suboption begin |
||
18 | TN_CMD_WILL EQU 0xFB |
||
19 | TN_CMD_WONT EQU 0xFC |
||
20 | TN_CMD_DO EQU 0xFD |
||
21 | TN_CMD_DONT EQU 0xFE |
||
22 | TN_CMD_IAC EQU 0xFF |
||
23 | |||
24 | TN_OP_BINARY EQU 0x00 |
||
25 | TN_OP_ECHO EQU 0x01 |
||
26 | TN_OP_NICREPEAT EQU 0x02 |
||
27 | TN_OP_SGA EQU 0x03 ;suppress go ahead |
||
28 | TN_OP_NICSIZEDIALOG EQU 0x04 |
||
29 | TN_OP_STATUS EQU 0x05 |
||
30 | TN_OP_TIMINGMARK EQU 0x06 |
||
31 | TN_OP_RCTE EQU 0x07 |
||
32 | TN_OP_NICLENGTH EQU 0x08 |
||
33 | TN_OP_NICOUTPAGESIZE EQU 0x09 |
||
34 | TN_OP_NAOCRD EQU 0x0A ;Telnet Output Carriage-Return Disposition Option |
||
35 | TN_OP_NAOHTS EQU 0x0B ;TELNET OUTPUT HORIZONTAL TABSTOPS OPTION |
||
36 | TN_OP_NAOHTD EQU 0x0C ;TELNET OUTPUT HORIZONTAL TAB DISPOSITION OPTION |
||
37 | TN_OP_NAOFFD EQU 0x0D ;TELNET OUTPUT FORMFEED DISPOSITION OPTION |
||
38 | TN_OP_NAOVTS EQU 0x0E ;TELNET OUTPUT VERTICAL TABSTOPS OPTION |
||
39 | TN_OP_NAOVTD EQU 0x0F ;TELNET OUTPUT VERTICAL TAB DISPOSITION OPTION |
||
40 | TN_OP_NAOLFD EQU 0x10 ;TELNET OUTPUT LINEFEED DISPOSITION |
||
41 | TN_OP_EXTENDASCII EQU 0x11 ;TELNET EXTENDED ASCII OPTION |
||
42 | TN_OP_LOGOUT EQU 0x12 |
||
43 | TN_OP_BM EQU 0x13 ;TELNET Byte Macro Option |
||
44 | TN_OP_DET EQU 0x14 ;Telnet Data Entry Terminal Option |
||
45 | TN_OP_SUBDUP EQU 0x15 |
||
46 | TN_OP_SUBDUPOUTPUT EQU 0x16 |
||
47 | TN_OP_SENDLOCATION EQU 0x17 |
||
48 | TN_OP_TERMINALTYPE EQU 0x18 |
||
49 | TN_OP_ENDOFRECORD EQU 0x19 |
||
50 | TN_OP_TUID EQU 0x1A ;TACACS User Identification Telnet Option |
||
51 | TN_OP_OUTMRK EQU 0x1B |
||
52 | TN_OP_TTYLOC EQU 0x1C |
||
53 | TN_OP_REGIME EQU 0x1D |
||
54 | TN_OP_X3PAD EQU 0x1E |
||
55 | TN_OP_NAWS EQU 0x1F ;Telnet Window Size Option |
||
56 | TN_OP_TERMINALSPEED EQU 0x20 |
||
57 | TN_OP_TOGGLEFLOWCONTROL EQU 0x21 |
||
58 | TN_OP_LINEMODE EQU 0x22 |
||
59 | TN_OP_XDISPLOC EQU 0x23 |
||
60 | TN_OP_ENVIRON EQU 0x24 |
||
61 | TN_OP_AUTHENTICATION EQU 0x25 |
||
62 | TN_OP_ENCRYPT EQU 0x26 |
||
63 | TN_OP_NEWENVIRON EQU 0x27 |
||
64 | TN_OP_TN3270E EQU 0x28 |
||
65 | TN_OP_XAUTH EQU 0x29 |
||
66 | TN_OP_CHARSET EQU 0x2A |
||
67 | TN_OP_RSP EQU 0x2B |
||
68 | TN_OP_COMPORT EQU 0x2C |
||
69 | TN_OP_SUPPRESSLOCALECHO EQU 0x2D |
||
70 | TN_OP_STARTTLS EQU 0x2E |
||
71 | TN_OP_KERMIT EQU 0x2F |
||
72 | TN_OP_SENDURL EQU 0x30 |
||
73 | TN_OP_FORWARDX EQU 0x31 |
||
74 | TN_OP_EXTENDLIST EQU 0xFF |
||
75 | |||
76 | TN_ECHO EQU 0b00000001 |
||
77 | TN_SGA EQU 0b00000010 |
||
78 | TN_DEBUG EQU 0b10000000 |
||
79 | |||
173 | demige | 80 | TN_ST_TEXT EQU 0 |
81 | TN_ST_ESC EQU 1 |
||
82 | TN_ST_ANSI EQU 2 |
||
83 | |||
519 | dimkam | 84 | ERR_EAGAIN EQU 35 ;/* Try again */ |
85 | |||
568 | alone | 86 | AF_INET EQU 2 |
87 | |||
159 | demige | 88 | cmd_begin |
89 | ;init |
||
165 | demige | 90 | ld sp,0x4000 |
1832 | kulich | 91 | |
92 | ld e,0x86 |
||
159 | demige | 93 | OS_SETGFX ;text mode set |
1832 | kulich | 94 | OS_HIDEFROMPARENT |
95 | |||
165 | demige | 96 | OS_GETMAINPAGES ;dehl |
97 | push de |
||
98 | push hl |
||
99 | ld e,l |
||
100 | OS_DELPAGE |
||
101 | pop hl |
||
102 | ld e,h |
||
103 | OS_DELPAGE |
||
104 | pop de |
||
105 | OS_DELPAGE |
||
106 | |||
568 | alone | 107 | |
159 | demige | 108 | ;main |
109 | ;check cmdline |
||
1834 | kulich | 110 | ld e,0 |
111 | OS_CLS |
||
159 | demige | 112 | call print_nl |
113 | ld hl,COMMANDLINE |
||
114 | |||
115 | telnet_checkkeys ;Check cmdline keys |
||
116 | call skipword_hl ;skip arg0 |
||
117 | call skipspaces_hl |
||
118 | ld a,(hl) |
||
119 | cp '-' |
||
120 | jr nz,telnet_keysok |
||
121 | inc hl |
||
122 | ld a,(hl) |
||
123 | cp 'd' |
||
169 | demige | 124 | call z,telnet_setkey_d |
125 | cp 'h' |
||
126 | jp z,telnet_showhelp |
||
127 | cp 'V' |
||
128 | jp z,telnet_showversion |
||
159 | demige | 129 | jr telnet_checkkeys |
130 | |||
131 | telnet_keysok |
||
132 | ld de,arg_hostname |
||
133 | call strcopy_hltode |
||
134 | |||
135 | ld a,(arg_hostname) |
||
136 | or a |
||
137 | jp z, telnet_showusage ;if no hostname show usage |
||
138 | |||
568 | alone | 139 | ld hl,23*256 ;BIG ENDIAN 23 |
140 | ld (curport),hl |
||
141 | |||
1883 | dimkam | 142 | display "hostname ", $ |
568 | alone | 143 | ld hl,arg_hostname |
144 | openstream_http_findslash0 |
||
145 | ld a,(hl) |
||
146 | cp ':' |
||
147 | jr z,openstream_http_setport |
||
148 | ;cp '/' |
||
149 | ;jr z,openstream_http_slash |
||
150 | or a |
||
151 | jr z,openstream_http_slash |
||
152 | inc hl |
||
153 | jr openstream_http_findslash0 |
||
154 | openstream_http_setport |
||
155 | ld (hl),0 ;end of httphostname |
||
156 | ;decode port |
||
157 | ld de,0 ;oldport |
||
158 | openstream_http_decodeport0 |
||
159 | inc hl |
||
160 | ld a,(hl) |
||
161 | sub '0' |
||
162 | cp 10 |
||
163 | jr nc,openstream_http_decodeportq |
||
164 | push hl |
||
165 | ld h,d |
||
166 | ld l,e |
||
167 | add hl,hl |
||
168 | add hl,hl |
||
169 | add hl,de |
||
170 | add hl,hl ;hl=oldport*10 |
||
171 | add a,l |
||
172 | ld e,a |
||
173 | adc a,h |
||
174 | sub e |
||
175 | ld d,a ;de=port |
||
176 | pop hl |
||
177 | jr openstream_http_decodeport0 |
||
178 | openstream_http_decodeportq |
||
179 | ;de=port |
||
180 | ld a,d |
||
181 | ld d,e |
||
182 | ld e,a |
||
183 | ld (curport),de ;BIG ENDIAN |
||
184 | openstream_http_slash |
||
185 | |||
1835 | kulich | 186 | ld hl,arg_hostname-1 ;��� �������� � ����� |
159 | demige | 187 | ld de,ip |
188 | |||
189 | telnet_nextdig |
||
190 | inc hl ;check for ip-address in arg |
||
191 | call strtobyte_hltode |
||
192 | ld a,(hl) |
||
193 | cp '.' |
||
194 | jr z,telnet_nextdig |
||
195 | ld a,(hl) |
||
196 | or a |
||
197 | jr nz,telnet_resolve |
||
198 | ex hl,de |
||
199 | ld de,ip |
||
200 | sbc hl,de |
||
201 | ld de,4 |
||
202 | sbc hl,de |
||
203 | ld a,h |
||
204 | or l |
||
205 | jp z,telnet_noresolve ; We have ip in arg |
||
206 | |||
207 | telnet_resolve |
||
208 | |||
209 | ld de,arg_hostname |
||
210 | call dns_resolver ; resolving ip |
||
211 | ld a,h |
||
212 | or l ;in HL ip address or zero |
||
213 | jp z,telnet_resolveerror |
||
214 | ld de,ip; copy ip |
||
215 | ld bc,4 |
||
216 | ldir |
||
217 | |||
1883 | dimkam | 218 | telnet_noresolve |
568 | alone | 219 | curport=$+1 |
220 | ld hl,0 |
||
221 | ld (conparam_port),hl |
||
222 | |||
159 | demige | 223 | |
224 | ld hl,ip |
||
225 | ld de,txtip ; convert to text |
||
226 | call telnet_iptostr_hltode |
||
227 | |||
228 | ld hl,txt_head1 ; showing message connect to blablabla |
||
229 | call print_hl |
||
230 | ld hl,arg_hostname |
||
231 | call print_hl |
||
232 | ld hl,txt_head2 |
||
233 | call print_hl |
||
234 | ld hl,txtip |
||
235 | call print_hl |
||
236 | ld hl,txt_head3 |
||
237 | call print_hl |
||
238 | |||
568 | alone | 239 | ;curport=$+1 |
240 | ; ld bc,23 ; Preparing connect params |
||
159 | demige | 241 | ld hl,ip |
568 | alone | 242 | ;ex de,hl |
243 | ;ld hl,conparam+1;2 |
||
244 | ;ld (hl),b |
||
245 | ;inc hl |
||
246 | ;ld (hl),c ; port 23 |
||
247 | ;ex de,hl |
||
248 | ;inc de |
||
1883 | dimkam | 249 | display "connect ", $ |
568 | alone | 250 | ld de,conparam_ip |
159 | demige | 251 | ld bc,4 |
252 | ldir ; copy ip address |
||
253 | ld de,0x0201 ; AF_INET,SOCK_TCP |
||
254 | OS_NETSOCKET |
||
255 | ld a,l |
||
568 | alone | 256 | ld c,l ;??? |
159 | demige | 257 | ld (soc1),a ; save socket to soc1 |
258 | or a |
||
175 | demige | 259 | ld hl,txt_socketerror |
159 | demige | 260 | jp m, telnet_error_hl |
261 | |||
262 | ld de,conparam |
||
263 | OS_NETCONNECT ; open socket |
||
568 | alone | 264 | ld c,a ;??? |
159 | demige | 265 | ld a,l |
266 | or a |
||
175 | demige | 267 | ld hl,txt_socketopenerror |
159 | demige | 268 | jp m, telnet_error_hl |
269 | |||
182 | demige | 270 | ld hl,txt_work1 ; connected to |
159 | demige | 271 | call print_hl |
272 | ld hl,arg_hostname |
||
273 | call print_hl |
||
274 | ld hl,txt_head2 |
||
275 | call print_hl |
||
276 | ld hl,txtip |
||
277 | call print_hl |
||
278 | ld hl,txt_head3 |
||
279 | call print_hl |
||
280 | |||
168 | demige | 281 | ld de,ansi_pal |
282 | OS_SETPAL |
||
1882 | dimkam | 283 | display "main loop ", $ |
159 | demige | 284 | telnet_loop |
1882 | dimkam | 285 | call telnet_set_cursor |
159 | demige | 286 | YIELDGETKEY |
1882 | dimkam | 287 | push af |
288 | call telnet_res_cursor |
||
289 | pop af |
||
1834 | kulich | 290 | ;ld a,c |
1820 | alone | 291 | cp extD ;key_esc ;Sayman |
159 | demige | 292 | jp z,telnet_end |
293 | cp NOKEY |
||
294 | jr z,telnet_purge |
||
295 | cp key_backspace |
||
296 | call z,telnet_backspace |
||
167 | demige | 297 | cp key_left |
298 | jp z,telnet_sendleft |
||
299 | cp key_right |
||
300 | jp z,telnet_sendright |
||
301 | cp key_up |
||
302 | jp z,telnet_sendup |
||
303 | cp key_down |
||
304 | jp z,telnet_senddown |
||
305 | push af |
||
159 | demige | 306 | call telnet_putbyte_a |
167 | demige | 307 | pop af |
159 | demige | 308 | |
167 | demige | 309 | telnet_loop0 |
310 | ld bc,(options) ;echo |
||
168 | demige | 311 | bit 0,c |
159 | demige | 312 | jr z,telnet_purge |
167 | demige | 313 | cp 0x0D |
314 | jr z,telnet_prchar |
||
315 | cp 0x0A |
||
316 | jr z,telnet_prchar |
||
317 | cp 0x20 |
||
318 | jr c,telnet_purge |
||
319 | cp 0x7F |
||
320 | jr nc,telnet_purge |
||
321 | telnet_prchar |
||
159 | demige | 322 | PRCHAR |
323 | telnet_purge |
||
324 | call telnet_purge_writebuf |
||
173 | demige | 325 | jr telnet_read |
159 | demige | 326 | |
173 | demige | 327 | telnet_read_resetstate |
328 | xor a |
||
329 | ld (read_state),a |
||
159 | demige | 330 | telnet_read |
173 | demige | 331 | ld a,(read_state) |
332 | cp TN_ST_ESC |
||
333 | jr z,telnet_esc |
||
334 | cp TN_ST_ANSI |
||
335 | jr z,telnet_ansi0 |
||
159 | demige | 336 | call telnet_getbyte |
337 | jr nz,telnet_loop |
||
338 | ld a,(hl) |
||
167 | demige | 339 | cp 0x0D |
340 | jr z,telnet_read_prchar |
||
341 | cp 0x0A |
||
342 | jr z,telnet_read_prchar |
||
343 | cp 0x08 |
||
344 | jr z,telnet_prbackspace |
||
159 | demige | 345 | cp 0x1B ;ESC |
346 | jr z,telnet_esc |
||
167 | demige | 347 | cp 0x20 |
348 | jp c,telnet_read |
||
1829 | alone | 349 | cp 242;223;128 ;TODO 240? |
167 | demige | 350 | jp nc,telnet_noprintable |
351 | telnet_read_prchar |
||
159 | demige | 352 | PRCHAR |
353 | jr telnet_read |
||
354 | |||
167 | demige | 355 | telnet_prbackspace |
356 | OS_GETXY |
||
357 | ld a,e |
||
358 | dec a |
||
359 | jr c,telnet_read |
||
360 | ld e,a |
||
361 | push de |
||
362 | OS_SETXY |
||
363 | ld a,' ' |
||
364 | PRCHAR |
||
365 | pop de |
||
366 | OS_SETXY |
||
367 | jr telnet_read |
||
368 | |||
369 | |||
159 | demige | 370 | telnet_esc |
173 | demige | 371 | ld a,TN_ST_ESC |
372 | ld (read_state),a |
||
159 | demige | 373 | call telnet_getbyte |
167 | demige | 374 | jp nz,telnet_loop |
159 | demige | 375 | ld a,(hl) |
376 | cp '[' ;CSI |
||
377 | jr z,telnet_ansi |
||
173 | demige | 378 | jr telnet_read_resetstate |
159 | demige | 379 | |
380 | telnet_ansi |
||
173 | demige | 381 | ld a,TN_ST_ANSI |
382 | ld (read_state),a |
||
167 | demige | 383 | ld hl,0 |
384 | ld (ansi_cmd),hl |
||
385 | ld (ansi_anum),hl |
||
386 | ld (ansi_args),hl |
||
387 | ld (ansi_args+2),hl |
||
159 | demige | 388 | telnet_ansi0 |
389 | call telnet_getbyte |
||
173 | demige | 390 | jp nz,telnet_loop |
159 | demige | 391 | ld a,(hl) |
392 | call strisdigit_a |
||
393 | jr z,telnetansi_readargs |
||
394 | ld a,(hl) |
||
167 | demige | 395 | cp ';' |
396 | jr z,telnetansi_nextarg |
||
173 | demige | 397 | cp '?' |
398 | jr z,telnet_ansi0 ;TODO |
||
167 | demige | 399 | ld a,(hl) |
159 | demige | 400 | call strischar_a |
401 | jr z,telnetansi_readcmd |
||
173 | demige | 402 | jp telnet_read_resetstate |
159 | demige | 403 | |
167 | demige | 404 | telnetansi_nextarg |
405 | ld de,(ansi_anum) |
||
406 | inc de |
||
407 | ld (ansi_anum),de |
||
408 | jp telnet_ansi0 |
||
409 | |||
159 | demige | 410 | telnetansi_readcmd |
411 | ld a,(hl) |
||
412 | ld de,ansi_cmd |
||
413 | ld (de),a |
||
414 | jr telnetansi_docmd |
||
415 | |||
416 | telnetansi_readargs |
||
417 | ld a,(hl) |
||
167 | demige | 418 | sub 0x30 |
159 | demige | 419 | ld hl,ansi_args |
167 | demige | 420 | ld de,(ansi_anum) |
159 | demige | 421 | add hl,de |
167 | demige | 422 | ld d,a ;new digit |
423 | ld a,(hl) |
||
424 | ld e,a ;old digit |
||
425 | sla a |
||
426 | sla a |
||
427 | add e |
||
428 | sla a ;multiply by 10 |
||
429 | add d |
||
159 | demige | 430 | ld (hl),a |
431 | jr telnet_ansi0 |
||
432 | |||
433 | telnetansi_docmd |
||
434 | ld hl,ansi_cmd |
||
435 | ld a,(ansi_cmd) |
||
436 | cp 'm' |
||
167 | demige | 437 | jp z,telnetansi_docmd_m ;SGR |
438 | cp 'A' |
||
439 | jp z,telnetansi_docmd_A ;cursor up |
||
440 | cp 'B' |
||
441 | jp z,telnetansi_docmd_B ;cursor down |
||
442 | cp 'C' |
||
443 | jp z,telnetansi_docmd_C ;cursor light |
||
444 | cp 'D' |
||
445 | jp z,telnetansi_docmd_D ;cursor left |
||
446 | cp 'E' |
||
447 | jp z,telnetansi_docmd_E ;cursor x=1 y=y+n |
||
448 | cp 'F' |
||
173 | demige | 449 | jp z,telnetansi_docmd_F ;cursor x=1 y=y-1 |
167 | demige | 450 | cp 'G' |
173 | demige | 451 | jp z,telnetansi_docmd_G ;cursor x=n |
167 | demige | 452 | cp 'H' |
173 | demige | 453 | jp z,telnetansi_docmd_H ;cursor x=m y=n |
454 | cp 'J' |
||
455 | jp z,telnetansi_docmd_J ;n=0 clear screen after x n=1 clear screen before x n=2 clear all |
||
456 | cp 'K' |
||
457 | jp z,telnetansi_docmd_K ;n=0 clear line after x n=1 clear line before x n=2 clear whole line |
||
458 | cp 'S' |
||
459 | jp z,telnetansi_docmd_S ;scroll up n |
||
460 | cp 'T' |
||
461 | jp z,telnetansi_docmd_T ;scroll down n |
||
167 | demige | 462 | cp 'f' |
463 | jp z,telnetansi_docmd_H ;cursor x y |
||
173 | demige | 464 | jp telnet_read_resetstate |
159 | demige | 465 | |
173 | demige | 466 | telnetansi_docmd_J |
467 | OS_GETXY |
||
468 | ld a,(ansi_args) |
||
469 | cp 2 |
||
470 | jr z,telnetansi_docmd_J2 |
||
471 | cp 1 |
||
472 | jr z,telnetansi_docmd_J1 |
||
473 | or a |
||
474 | jp nz,telnet_read_resetstate |
||
475 | ;J0 |
||
476 | ld a,(max_y) |
||
477 | sub d |
||
478 | jp z,telnetansi_docmd_K0 |
||
479 | ld b,a |
||
480 | push de |
||
481 | ld e,0 |
||
482 | inc d |
||
483 | OS_SETXY |
||
484 | telnetansi_docmd_J0 |
||
485 | push bc |
||
486 | ld b,80 |
||
487 | call telnet_print_spaces_b |
||
488 | pop bc |
||
489 | djnz telnetansi_docmd_J0 |
||
490 | pop de |
||
491 | jr telnetansi_docmd_K0 |
||
492 | |||
493 | telnetansi_docmd_J1 |
||
494 | ld a,d |
||
495 | or a |
||
496 | jp z,telnetansi_docmd_K1 |
||
497 | ld b,d |
||
498 | push de |
||
499 | ld de,0 |
||
500 | OS_SETXY |
||
501 | telnetansi_docmd_J10 |
||
502 | push bc |
||
503 | ld b,80 |
||
504 | call telnet_print_spaces_b |
||
505 | pop bc |
||
506 | djnz telnetansi_docmd_J10 |
||
507 | pop de |
||
508 | jr telnetansi_docmd_K1 |
||
509 | telnetansi_docmd_J2 |
||
568 | alone | 510 | ld e,0 ;color byte |
173 | demige | 511 | OS_CLS |
512 | jp telnet_read_resetstate |
||
513 | |||
514 | ;KK |
||
515 | telnetansi_docmd_K |
||
516 | OS_GETXY |
||
517 | ld a,(ansi_args) |
||
518 | cp 2 |
||
519 | jr z,telnetansi_docmd_K2 |
||
520 | cp 1 |
||
521 | jr z,telnetansi_docmd_K1 |
||
522 | or a |
||
523 | jp nz,telnet_read_resetstate |
||
524 | ;J0 |
||
525 | telnetansi_docmd_K0 |
||
526 | ld a,(max_x) |
||
527 | sub e |
||
528 | ld b,a |
||
529 | ld a,(max_y) |
||
530 | sub d |
||
531 | jp z,telnet_read_resetstate |
||
532 | inc b |
||
533 | telnetansi_docmd_K0_noscroll |
||
534 | push de |
||
535 | call telnet_print_spaces_b |
||
536 | pop de |
||
537 | OS_SETXY |
||
538 | jp telnet_read_resetstate |
||
539 | telnetansi_docmd_K1 |
||
540 | ld a,e |
||
541 | or a |
||
542 | jp z,telnet_read_resetstate |
||
543 | push de |
||
544 | ld e,0 |
||
545 | OS_SETXY |
||
546 | pop de |
||
547 | ld b,e |
||
548 | dec b |
||
549 | call telnet_print_spaces_b |
||
550 | jp telnet_read_resetstate |
||
551 | telnetansi_docmd_K2 |
||
552 | push de |
||
553 | ld e,0 |
||
554 | OS_SETXY |
||
555 | ld b,80 |
||
556 | call telnet_print_spaces_b |
||
557 | pop de |
||
558 | OS_SETXY |
||
559 | jp telnet_read_resetstate |
||
560 | |||
561 | |||
562 | telnet_print_spaces_b |
||
563 | push bc |
||
564 | ld a,' ' |
||
565 | PRCHAR |
||
566 | pop bc |
||
567 | djnz telnet_print_spaces_b |
||
568 | ret |
||
569 | |||
570 | |||
571 | telnetansi_docmd_S |
||
572 | ;CMD_SCROLLUP=0xe7 ;de=topyx, hl=hgt,wid ;x, wid even |
||
573 | ld de,0 |
||
574 | ld a,(max_y) |
||
575 | inc a |
||
576 | ld h,a |
||
577 | ld a,(max_x) |
||
578 | inc a |
||
579 | ld l,a |
||
580 | ld a,(ansi_args) |
||
581 | ld b,a |
||
582 | or a |
||
583 | jr nz,telnetansi_docmd_S0 |
||
584 | inc b |
||
585 | telnetansi_docmd_S0 |
||
586 | push de |
||
587 | push hl |
||
588 | push bc |
||
589 | OS_SCROLLUP |
||
590 | pop bc |
||
591 | pop hl |
||
592 | pop de |
||
593 | djnz telnetansi_docmd_S0 |
||
594 | jp telnet_read_resetstate |
||
595 | |||
596 | telnetansi_docmd_T |
||
597 | ;CMD_SCROLLDOWN=0xe7 ;de=topyx, hl=hgt,wid ;x, wid even |
||
598 | ld de,0 |
||
599 | ld a,(max_y) |
||
600 | inc a |
||
601 | ld h,a |
||
602 | ld a,(max_x) |
||
603 | inc a |
||
604 | ld l,a |
||
605 | ld a,(ansi_args) |
||
606 | ld b,a |
||
607 | or a |
||
608 | jr nz,telnetansi_docmd_T0 |
||
609 | inc b |
||
610 | telnetansi_docmd_T0 |
||
611 | push de |
||
612 | push hl |
||
613 | push bc |
||
614 | OS_SCROLLDOWN |
||
615 | pop bc |
||
616 | pop hl |
||
617 | pop de |
||
618 | djnz telnetansi_docmd_T0 |
||
619 | jp telnet_read_resetstate |
||
620 | |||
167 | demige | 621 | telnetansi_docmd_F;;cursor x=1 y up |
622 | OS_GETXY |
||
623 | ld e,0 |
||
624 | jr telnetansi_docmd_A1 |
||
625 | telnetansi_docmd_A ;cursor up |
||
626 | OS_GETXY |
||
627 | telnetansi_docmd_A1 |
||
173 | demige | 628 | ld a,(ansi_args) |
159 | demige | 629 | or a |
167 | demige | 630 | jr nz,telnetansi_docmd_A0 |
631 | ld a,1 |
||
632 | telnetansi_docmd_A0 |
||
633 | ld hl,(max_y) |
||
634 | sub d |
||
635 | neg |
||
636 | ld d,a |
||
637 | cp l |
||
638 | jr c,telnetansi_docmd_A_ret |
||
639 | ld d,0 |
||
640 | telnetansi_docmd_A_ret |
||
641 | OS_SETXY |
||
173 | demige | 642 | jp telnet_read_resetstate |
167 | demige | 643 | |
644 | telnetansi_docmd_E ;cursor x=1 y down |
||
645 | OS_GETXY |
||
646 | ld e,1 |
||
647 | jr telnetansi_docmd_B1 |
||
648 | telnetansi_docmd_B ;cursor down |
||
649 | OS_GETXY |
||
650 | telnetansi_docmd_B1 |
||
173 | demige | 651 | ld a,(ansi_args) |
167 | demige | 652 | or a |
653 | jr nz,telnetansi_docmd_B0 |
||
654 | ld a,1 |
||
655 | telnetansi_docmd_B0 |
||
656 | ld hl,(max_y) |
||
657 | add d |
||
658 | ld d,a |
||
659 | cp l |
||
660 | jr c,telnetansi_docmd_B_ret |
||
661 | ld d,h |
||
662 | telnetansi_docmd_B_ret |
||
663 | OS_SETXY |
||
173 | demige | 664 | jp telnet_read_resetstate |
167 | demige | 665 | |
666 | telnetansi_docmd_C ;cursor right |
||
667 | OS_GETXY |
||
173 | demige | 668 | ld a,(ansi_args) |
167 | demige | 669 | or a |
670 | jr nz,telnetansi_docmd_C0 |
||
671 | ld a,1 |
||
672 | telnetansi_docmd_C0 |
||
673 | ld hl,(max_x) |
||
674 | add e |
||
675 | ld e,a |
||
676 | cp l |
||
677 | jr c,telnetansi_docmd_C_ret |
||
678 | ld e,h |
||
679 | telnetansi_docmd_C_ret |
||
680 | OS_SETXY |
||
173 | demige | 681 | jp telnet_read_resetstate |
167 | demige | 682 | |
683 | telnetansi_docmd_D ;cursor left |
||
684 | OS_GETXY |
||
173 | demige | 685 | ld a,(ansi_args) |
167 | demige | 686 | or a |
687 | jr nz,telnetansi_docmd_D0 |
||
688 | ld a,1 |
||
689 | telnetansi_docmd_D0 |
||
690 | ld hl,(max_x) |
||
691 | sub e |
||
692 | neg |
||
693 | ld e,a |
||
694 | cp l |
||
695 | jr c,telnetansi_docmd_D_ret |
||
696 | ld e,0 |
||
697 | telnetansi_docmd_D_ret |
||
698 | OS_SETXY |
||
173 | demige | 699 | jp telnet_read_resetstate |
167 | demige | 700 | |
701 | telnetansi_docmd_G ;cursor x |
||
702 | OS_GETXY |
||
173 | demige | 703 | ld a,(ansi_args) |
167 | demige | 704 | dec a |
705 | ld hl,(max_x) |
||
706 | inc hl |
||
707 | cp l |
||
173 | demige | 708 | jp nc,telnet_read_resetstate |
167 | demige | 709 | ld e,a |
710 | OS_SETXY |
||
173 | demige | 711 | jp telnet_read_resetstate |
167 | demige | 712 | |
713 | telnetansi_docmd_H ;cursor x,y |
||
173 | demige | 714 | ld a,(ansi_args+1) |
715 | or a |
||
716 | jr z,telnetansi_docmd_H0 |
||
167 | demige | 717 | dec a |
173 | demige | 718 | telnetansi_docmd_H0 |
167 | demige | 719 | ld hl,(max_x) |
720 | inc hl |
||
721 | cp l |
||
173 | demige | 722 | jp nc,telnet_read_resetstate ;x |
167 | demige | 723 | ld e,a |
173 | demige | 724 | ld a,(ansi_args) |
725 | or a |
||
726 | jr z,telnetansi_docmd_H1 |
||
167 | demige | 727 | dec a |
173 | demige | 728 | telnetansi_docmd_H1 |
167 | demige | 729 | ld hl,(max_y) |
730 | inc hl |
||
731 | cp l |
||
173 | demige | 732 | jp nc,telnet_read_resetstate ;y |
167 | demige | 733 | ld d,a |
734 | OS_SETXY |
||
173 | demige | 735 | jp telnet_read_resetstate |
167 | demige | 736 | |
737 | telnetansi_docmd_m ;SGR |
||
173 | demige | 738 | ld a,(ansi_args) |
167 | demige | 739 | or a ;0 |
169 | demige | 740 | jp z,telnetansi_docmd_mreset |
168 | demige | 741 | cp 1 |
742 | jr z,telnetansi_docmd_m1 |
||
743 | cp 22 |
||
744 | jr z,telnetansi_docmd_m22 |
||
745 | cp 39 |
||
746 | jr z,telnetansi_docmd_m39 |
||
747 | cp 49 |
||
748 | jr z,telnetansi_docmd_m49 |
||
159 | demige | 749 | sub 30 |
173 | demige | 750 | jp c,telnet_read_resetstate |
159 | demige | 751 | sub 8 |
167 | demige | 752 | jr c,telnetansi_docmd_m30 |
753 | sub 2 ;40 |
||
173 | demige | 754 | jp c,telnet_read_resetstate |
167 | demige | 755 | sub 8 |
756 | jr c,telnetansi_docmd_m40 |
||
168 | demige | 757 | call printbyte_a |
758 | sub 42 ;90 |
||
173 | demige | 759 | jp c,telnet_read_resetstate |
168 | demige | 760 | sub 8 |
761 | jr c,telnetansi_docmd_m90 |
||
762 | |||
763 | jp telnet_end |
||
764 | telnetansi_docmd_m1 |
||
169 | demige | 765 | ld a,(color) |
766 | set 6,a |
||
168 | demige | 767 | jr telnetansi_docmd_m0 |
768 | telnetansi_docmd_m22 |
||
169 | demige | 769 | ld a,(color) |
770 | res 6,a |
||
168 | demige | 771 | jr telnetansi_docmd_m0 |
772 | telnetansi_docmd_m39 |
||
169 | demige | 773 | ld a,(color) |
168 | demige | 774 | and 0b10111000 |
775 | or 0b00000111 ;default text color |
||
776 | jr telnetansi_docmd_m0 |
||
777 | telnetansi_docmd_m49 |
||
169 | demige | 778 | ld a,(color) |
168 | demige | 779 | and 0b01000111 |
780 | jr telnetansi_docmd_m0 |
||
781 | telnetansi_docmd_m90 |
||
782 | add 64-8 ;intensity |
||
167 | demige | 783 | telnetansi_docmd_m30 |
159 | demige | 784 | add 8 |
167 | demige | 785 | ld d,a |
169 | demige | 786 | ld a,(color) |
168 | demige | 787 | and 0b11111000 |
167 | demige | 788 | add d |
789 | jr telnetansi_docmd_m0 |
||
790 | telnetansi_docmd_m40 |
||
791 | add 8 |
||
792 | sla a |
||
793 | sla a |
||
794 | sla a |
||
795 | ld d,a |
||
169 | demige | 796 | ld a,(color) |
168 | demige | 797 | and 0b11000111 |
167 | demige | 798 | add d |
169 | demige | 799 | jr telnetansi_docmd_m0 |
800 | telnetansi_docmd_mreset |
||
801 | ld a,7 |
||
802 | telnetansi_docmd_m0 |
||
167 | demige | 803 | ld e,a |
169 | demige | 804 | ld (color),a |
159 | demige | 805 | OS_SETCOLOR |
173 | demige | 806 | jp telnet_read_resetstate |
159 | demige | 807 | |
808 | telnet_noprintable |
||
809 | cp TN_CMD_IAC |
||
810 | jp nz,telnet_read |
||
811 | call telnet_debug_a |
||
812 | call telnet_getbyte |
||
167 | demige | 813 | jp nz,telnet_read |
159 | demige | 814 | ld a,(hl) |
815 | cp TN_CMD_DO |
||
816 | jr z,telnet_cmd_do |
||
817 | cp TN_CMD_DONT |
||
818 | jr z,telnet_cmd_dont |
||
819 | cp TN_CMD_WILL |
||
820 | jr z,telnet_cmd_will |
||
821 | cp TN_CMD_SB |
||
822 | jp z,telnet_cmd_SB |
||
823 | jp telnet_read |
||
824 | |||
825 | telnet_cmd_do |
||
826 | call telnet_debug_a |
||
827 | call telnet_getbyte |
||
167 | demige | 828 | jp nz,telnet_read |
159 | demige | 829 | ld a,(hl) |
830 | push af |
||
831 | cp TN_OP_TERMINALTYPE |
||
832 | jr z,telnet_cmd_do_will |
||
833 | cp TN_OP_ECHO |
||
834 | jr z,telnet_cmd_do_echo |
||
835 | cp TN_OP_NAWS |
||
167 | demige | 836 | jr z,telnet_cmd_do_naws |
159 | demige | 837 | call telnet_sendwont_a |
838 | pop af |
||
839 | call telnet_debug_a |
||
840 | jp telnet_read |
||
841 | |||
167 | demige | 842 | telnet_cmd_do_naws |
843 | call telnet_sendwill_a |
||
844 | call telnet_sendnaws |
||
845 | pop af |
||
846 | jp telnet_read |
||
847 | |||
159 | demige | 848 | telnet_cmd_dont |
849 | call telnet_debug_a |
||
850 | call telnet_getbyte |
||
167 | demige | 851 | jp nz,telnet_read |
159 | demige | 852 | ld a,(hl) |
853 | push af |
||
854 | cp TN_OP_ECHO |
||
855 | jr z,telnet_cmd_dont_echo |
||
856 | call telnet_sendwont_a |
||
857 | pop af |
||
858 | call telnet_debug_a |
||
859 | jp telnet_read |
||
860 | |||
861 | telnet_cmd_will |
||
862 | call telnet_debug_a |
||
863 | call telnet_getbyte |
||
167 | demige | 864 | jp nz,telnet_read |
159 | demige | 865 | ld a,(hl) |
866 | push af |
||
184 | demige | 867 | cp TN_OP_ECHO |
868 | jr z,telnet_cmd_dont_echo |
||
159 | demige | 869 | ; call telnet_senddont_a |
870 | pop af |
||
871 | call telnet_debug_a |
||
872 | jp telnet_read |
||
873 | |||
874 | telnet_cmd_will_do |
||
875 | call telnet_senddo_a |
||
876 | pop af |
||
877 | call telnet_debug_a |
||
878 | jp telnet_read |
||
879 | |||
880 | telnet_cmd_do_echo |
||
881 | push af |
||
882 | ld a,(options) |
||
883 | or TN_ECHO |
||
884 | ld (options),a |
||
885 | pop af |
||
886 | jr telnet_cmd_do_will |
||
887 | |||
888 | telnet_cmd_do_will |
||
889 | call telnet_sendwill_a |
||
890 | pop af |
||
891 | call telnet_debug_a |
||
892 | jp telnet_read |
||
893 | |||
894 | telnet_cmd_dont_echo |
||
895 | push af |
||
896 | ld a,(options) |
||
897 | and 255-TN_ECHO |
||
898 | ld (options),a |
||
899 | pop af |
||
900 | jr telnet_cmd_do_dont |
||
901 | |||
902 | telnet_cmd_do_dont |
||
903 | call telnet_sendwont_a |
||
904 | pop af |
||
905 | call telnet_debug_a |
||
906 | jp telnet_read |
||
907 | |||
908 | telnet_cmd_SB |
||
909 | call telnet_debug_a |
||
910 | call telnet_getbyte |
||
167 | demige | 911 | jp nz,telnet_read |
159 | demige | 912 | ld a,(hl) |
913 | push af |
||
914 | cp TN_OP_TERMINALTYPE |
||
915 | jp nz,telnet_cmd_SB_unknown |
||
916 | pop af |
||
917 | call telnet_debug_a |
||
918 | call telnet_getbyte |
||
167 | demige | 919 | jp nz,telnet_read |
159 | demige | 920 | ld a,(hl) |
921 | cp 1 ; SEND |
||
922 | push af |
||
923 | jp nz,telnet_cmd_SB_unknown |
||
924 | call telnet_sendterminaltype |
||
925 | |||
926 | telnet_cmd_SB_unknown |
||
927 | pop af |
||
928 | call telnet_debug_a |
||
929 | call telnet_getbyte |
||
167 | demige | 930 | jp nz,telnet_read |
159 | demige | 931 | ld a,(hl) |
932 | cp TN_CMD_SE |
||
933 | jp z,telnet_read |
||
934 | push af |
||
935 | jr telnet_cmd_SB_unknown |
||
936 | |||
937 | telnet_end |
||
938 | ld a,(soc1) |
||
568 | alone | 939 | ld E,0 ;close immediately |
159 | demige | 940 | OS_NETSHUTDOWN |
941 | call print_nl |
||
942 | QUIT |
||
943 | |||
944 | ;------------------functions----------- |
||
945 | include "../_sdk/string.asm" |
||
1882 | dimkam | 946 | old_curs_pos |
947 | defw 0 |
||
948 | |||
949 | telnet_set_cursor |
||
950 | OS_GETXY |
||
951 | ld (old_curs_pos),de |
||
952 | OS_GETATTR |
||
953 | cpl |
||
954 | ld e,a |
||
955 | OS_PRATTR |
||
956 | ret |
||
957 | |||
958 | telnet_res_cursor |
||
959 | OS_GETXY |
||
960 | push de |
||
961 | ld de,(old_curs_pos) |
||
962 | OS_SETXY |
||
963 | OS_GETATTR |
||
964 | cpl |
||
965 | ld e,a |
||
966 | OS_PRATTR |
||
967 | pop de |
||
968 | OS_SETXY |
||
969 | ret |
||
159 | demige | 970 | |
175 | demige | 971 | telnet_error_hl |
972 | call print_hl |
||
1835 | kulich | 973 | jp waitquit |
175 | demige | 974 | |
167 | demige | 975 | telnet_sendleft |
976 | ld hl,ansi_left |
||
977 | call telnet_sendtext_hl |
||
978 | jp telnet_loop0 |
||
979 | |||
980 | telnet_sendright |
||
981 | ld hl,ansi_right |
||
982 | call telnet_sendtext_hl |
||
983 | jp telnet_loop0 |
||
984 | |||
985 | telnet_sendup |
||
986 | ld hl,ansi_up |
||
987 | call telnet_sendtext_hl |
||
988 | jp telnet_loop0 |
||
989 | |||
990 | telnet_senddown |
||
991 | ld hl,ansi_down |
||
992 | call telnet_sendtext_hl |
||
993 | jp telnet_loop0 |
||
994 | |||
995 | |||
1834 | kulich | 996 | telnet_sendtext_hl ;TODO SLOW (make direct, not thru putbyte) |
167 | demige | 997 | ld a,(hl) |
998 | or a |
||
999 | ret z |
||
1000 | push hl |
||
1001 | call telnet_putbyte_a |
||
1002 | pop hl |
||
1003 | inc hl |
||
1004 | jr telnet_sendtext_hl |
||
1005 | |||
159 | demige | 1006 | telnet_backspace |
1007 | push af |
||
167 | demige | 1008 | ; ld a,(options) ;echo off? |
168 | demige | 1009 | ; bit 0,a |
167 | demige | 1010 | ; jr z,telnet_backspace_remote |
1011 | ; pop af |
||
1012 | ; ret |
||
159 | demige | 1013 | telnet_backspace_remote |
1014 | ld a,TN_CMD_ERASECHAR |
||
1015 | call telnet_senddo_a |
||
1016 | pop af |
||
1017 | ret |
||
1018 | |||
1019 | telnet_sendterminaltype |
||
1020 | ld a,TN_CMD_IAC |
||
1021 | call telnet_putbyte_a |
||
1022 | ld a,TN_CMD_SB |
||
1023 | call telnet_putbyte_a |
||
1024 | ld a,TN_OP_TERMINALTYPE |
||
1025 | call telnet_putbyte_a |
||
1026 | ld a,0 ;IS |
||
1027 | call telnet_putbyte_a |
||
1028 | ld a,'i' |
||
1029 | call telnet_putbyte_a |
||
1030 | ld a,'b' |
||
1031 | call telnet_putbyte_a |
||
1032 | ld a,'m' |
||
1033 | call telnet_putbyte_a |
||
1034 | ld a,'p' |
||
1035 | call telnet_putbyte_a |
||
1036 | ld a,'c' |
||
1037 | call telnet_putbyte_a |
||
1038 | ld a,'3' |
||
1039 | call telnet_putbyte_a |
||
1040 | ld a,TN_CMD_IAC |
||
1041 | call telnet_putbyte_a |
||
1042 | ld a,TN_CMD_SE |
||
1043 | call telnet_putbyte_a |
||
1044 | ret |
||
1045 | |||
167 | demige | 1046 | telnet_sendwillnaws |
1047 | ld a,TN_CMD_IAC |
||
1048 | call telnet_putbyte_a |
||
1049 | ld a,TN_CMD_WILL |
||
1050 | call telnet_putbyte_a |
||
1051 | ld a,TN_OP_NAWS |
||
1052 | call telnet_putbyte_a |
||
1053 | ret |
||
159 | demige | 1054 | |
167 | demige | 1055 | telnet_sendnaws |
1056 | ld a,TN_CMD_IAC |
||
1057 | call telnet_putbyte_a |
||
1058 | ld a,TN_CMD_SB |
||
1059 | call telnet_putbyte_a |
||
1060 | ld a,TN_OP_NAWS |
||
1061 | call telnet_putbyte_a |
||
1062 | xor a |
||
1063 | call telnet_putbyte_a |
||
1064 | ld a,80 |
||
1065 | call telnet_putbyte_a |
||
1066 | xor a |
||
1067 | call telnet_putbyte_a |
||
1068 | ld a,25 |
||
1069 | call telnet_putbyte_a |
||
1070 | ld a,TN_CMD_IAC |
||
1071 | call telnet_putbyte_a |
||
1072 | ld a,TN_CMD_SE |
||
1073 | call telnet_putbyte_a |
||
1074 | ret |
||
1075 | |||
159 | demige | 1076 | telnet_senddont_a |
1077 | push af |
||
1078 | ld a,TN_CMD_IAC |
||
1079 | call telnet_putbyte_a |
||
1080 | ld a,TN_CMD_DONT |
||
1081 | call telnet_putbyte_a |
||
1082 | pop af |
||
1083 | call telnet_putbyte_a |
||
1084 | ret |
||
1085 | |||
1086 | telnet_sendwont_a |
||
1087 | push af |
||
1088 | ld a,TN_CMD_IAC |
||
1089 | call telnet_putbyte_a |
||
1090 | ld a,TN_CMD_WONT |
||
1091 | call telnet_putbyte_a |
||
1092 | pop af |
||
1093 | call telnet_putbyte_a |
||
1094 | ret |
||
1095 | |||
1096 | telnet_senddo_a |
||
1097 | push af |
||
1098 | ld a,TN_CMD_IAC |
||
1099 | call telnet_putbyte_a |
||
1100 | ld a,TN_CMD_DO |
||
1101 | call telnet_putbyte_a |
||
1102 | pop af |
||
1103 | call telnet_putbyte_a |
||
1104 | ret |
||
1105 | |||
1106 | telnet_sendwill_a |
||
1107 | push af |
||
1108 | ld a,TN_CMD_IAC |
||
1109 | call telnet_putbyte_a |
||
1110 | ld a,TN_CMD_WILL |
||
1111 | call telnet_putbyte_a |
||
1112 | pop af |
||
1113 | call telnet_putbyte_a |
||
1114 | ret |
||
1115 | |||
1116 | telnet_send_hl ;hl=buf |
||
1117 | ld d,h |
||
1118 | ld e,l |
||
1119 | call telnet_sizeof_hl |
||
1120 | ld h,0 |
||
1121 | ld l,a |
||
1122 | ld a,(soc1) |
||
1123 | OS_WIZNETWRITE |
||
1124 | ret |
||
1125 | |||
1126 | telnet_getbyte;*HL=byte a=FF error |
||
1127 | ld a,(bufindex) |
||
173 | demige | 1128 | ld e,a |
159 | demige | 1129 | ld a,(bufmax) |
173 | demige | 1130 | cp e |
159 | demige | 1131 | jr c, telnet_getbyte_read;buffer empty |
1132 | ld hl,buf |
||
1133 | ld d,0 |
||
1134 | add hl,de |
||
173 | demige | 1135 | ld a,e |
159 | demige | 1136 | inc a |
1137 | ld (bufindex),a |
||
1138 | xor a |
||
1139 | or a |
||
1140 | ret |
||
1141 | telnet_getbyte_read |
||
1142 | ld hl,255 |
||
1143 | ld de,buf |
||
1144 | ld a,(soc1) |
||
1145 | OS_WIZNETREAD |
||
519 | dimkam | 1146 | bit 7,h |
568 | alone | 1147 | jp z,telnet_getbyte_readed ;no error read |
519 | dimkam | 1148 | cp ERR_EAGAIN |
159 | demige | 1149 | jr z,telnet_getbyte_empty |
519 | dimkam | 1150 | jp telnet_end ;error read |
1151 | telnet_getbyte_readed |
||
159 | demige | 1152 | dec hl |
1153 | ld a,l |
||
1154 | ld (bufmax),a ;max index |
||
1155 | xor a |
||
1156 | ld (bufindex),a |
||
1157 | jr telnet_getbyte |
||
1158 | telnet_getbyte_empty |
||
1159 | ld a,0xFF |
||
1160 | or a |
||
1161 | ret |
||
1162 | |||
1163 | telnet_putbyte_a;*HL=byte a=FF error |
||
1164 | push af |
||
1165 | ld a,(wrbufindex) |
||
1166 | cp 255 |
||
1167 | jr z, telnet_putbyte_full;buffer full |
||
1168 | ld hl,wrbuf |
||
1169 | ld d,0 |
||
1170 | ld e,a |
||
1171 | add hl,de |
||
1172 | inc a |
||
1173 | ld (wrbufindex),a |
||
1174 | pop af |
||
1175 | ld (hl),a |
||
1176 | xor a |
||
1177 | or a |
||
1178 | ret |
||
1179 | telnet_putbyte_full |
||
1180 | pop af |
||
1181 | ld a,0xFF |
||
1182 | or a |
||
1183 | ret |
||
1184 | |||
1185 | telnet_purge_writebuf |
||
1186 | ld a,(wrbufindex) |
||
1187 | or a |
||
1188 | ret z |
||
1189 | ld h,0 |
||
1190 | ld l,a |
||
1191 | ld a,(soc1) |
||
1192 | ld de,wrbuf |
||
1193 | OS_WIZNETWRITE |
||
1194 | ld a,h |
||
1195 | or a |
||
1196 | ret m |
||
1197 | xor a |
||
1198 | ld (wrbufindex),a |
||
1199 | ret |
||
1200 | |||
1201 | telnet_sizeof_hl |
||
1202 | ld b,0 |
||
1203 | telnet_sizeof_hl0 |
||
1204 | ld a,(hl) |
||
1205 | or a |
||
1206 | jr z,telnet_sizeof_hl_end |
||
1207 | inc b |
||
1208 | inc hl |
||
1209 | jr telnet_sizeof_hl0 |
||
1210 | telnet_sizeof_hl_end |
||
1211 | ld a,b |
||
1212 | ret |
||
1213 | |||
169 | demige | 1214 | telnet_setkey_d |
159 | demige | 1215 | ld a,(options) |
1216 | or TN_DEBUG |
||
1217 | ld (options),a |
||
1218 | ret |
||
1219 | |||
1220 | telnet_resolveerror |
||
1834 | kulich | 1221 | ld e,0 |
1222 | OS_CLS |
||
159 | demige | 1223 | ld hl,txt_resolveerror |
1224 | call print_hl |
||
1225 | ld hl,arg_hostname |
||
1834 | kulich | 1226 | call print_hl |
1227 | jp waitquit |
||
159 | demige | 1228 | |
1229 | telnet_iptostr_hltode |
||
1230 | call bytetostr_hltode |
||
1231 | ld a, '.' |
||
1232 | ld (de), a |
||
1233 | inc de |
||
1234 | call bytetostr_hltode |
||
1235 | ld a, '.' |
||
1236 | ld (de), a |
||
1237 | inc de |
||
1238 | call bytetostr_hltode |
||
1239 | ld a, '.' |
||
1240 | ld (de), a |
||
1241 | inc de |
||
1242 | call bytetostr_hltode |
||
1243 | ret |
||
1244 | |||
1245 | telnet_showusage |
||
1834 | kulich | 1246 | ld e,0 |
1247 | OS_CLS |
||
159 | demige | 1248 | ld hl,txt_usage |
1249 | call print_hl |
||
1834 | kulich | 1250 | jp waitquit |
159 | demige | 1251 | |
169 | demige | 1252 | telnet_showhelp |
1834 | kulich | 1253 | ld e,0 |
1254 | OS_CLS |
||
1255 | ld hl,txt_version |
||
1256 | call print_hl |
||
169 | demige | 1257 | ld hl,txt_usage |
1258 | call print_hl |
||
1259 | ld hl,txt_help |
||
1260 | call print_hl |
||
1834 | kulich | 1261 | jp waitquit |
169 | demige | 1262 | |
1263 | telnet_showversion |
||
1834 | kulich | 1264 | ld e,0 |
1265 | OS_CLS |
||
169 | demige | 1266 | ld hl,txt_version |
1267 | call print_hl |
||
1834 | kulich | 1268 | waitquit |
1269 | call waitkey |
||
169 | demige | 1270 | QUIT |
1271 | |||
1834 | kulich | 1272 | |
1273 | |||
159 | demige | 1274 | telnet_debug_a |
1275 | push af |
||
1276 | ld a,(options) |
||
1277 | bit 7,a |
||
1278 | jr z,telnet_debug_a_no |
||
1279 | pop af |
||
1280 | call printhex_a |
||
1281 | ret |
||
1282 | telnet_debug_a_no |
||
1283 | pop af |
||
1284 | ret |
||
1285 | |||
1286 | dns_resolver ;DE-domain name |
||
1287 | dns_err_loop |
||
1288 | push de |
||
1289 | ld hl,dns_head |
||
1290 | ld de,buf |
||
1291 | ld bc,6 |
||
1292 | ldir |
||
1293 | ex de,hl |
||
1294 | ld de,buf+7 |
||
1295 | ld (hl),b |
||
1296 | ld c,256-7 |
||
1297 | ldir |
||
1298 | ld de,buf+12 |
||
1299 | ld h,d |
||
1300 | ld l,e |
||
1301 | pop bc |
||
1302 | name_loop |
||
1303 | inc hl |
||
1304 | ld a,(bc) |
||
1305 | ld (hl),a |
||
1306 | inc bc |
||
1307 | cp '.' |
||
1308 | jr z,is_dot |
||
1309 | or a |
||
1310 | jr nz,name_loop |
||
1311 | is_dot |
||
1312 | sbc hl,de |
||
1313 | ex de,hl |
||
1314 | dec e |
||
1315 | ld (hl),e |
||
1316 | inc e |
||
1317 | add hl,de |
||
1318 | ld d,h |
||
1319 | ld e,l |
||
1320 | or a |
||
1321 | jr nz,name_loop |
||
1322 | inc a |
||
1323 | inc hl |
||
1324 | inc hl |
||
1325 | ld (hl),a |
||
1326 | inc hl |
||
1327 | inc hl |
||
1328 | ld (hl),a |
||
1329 | inc hl |
||
1330 | push hl |
||
1583 | kulich | 1331 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
1332 | ld a, (conparam_ip) |
||
1333 | cp 0 |
||
1334 | jp nz, skipgetdns |
||
1335 | ld de, conparam_ip;DE= ptr to DNS buffer(4 bytes) |
||
1336 | OS_GETDNS |
||
1337 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||
1338 | skipgetdns: |
||
159 | demige | 1339 | ld de,0x0203 |
1340 | OS_NETSOCKET |
||
1341 | ld a,l |
||
1342 | ld (soc1),a |
||
1343 | or a |
||
1344 | jp m,dns_exiterr |
||
567 | dimkam | 1345 | ;LD DE,conparam |
1346 | ;OS_NETCONNECT |
||
1347 | ;ld a,l |
||
1348 | ;or a |
||
1349 | ;jp m,dns_exiterr |
||
159 | demige | 1350 | |
1351 | pop hl |
||
1352 | push hl |
||
1353 | ld de,0xffff&(-buf) |
||
1354 | add hl,de |
||
1355 | LD a,(soc1) |
||
568 | alone | 1356 | LD IX,buf |
567 | dimkam | 1357 | LD DE,conparam |
159 | demige | 1358 | OS_WIZNETWRITE |
1359 | bit 7,h |
||
1360 | jr nz,dns_exitcode |
||
1361 | dns_err_count=$+1 |
||
1362 | ld b,25 |
||
1363 | jr recv_wait1 |
||
1364 | recv_wait |
||
1365 | push bc |
||
1366 | YIELD |
||
1367 | pop bc |
||
1368 | recv_wait1 |
||
1369 | push bc |
||
1370 | ld hl,256 |
||
1371 | LD a,(soc1) |
||
568 | alone | 1372 | LD ix,buf |
1373 | ld de,sa_recv |
||
159 | demige | 1374 | OS_WIZNETREAD |
1375 | pop bc |
||
568 | alone | 1376 | ;ld a,h |
1377 | ;or l |
||
519 | dimkam | 1378 | bit 7,h |
1379 | jr z,recv_wait_end |
||
159 | demige | 1380 | djnz recv_wait |
1381 | jr dns_exiterr |
||
1382 | recv_wait_end |
||
1383 | bit 7,h |
||
1384 | jr nz,dns_exitcode |
||
1385 | ld a,(buf+3) |
||
1386 | and 0x0f |
||
1387 | jr nz,dns_exiterr |
||
1388 | dns_exitcode |
||
1389 | LD a,(soc1) |
||
1390 | LD E,0 |
||
1391 | OS_NETSHUTDOWN |
||
1392 | pop hl |
||
1393 | reqpars_l |
||
1394 | inc hl ; Skip compressed |
||
1395 | inc hl ; name |
||
1396 | inc hl ; Type |
||
1397 | ld a,(hl) ; of message |
||
1398 | ld de,7 ; Skip |
||
1399 | add hl,de ; Class , TTL |
||
1400 | ld b,(hl) ; RDLENGTH |
||
1401 | inc hl |
||
1402 | ld c,(hl) |
||
1403 | inc hl |
||
1404 | dec a |
||
1405 | ret z ; If TYPE was 0x1 (IP) exit |
||
1406 | cp 4 |
||
1407 | jr nz,exiterr1 ; If TYPE was not 0x5 (CNAME) error |
||
1408 | add hl,bc ; to next message |
||
1409 | jr reqpars_l |
||
1410 | dns_exiterr |
||
1411 | pop af |
||
1412 | LD a,(soc1) |
||
1413 | LD E,0 |
||
1414 | OS_NETSHUTDOWN |
||
1415 | ld a,(dns_err_count) |
||
1416 | add a,a |
||
1417 | ld (dns_err_count),a |
||
1418 | jp nc,dns_err_loop |
||
1419 | exiterr1 |
||
1420 | ld hl,0 |
||
1421 | ret |
||
1422 | |||
1834 | kulich | 1423 | waitkey |
1424 | push bc |
||
1425 | push de |
||
1426 | push hl |
||
1427 | keyloop |
||
1428 | GET_KEY |
||
1429 | cp 0 |
||
1430 | jp z, keyloop |
||
1431 | pop hl |
||
1432 | pop de |
||
1433 | pop bc |
||
1434 | ret |
||
159 | demige | 1435 | |
1436 | soc1 db 0 |
||
1437 | dns_head db 0x11,0x22,0x01,0x00,0x00,0x01 |
||
568 | alone | 1438 | conparam db 0;AF_INET |
1439 | PORT=53;DNS;14321 |
||
1440 | conparam_port |
||
1441 | db PORT/256,PORT&255;53 ;port (HSB,LSB) |
||
1442 | conparam_ip |
||
1583 | kulich | 1443 | db 0,0,0,0 ;ip |
568 | alone | 1444 | ds 8 ;reserve |
1445 | ;conparam1 |
||
1446 | sa_recv |
||
1447 | db 0,0,0,0,0,0,0 |
||
1448 | ds 8 ;reserve |
||
159 | demige | 1449 | buf ds 255 |
1450 | bufindex db 1 |
||
1451 | bufmax db 0 |
||
1452 | wrbuf ds 255 |
||
1453 | wrbufindex db 0 |
||
1454 | ip ds 4 |
||
1455 | txtip db 0,0,0,'.',0,0,0,'.',0,0,0,'.',0,0,0,0 |
||
1456 | options db 0 |
||
167 | demige | 1457 | ansi_args db 0,0,0,0,0,0,0 |
1458 | ansi_anum db 0,0 |
||
1459 | ansi_cmd db 0,0 |
||
1460 | max_x db 79,0 |
||
1461 | max_y db 24,0 |
||
169 | demige | 1462 | color db 7 |
167 | demige | 1463 | ansi_up db 27,'[','A',0 |
1464 | ansi_down db 27,'[','B',0 |
||
1465 | ansi_right db 27,'[','C',0 |
||
1466 | ansi_left db 27,'[','D',0 |
||
168 | demige | 1467 | ansi_pal dw 0xF3F3,0xF1F1,0xE3E3,0xE1E1,0xF2F2,0xF0F0,0xE2E2,0xE0E0 |
1468 | dw 0x1313,0xB1B1,0x6363,0x2121,0xD2D2,0x9090,0x4242,0x0000 |
||
173 | demige | 1469 | read_state db 0 ;0 - text, 1- esc, 2-ansi |
159 | demige | 1470 | |
260 | alone | 1471 | ;oldtimer ds 2 |
159 | demige | 1472 | arg_hostname ds 255 |
1473 | |||
169 | demige | 1474 | txt_usage db "Use telnet [-d] [-h] [-V] <host_name|ip>",0x0D,0x0A,0 |
1475 | txt_help db " -d : Print incoming IAC commands",0x0D,0x0A |
||
1476 | db " -h : Show this help and exit",0x0D,0x0A |
||
1477 | db " -V : Show version info and exit",0x0D,0x0A,0 |
||
1834 | kulich | 1478 | txt_version db "Telnet v0.1 NedoPC group 2019",0x0D,0x0A,0x0d,0x0a,0 |
159 | demige | 1479 | txt_resolveerror db "Can not resolve ",0 |
175 | demige | 1480 | txt_socketerror db "IP socket creation error",0x0d,0x0a,0 |
1481 | txt_socketopenerror db "IP socket opening error",0x0d,0x0a,0 |
||
159 | demige | 1482 | txt_writeerror db "Something wrong with write",0x0D,0x0A,0 |
1483 | txt_head1 db "Telnet connecting to ",0 |
||
1484 | txt_head2 db " (",0 |
||
1485 | txt_head3 db ")...",0x0D,0x0A,0 |
||
1486 | txt_work1 db "Connected to ",0 |
||
1487 | |||
1488 | cmd_end |
||
1489 | display "Size ",/d,cmd_end-cmd_begin," bytes" |
||
289 | dimkam | 1490 | ;display "telnet_loop: ",telnet_loop |
1491 | ;display "telnet_read: ",telnet_read |
||
1492 | ;display "telnet_purge_writebuf: ",telnet_purge_writebuf |
||
1493 | ;display "telnet_ansi0: ",telnet_ansi0 |
||
1494 | ;display "telnet_noresolve: ",telnet_noresolve |
||
159 | demige | 1495 | savebin "telnet.com",cmd_begin,cmd_end-cmd_begin |
1496 | |||
568 | alone | 1497 | LABELSLIST "..\..\us\user.l" |