*DECK DBSLNXAR
USETEXT CCTTEXT 
USETEXT DBTEXT
PROC NXTAREA; 
*CALL DEBUGVARS 
*CALL,DBSAT 
*CALL GETSET
*CALL TABLNAMES 
START("SELNEXTAREA")
CONTROL IFNQ CB5$CDCS,"NO"; 
XREF BEGIN
PROC BLDDBFS; 
PROC NXTCTXT; 
PROC XERR$; 
FUNC LJZF C(80);
PROC IERR$; 
PROC NXTDCE;
LABEL END$DT; 
PROC BLDCTXT; #DEBUG MODULE TO CREATE S-SCANNER CTEXT#
          ITEM SSFIRSTIDNAT I;
          ITEM SSLASTIDNAT I; 
END 
  
# 
THIS PROCEDURE PERFORMS THE FOLLOWING FUNCTIONS :-
  A. THE NEXT AREA NAME IN THE SELECTED AREA NAME ARRAY IS
     ACCESSED AND USING THE AREA LIST THE APPROPRIATE RECORD
     LIST IS INPUT AND THE RECORD LIST POINTER INITIALISED. 
  B. THE CORRESPONDING AREA ENTRY IS INPUT FROM THE DDL 
     DIRECTORY AND UNPACKED.
* 
NOTE : IF NO MORE AREAS REMAIN TO BE PROCESSED THEN THE 
  PROCEDURE SETS THE MODULE FLAG TO A VALUE OF END$STATUS.
  THE MODULE FLAG IS AREA$F.
* 
  C. THE PROCEDURE -NXTDCE- IS CALLED TO UNPACK THE 
     DATA CONTROL ENTRY FOR THE CURRENT AREA. 
# 
XDEF ITEM SATINDX I;         #INDEX IN SAT# 
     ITEM AENTWA U;          #SS ADDRESS OF AREA ENTRY# 
# 
# 
NXTAREA1: 
# 
# 
IF DNAT$PTR EQ 0
  THENB("FIRST TIME") 
  SETO("SELAPTR",SELAPTR,0) 
  NXTCTXT;  #READ IN NEXT CTXT ATOM GRP#
  SETI("DNAT$PTR",DNAT$PTR,STARTDNAT-1) #SET TO CREATE DATABASE SECTN#
  BLDDBFS; #BUILD DATABASE SECTION ENTRY# 
  SETI("DNAT$PTR",DNAT$PTR,STARTDNAT) #SET TO INITIAL PTRVAL# 
  SETI("SATINDX",SATINDX,1) 
  SETI("SSFIRSTIDNAT",SSFIRSTIDNAT,DNAT$PTR+3)  #1ST SS ITEM DNAT (FOL- 
                                                LOWS FD/LINAGE, REC)# 
  ELSEB("NOT FIRST TIME") 
DNAT$PTR=DNAT$PTR-1;
  IV$($SET$,"END DNAT$PTR",DNAT$PTR)
  IV$($SET$,"ENDDNAT",ENDDNAT)
  IF DNAT$PTR NQ ENDDNAT
    THENB("INCORRECT NO OF DNATS BUILT")
    XERR$(M3);
    ENDIF 
  SETI("SSLASTIDNAT",SSLASTIDNAT,ENDDNAT)  #LAST SS ITEM DNAT (SO FAR)# 
  NXTCTXT; #READ NEXT CTXT GROUP# 
  SETI("DNAT$PTR",DNAT$PTR,STARTDNAT) 
  SETI("SATINDX",SATINDX,SATINDX+1) 
ENDIF 
IF SELAPTR NQ 0 
  THENB("MORE AREAS TO PROCESS")
  SETO("RECLISTPTR",RECLISTPTR,0)  #INDICATE 1ST RECORD - NOTE -NXTREC-#
  SETO("SATSSAADDR",AENTWA,$G(SATSSAADDR,SAT$,SATINDX))  #AREA NTRY ADD#
  DA$GTSB(ARA,ARASIZE,AENTWA);  #READ SS AREA ENTRY#
  IF DASTATE NQ 0 
    THENB("AREA ENTRY READ ERROR")
    IERR$(L1,CONT); 
    SETI("DNAT$PTR",DNAT$PTR,ENDDNAT)  #PREVENT SUBSEQUENT M3 DIAG# 
    GOTO NXTAREA1;
  ENDIF 
      #UNPACK AREA ENTRY# 
      SETO("AWADCE",AWADCE,SBARDCONTRLA[1]) 
                   #WA OF DATA CONTROL ENTRY# 
      SETI("AORDINAL",AORDINAL,SBARORDINAL[1])
      SETI("ISOURCELINE",ISOURCELINE,SBARSRCLNEN[1])  #SS SOURCE LINE#
      NXTDCE;   #UNPACK DATA CONTROL ENTRY# 
      QUIT
ENDIF 
IF SATINDX NQ 1 
THENB("RESTORE SATINDX")
  SETI("SATINDX",SATINDX,SATINDX-1) 
ENDIF 
  SETI("AREA$F",AREA$F,END$STATUS)
NXTAREAX: 
CONTROL FI; 
FINIS("SELNEXTAREA")
TERM
