emailler/client/inc/telnet.i

172 lines
3.7 KiB
OpenEdge ABL

;telnet routines
; to use:
; 1) include this file
; 2) include these other files:
; .include "../inc/common.i"
; .include "../inc/commonprint.i"
; .include "../inc/net.i"
; 3) define a routine called 'exit_telnet'
.import telnet_connect
.import telnet_use_native_charset
.import telnet_port
.import telnet_ip
.import filter_number
.export telnet_on_connection
.bss
original_border: .res 1
.code
telnet_main_entry:
;prompt for a hostname, then resolve to an IP address
ldax #remote_host
jsr print_ascii_as_native
ldy #40 ;max chars
ldax #filter_dns
jsr get_filtered_input
bcc @host_entered
;if no host entered, then bail.
jmp exit_telnet
@host_entered:
stax temp_ax
jsr print_cr
ldax #resolving
jsr print_ascii_as_native
ldax temp_ax
jsr print
jsr print_cr
ldax temp_ax
jsr dns_set_hostname
bcs @resolve_error
jsr dns_resolve
bcc @resolved_ok
@resolve_error:
print_failed
jsr print_cr
jsr print_errorcode
jmp telnet_main_entry
@resolved_ok:
ldx #3
@copy_telnet_ip_loop:
lda dns_ip,x
sta telnet_ip,x
dex
bpl @copy_telnet_ip_loop
@get_port:
ldax #remote_port
jsr print_ascii_as_native
ldy #5 ;max chars
ldax #filter_number
jsr get_filtered_input
bcs @no_port_entered
;AX now points a string containing port number
jsr parse_integer
bcc @port_entered
@no_port_entered:
;if no port entered, then assume port 23
ldax #23
@port_entered:
stax telnet_port
jsr print_cr
ldax #char_mode_prompt
jsr print_ascii_as_native
@char_mode_input:
jsr get_key_ip65
cmp #'V'
beq @vt100_mode
cmp #'v'
beq @vt100_mode
cmp #'P'
beq @petscii_mode
cmp #'p'
beq @petscii_mode
jmp @char_mode_input
@vt100_mode:
lda #0
sta telnet_use_native_charset
.ifdef XMODEM_IN_TELNET
lda #1
sta xmodem_iac_escape
.endif
jmp @after_mode_set
@petscii_mode:
lda #1
sta telnet_use_native_charset
.ifdef XMODEM_IN_TELNET
lda #0
sta xmodem_iac_escape
.endif
@after_mode_set:
lda #147 ; 'CLR/HOME'
jsr print_a
ldax #connecting_in
jsr print_ascii_as_native
lda telnet_use_native_charset
beq @v_mode
ldax #petscii
jmp @c_mode
@v_mode:
ldax #vt100
@c_mode:
jsr print_ascii_as_native
ldax #mode
jsr print_ascii_as_native
lda $d020
sta original_border
jsr telnet_connect
lda original_border
sta $d020
;reset the background colour
jmp telnet_main_entry
telnet_on_connection:
;toggle the background colour
dec $d020
rts
;constants
connecting_in: .byte "connecting in ",0
vt100: .byte "vt100",0
petscii: .byte "petscii",0
mode: .byte " mode",10,0
remote_host: .byte "hostname (leave blank to quit)",10,": ",0
remote_port: .byte "port # (leave blank for default)",10,": ",0
char_mode_prompt: .byte "mode - V=vt100, P=petscii",10,0
;-- LICENSE FOR telnet.i --
; The contents of this file are subject to the Mozilla Public License
; Version 1.1 (the "License"); you may not use this file except in
; compliance with the License. You may obtain a copy of the License at
; http://www.mozilla.org/MPL/
;
; Software distributed under the License is distributed on an "AS IS"
; basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
; License for the specific language governing rights and limitations
; under the License.
;
; The Original Code is ip65.
;
; The Initial Developer of the Original Code is Jonno Downes,
; jonno@jamtronix.com.
; Portions created by the Initial Developer are Copyright (C) 2009
; Jonno Downes. All Rights Reserved.
; -- LICENSE END --