*DECK NPICMD
USETEXT NIPDEF
USETEXT AHEADER 
USETEXT PT
USETEXT AT
USETEXT ACB 
USETEXT ACNB
USETEXT NCNB
USETEXT PARAMP
USETEXT SUPMSG
      PRGM NPICMD;
CONTROL NOLIST; 
CONTROL LIST; 
 STARTIMS;
 #
*1DC  NPICMD
* 
*     1. PROC NAME           AUTHOR              DATE 
*        NPICMD              N. NICHOLAS         79/09/12 
* 
*     2. FUNCTIONAL DESCRIPTION.
*          PROCESS ICMDR NETWORK BLOCK FROM N P U 
* 
*     3. METHOD USED. 
*          GET BUFFER FOR INTR/USR/BLOCK
*          CREATE  INTR/USR  SUPERVISOR MESSAGE 
*          LINK  SUPERVISOR MESSAGE TO APP DATA RING
*          SCHEDULE  APPLICATION
* 
*     4. ENTRY PARAMETERS.
*          PARAMP1      BLOCK ADDRESS 
*          PARAMP2       FWA OF NCNB
* 
*     5. EXIT PARMETERS.
*          PARAMP2       ZERO IF USR/MSG NOT PROCESSED
* 
*          QHICMD        TRUE = ICMD BLOCK PROCESSED
*     6. COMDECKS CALLED. 
*          CYBERDEFS  INTR  INTRDEF  AT 
*          HEADER  INPAR  INPARU AT ACB ACNB NCNB 
*          MISCOM MISDEF  SUPMSG  OSIZE 
* 
*      7. ROUTINES AND OVERLAYS CALLED. 
* 
*           MGETS             ALLOCATE EMPTY BUFFER 
*           MRELS             RELEASE BUFFER SPACE
*           BLINK             LINK DATA  BLOCK INTO DATA RING 
*           OSCHAPP           SCHEDULE APPLICATION
*           XTRACE            READ PROCEDURE CALLS
* 
*     8. DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATIONS
* 
*        THIS PROGRAM IS A PRIMARY OVERLAY LOADED BY SUBROUTINE 
*        OVLCALL.  WHEN EXECUTION HAS COMPLETED, A JUMP IS MADE 
*        TO LOCATION RJMAIN TO RETURN TO CALLING PROGRAM. 
* 
*        W A R N I N G - THIS PROGRAM CANNOT EXCEED THE PRIMARY 
*CALL OPSIZE
*        THIS OVERLAY IS CALLED BY NEIB.
* 
 #
 STOPIMS; 
# 
  INPUT PARAMETERS
     NONE 
  
  OUTPUT PARMETERS
     NONE 
# 
# 
                    EXTERNAL VARIABLES
# 
 XREF BEGIN 
     PROC BLINK;             # LINK DATA BLOCK INTO DATA RING          #
     PROC MGETS;             # ALLOCATE BUFFER SPACE                   #
     PROC MRELS;             # RELEASE BUFFER SPACE                    #
     PROC OSCHAPP;           # SCHEDULE APPLICATION                    #
     PROC XTRACE;            # TRACE CALLS                             #
     LABEL RJMAIN;           # RETURN ADDRESS IN OVLCALL               #
     END
# 
                    INTERNAL VARIABLES
# 
 ITEM BUFADDR;               # ADDRESS OF BUFFER TO HOLD INTR/USR SM   #
# 
      TEMPLATE OF APPLATION BLOCK HEADER
  
        BASED ARRAY USED, USETEXT  (  A H E A D E R  ). 
# 
# 
     TEMPLATE OF INTRUSR SUPERVISTOR MESSAGE
  
        BASED ARRAY USE BY A
        USETEXT CALL TO 
        (  S U P $ M S G  ) 
# 
  
# 
          BASED ARRAY NEEDED FOR ICMD ALPHA CHARACTER 
# 
    BASED ARRAY  INTCHAR; 
      BEGIN 
      ITEM  ALPHA U(0,0,8); 
      END 
# 
*****************  E X E C U T A B L E   C O D E   ****************** 
# 
      BEGIN 
      CONTROL IFEQ DEBUG,1; 
        XTRACE("PICMD") ; 
      CONTROL FI; 
  
      P<NCNB> = PARAMP2;     # NCNB ADDRESS                            #
      P<ACNB> = NCNBACNB[0]; # ACNB ADDRESS                            #
  
# 
      GET BUFFER TO HOLD INTR/USR SUPERVISOR MESSAGE
# 
# 
        CREATE INTR/USR/SM TO SEND TO APPLICATION 
# 
        P<AHEADER> = BUFADDR + BLKHSIZE;   #  A B H ADDRESS            #
        ABHABT[0] = APPCMD;                # SUP/MSG BLOCK TYPE        #
        ABHACT[0] = ACINTR;                # SET CHARACTER TYPE        #
        ABHTLC[0] = LINTR;                 # LENGTH OF INTR/USR/SM     #
        P<SUPMSG> = P<AHEADER> + ABHSIZE;   # ADDR OF INTR/USR/SM      #
        PFCSFC[0] = INTRUSR;               # PFC SFC FOR INTR/USR/SM   #
        INTRACN[0] = ACNBACN[0];           # APP CONNECT NUMBER        #
# 
        GET INTERRUPT ALPHA CHARACTER INTO/APP/MSG
# 
        P<INTCHAR> = PARAMP1 + BLKHSIZE + ABHSIZE;# ALPHA/CHAR ADDRESS #
        INTRCHR[0] = ALPHA[0];
# 
        LINK SUPERVLSOR MESSAGE TO APPLICATLON PCB DATA RING
# 
        P<ACB> = ATACBA[ACNBAN[0]]; 
        BLINK(BUFADDR,P<ACB>);
# 
        SCHEDULE APPLICATION FOR INTR/USR/SM
# 
        OSCHAPP(P<ACB>);
    #   QHICMD[0] = TRUE       SET INTR/USR SM FLAG                    #
# 
        RELEASE BUFFER OF NPU INTR/USR/SM 
# 
      GOTO RJMAIN;
      END 
TERM
