	.TITLE	VRSSMBHAN - PRINT SYMBIONT CONDITION HANDLER
	.SBTTL	DECLARATIONS
;
;
;	LANGUAGE:  VAX-11 MACRO
;
;	OPERATING SYSTEM:  VAX/VMS
;
;	ORDER NUMBER:  12X-9XV
;
;	PART NUMBER:  000-025809-XXX REV. G  MAY, 1985
;
;	PRODUCT: VAX-11 DIAGNOSTIC,
;	PRODUCT: VAX/VMS DRIVER, SYMBIONT, AND OUTPUT PACKAGE
;
;	VERSATEC, INC., SANTA CLARA, CALIFORNIA 95051
;	A XEROX COMPANY
;
;	Copyright (C) 1985 by Xerox Corporation.  All rights reserved.
;
;	"NOTICE. THIS PROGRAM IS THE EXCLUSIVE PROPERTY OF VERSATEC,
;	INC. AND IS ISSUED IN STRICT CONFIDENCE UNDER A PREARRANGED
;	LICENSE AGREEMENT AND IS NOT TO BE DISCLOSED IN ANY MANNER TO
;	PERSONS OUTSIDE THE LICENSED ORGANIZATION AND SHALL NOT BE
;	REPRODUCED OR DISSEMINATED, IN WHOLE OR PART, TO ANYONE OUTSIDE
;	THE LICENSED ORGANIZATION WITHOUT THE PRIOR WRITTEN APPROVAL OF
;	VERSATEC, INC. UNLESS OTHERWISE PROVIDED FOR BY SUCH LICENSE
;	AGREEMENT.  THIS WORK IS PROTECTED AS AN UNPUBLISHED WORK UNDER
;	THE COPYRIGHT ACT OF 1976."
;
;
;	VERSATEC SYMBIONT UNEXPECTED CONDITION HANDLER
;
;	B.L.	MAY, 1985	INITIAL RELEASE WITH REV. G DRIVER
;
;
; EQUATED SYMBOLS:
	SPACE	= ^A\ \			;ASCII SPACE
	$CHFDEF				;CONDTION HANDLER DEFINTIONS
	$JBCMSGDEF			;JOB CONTROLLER MESSAGE DEFINITIONS
	$OPCDEF				;OPCOM DEFINTIONS
	$QIODEF				;QIO DEFINTIONS
	$SHRDEF				;SHARED MESSAGE DEFINITIONS
 
	.PAGE
	.SBTTL	CONDTITION HANDLER
 
;++
; FUNCTIONAL DESCRIPTION:
;
;	THIS ROUTINE IS THE CONDITION HANDLER FOR THE PRINT
;	SYMBIONT.
;	CALLED BY SIGNALING OR AN EXCEPTION
;	IF CONDITION WAS AN EXCEPTION, IMAGE IS EXITED
;
; INPUT PARAMETERS:
;
;	CHF$L_SIGARGLST(AP) IS ADDR OF SIGNAL ARGUMENT LIST
;	CHF$L_MCHARGLST(AP) IS ADDR OF MECHANISM ARGUMENT LIST
;--
	.PSECT	VRSSMBHAN,EXE,RD,NOWRT,LONG
VRSSMB$HANDLER::
	.WORD	^M<R2,R3,R4,R5>
	MOVL	CHF$L_SIGARGLST(AP),R2	;GET ADDR OF SIGNAL ARGUMENTS
	SUBW	#2,CHF$L_SIG_ARGS(R2)	;DON'T PASS PC & PSL
	MOVL	CHF$L_SIG_NAME(R2),W^SIG_NAM ;SAVE SIGNAL NAME
	MOVL	SD_Q_DEV_NAM+4,R0	;GET ADDR OF PRINTER NAME
	MOVZWL	SD_Q_DEV_NAM,R1		;GET PRINTER NAME LENGTH
	ADDB3	#FACILITY_LEN,R1,W^FACILITY_DESC ;SET FACILITY/PRINTER LENGTH
	MOVC3	R1,(R0),W^LP_NAME	;CONCATENATE FACILITY AND PRINTER
	PUSHAQ	W^FACILITY_DESC		;SET FACILITY NAME DESC ADDR
	PUSHAW	W^ACTION		;SET ACTION ROUTINE ADDR
	PUSHL	CHF$L_SIGARGLST(AP)	;SET ADDR OF SIGNAL ARG LIST
	CALLS	#3,SYS$PUTMSG		;OUTPUT THE MESSAGE
	TSTW	W^SIG_NAM+2		;SYSTEM EXCEPTION?
	BNEQ	10$			;BR IF NOT
	$EXIT_S				;ELSE - EXIT
