*DECK HFSPAWN 
USETEXT NIPDEF
USETEXT ACB 
USETEXT AHEADER 
USETEXT APPSTAT 
USETEXT DRHDR 
USETEXT NWLHEAD 
USETEXT NWLNTRY 
USETEXT PARAMP
USETEXT SUPMSG
 PRGM HFSPAWN ;              # SPAWN FACILITY TO BRING UP FTPI APPL.   #
  
 STARTIMS;
 #
*1DC  HFSPAWN 
* 
*     1. PROC NAME        AUTHOR           DATE 
*        HFSPAWN          LIEM T. NGUYEN   88/01/15 
* 
*     2. FUNCTIONAL DESCRIPTION 
*        THIS ROUTINE PROCESSES THE SAF/SAR SUPERVISORY MESSAGE.
* 
*     3. METHOD USED
*        CONSTRUCT THE PFN FOR THE JOB BY CONCATINATING THE 5 CHARS 
*        APPLICATION NAME TO "ZZ", THEN CALL GETFIL.
*        IF ERROR IN GETTING FILE, DAYFILE ERROR MESSAGE THEN RETURN. 
*        ELSE ROUTE JOB TO THE INPUT QUEUE. 
* 
*     4. ENTRY PARAMETERS 
*        PARAMP1 = ADDRESS OF THE INI/APP S.M.
* 
* 
 #
 STOPIMS; 
  
# 
      EXTERNAL REFERENCES 
# 
      XREF
        BEGIN 
        FUNC GETFIL;         # GET A DIRECT ACCESS PERMANENT FILE      #
        PROC BLINK ;         # LINK SM TO ACB                          #
        PROC MGETS ;         # GET BUFFER FOR RESPONSE                 #
        PROC OMSG;           # DAYFILE ERROR MESSAGE                   #
        PROC ROUTE;          # ROUTE JOB FILE TO INPUT QUEUE           #
        PROC XTRACE;         # TRACE CALL                              #
        LABEL RJMAIN; 
        END 
# 
      LOCAL VARIABLES 
