*DECK KADD
USETEXT NIPDEF
USETEXT AT
USETEXT PT
USETEXT KDIS
USETEXT KINITBF 
USETEXT KSTTAB
USETEXT ACB 
USETEXT LLCB
USETEXT NBT 
USETEXT PARAMS
USETEXT DRHDR 
USETEXT KHDRX 
      PRGM KADD;
 STARTIMS;
 #
*1DC  KADD
* 
*     1.PROC NAME     AUTHOR          DATE
*       KADD          A.BEN-ARTZI     82/03/04
*                     M.GIBIAN        83/12/20
* 
*     2.FUNCTIONAL DESCRIPTION
* 
*       ADD A NEW LINE INTO THE STATUS DISPLAY AND UPDATE DISPLAY IF
*       CURRENTLY IN VIEW.
* 
*     3.METHOD USED 
* 
*       - SET STRUCTURE INDEX TO 0 TO INDICATE NEW LINE NOT DISPLAYED 
* 
*       - ASSIGN RELATIVE LINE NUMBER TO NEW LINE AND UPDATE VIEW TABLE 
* 
*       - IF IN VIEW, SET STRUCTURE INDEX AND STRUCTURE ADDRESS, AND
*         SET ABSOLUTE ADDRESS OF NEW LINE
* 
*       - IF STUCTURE INDEX IS NON-ZERO, MOVE DISPLAY AND DISPLAY NEW 
*         LINE
* 
*     4.ENTRY PARAMETERS
* 
*       TYPE - 1,2,OR 3 STANDS FOR ACB,NBT OR LLCB, TYPE ST-LINE. 
* 
*       ADDRESS - THE ADDRESS OF PROPER DATA STRUCTURE
* 
*     5.EXIT PARAMETERS 
* 
*       NONE
* 
*     6.COMDECKS AND TEXTS
* 
*         NIPDEF  KDIS  KINITBF   KSTTAB
*         KHDRX 
*         ACB     LLCB  NBT       DRHDR 
* 
*     7.ROUTINES AND OVERLAYS CALLED
* 
*         KPUT - UPDATE ST-VALUE
*         KUPVTAB- UPDATE VIEW TABLE
*         XTRACE- MARK NAME IN TRACE BUFFER 
* 
* 
*     8.DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATION
*       THIS PROCEDURE IS CALLED BY BLDACB,BLDLLCB,XCHKCET
* 
 #
 STOPIMS; 
# 
      INPUT PARAMETERS
# 
      ITEM TYPE S:KST;       # STATUS LINE BUFFER TYPE                 #
      ITEM ADDRESS;          # ACB ADDRESS/NBT ENTRY INDEX/LLCB ADDRESS#
# 
      OUTPUT PARAMETERS 
      NONE
# 
# 
      EXTERNAL REFERENCES 
# 
      XREF
        BEGIN 
        PROC KUPVTAB;        # UPDATE VIEW TABLE                       #
        PROC KPUT;           # UPDATE STATUS DISPLAY                   #
        PROC XTRACE;         # TRACE CALL                              #
        LABEL RJMAIN; 
        END 
# 
      LOCAL VARIABLES 
# 
      ITEM I;                # INDUCTION VARIABLE                      #
      ITEM KN;               # TEMPORARY DISPLAY LINE INDEX            #
      ITEM STRIND U;         # STRUCTURE INDEX                         #
  
   BASED ARRAY INDEXES S(1);
     BEGIN
     ITEM ISTART  U(0,9,9);  # START INDEX IN VIEW TABLE ARRAY         #
     ITEM IEND    U(0,18,9); # END INDEX IN VIEW TABLE ARRAY           #
     END
  
    SWITCH KLAB:KST 
       LB$APP:APP,
       LB$EST:EST,
       LB$LLK:LLK;
  
      CONTROL EJECT;
  
      BEGIN # KADD #
  
      CONTROL IFEQ DEBUG,1; 
      XTRACE("KADD");        # TRACE CALL                              #
      CONTROL FI; 
  
# 
      UPDATE SPECIFIC DATA ACORDING TO THE TYPE 
