*DECK PMPSET
USETEXT TEXTIPL 
USETEXT TEXTRPC 
      PROC PMPSET (PROGNUM, VERSION, PROTOCOL, PORTNUM, RPCSTATUS); 
*CALL COPYRITE
# TITLE PMPSET - ADD A MAPPING ENTRY TO PORTMAPPER DATABASE            #
  
      BEGIN                            # PMPSET                        #
# 
****  PMPSET  ADD A MAPPING ENTRY TO PORTMAPPER DATABASE
* 
*     THIS PROCEDURE ADDS AN ENTRY TO THE PORTMAPPER DATABASE. THE
*     ENTRY MAY BE REQUESTED BY OTHER SYSTEMS IN THE NETWORK. 
* 
*     PROC PMPSET 
* 
*     ENTRY    PROGNUM    = PORTMAPPER PROGRAM NUMBER 
*              VERSION    = PROTOCOL VERSION
*              PROTOCOL   = PROTOCOL TYPE 
*              PORTNUM    = PORT NUMBER 
* 
*     EXIT     RPCSTATUS  = STATUS OF THE REQUEST 
* 
*     METHOD   IF THE SPECIFIED MAPPING IS ACTIVE, AN ERROR IS REPORTED.
*              IF THE PORTMAPPER TABLE IS FULL, AN ERROR IS REPORTED. 
*              OTHERWISE, THE SPECIFIED MAPPING IS SAVED IN THE 
*              DATABASE.
# 
      ITEM PROGNUM             U;      # PORTMAPPER PROGRAM NUMBER     #
      ITEM VERSION             U;      # PROTOCOL VERSION              #
      ITEM PROTOCOL            U;      # PROTOCOL (IPPROTO$XXX)        #
      ITEM PORTNUM             U;      # PORT NUMBER                   #
      ITEM RPCSTATUS S:RPCSTAT;      # STATUS OF THE REQUEST         #
# 
**
# 
      ITEM INDEX                U;
      CONTROL EJECT;
# 
****  START MAIN PROCEDURE
* 
****  LOOK FOR DUPLICATE REGISTRATION 
# 
      FOR INDEX = 0 STEP 1 UNTIL MAXREG$ DO 
        BEGIN 
        IF (PROGNUM EQ PM$PROGNUM [INDEX]) AND
           (VERSION EQ PM$VERSION [INDEX]) AND
           (PROTOCOL EQ PM$PROTOCOL [INDEX]) AND
           (PORTNUM EQ PM$PORT [INDEX]) 
        THEN
          BEGIN 
          RPCSTATUS = S"DUPREG";       # SET ERROR = DUP REGISTRATION  #
          RETURN; 
          END 
        END 
# 
****  FIND UNUSED ENTRY AND INITIALIZE IT 
# 
      FOR INDEX = 0 STEP 1 UNTIL MAXREG$ DO 
        BEGIN 
        IF (PM$PROGNUM [INDEX] EQ 0)
        THEN
          BEGIN 
          PM$PROGNUM [INDEX] = PROGNUM; 
          PM$VERSION [INDEX] = VERSION; 
          PM$PROTOCOL [INDEX] = PROTOCOL; 
          PM$PORT [INDEX] = PORTNUM;
          RPCSTATUS = S"OK";           # SET NORMAL RETURN STATUS      #
          RETURN; 
          END 
        END 
  
      RPCSTATUS = S"NOSPACE";          # SET NO SPACE RETURN STATUS    #
      RETURN;                          # RETURN TO CALLER              #
  
      END                              # PMPSET                        #
  
      TERM