# 
      ITEM BUFADDR ;              # ADDRESS OF RESPONDING BUFFER       #
      ITEM I ;                    # FOR INDEX                          #
      ITEM RSTATUS  U;       # RETURN STATUS OF GETFIL CALL            #
  
      ARRAY R$NAME S(1) ; 
        BEGIN 
        ITEM RNAME$U U(0,0,42) ;
        ITEM RNAME    C(0,0,7) ;  # ROOT APPLICATION NAME FROM ACB     #
        END 
  
      ARRAY S$NAME S(1) ; 
        BEGIN 
        ITEM SNAME$U U(0,0,42) ;
        ITEM SNAME   C(0,0,07) ;  # EXTRACTED SPAWN APPLICATION NAME   #
        END 
  
      ARRAY DSPERRMSG  S(4);
        BEGIN 
        ITEM DSPERRTEXT C(0,0,30) = [" DSP ERROR NNB, LFN = XXXXXXX."]; 
        ITEM DSPERRAPPL C(2,12,07) ;
        ITEM DSPERRNN   U(1,6,12);     # ERROR CODE FIELD IN DAY MSG   #
        ITEM DSPERREND  U(3,0,60) = [0];
        END 
  
      ARRAY SPNNAME S(1) ;
        BEGIN 
        ITEM PFNAME   C(00,00,07) ;         # PERMENENT FILE NAME      #
        ITEM SPNZZ    C(00,00,02) = ["ZZ"] ;
        ITEM SPNJOBF  C(00,12,05) ; 
        ITEM SPNZERO  U(00,42,18) = [0] ; 
        END 
  
      ARRAY SPN$MSG S(5); 
        BEGIN                # ERROR MESSAGE                           #
        ITEM MSG1$TEXT   C(00,00,48) =
          ["NIP/NO HSPAWN STARTUP-ZZXXXXX   NOT FOUND.     "];
        ITEM MSG$APPL    C(02,24,05) ;    # SPAWN APPLICATION NAME     #
        ITEM MSG1$END    U(04,48,12) = [0]; 
        END 
  
      ARRAY RPARAM P(7);
        BEGIN                # ROUTE JOB PARAMETER BLOCK               #
        ITEM RPAR$JOBF     C(00,00,07); # NAME OF INIAPPL JOB FILE     #
        ITEM RPAR$EC       U(00,42,06); # ERROR CODE RESPONSE          #
        ITEM RPAR$F        B(00,48,01); # FORCED ORIGIN FLAG           #
        ITEM RPAR$OT       U(00,53,06); # FORCED JOB ORIGIN TYPE       #
        ITEM RPAR$CB       B(00,59,01); # COMPLETION BIT               #
        ITEM RPAR$DISP     C(01,24,02); # FILE DISPOSITION             #
        ITEM RPAR$EP       B(01,47,01); # ERROR PROCESSING FLAG        #
        ITEM RPAR$FSC      B(01,39,01); # FORCE SERVICE CLASS          #
        ITEM RPAR$ID       B(01,58,01); # ROUTE TO CENTRAL SITE        #
        ITEM RPAR$DCF      B(01,55,01); # DISPOSITION CODSET FLAG      #
        ITEM RPAR$SC       C(04,12,02); # SERVICE CLASS                #
        ITEM RPAR$WD0      U(00,00,60) = [0]; 
        ITEM RPAR$WD1      U(01,00,60) = [0]; 
        ITEM RPAR$WD2      U(02,00,60) = [0]; 
        ITEM RPAR$WD3      U(03,00,60) = [0]; 
        ITEM RPAR$WD4      U(04,00,60) = [0]; 
        ITEM RPAR$WD5      U(05,00,60) = [0]; 
        ITEM RPAR$WD6      U(06,00,60) = [0]; 
        END 
  
      CONTROL EJECT;
  
      BEGIN # HSPAWN  # 
  
      CONTROL IFEQ DEBUG,1; 
      XTRACE("HSPAW");       # TRACE CALL                              #
      CONTROL FI; 
  
      P<ACB> = PARAMP1 ;
      P<AHEADER> = WLADDR + AIPHSIZE ;
      P<SUPMSG>  = P<AHEADER> + ABHSIZE ; 
  
      RNAME[0] = C<0,7> ACBANAME[0] ; 
      SNAME[0] = C<0,7> SAFNAME[0] ;
  
      MGETS(LSAFRSP+BLKHSIZE+ABHSIZE,BUFADDR,TRUE) ;   # GET BUFFER FOR#
                                            #    RESPONSE  S.M.        #
      P<AHEADER> = BUFADDR + BLKHSIZE ; 
      ABHABT[0] = APPCMD ;
      ABHACT[0] = CT60TRANS ; 
      ABHTLC[0] = LSAFRSP ; 
      P<SUPMSG> = P<AHEADER> + ABHSIZE ;
  
  
      FOR I = 0 STEP 1 UNTIL 6
      DO
        BEGIN 
        IF C<I,1> SNAME[0] EQ " " 
        THEN
          BEGIN 
          B<I*6,6> SNAME[0] = 0 ;      # FORCE SPAWN NAME TO TRAILING 0#
          B<I*6,6> RNAME[0] = 0 ;      # FORCE ROOT NAME TO TRAILING 0 #
          END 
        END 
  
      IF RNAME$U[0] NQ SNAME$U[0] 
      THEN
        PFCSFC[0] = SAFSARA ;          # APPL TRIES TO SPAWN DIFF APPL #
      ELSE
        BEGIN                          # APPL TRIES TO SPAWN IFSELF    #
  
        SPNJOBF[0] = C<0,5>SNAME ;       # FETCH 5 CHARS OF APPL. NAME #
  
        RSTATUS = GETFIL(SPNNAME,SPNNAME);     # GET PFN               #
  
        IF RSTATUS NQ 0 
        THEN
          BEGIN 
          MSG$APPL[0] = C<00,05>SAFNAME[0] ;
          OMSG(SPN$MSG,0);       # DAYFILE ZZININD FILE NOT FOUND      #
          PFCSFC[0] = SAFSARA ;     # SENDING ABNORMAL BACK            #
          END 
  
        ELSE       # ZZXXXXX EXISTS, NOW ROUTE JOB TO SYSTEM           #
          BEGIN 
          RPAR$JOBF[0] = PFNAME[0] ;    # SET JOB FILE FILENAME        #
          RPAR$F[0] = TRUE;       # SET TO SYSTEM ORIGIN               #
          RPAR$OT[0] = SYOT;       # SET SYSTEM ORIGIN JOB TYPE        #
          RPAR$CB[0] = FALSE;       # CLEAR COMPLETION BIT             #
          RPAR$DISP[0] = "IN";       # SET FILE DISPOSITION            #
          RPAR$FSC[0] = TRUE;        # SET FORCED SERVICE CLASS FLAG   #
          RPAR$DCF[0] = TRUE;       # SET DISPOSITION CODE SET         #
          RPAR$EP[0] = TRUE;        # SET ERROR PROCESSING FLAG        #
          RPAR$ID[0] = TRUE;       # SET ROUTE TO CENTRAL SITE         #
          RPAR$SC[0] = "NS";        # SET NETWORK SERVICE CLASS        #
          ROUTE(RPARAM,1);       # ROUTE ZZININD TO INPUT QUEUE        #
          PFCSFC[0] = SAFSARN ;          # READY TO SEND NORMAL RESPONS#
          IF RPAR$EC[0] NQ 0
          THEN                 # DSP DETECTED ERROR - FILE NOT ROUTED  #
            BEGIN 
            DSPERRAPPL[0] = PFNAME[0] ; 
            DSPERRNN[0] = RPAR$EC[0] - (RPAR$EC[0]/8)*8 + 
                          (RPAR$EC[0]/8)*64 + O"3333";
            OMSG(DSPERRMSG,0);        # ISSUE DAYFILE MESSAGE          #
            PFCSFC[0] = SAFSARA ;        # NO, NO, IT IS ABNORMAL      #
            END 
          END 
        END                       # APPL TRIES TO SPAWN ITSELF         #
  
      BLINK(BUFADDR,P<ACB>) ;          # LINK THE RESPONSE TO ACB      #
  
      GOTO RJMAIN;
      END 
      TERM
