?login_element?

Subversion Repositories NedoOS

Rev

Rev 567 | Rev 1820 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

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