10$:
	RET
 
;
; SYS$PUTMSG ACTION ROUTINE
;
; IF ERROR IS EXPECTED, SEND MESSAGE TO PRINTER, ELSE SEND TO OPERATOR
;
ACTION:	.WORD	^M<R2,R3,R4,R5,R6>
	MOVL	4(AP),R2		;GET ADDR OF STRING DESC
	CMPW	#<SHR$_OPENIN!4>&^XFFFF,W^SIG_NAM ;OPEN ERROR?
	BEQLU	10$			;BR IF YES
	CMPW	#<SHR$_READERR!4>&^XFFFF,W^SIG_NAM ;READ ERROR?
	BEQLU	10$			;BR IF YES
	CMPW	#SS$_ABORT,W^SIG_NAM	;QIO ABORTED?
	BEQLU	10$			;BR IF YES
	CMPW	#SS$_DEVOFFLINE,W^SIG_NAM ;PLOTTER OFFLINE?
	BEQLU	10$			;BR IF YES
	CMPL	#JBC$_JOBABORT!2,W^SIG_NAM ;JOB ABORTED?
	BEQLU	10$			;BR IF YES
	CMPL	#JBC$_JOBREQUEUE!2,W^SIG_NAM ;JOB REQUEUED?
	BEQLU	10$			;BR IF YES
 
	MOVZBL	#128,R6			;ASSUME MESSAGE LENGTH
	CMPW	(R2),R6			;IS MESSAGE LONGER?
	BGEQ	5$			;BR IF YES
	MOVZWL	(R2),R6			;ELSE - USE ACTUAL LENGTH
5$:	SUBL	R6,SP			;MAKE OPCOM MESSAGE BUFFER
	MOVC3	R6,@4(R2),(SP)		;MOVE MESSAGE TO THE BUFFER
	PUSHL	#0			;NO REQUEST NUMBER
					;CREATE REQUEST HEADER
	MOVZWL	#OPC$_RQ_RQST!<-	; REQUEST TYPE
		<OPC$M_NM_CENTRL!-	; OPERATORS TO BE SENT MESSAGE
		 OPC$M_NM_DEVICE!-
		 OPC$M_NM_PRINT>@8>,-(SP)
	PUSHL	SP			;CREATE OPCOM MESSAGE DESC
	ADDL3	R6,#4+4,-(SP)		;...
	MOVL	SP,R0			;GET ADDR OF MESSAGE DESC
	$SNDOPR_S (R0)			;SEND THE MESSAGE TO THE OPS
	BRB	20$
 
8$:	.LONG	<-5*10*1000*1000>,-1	;5 SECOND DELTA TIME
10$:	$SETIMR_S  #VRSSMB$K_TIMEFN,B^8$,- ;TIMER IN CASE PRINTER BROKEN
		VRSSMB$CANCELIO			;GO CANCEL I/O IF TIMES OUT
	$QIOW_S	CHAN=SD_G_QIOBLK+QIO$_CHAN,- ;PRINT MESSAGE
		FUNC=#IO$_WRITELBLK,-
		P1=@4(R2),-
		P2=(R2),-
		P4=#SPACE
	$CANTIM_S			;CANCEL TIMER
	MOVW	#1,W^SIG_NAM+2		;DON'T CONSIDER THIS A SYSTEM EXCEPTION
20$:	CLRL	R0			;DON'T PUT MESSAGE ELSEWHERE
	RET
 
	.END
