!copyright (C) 2001  MSC-RPN COMM  %%%RPNPHY%%%
#include "nbvarsurf.cdk"
#include "dimsurf.cdk"

#define INIT_LOCBUS()\
do i=1,nvarsurf ~~\
   if (niveaux(i).gt.1) then ~~\
         quelnivo(i) = nk ~~\
   else if (mul(i).eq.1) then ~~\
      quelnivo(i) = 1 ~~\
   else if(mul(i).gt.1.and.(statut(i,1).eq.statut(i,mul(i)))) then ~~\
      quelnivo(i) = -1 ~~\
   else ~~\
      quelnivo(i) = indx_sfc ~~\
   endif ~~\
end do

#define LOCBUS(_POINTEUR_,_VAR_,_LVL_)\
if (_LVL_.le.0.or._LVL_.eq.quelnivo(_VAR_)) then ~~\
    if (quelnivo(_VAR_).gt.0) then ~~\
      _POINTEUR_ =  LOC(BUS(X(_VAR_,1,quelnivo(_VAR_)))) ~~\
    else ~~\
      write (6,'(1x,//,a,i6,a,a//)') \
      'UNDEFINED LEVEL AT LINE ',__LINE__,' IN FILE ', __FILE__~~\
      call qqexit(1) ~~\
    endif ~~\
else ~~\
    if (_LVL_.gt.0.and._LVL_.le.mul(_VAR_).and.indx_sfc.eq.statut(_VAR_,_LVL_)) then ~~\
       _POINTEUR_ = LOC(BUS(X(_VAR_,1,_LVL_))) ~~\
    else ~~\
       write (6,'(1x,//,a,i6,a,a//)') \
       'WRONG LEVEL AT LINE ',__LINE__,' IN FILE ', __FILE__~~\
       call qqexit(1) ~~\
    endif ~~\
endif