.TITLE OPR_FAO_MSG OPERATOR FAO MESSAGE SUBR. ;.begin.doc ************************** begin.doc ; ; .c ;MODULE ; .c ;^&OPR_FAO_MSG\& ; .nf ; .x OPR_FAO_MSG>Defined ; Source:OPR_FAO_MSG.MOD ; Designer :EARL LAKIA ; Author :EARL LAKIA ; Date of last update:20-JUN-1986 09:12:05.86 ; Revision level :1.0 ; ; Inland Steel Co. ; 3210 Watling St. ; East Chicago, IN 46312 ; ; .C ;Formal Parameter List ; Receives: ; ; STATUS INTEGER*4 ; SYSTEM OR USER MESSAGE STATUS CODE ; ; FAO_ARG SEE FAO ARG. IN MESSAGE ; THESE ARE THE ARGUMENTS THAT WILL BE ENCODED ; INTO THE USER OR SYSTEM MESSAGE. TO DETERMINE ; THE TYPE, THE USER MUST KNOWN FAO PARAMETERS ; FOR THE MESSAGE. ; ; Returns: ; ; OPR_FAO_MSG INTEGER*4 ; RETURN STATUS OF THE CALL, MAY BE FROM FAO, ; GETMSG, OR SNDOPR. ALSO IF NUMBER OF ARGUMENTS ; DOES NOT AGREE WITH THE NUMBER IN MESSAGE, ; MAY CONTAIN A WARNING. ; ; Accesses common(s): ; ; Accesses file(s): ; ; Other modules referenced: ; .SK ; .fill ; .SK ; Description: ; .sk ; This subroutine call the system service GETMSG to get the ; text for the user passed error code and the number of FAO arguments ; in the message. The subroutine will then take the lesser of ; the two counts and apply the passed FAO parameters to form ; a message that will be passed sent via SNDOPR to the operator ; console. The user and process sending the message will also be ; sent as part of the message. The FAO arguments are passed by ; descriptor for character strings, by value for integer*2, ; byte, and integer*4, and by address for QUAD word. ; The calling sequence is: ; .nofill ; .sk ; INTEGER*4 SYS_STATUS ; EXTERNAL USR_BAD ! A SAMPLE BAD STATUS SET UP ; C WITH THE MESSAGE UTILITY ; C ; C ; SYS_STATUS=OPR_FAO_MSG(USRBAD,'THIS IS A TEST') ; C ; C THE FAO ARGUMENT FOR THIS IS MESSAGE WAS !AS ; C ; C FOR A SYSTEM SERVICE CALL, ; C ; SYS_STATUS=OPR_FAO_MSG(%VAL(SS$_NORMAL)) ; C ; C NOTE: THE %VAL MUST BE USED INSTEAD OF BY REFERENCE!!!! ; C ; ; end.doc ****************************** end.doc ; ; CALLING SEQUEUNCE: ; ; 00(AP)= NUMBER OF ARGUMENTS ; 04(AP)= SYSTEM SERVICE CODE (PASSED BY VALUE) ; 08(AP)= BY VALUE, BY REFERENCE FOR ; 12(AP)= CHARACTER AND QUAD WORDS. ; . . . . . . ; NN(AP)= . . . . ; ; .DEBUG OPR_BUFFER,BUFFER,JPI_ITEMS,RET_PROC_L,- PROC_NAME,FAO_CTR,FAO_BUF,MSGBUF,- MESG_INFO,MSGBUF_D,SIZE .PAGE .PSECT BUF,NOEXE,gbl,ovr,SHR,PIC,REL,LONG ; ; SND OPR BUFFER ; $OPCDEF ; ; FAO OUTPUT BUFFER DESCRIPTOR. ACTUAL TEXT IS IN THE SNDOPR ; COMAMND BUFFER ; OPR_BUFFER: .LONG 256 .ADDRESS BUFFER ; ADDRESS OF BUFFER ; ; COMMAND BUFFER USED TO DO THE SEND OPER ; OPR_CMD_BUF_D: .LONG 0 ; BYTE COUNT FILLED IN AFTER FAO CALL .ADDRESS OPR_CMD_BUF ; OPR_CMD_BUF: .BYTE OPC$_RQ_RQST ; COMMAND TYPE TO SEND OPER .BYTE 0 .LONG OPC$M_NM_OPER1 ! OPC$M_NM_CENTRL .LONG 0 ; RQSTID (DON'T CARE) BUFFER: .BLKB 256 ; UP TO 256 BYTE MESSAGE ; ; ; JPI ITEM LIST/BUFFERS ; JPI_ITEMS: .WORD 15 ; PROCESS NAME BUFFER SIZE .WORD JPI$_PRCNAM ; GET PROCESS NAME REQUEST .ADDRESS PROC_NAME ; ADDRESS OF PROCESS NAME BUFFER .ADDRESS RET_PROC_L ; WHERE TO STORE LENGTH OF PROCESS NAME STRING .LONG 0 ; TERMINATOR ; RET_PROC_L: ; PROCESS NAME DESCRIPTOR .LONG 0 ; LENGTH OF PROCESS NAME .ADDRESS PROC_NAME ; ADDRESS OF PROCESS NAME TEXT PROC_NAME: .BLKB 15 ; PROCESS NAME ; ; FAO CONTROL BUFFER AND MESSAGE BUFFER FROM THE GET MESSAGE ; ; FAO_CTR: ; FAO CONTROL BUFFER DESCRIPTOR .LONG 0 .ADDRESS FAO_BUF ; FAO_BUF: .ASCII "Process Name: !AS !/" MSGBUF: .blkb 256- ; ; GET MESSAGE CONTROL BLOCKS ; MESG_INFO: .BYTE 0 ; RESERVED FOR DIGITAL .BYTE 0 ; FAO COUNT FROM MESSAGE .BYTE 0 ; USER SPECIFIED VALUE .BYTE 0 ; RESERVED FOR DIGITAL ; ; GET MESSAGE SYSTEM SERVICE BUFFERS ; MSGBUF_D: ; GET MESSAGE OUTPUT BUFFER DESCRIPTOR .LONG 256- ; SIZE OF MESSAGE BUFFER .ADDRESS MSGBUF ; ADDRESS OF MESSAGE BUFFER SIZE: .LONG 0 ; SIZE OF GET MSG MESSAGE .PAGE .PSECT OPR_FAO_MSG,EXE,CON,LONG,NOWRT ; ; RESET IN CASE OF MULTIPLE CALLS AND GET OUR PROCESS NAME ; .ENTRY OPR_FAO_MSG,^M MOVL #256,OPR_BUFFER ; IN CASE CALLED MORE THAN ONCE, RESET MOVL #256-,MSGBUF_D ; " " " " " " " ; ; GET THE CURRENT PROCESS NAME ; $GETJPIW_S ITMLST=JPI_ITEMS BLBS R0,10$ ; WERE WE ABLE TO GET PROCESS NAME? RET ; NO, THEN FORGET THIS ; ; HAVE THE PROCESS NAME, NOW GET THE MESSAGE, AND THE NUMBER OF FAO ; ARGUMENTS. ; 10$: $GETMSG_S MSGID=4(AP), - ; MESSAGE ID FROM CALLER MSGLEN=SIZE, - ; RETURN MESSAGE LENGTH BUFADR=MSGBUF_D,- ; CHARACTER DESCRIPTOR FOR BUFFER FLAGS=#15 ,- ; WANT ALL INFORMATION OUTADR=MESG_INFO ; GET FAO AND USER VALUE BLBS R0,20$ ; EVERYTHING OK? RET .PAGE ; ; ; CALL FAO TO ENCODE THE PASSED ARGUMENTS. OR ELSE JSUT COPY BUFFER ; 20$: ADDL #,SIZE ; ADD PREABMLE LENGTH TO COUNT MOVL SIZE,FAO_CTR ; STORE FOR FAO TOTAL LENGTH MOVL AP,R7 ; GET PARAMETER LIST ADDL #4,R7 ; SKIP # ARGUMENTS PUSHL (R7) ; SAVE OLD STATUS MOVL #RET_PROC_L,(R7) ; STORE OUR PROCESS NAME DESC. ;---- ; $FAOL_S CTRSTR=FAO_CTR,- ; CONTROL BUFFER ; OUTLEN=SIZE,- ; NUMBER OF TOTAL BYTES IN OUTPUT STRING ; OUTBUF=OPR_BUFFER,- ; SEND OPR BUFFER ; PRMLST=(R7) ; PARAMETER LIST FROM CALLER ; ---- ABOVE DOSEN'T WORK BECAUSE OF THE NON STANDARD CALLING SEQUENCE USED HERE ; PUSHL R7 PUSHAQ OPR_BUFFER PUSHAW SIZE PUSHAW FAO_CTR CALLS #4,G^SYS$FAOL ; POPL 4(AP) ; RESTORE OLD STATUS BLBS R0,50$ ; EVERYTHING OK? (R6= BYTE COUNT) RET ; ERROR ; ; SEND BUFFER TO OPERATOR ; 50$: MOVL SIZE,OPR_CMD_BUF_D ; STORE BYTE COUNT ADDL #10,OPR_CMD_BUF_D ; ADD 8 BYTES FOR DISCRIPTOR POOP $SNDOPR_S MSGBUF=OPR_CMD_BUF_D ; BUFFER TO BE OUTPUT RET ; RETURN STATUS TO CALLER .END