*DECK DB$SELF 
          IDENT  DB$SELF
          TITLE  DB$SELF   -- SEND A CALLSS TO OWN CONTROL POINT -- 
          SST 
          IPARAMS 
*#
* *   DB$SELF - SEND A CALLSS TO SELF            PAGE  1
* *   R L MCALLESTER                             DATE  12/13/79 
* 
* DC  PURPOSE 
* 
*     WHEN A SUBSYSTEM NEEDS TO TURN OFF ITS INPUT, IT SENDS A CALLSS 
*     TO ITSELF.
*     THIS REQUEST SETS THE INPUT BUFFER BUSY.
*     USERS ARE PREVENTED FROM MAKING NEW REQUEST BECAUSE THE SUBSYSTEM 
*     IS BUSY.
* 
* DC  ENTRY CONDITIONS
* 
*     NONE
* 
* DC  EXIT CONDITIONS 
* 
*     TRUE --    THE CALLSS WAS SUCCESSFUL
*         X6 = 1
*         THE INPUT REGISTER IS LEFT ARTIFICIALLY BUSY. 
* 
*     FALSE --   THE CALLSS WAS NOT SUCCESSFUL
*         X6 = 0
*         A CALLSS WAS RECEIVED FROM A USER JOB BEFORE OUR CALLSS 
*         WAS ISSUED. 
* 
* DC  CALLING ROUTINES
* 
*     DB$ROLL                ROLL OUT CDCS
*     DB$TERM                TERMINATE CDCS 
* 
* DC  CALLED ROUTINES 
* 
*     SYSTEM MACROS 
*         CALLSS             CALL SUBSYSTEM 
*         SFCALL             SUBSYSTEM FUNCTION CALL
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*     A SUBSYSTEM CALL IS ISSUED TO OUR OWN SYSTEM CONTROL POINT. 
*     THE REAL TIME BIT 12 IS SET IN THE CALLSS STATUS WORD SO THAT THE 
*     OPERATING SYSTEM WILL RETURN CONTROL TO US IF ANOTHER USER REQUEST
*     IS ALREADY IN OUR INPUT REQUEST AREA. 
* 
*     IF OUR INPUT AREA WAS ALREADY FULL, WE RETURN TO THE CALLING
*     ROUTINE WITH A VALUE OF -FALSE-. (X6=0) 
* 
*     IF OUR REQUEST WAS ACCEPTED, WE ISSUE AN SF.ENDT TO OURSELVES 
*     TO BREAK THE WAIT RESPONSE CONNECTION THAT HAS BEEN ESTABLISHED.
*     WE LEAVE OUR DUMMY REQUEST IN THE INPUT RECEIVING AREA AND
*     RETURN TO THE CALLING ROUTINE WITH A VALUE OF -TRUE-. (X6=1)
*#
*CALL SSIDDCLS
          TITLE              EXECUTABLE CODE
          ENTRY  DB$SELF
  
DB$SELF   EQ   *+1S17 
          SA2    CALLSSST    CALLSS STATUS WORD CONTENTS
          BX6    X2 
          SA6    STATUS 
  
*         WHEN AN SCP ISSUES A CALLSS TO ITSELF THE CALL MUST BE MADE 
*         WITHOUT RECALL AND BIT 12 MUST BE SET IN THE STATUS WORD. 
*         THESE PRECAUTIONS INSURE THAT CPU CONTROL WILL BE RETURNED
*         TO THE SCP UNDER ANY CIRCUMSTANCES. 
  
          CALLSS  "SS$CODE",A6  CALL OWN SCP WITHOUT RECALL 
  
*         CHECK TO SEE IF THE SELF CALL IS RECEIVED 
  
SELF04    BSS    0
          SA1    RA.SSC 
          SA3    CALLSSST 
          MI   X1,SELF08     A CALL HAS BEEN RECEIVED FROM SOMEWHERE
          RECALL             WAIT FOR THE CALL
          EQ   SELF04 
  
SELF08    BSS    0
          SA2    X1+2        GET 1ST WORD OF REQUEST PACKET 
          BX7    X2-X3       COMPARE THE RECEIVED REQUEST WITH OURS 
          SX6    B0 
          NZ   X7,DB$SELF    RETURN -FALSE-,  X6=0
  
*         THE REQUEST IS OURS,  THE CALL WAS SUCCESSFUL.
  
          SA1    ENDT 
          SA2    RA.SSC      CONTAINS INPUT REQUEST AREA ADDRESS
          BX6    X1 
          SA6    X2 
  
*         THE SFCALL FOR SF.ENDT IS ISSUED FROM THE INPUT REQUEST AREA. 
*         THE 2ND WORD ALREADY CONTAINS THE RUN-UNIT ID.
  
          SFCALL A6,RECALL
          SX6    1
          EQ   DB$SELF       RETURN -TRUE-,  X6=1 
  
  
CALLSSST  BSS    0           CALLSS STATUS SOURCE WORD
          VFD    24/4RSELF   REQUEST PACKET IDENTIFICATION
          VFD    18/1        WORD COUNT - A MINIMUM TRANSFER LENGTH 
          VFD    18/1S12     REAL TIME BIT 12 
  
STATUS    CON    0           STATUS WORD FOR CALLSS 
  
ENDT      BSS    0           SFCALL STATUS SOURCE WORD
          VFD    6/0,12/0    RC, FP 
          VFD    18/STATUS   UCPA 
          VFD    18/0        SCPA 
          VFD    6/SF.ENDT   FC 
  
          END 