# 
      TYPE=PARAMS1; 
      PARAMS1=0;
      ADDRESS=PARAMS2;
      STRIND=0;                # INDICATE LINE ADDED IS NOT DIPLAYED   #
      GOTO KLAB[TYPE]; # SWITCH ON BUFFER TYPE      # 
  
LB$APP:                      # ADD NEW APPLICATION TO STATUS DISPLAY   #
      KDAPPMX[0]=KDAPPMX[0]+1;  #ADD NEW APPLICATION TO COUNT OF APPS  #
      KPUT(LOC(KHDRXNM),0,KPHXNAP,KDAPPMX[0]-3);
  
      P<ACB> = ADDRESS; # FWA OF ACB                                   #
      ACBKNDX[0] = KDAPPMX[0]; # RESET STATUS DISPLAY LINE INDEX       #
  
      KUPVTAB;  #  ADJUST VIEW TABLE TO REFLECT NEW LINE               #
  
#   NOW DETERMINE IF LINE IS BEING DISPLAYED #
  
      IF KDAPPST[0] NQ 0      # SOME APPLICATIONS ARE BEING DISPLAYED  #
         AND ACBKNDX[0] GQ KDAPPST[0]     #LINE IS AFTER/IS FIRST LINE #
         AND ACBKNDX[0] LQ KDAPPND[0]     #LINE IS BEFORE/IS LAST LINE #
      THEN
         STRIND=ACBKNDX[0]; 
      GOTO LB$; 
  
LB$EST:                      # ADD NEW EST ENTRY TO STATUS DISPLAY     #
      KDESTMX[0] = KDESTMX[0] + 1;
      NBTKNDX[ADDRESS] = KDESTMX[0];
  
      KUPVTAB;       # UPDATE VIEW TABLE TO REFLECT NEW LINE           #
  
#  CHECK TO SEE IF THIS LINE IS IN VIEW     # 
  
     IF KDESTST[0] NQ 0     # EST LINE ARE BEING DISPLAYED             #
        AND KDESTMX[0] GQ KDESTST[0]      #GREATER/IS FIRST LINE       #
        AND KDESTMX[0] LQ KDESTND[0]      #LESS/IS LAST LINE           #
      THEN
         STRIND=KDESTMX[0]; 
      GOTO LB$; 
  
LB$LLK:                      # ADD NEW LOGICAL LINK TO STATUS DISPLAY  #
      KDLGLMX[0] = KDLGLMX[0]+1;
      P<LLCB> = ADDRESS; # FWA OF LLCB                                 #
      LLCBKNDX[0] = KDLGLMX[0]; 
  
      KUPVTAB;        # UPDATE VIEW TABLE TO REFLECT NEW LINE          #
  
#   CHECK TO SEE IF THIS LINE IS BEING DISPLAYED                       #
  
      IF KDLGLST[0] NQ 0
         AND KDLGLMX[0] GQ KDLGLST[0] 
         AND KDLGLMX[0] LQ KDLGLND[0] THEN
            STRIND=KDLGLMX[0];
      GOTO LB$; 
LB$:  
      IF STRIND NQ 0 THEN 
         BEGIN
         P<KSTTAB> = KHDRNP[0] + BLKHSIZE + KHDRSIZE; 
  
         P<INDEXES>=LOC(KDAPPST[0])-1;
         FOR I=KST"APP" STEP 1 WHILE ISTART[I] EQ 0 DO; 
         KN=STRIND-ISTART[I]; 
         FOR I=KST"APP" STEP 1 UNTIL TYPE-1 DO KN=KN+IEND[I]; 
  
         FOR I=KDVWLN[0]-1 STEP -1 UNTIL KN+1 DO
            KLGLDTA[I]=KLGLDTA[I-1];    # SHIFT LINE UP ONE POSITION #
  
         PARAMS1=STRIND;
         PARAMS2=ADDRESS; 
         PARAMS3=TYPE;
         PARAMS5=TRUE;
         END
  
      GOTO RJMAIN;
      END 
      TERM
