	.TITLE	UCXSUBS Utility subroutines for UCX TCP/IP
	.IDENT	/V1.0-00/

; from get_host.mar

	.LIBRARY	/SYS$SHARE:LIB.MLB/

DEV:	.ASCID	/BG:/
CHAN:	.LONG	0
IOSB:	.QUAD	0
COMMAND:.LONG	LENGTH
	.ADDRESS	COMM
COMM:	.BYTE	1
	.BYTE	0
	.WORD	0
LENGTH=.-COMM
HOST_D:	.BLKL	2

HOST_NAM:.BLKL	2

	.ENTRY GET_HOST,^M<R10>

	MOVL	4(AP),R0
	MOVL	(R0),HOST_D
	MOVL	4(R0),HOST_D+4
	MOVL	8(AP),R0
	MOVL	(R0),HOST_NAM
	MOVL	4(R0),HOST_NAM+4

	$ASSIGN_S	DEVNAM=DEV, CHAN=CHAN

	$QIOW_S		CHAN=CHAN,-
			FUNC=#IO$_ACPCONTROL,-
			IOSB=IOSB,-
			P1=COMMAND,P2=#HOST_D,-
			P3=#HOST_NAM,P4=#HOST_NAM
	BLBC	R0,DONE
	CMPW	#1,IOSB
	BEQLU	DONE
	MOVZWL	IOSB,R0
DONE:
	RET

; from netio.mar

	$IODEF
	$INETSYMDEF
PORTNUM=79

;------------------VARIABLES------------------------;
;DEV:	.ASCID	/BG:/
;CHAN:	.BLKW	1
;IOSB:	.BLKQ	1
LEN:	.LONG	0

;-------------------------------;
;	SOCKET STRUCTURE	;
;-------------------------------;
PAR11:	.WORD	INET$C_TCP
	.BYTE	INET_PROTYP$C_STREAM
	.BYTE	0

PAR12:	.LONG	16
	.ADDRESS LOCAL_ADR

LOCAL_ADR:
	.WORD	INET$C_AF_INET
	.BYTE	0,50
	.BYTE	129,24,8,20
	.BLKB	8

PAR13:	.LONG	16
	.ADDRESS SOCKET

SOCKET:	.WORD	INET$C_AF_INET
PORT:	.WORD	PORTNUM			;PORT #
ADDRESS:.BYTE	129,24,8,20		;ADDRESS
	.BLKL	2			;UNUSED

	.ENTRY	OPEN_NET,^M<>

	CMPL	#0,@4(AP)
	BEQLU	LOCAL
	MOVL	@4(AP),ADDRESS

LOCAL:
	$ASSIGN_S	CHAN=CHAN,DEVNAM=DEV

	$QIOW_S		CHAN=CHAN,-
			FUNC=#IO$_SETMODE,-
			IOSB=IOSB,-
			P1=PAR11,P3=#PAR12

;-------------------------------;
;	REVERSE THE BYTES	;
;-------------------------------;
	MOVB	PORT,R0
	MOVB	PORT+1,PORT
	MOVB	R0,PORT+1

;---------------;
;   CONNECT	;
;---------------;
	$QIOW_S		CHAN=CHAN,-
			FUNC=#IO$_ACCESS,-
			IOSB=IOSB,-
			P3=#PAR13
	BLBC	R0,ERROR
	MOVZWL	IOSB,R0
	BLBC	R0,ERROR
ERROR:
	RET


;--------------------------------------------------;
	.ENTRY	WRITE_NET,^M<>
	MOVL	@8(AP),LEN

	$QIOW_S		CHAN=CHAN,-
			FUNC=#IO$_WRITEVBLK,-
			IOSB=IOSB,-
			P1=@4(AP),P2=LEN

	RET

;--------------------------------------------------;
	.ENTRY READ_NET,^M<>
AGAIN:
	$QIOW_S		CHAN=CHAN,-
			FUNC=#IO$_READVBLK,-
			IOSB=IOSB,-
			P1=@4(AP),P2=#1024
	CMPW	#1,IOSB
	BNEQU	DISCONNECT

	MOVZWL	IOSB+2,R0
	RET

DISCONNECT:
	MOVL	#0,R0
	RET

; from openconnect.mar

TEMPORARY:	.BLKB	4
	.ENTRY	STICK,^M<R2,R3,R4,R5,R6,R7,R8,R9,R10,R11>

	MOVB	@4(AP),TEMPORARY
	MOVB	@8(AP),TEMPORARY+1
	MOVB	@12(AP),TEMPORARY+2
	MOVB	@16(AP),TEMPORARY+3

	MOVL	TEMPORARY,@20(AP)
	RET
	.END
