*DECK DBBASICD
USETEXT DBTEXT
USETEXT DNTEXT
PROC BASIC$D; 
*CALL DEBUGVARS 
*CALL DNATVALS
*CALL GETSET
*CALL TABLNAMES 
*CALL CTEXT 
*CALL CTXTVALS
START("BASIC$D")
ITEM CTTYPE U;
ITEM CTVALUE U; 
ITEM TEMP$LEVEL U;
ITEM TEMP$PTR U;
XREF BEGIN
ITEM CTEXTPTR U;
PROC CT$ADD;
PROC GETCTXT; 
PROC IERR$; 
END 
#THIS PROCEDURE BUILDS THE BASIC FIELDS IN THE DNAT.
BASIC, IN THIS CONTEXT, MEANS THOSE FIELDS WHICH DO NOT REQUIRE 
ANYTHING MORE THAN COPYING IN FROM THE DDL ENTRY. 
AN EXCEPTION IS THE PROCESSING OF 88 LEVEL ITEMS.  (THIS CODE IS ADDED
AS THE RESULT OF A PSR.  THIS CODE IS INCLUDED HERE, RATHER THAN AS A 
SEPARATE PROGRAM, TO AVOID A CHANGE TO -SKEL-.) 
ON ENTRY IT IS ASSUMED THAT DNAT$PTR POINTS TO THE CURRENT ENTRY
BEING BUILT.
A NEW ENTRY IS APPENDED TO THE CORRESPONDANCE TABLE.
# 
$S(DN$LEVEL,DNAT$,DNAT$PTR,ILEVEL); #ITEM LEVEL#
$S(DN$TERMPER,DNAT$,DNAT$PTR,1); #TERMINAL PERIOD#
$S(DN$MAJMSEC,DNAT$,DNAT$PTR,FDMSEC); #PRESET TO FD#
$S(DN$SUBMSEC,DNAT$,DNAT$PTR,AORDINAL); #SUB MSEC TO AREA ORDINAL#
$S(DN$POINT,DNAT$,DNAT$PTR,IDPLOC); #DECIMAL POINT# 
IF ISIGN NQ 0 
  THENB("SET PIC SIGN BIT") 
  $S(DN$PICSIGN,DNAT$,DNAT$PTR,1);
ENDIF 
$S(DN$SCHAR,DNAT$,DNAT$PTR,ISIGNSEP); #SEPARATE CHAR FOR SIGN#
$S(DN$SYNC,DNAT$,DNAT$PTR,ISYNC);  #SYNC# 
IF ISYNCL EQ 0
  AND 
  ISYNC NQ 0
  THENB ("SYNC RIGHT")
  $S(DN$SYNCRGHT,DNAT$,DNAT$PTR,1); #SET SYNC RIGHT BIT#
ENDIF 
IF (ITYPE EQ $ELEM OR ITYPE EQ $VECT OR ITYPE EQ $VECTRGRP
    OR ITYPE EQ $VECTV) 
  AND 
  IUSAGE NQ $UCOMP2 
  THENB("SIMULATE PIC CLAUSE")
  $S(DN$PICTURE,DNAT$,DNAT$PTR,1);
ENDIF 
IF ILEVEL EQ 88 
THENB("88 LEVEL ITEM")
  GETCTXT(CTDNDEF,CTVALUE,L21); 
  IF CTVALUE NQ DNAT$PTR
  THENB("CTEXT DNAT PTR ERROR") 
    IERR$(L21,ABORT); 
  ENDIF 
  $S(DN$88CPTR,DNAT$,DNAT$PTR,CTEXTPTR);  #CTEXT PTR OF 1ST 88 VALUE# 
                             #
                              SCAN DNAT (BACKWARDS) TO FIND CONDITIONAL 
                              VARIABLE TO WHICH 88 ITEM IS ASSOCIATED 
                             #
  SETI("TEMP$PTR",TEMP$PTR,DNAT$PTR)
  LOOP("UNTIL DOMINANT ITEM") 
    SETI("TEMP$PTR",TEMP$PTR,TEMP$PTR-1)
    SETI("TEMP$LEVEL",TEMP$LEVEL,$G(DN$LEVEL,DNAT$,TEMP$PTR)) 
    EXITIF(TEMP$LEVEL,LQ,49,"LEVEL 1 THRU 49 ITEM") 
    EXITIF(TEMP$LEVEL,EQ,77,"LEVEL 77 ITEM")
  ENDLOOP("DOMINANT ITEM FOUND")
  $S(DN$88DNREF,DNAT$,DNAT$PTR,TEMP$PTR);  #DNAT PTR OF COND. VARIABLE# 
                             #
                              SCAN CTEXT TO NEXT 88 LEVEL ITEM, OR
                              END OF AREA DNAT PTR
                             #
  LOOP("UNTIL 88 OR DNAT PTR")
    SETO("CTTYPE",CTTYPE,0) 
    GETCTXT(CTTYPE,CTVALUE,0);  #NEXT CTEXT ATOM TO -CTTYPE-# 
    EXITIF(CTTYPE,EQ,CTDNREF,"END OF AREA DNAT PTR")
    EXITIF(CTTYPE,EQ,CTDNDEF,"ANOTHER 88 ITEM") 
    SETI("CTEXTPTR",CTEXTPTR,CTEXTPTR+1)
  ENDLOOP("88 OR DNAT PTR FOUND") 
  IF CTTYPE EQ CTDNREF
  THENB("END OF AREA DNAT PTR") 
    GETCTXT(CTTYPE,ENDDNAT,L20);
  ENDIF 
ENDIF 
$S(DN$LINE,DNAT$,DNAT$PTR,ISOURCELINE);  #SAVE SUBSCHEMA LINE#
$S(DN$SUBSCHEMA,DNAT$,DNAT$PTR,1);  #SET SS SOURCE FLAG#
$S(DN$SSORD,DNAT$,DNAT$PTR,IORDINAL);  #SAVE SS ORDINAL#
$S(DN$SSMRKEY,DNAT$,DNAT$PTR,IMRKEY);  #NON-ZERO IF USABLE AS MAJOR/
                                        PARTIAL KEY#
CT$ADD; #ADD AUXT PTR INTO CORRESPONDANCE TABLE#
FINIS("BASIC$D")
TERM
