Google
 

Trailing-Edge - PDP-10 Archives - BB-JF18A-BM - sources/mx/mxlcl.req
There are 7 other files named mxlcl.req in the archive. Click here to see a list.
!Linkages to some TOPS-10 utility functions
%IF %SWITCHES(TOPS10) %THEN
    LINKAGE
	ned1 = PUSHJ(REGISTER=1,REGISTER=2; REGISTER=2):
		SKIP(1)
		LINKAGE_REGS(15,13,1)
		NOPRESERVE(1,2,3,4),

	ned2 = PUSHJ(REGISTER=1,REGISTER=2):
		SKIP(0)
		LINKAGE_REGS(15,13,1)
		NOPRESERVE(1,2,3,4,5,6,7,8,9),

	ned3 = PUSHJ(REGISTER=1; REGISTER=1):
		SKIP(1)
		LINKAGE_REGS(15,13,1)
		NOPRESERVE(1,2,3,4),

	ned4 = PUSHJ(REGISTER=1,REGISTER=2; REGISTER=1,REGISTER=2,REGISTER=3):
		SKIP(1)
		LINKAGE_REGS(15,13,1)
		NOPRESERVE(1,2,3,4),

        ned5 = PUSHJ(REGISTER=1; REGISTER=2):
                SKIP(1)
                LINKAGE_REGS(15,13,1)
                NOPRESERVE(1,2,3),

        ufd1 = PUSHJ(REGISTER=1,REGISTER=2):
                SKIP(0)
                LINKAGE_REGS(15,13,1)
                NOPRESERVE(1,2),

        ufd2 = PUSHJ(REGISTER=1):
                SKIP(1)
                LINKAGE_REGS(15,13,1)
                NOPRESERVE(1,2);

    EXTERNAL ROUTINE
	udtdat: ned2 NOVALUE,
        udttim: ned2 NOVALUE,
	namppn: ned3,
	ppnnam: ned3,
	quotas: ned4,
	fndusr: ned1,
	spltty: ned2 NOVALUE,
	bldque: ned5,
        ufdcre: ufd2,
        ufddel: ufd2;
%FI
!
! REQUIRE file for communication between MX modules
!
! Linkage used between MX and the outside world
!
!
! Define the IPCF message format
!
!    The IPCF message is divided into two parts: header and body.
!    The header contains information about the overall message,
!    while the body of the message contains one or more records to
!    indicate the destination of the message to be posted
!
! Define the IPCF message header
!
$FIELD
  hdr_fields =
    SET
    hdr_type = [$SHORT_INTEGER],	! Type of message
    hdr_domain_id = [$SHORT_INTEGER],   ! The domain id of the sender
    hdr_id = [$INTEGER],		! packet message id
    hdr_sequence = [$INTEGER],		! sequence number of this packet
    hdr_status = [$INTEGER],
    hdr_record_count = [$INTEGER],
    hdr_record = [$SUB_BLOCK()]		! first data record
    TES;

! Define the IPCF header size

LITERAL
  hdr_size = $FIELD_SET_SIZE;		! declare the header area size

! Define a macro to reference this data structure

MACRO
  ipcf_hdr = BLOCK [hdr_size] FIELD (hdr_fields) %;
!
! Define the header types
!
$LITERAL
  lcl_post = $DISTINCT,			! post a message
  lcl_cont = $DISTINCT,			! continue posting a previous one
  min_hdr_type = lcl_post,		! minimum
  max_hdr_type = lcl_cont;		! and maximum type

$LITERAL
    lcl_complete = $DISTINCT,
    lcl_incomplete = $DISTINCT,
    min_status = lcl_complete,
    max_status = lcl_incomplete;
!
! Define the IPCF message body
!
!    The IPCF packet body contains one or more variable length records
!    that contain the filespec of the message to be posted, and the node
!    name and destination string for each user to receive the message
!
! Define the packet body record format
!
$FIELD
  rec_fields =
    SET
    rec_seq = [$INTEGER],
    rec_type = [$SHORT_INTEGER],	! record type
    rec_error = [$SHORT_INTEGER],       ! The error code for this record
    rec_length = [$INTEGER],		! number of words in this record
    rec_data = [$STRING(1)]		! dummy pointer
    TES;

! Define the size of a record

LITERAL
  rec_size = $FIELD_SET_SIZE;

! Define a macro to reference this structure

MACRO
  ipcf_rec = BLOCK [rec_size] FIELD (rec_fields) %;

!
! Define the record types
!
$LITERAL
  rec_file = $DISTINCT,			! filespec
  rec_sender = $DISTINCT,		! sender string (for posting by proxy)
  rec_dest = $DISTINCT,			! destination string
  rec_subj = $DISTINCT,                 ! subject string
  min_rec_type = rec_file,		! minimum
  max_rec_type = rec_subj;		! and maximum record type

!
! Define the overall format of the IPCF packet
!
$FIELD
  ipcf_fields =
    SET
    ipcf_header = [$SUB_BLOCK(hdr_size)],	! header first
    ipcf_block = [$SUB_BLOCK(rec_size)]		! and the first record
    TES;

! Define the size of that block

LITERAL
  ipcf_size = $FIELD_SET_SIZE;

! Define a macro to use to reference this stuff

MACRO
  ipcf_msg = BLOCK [ipcf_size] FIELD (ipcf_fields) %;

! Error codes here, for the time being...

$LITERAL
  mx$_no_dest_node = $DISTINCT,
  mx$_invalid_destination = $DISTINCT,
  mx$_empty_work_request = $DISTINCT,
  mx$_invalid_continuation_packet = $DISTINCT,
  mx$_no_such_message = $DISTINCT,
  mx$_invalid_node_name = $DISTINCT,
  mx$_no_message_file = $DISTINCT,
  mx$_wrong_domain = $DISTINCT,
  mx$_duplicate_message_file = $DISTINCT;