?login_element?

Subversion Repositories NedoOS

Rev

Rev 1882 | 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.        
  92.         ld e,0x86
  93.         OS_SETGFX ;text mode set
  94.         OS_HIDEFROMPARENT
  95.  
  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.  
  107.  
  108. ;main
  109. ;check cmdline
  110.         ld e,0
  111.         OS_CLS
  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'
  124.         call z,telnet_setkey_d
  125.         cp 'h'
  126.         jp z,telnet_showhelp
  127.         cp 'V'
  128.         jp z,telnet_showversion
  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.  
  139.         ld hl,23*256 ;BIG ENDIAN 23
  140.         ld (curport),hl
  141.  
  142.         display "hostname ", $
  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.  
  186.         ld hl,arg_hostname-1 ;��� �������� � �����
  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.  
  218. telnet_noresolve
  219. curport=$+1
  220.         ld hl,0
  221.         ld (conparam_port),hl
  222.  
  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.  
  239. ;curport=$+1
  240. ;       ld bc,23 ; Preparing connect params
  241.         ld hl,ip
  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
  249.         display "connect ", $
  250.         ld de,conparam_ip
  251.         ld bc,4
  252.         ldir ; copy ip address
  253.         ld de,0x0201 ; AF_INET,SOCK_TCP
  254.         OS_NETSOCKET
  255.         ld a,l
  256.            ld c,l ;???
  257.         ld (soc1),a ; save socket to soc1
  258.         or a
  259.         ld hl,txt_socketerror
  260.         jp m, telnet_error_hl
  261.  
  262.         ld de,conparam
  263.         OS_NETCONNECT ; open socket
  264.            ld c,a ;???
  265.         ld a,l
  266.         or a
  267.         ld hl,txt_socketopenerror
  268.         jp m, telnet_error_hl
  269.  
  270.         ld hl,txt_work1 ; connected to
  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.  
  281.         ld de,ansi_pal
  282.         OS_SETPAL
  283.         display "main loop ", $
  284. telnet_loop
  285.         call telnet_set_cursor
  286.         YIELDGETKEY
  287.         push af
  288.         call telnet_res_cursor
  289.         pop af
  290.         ;ld a,c
  291.         cp extD ;key_esc ;Sayman
  292.         jp z,telnet_end
  293.         cp NOKEY
  294.         jr z,telnet_purge
  295.         cp key_backspace
  296.         call z,telnet_backspace
  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
  306.         call telnet_putbyte_a
  307.         pop af
  308.  
  309. telnet_loop0
  310.         ld bc,(options) ;echo
  311.         bit 0,c
  312.         jr z,telnet_purge
  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
  322.         PRCHAR
  323. telnet_purge
  324.         call telnet_purge_writebuf
  325.         jr telnet_read
  326.  
  327. telnet_read_resetstate
  328.         xor a
  329.         ld (read_state),a
  330. telnet_read
  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
  336.         call telnet_getbyte
  337.         jr nz,telnet_loop
  338.         ld a,(hl)
  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
  345.         cp 0x1B ;ESC
  346.         jr z,telnet_esc
  347.         cp 0x20
  348.         jp c,telnet_read
  349.         cp 242;223;128 ;TODO 240?
  350.         jp nc,telnet_noprintable
  351. telnet_read_prchar
  352.         PRCHAR
  353.         jr telnet_read
  354.  
  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.  
  370. telnet_esc
  371.         ld a,TN_ST_ESC
  372.         ld (read_state),a
  373.         call telnet_getbyte
  374.         jp nz,telnet_loop
  375.         ld a,(hl)
  376.         cp '[' ;CSI
  377.         jr z,telnet_ansi
  378.         jr telnet_read_resetstate
  379.  
  380. telnet_ansi
  381.         ld a,TN_ST_ANSI
  382.         ld (read_state),a
  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
  388. telnet_ansi0
  389.         call telnet_getbyte
  390.         jp nz,telnet_loop
  391.         ld a,(hl)
  392.         call strisdigit_a
  393.         jr z,telnetansi_readargs
  394.         ld a,(hl)
  395.         cp ';'
  396.         jr z,telnetansi_nextarg
  397.         cp '?'
  398.         jr z,telnet_ansi0 ;TODO
  399.         ld a,(hl)
  400.         call strischar_a
  401.         jr z,telnetansi_readcmd
  402.         jp telnet_read_resetstate
  403.  
  404. telnetansi_nextarg
  405.         ld de,(ansi_anum)
  406.         inc de
  407.         ld (ansi_anum),de
  408.         jp telnet_ansi0
  409.  
  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)
  418.         sub 0x30
  419.         ld hl,ansi_args
  420.         ld de,(ansi_anum)
  421.         add hl,de
  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
  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'
  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'
  449.         jp z,telnetansi_docmd_F ;cursor x=1 y=y-1
  450.         cp 'G'
  451.         jp z,telnetansi_docmd_G ;cursor x=n
  452.         cp 'H'
  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
  462.         cp 'f'
  463.         jp z,telnetansi_docmd_H ;cursor x y
  464.         jp telnet_read_resetstate
  465.  
  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
  510.         ld e,0 ;color byte
  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.  
  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
  628.         ld a,(ansi_args)
  629.         or a
  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
  642.         jp telnet_read_resetstate
  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
  651.         ld a,(ansi_args)
  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
  664.         jp telnet_read_resetstate
  665.  
  666. telnetansi_docmd_C ;cursor right
  667.         OS_GETXY
  668.         ld a,(ansi_args)
  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
  681.         jp telnet_read_resetstate
  682.  
  683. telnetansi_docmd_D ;cursor left
  684.         OS_GETXY
  685.         ld a,(ansi_args)
  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
  699.         jp telnet_read_resetstate
  700.  
  701. telnetansi_docmd_G ;cursor x
  702.         OS_GETXY
  703.         ld a,(ansi_args)
  704.         dec a
  705.         ld hl,(max_x)
  706.         inc hl
  707.         cp l
  708.         jp nc,telnet_read_resetstate
  709.         ld e,a
  710.         OS_SETXY
  711.         jp telnet_read_resetstate
  712.  
  713. telnetansi_docmd_H ;cursor x,y
  714.         ld a,(ansi_args+1)
  715.         or a
  716.         jr z,telnetansi_docmd_H0
  717.         dec a
  718. telnetansi_docmd_H0
  719.         ld hl,(max_x)
  720.         inc hl
  721.         cp l
  722.         jp nc,telnet_read_resetstate ;x
  723.         ld e,a
  724.         ld a,(ansi_args)
  725.         or a
  726.         jr z,telnetansi_docmd_H1
  727.         dec a
  728. telnetansi_docmd_H1
  729.         ld hl,(max_y)
  730.         inc hl
  731.         cp l
  732.         jp nc,telnet_read_resetstate ;y
  733.         ld d,a
  734.         OS_SETXY
  735.         jp telnet_read_resetstate
  736.  
  737. telnetansi_docmd_m ;SGR
  738.         ld a,(ansi_args)
  739.         or a ;0
  740.         jp z,telnetansi_docmd_mreset
  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
  749.         sub 30
  750.         jp c,telnet_read_resetstate
  751.         sub 8
  752.         jr c,telnetansi_docmd_m30
  753.         sub 2 ;40
  754.         jp c,telnet_read_resetstate
  755.         sub 8
  756.         jr c,telnetansi_docmd_m40
  757.         call printbyte_a
  758.         sub 42 ;90
  759.         jp c,telnet_read_resetstate
  760.         sub 8
  761.         jr c,telnetansi_docmd_m90
  762.  
  763.         jp telnet_end
  764. telnetansi_docmd_m1
  765.         ld a,(color)
  766.         set 6,a
  767.         jr telnetansi_docmd_m0
  768. telnetansi_docmd_m22
  769.         ld a,(color)
  770.         res 6,a
  771.         jr telnetansi_docmd_m0
  772. telnetansi_docmd_m39
  773.         ld a,(color)
  774.         and 0b10111000
  775.         or  0b00000111 ;default text color
  776.         jr telnetansi_docmd_m0
  777. telnetansi_docmd_m49
  778.         ld a,(color)
  779.         and 0b01000111
  780.         jr telnetansi_docmd_m0
  781. telnetansi_docmd_m90
  782.         add 64-8 ;intensity
  783. telnetansi_docmd_m30
  784.         add 8
  785.         ld d,a
  786.         ld a,(color)
  787.         and 0b11111000
  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
  796.         ld a,(color)
  797.         and 0b11000111
  798.         add d
  799.         jr telnetansi_docmd_m0
  800. telnetansi_docmd_mreset
  801.         ld a,7
  802. telnetansi_docmd_m0
  803.         ld e,a
  804.         ld (color),a
  805.         OS_SETCOLOR
  806.         jp telnet_read_resetstate
  807.  
  808. telnet_noprintable
  809.         cp TN_CMD_IAC
  810.         jp nz,telnet_read
  811.         call telnet_debug_a
  812.         call telnet_getbyte
  813.         jp nz,telnet_read
  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
  828.         jp nz,telnet_read
  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
  836.         jr z,telnet_cmd_do_naws
  837.         call telnet_sendwont_a
  838.         pop af
  839.         call telnet_debug_a
  840.         jp telnet_read
  841.  
  842. telnet_cmd_do_naws
  843.         call telnet_sendwill_a
  844.         call telnet_sendnaws
  845.         pop af
  846.         jp telnet_read
  847.  
  848. telnet_cmd_dont
  849.         call telnet_debug_a
  850.         call telnet_getbyte
  851.         jp nz,telnet_read
  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
  864.         jp nz,telnet_read
  865.         ld a,(hl)
  866.         push af
  867.         cp TN_OP_ECHO
  868.         jr z,telnet_cmd_dont_echo
  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
  911.         jp nz,telnet_read
  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
  919.         jp nz,telnet_read
  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
  930.         jp nz,telnet_read
  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)
  939.         ld E,0 ;close immediately
  940.         OS_NETSHUTDOWN
  941.         call print_nl
  942.         QUIT
  943.  
  944. ;------------------functions-----------
  945.         include "../_sdk/string.asm"
  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
  970.  
  971. telnet_error_hl
  972.         call print_hl
  973.         jp waitquit
  974.  
  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.  
  996. telnet_sendtext_hl ;TODO SLOW  (make direct, not thru putbyte)
  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.  
  1006. telnet_backspace
  1007.         push af
  1008. ;       ld a,(options) ;echo off?
  1009. ;       bit 0,a
  1010. ;       jr z,telnet_backspace_remote
  1011. ;       pop af
  1012. ;       ret
  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.  
  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
  1054.  
  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.  
  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)
  1128.         ld e,a
  1129.         ld a,(bufmax)
  1130.         cp e
  1131.         jr c, telnet_getbyte_read;buffer empty
  1132.         ld hl,buf
  1133.         ld d,0
  1134.         add hl,de
  1135.         ld a,e
  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
  1146.         bit 7,h
  1147.         jp z,telnet_getbyte_readed ;no error read
  1148.         cp ERR_EAGAIN
  1149.         jr z,telnet_getbyte_empty
  1150.         jp telnet_end ;error read
  1151. telnet_getbyte_readed
  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.  
  1214. telnet_setkey_d
  1215.         ld a,(options)
  1216.         or TN_DEBUG
  1217.         ld (options),a
  1218.         ret
  1219.  
  1220. telnet_resolveerror
  1221.         ld e,0
  1222.         OS_CLS
  1223.         ld hl,txt_resolveerror
  1224.         call print_hl
  1225.         ld hl,arg_hostname
  1226.         call print_hl
  1227.         jp waitquit
  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
  1246.         ld e,0
  1247.         OS_CLS
  1248.         ld hl,txt_usage
  1249.         call print_hl
  1250.         jp waitquit
  1251.  
  1252. telnet_showhelp
  1253.         ld e,0
  1254.         OS_CLS
  1255.         ld hl,txt_version
  1256.         call print_hl
  1257.         ld hl,txt_usage
  1258.         call print_hl
  1259.         ld hl,txt_help
  1260.         call print_hl
  1261.         jp waitquit
  1262.  
  1263. telnet_showversion
  1264.         ld e,0
  1265.         OS_CLS
  1266.         ld hl,txt_version
  1267.         call print_hl
  1268. waitquit
  1269.         call waitkey
  1270.         QUIT
  1271.  
  1272.  
  1273.  
  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
  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:    
  1339.         ld de,0x0203
  1340.         OS_NETSOCKET
  1341.         ld a,l
  1342.         ld (soc1),a
  1343.         or a
  1344.         jp m,dns_exiterr
  1345.         ;LD DE,conparam
  1346.         ;OS_NETCONNECT
  1347.         ;ld a,l
  1348.         ;or a
  1349.         ;jp m,dns_exiterr
  1350.        
  1351.         pop hl
  1352.         push hl
  1353.         ld de,0xffff&(-buf)
  1354.         add hl,de
  1355.         LD a,(soc1)
  1356.         LD IX,buf
  1357.         LD DE,conparam
  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)
  1372.         LD ix,buf
  1373.         ld de,sa_recv
  1374.         OS_WIZNETREAD
  1375.         pop bc
  1376.         ;ld a,h
  1377.         ;or l
  1378.         bit 7,h
  1379.         jr z,recv_wait_end
  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.  
  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
  1435.  
  1436. soc1            db 0
  1437. dns_head        db 0x11,0x22,0x01,0x00,0x00,0x01
  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
  1443.                 db 0,0,0,0 ;ip
  1444.                 ds 8 ;reserve
  1445. ;conparam1
  1446. sa_recv
  1447.         db 0,0,0,0,0,0,0
  1448.         ds 8 ;reserve
  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
  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
  1462. color           db 7
  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
  1467. ansi_pal        dw 0xF3F3,0xF1F1,0xE3E3,0xE1E1,0xF2F2,0xF0F0,0xE2E2,0xE0E0
  1468.                 dw 0x1313,0xB1B1,0x6363,0x2121,0xD2D2,0x9090,0x4242,0x0000
  1469. read_state      db 0 ;0 - text, 1- esc, 2-ansi
  1470.  
  1471. ;oldtimer ds 2
  1472. arg_hostname ds 255
  1473.  
  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
  1478. txt_version db "Telnet v0.1 NedoPC group 2019",0x0D,0x0A,0x0d,0x0a,0
  1479. txt_resolveerror db "Can not resolve ",0
  1480. txt_socketerror db "IP socket creation error",0x0d,0x0a,0
  1481. txt_socketopenerror db "IP socket opening error",0x0d,0x0a,0
  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"
  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
  1495.         savebin "telnet.com",cmd_begin,cmd_end-cmd_begin
  1496.  
  1497.         LABELSLIST "..\..\us\user.l"
  1498.