	.TITLE LATSET
	.IDENT /050389/



;	Version:
;	File:[22,320]LATSET.MAC
;	Author: Peter Stadick 
;	History: 
;
;	Last Edit: 3-MAY-1989 14:41:20 
; 

.REM |

Procedure LATSET(LUN:Integer;
		 SERVER:CH16;
		 PORT:CH16;
                 EFN:Event_Flag;
		);EXTERNAL;

{*USER*
 Pascal-3 Procedure to assign a device to a LAT port 
as a application port. Because this routine uses an Set
Multiple Characteristics SF.SMC to a port other then TI: it is required
to build the task including this routine PR:0.

This procedure will perform the following operation.
-Set the LAT port characteristics to the specified server and port.

LUN is the logical unit number to be assigned to the appropriate device.  

SERVER is the name of the server.

PORT is the name of the port.

EFN is the event flag to be set when the I/O is completed. f0 may 
not be specified. 

Directive status is available in $DSW on return.

} 
|

;
; Assemble with PASMAC.MAC as prefix file.
;
; Thanks to Frank S. for the idea and the Pascal-1 version, which I 
; brazenly plagiarized. Same here - P. Stadick.
;
         .MCALL  DIR$

; DECLARE PSECT FOR EXEC DIRECTIVES
.PSECT LATDIR,RW,D,LCL,REL	
QIO:	.BYTE	3,12.
	.WORD	0
	.WORD	0
	.BYTE	0,0
	.WORD	IOSB
	.WORD	0
	.WORD 	0
	.WORD	0
	.WORD	0
	.WORD	0
	.WORD	0
	.WORD	0

CHRBUF:	.BYTE	TC.MAP			; CHARACTERISTIC NAME
	.BYTE	48.			; CHARACTERISTIC BUFFER LENGTH
	.BLKB	16.			; SERVER NAME
	.BLKB	16.			; SERVICE NAME
	.BLKB	16.			; PORT NAME
CHRLEN=.-CHRBUF

IOSB:	.WORD	0,0			; I/O STATUS BLOCK

; 
; NOW DECLARE PSECT FOR PURE CODE
.PSECT LATCON,RO,I,LCL,REL

	
	PROC  LATSET
	PARAM LUN, INTEGER
	PARAM SERVER, 20*CHAR
	PARAM PORT, 20*CHAR
	PARAM EFN, SCALAR
	SAVE <R0, R1, R2, R3, R4, R5 >
	BEGIN
	MOV SP,R0			;PRESERVE SP

; SET MULTIPLE CHARACTERISTICS
	MOV #60,R1			;ZERO OUT SMC BUFFER CHRBUF
	MOV #CHRBUF+2,R3
4$:	MOVB #0,(R3)
	INC R3
	SOB R1, 4$

	MOV #20,R1			;MOVE SERVER NAME TO BUFFER
	MOV #CHRBUF+2,R3
	MOV R0,R4
5$:	CMPB SERVER(4),#40		;IF WE ENCOUNTER A SPACE THEN STOP
	BEQ 6$
	MOVB SERVER(4),(R3)
	INC R3
	INC R4
	SOB R1, 5$

6$:	MOV #20,R1			;MOVE PORT NAME TO BUFFER
	MOV #CHRBUF+42,R3
	MOV R0,R4
7$:	CMPB PORT(4),#40		;IF WE ENCOUNTER A SPACE STOP
	BEQ 8$
	MOVB PORT(4),(R3)
	INC R3
	INC R4
	SOB R1, 7$

8$:	MOV #SF.SMC,QIO+2		;SMC BIT CODE
	MOV LUN(0),QIO+4
	MOVB EFN(0),QIO+6
	MOV #CHRBUF,QIO+14
	MOV #CHRLEN,QIO+16
	DIR$	#QIO
XT:
	ENDPR
	.END

