.TITLE MSGCOM.MAC 80H08A 24-SEP-80/08-OCT-80. ; AUTHOR: N. A. BOURGEOIS, JR. ; SYSTEMS ENGINEERING DIVISION 1738 ; SANDIA NATIONAL LABORATORIES ; PO BOX 5800 ; ALBUQUERQUE, NM 87185 ; 505-844-8088 ; AV 244-8088 ; ; THIS SOFTWARE IS ISSUED BY SANDIA NATIONAL LABORATORIES, ; OPERATED FOR THE UNITED STATES DEPARTMENT OF ENERGY BY ; SANDIA CORPORATION. ; ; NOTICE ; ; THIS SOFTWARE WAS SPONSORED BY THE UNITED STATES ; GOVERNMENT. NEITHER THE UNITED STATES GOVERNMENT NOR ; THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF THEIR ; EMPLOYEES, NOR ANY OF THEIR CONTRACTORS, SUBCONTRACTORS, ; OR THEIR EMPLOYEES MAKES ANY WARRANTY, EXPRESS OR ; IMPLIED, OR ASSUMES ANY LEGAL LIABILITY OR ; RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS OR ; USEFULNESS OF ANY INFORMATION, APPARATUS, PRODUCT OR ; PROCESS DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT ; INFRINGE PRIVATELY OWNED RIGHTS. ; ; THIS WORK WAS SPONSORED AND FUNDED BY: ; ; HEADQUARTERS, ESD / OCB / STOP 36 ; HANSCOM AIR FORCE BASE, MA 01731 ; ; .SBTTL **************** .SBTTL * * .SBTTL * UNCLASSIFIED * .SBTTL * * .SBTTL **************** .SBTTL DESCRIPTION 24-SEP-80/08-OCT-80. ;THESE THREE FORTRAN CALLABLE SUBROUTINES PROVIDE A FACILITY THAT ;ALLOWS RUNNING PROGRAMS TO SEND MESSAGES TO EACH OTHER. THIS MESSAGE ;COMMUNICATION FACILITY ALLOWS PROGRAMS TO SEND MESSAGES THROUGH NAMED ;CHANNELS, CHECK TO SEE IF MESSAGES ARE PENDING, AND SUSPEND EXECUTION ;UNTIL A MESSAGE IS RECEIVED. ;CALLING SEQUENCE: ; ; CALL XXXXXX (CHNAME,MSGBUF,MSGSIZ,IERR) ; ;WHERE: XXXXXX IS ONE OF THE FOLLOWING SUBROUTINE NAMES: ; SNDMSG SEND A MESSAGE. ; RCVMSG RECEIVE A MESSAGE, RETURN IF NONE IS PENDING. ; RCVMSW RECEIVE A MESSAGE, WAIT IF NONE IS PENDING. ; ; CHNAME SIX ASCII CHARACTER NAME OF THE MESSAGE CHANNEL. ; ; MSGBUF NAME OF THE STRING ARRAY CONTAINING THE MESSAGE. ; ; MSGSIZ MESSAGE LENGTH IN CHARACTERS. ; ; IERR ERROR CODE RETURNED AS FOLLOWS: ; 0 NO ERROR. ; 1 ALL MESSAGE CHANNELS BUSY. ; 2 MAXIMUM ALLOWED NUMBER OF MESSAGES. ; 3 NO MESSAGE IS PENDING ON THE NAMED CHANNEL. ; 4 MESSAGE WAS TOO LONG AND WAS TRUNCATED TO ; MAXIMUM LENGTH. .SBTTL DIRECTIVES 24-SEP-80/08-OCT-80. .IDENT \80H08A\ ;TELL LINKER OUR VERSION .PSECT USER$I,I ;CODE .PSECT USER$D,D ;DATA .SBTTL ASSIGNMENTS 24-SEP-80/. ERRBYT =53 ;ERROR CODE LOCATION .SBTTL EMT AREA 24-SEP-80/. MSGCOM:: EMTBLK: .BYTE 0 ;EMT CODE .BYTE 0 .WORD 0 ;SA CHANNEL NAME .WORD 0 ;SA MESSAGE BUFFER .WORD 0 ;ADDR MESSAGE SIZE .SBTTL CODE .PSECT USER$I .SBTTL SNDMSG/RCVMSG/RCVMSW 24-SEP-80/08-OCT-80. ;SEND A MESSAGE IN A NAMED CHANNEL. ; ; CALL SNDMSG (CHNAME,MSGBUF,MSGSIZ,IERR) SNDMSG::MOV #104 ,R1 ;EMT CODE JSR PC ,DOIT ;SEND THE MESSAGE RTS PC ;RECEIVE A PENDING MESSAGE ON A NAMED CHANNEL. RETURN WITH AN ERROR ;CODE IF NONE IS PENDING. ; ; CALL RCVMSG (CHNAME,MSGBUF,MSGSIZ,IERR) RCVMSG::MOV #105 ,R1 ;EMT CODE JSR PC ,DOIT ;RECEIVE THE MESSAGE RTS PC ;RECEIVE A MESSAGE ON A NAMED CHANNEL. WAIT FOR ONE IF NONE IS PENDING. ; ; CALL RCVMSW (CHNAME,MSGBUF,MSGSIZ,IERR) RCVMSW::MOV #106 ,R1 ;EMT CODE JSR PC ,DOIT ;RECIEVE THE MESSAGE RTS PC DOIT: MOV #EMTBLK ,R0 ;POINT TO EMT AREA CLRB (R0)+ ;BUMP THE POINTER MOVB R1 ,(R0)+ ;EMT CODE MOV @2(R5) ,(R0)+ ;SA CHANNEL NAME MOV @4(R5) ,(R0)+ ;SA MESSAGE BUFFER MOV @6(R5) ,(R0) ;ADDR MESSAGE SIZE CLR @10(R5) ;ERROR CODE EMT 375 ;NOW LET TSX DO IT BCC 1$ ; IF NO ERROR MOVB @#ERRBYT,@10(R5) ; IF ERROR 1$: RTS PC .SBTTL APPENDICES .SBTTL RT-11 COMMAND STRINGS 24-SEP-80/. ;ASSEMBLER ; .RUN MACRO ; *MSGCOM[,LP:]