*DECK TEXTRPC 
USETEXT TEXTIPL 
    PROC TEXTRPC; 
*CALL COPYRITE
# TITLE TEXTRPC - SYMPL TEXT FOR THE REMOTE PROCEDURE CALL LIBRARY     #
  
      CONTROL STEXT;
  
      BEGIN                            # TEXTRPC                       #
# 
****  TEXTRPC SYMPL TEXT FOR THE REMOTE PROCEDURE CALL LIBRARY
* 
*     THIS PROCEDURE GENERATES A SYMPL TEXT FOR COMPILING THE REMOTE
*     PROCEDURE CALL (RPC) LIBRARY. 
*     IT CONTAINS DEFINITIONS OF SYMBOLS, PARAMETERS, COMMON BLOCKS,
*     ETC THROUGHOUT THE PROGRAM. 
# 
  
*CALL COPYRITC
  
# 
****  MISCELLANEOUS DEFINITIONS 
# 
      DEF MAXHANDLE$     # 4 #;        # MAX RPC HANDLE VALUE          #
      DEF MAXREG$        # 1 #;        # MAX PORTMAP SERVER REGS ENTRY #
# 
****  REMOTE PROCEDURE CALL AND PORTMAPPER RETURN STATUS CODES
# 
      STATUS RPCSTAT
        OK,                            # COMPLETE NO ERROR             #
        NOHANDLE,                      # HANDLE TABLE FULL             #
        SOCKFAIL,                      # SOCKET REQUEST FAILED         #
        HANDLEINACT,                   # HANDLE IS INACTIVE            #
        RPCTIMEOUT,                    # RPC REQUEST TIMED OUT         #
        CALLREJECT,                    # RPC CALL REJECTED             #
        CALLFAIL,                      # RPC CALL FAILED               #
        BADCALL,                       # BAD RPC CALL                  #
        DUPREG,                        # DUPLICATE REGISTRATION        #
        NOSPACE,                       # NO SPACE IN PORTMAPPER TABLE  #
        NOTREGISTRD;                   # REMOTE PROCEDURE NOT REGISTRD #
# 
****  REMOTE PROCEDURE CALL VERSION 
# 
      DEF RPCVERSION$    # 2 #; 
# 
****  REMOTE PROCEDURE CALL MESSAGE TYPES 
# 
      STATUS RPCMSG 
        CALL,                          # CALL MESSAGE                  #
        REPLY;                         # REPLY MESSAGE                 #
# 
****  REMOTE PROCEDURE CALL REPLY STATUS
# 
      STATUS REPLYSTAT
        ACCEPTED,                      # RPC REQUEST ACCEPTED          #
        DENIED;                        # RPC ACCESS DENIED             #
# 
****  REMOTE PROCEDURE CALL REPLY STATUS OF ACCEPTED MESSAGES 
# 
      STATUS ACCEPTSTAT 
        SUCCESS,                       # RPC EXECUTED SUCCESSFULLY     #
        PROGUNAVAIL,                   # REMOTE HASN'T EXPORTED PROGRAM#
        PROGMISMATCH,                  # REMOTE CAN'T SUPPORT VERSION  #
        PROCUNAVAIL,                   # PROGRAM CAN'T SUPPORT PROC    #
        GARBAGEARGS;                   # PROC CAN'T DECODE PARAMS      #
# 
****  REMOTE PROCEDURE CALL REPLY STATUS OF REJECTED MESSAGES 
# 
      STATUS REJECTSTAT 
        RPCMISMATCH,                   # RPC VERSION NUMBER NOT 2      #
        AUTHERROR;                     # AUTHENTICATION ERROR          #
# 
****  PORTMAPPER DEFINITIONS
# 
      DEF PMAP$PROG    # 100000 #;     # PORTMAPPER PROGRAM NUMBER     #
      DEF PMAP$VERSION      # 2 #;     # PORTMAPPER VERSION NUMBER     #
      DEF PMAP$PORT       # 111 #;     # PORTMAPPER ASSIGNED PORT      #
# 
****  PORTMAPPER RPC PROCEDURE NUMBERS
# 
      STATUS PMAPPROC 
        NULL,                          # NO-OP                         #
        SET,                           # CREATE MAPPING                #
        UNSET,                         # DELETE MAPPING                #
        GETPORT,                       # MAP PROG,VERS,PROT TO PORT    #
        DUMP,                          # LIST ALL MAPPINGS             #
        CALLIT;                        # CALL PROG,VERS,PROC           #
# 
****  PORTMAPPER PROTOCOL VALUES
# 
      DEF IPPROTO$TCP       # 6 #;     # PROTOCOL NUMBER FOR TCP/IP    #
      DEF IPPROTO$UDP      # 17 #;     # PROTOCOL NUMBER FOR UDP/IP    #
# 
****  RP$COM - RPC COMMON AREA
* 
*     THIS LABELLED COMMON BLOCK CONTAINS THE ARRAY AND BASED ARRAY 
*     AREAS USED TO COMMUNICATE WITH RPC. 
* 
# 
      COMMON RP$COM;
      BEGIN                            # RP$COM                        #
  
      ARRAY RP$HANDLE [0:MAXHANDLE$] S(8); # (ENTRY ZERO IS A DUMMY)   #
        BEGIN 
        ITEM RP$ADDRESS C(0,0,40);     # SERVER ADDRESS (IP$ADDR$REC)  #
        ITEM RP$ACTIVE   B(4,0,1);     # HANDLE ENTRY IS IN USE        #
        ITEM RP$CLS$SOCK B(4,1,1);     # CLOSE SOCKET AT TERMINATION   #
        ITEM RP$XID    U(4,28,32);     # RPC TRANSACTION ID            #
        ITEM RP$SOCKID  U(5,0,60);     # SOCKET ID                     #
        ITEM RP$PROGNUM U(6,0,60);     # PORTMAPPER PROGRAM NUMBER     #
        ITEM RP$VERSION U(7,0,60);     # PROTOCOL VERSION              #
        END 
# 
**    NOTE THAT THE FIELDS IN THE PORTMAP DATABASE RECORD ARE SET UP
*     TO ALLOW DIRECT MAPPING TO XDR FORMAT.
# 
      ARRAY PM$PORTMAP [0:MAXREG$] S(4);
        BEGIN 
        ITEM PM$PROGNUM  U(0,0,60);    # PROGRAM NUMBER                #
        ITEM PM$VERSION  U(1,0,60);    # PROTOCOL VERSION              #
        ITEM PM$PROTOCOL U(2,0,60);    # PROTOCOL (IPPPROTO$XXX)       #
        ITEM PM$PORT     U(3,0,60);    # PORT NUMBER                   #
        END 
  
      ITEM PMAP$SOCKET           U;    # PORTMAPPER'S SERVER SOCKET    #
      ITEM PMAP$SERVER           U;    # PORTMAPPER'S SERVER HANDLE    #
      ITEM PMAP$CLIENT           U;    # PORTMAPPER'S CLIENT HANDLE    #
  
      END 
  
      END 
  
      TERM
*WEOR 
