#WW $w:=$dd ##
-------------------------------------------------------
#G_INIT_GLOB
-- inicializaciq LAST per., krome glawn.prawila
/ $TABL := LAST #C $LAST_VARIABLES;
  GEN << '/* inicializaciq LAST-perem.*/';
  FORALL $X IN $TABL DO
        IF $X<> LAST #G_programma $imq_gl ->
           $VARS := $TABL .$X;
           $NOM := LAST #C $RULENUM .$X;
           FORALL $Y IN $VARS DO
                GEN<< @ glob $NOM '_' $VARS .$Y
                        '.sa=NULL;'
           OD
        FI
     OD /
##
-------------------------------------------------------
#GEN_ATOM_INITIALIZATION
--  generaciq procedury XCRG_N.PAS
-- priwqzka skompilirowannoj programmy k A -prostranstwu
$LISTACON $LISTACOP
/

  OPEN FF 'xcrga.h';

FF<<'/* Local variables for acon: */  ';
FF<<'struct LOC_acon {a k;allpacked r;} ;';

FF<<'Local Void uc(l, cn, dt, LINK)      ';
FF<<'long l, cn; char dt;                ';
FF<<'struct LOC_acon *LINK;              ';
FF<<'{  putatm(LINK->r.bl, l, &LINK->k); ';
FF<<'  mkatom(LINK->k, dt, &cnst[cn ].sa);}';

FF<<'Static Void acon()                 ';
FF<<'{  struct LOC_acon V;    mpd x;    ';
FF<<'  mainlistdescriptor *WITH;        ';

#ACON_LIST(' ' $LISTACON);  -- zapolnenie massiwa

-- sozdanie deskriptora spiska dliny 1
-- dlq wyzowa prawil s odnim argumentom


FF<<'  gets5(&cnst['#LEN( LAST #C $CONSTANT_LIST)+1'].sa, &x.sa);';
FF<<'  WITH = x.smld;  ';
FF<<'  WITH->dtype = listmain; ';
FF<<'  WITH->elnum = 1;        ';
FF<<'  WITH->totalelnum = 1;   ';
FF<<'  WITH->name = null_;     ';
FF<<'  WITH->next = null_;}    ';


FF<<'/* Local variables for acop: */    ';
FF<<'struct LOC_acop {  allpacked r;} ; ';

FF<<'Local Void uc_(l, cn, dt, LINK)    ';
FF<<'long l, cn; char dt;               ';
FF<<'struct LOC_acop *LINK;             ';
FF<<'{putatm(LINK->r.bl, l, &acnst[cn ]);}  ';


FF<<'Static Void acop()    ';
FF<<'{struct LOC_acop V;   ';

#ACON_LIST('_' $LISTACOP);  -- spisok

  FF << '}';
  CLOSE FF /
 ##


#ACON_LIST $MARK
  (. (* $E  / $I +:=1;
         $LEN := #LEN( $E);
IF $LEN=1->
  IF ($E='\')OR($E='''')->  FF<< @ 'V.r.p1=''\' $E ''';';
  ELSIF T-> FF<< @ 'V.r.p1=''' $E ''';';
  FI;
ELSIF T->     FF<<@'memcpy(V.r.p' $LEN ',' #CALL_PAS(116 $E) ',' $LEN 'L);';
FI;
IF #IDENT($E) -> $ID:=idatom ELSIF T-> $ID:=atom FI;
FF<<@'uc' $MARK '(' $LEN 'L,' $I 'L,' $ID ',&V);';
   / *) .)
   / RETURN $I / ##
----------------------------------------------------------------------
#G_COMMON_PART



/

  OPEN DDD 'xcrg.h';

DDD<<@ 'v cnst[' #LEN( LAST #C $CONSTANT_LIST)+2   '];';
DDD<<@ 'a acnst[' #LEN( LAST #C $A_CONSTANT_LIST)+1   '];';
FORALL $P IN LAST #C $LAST_VARIABLES DO
         $X:= LAST #C $LAST_VARIABLES .$P;
         FORALL $VAR IN $X DO
                  DDD<< @ 'v glob' LAST #C $RULENUM .$P '_'
                        $X. $VAR ';'
                OD OD ;
  $N:= #LEN( LAST #C $RULENUM);
  $U:= LAST #C $B[4];

  $X:=2;
   LOOP
     IF $X > $N -> BREAK FI;
     DDD<<@ 'extern Void r'   $X
          ' PP((long *rez, boolean *success, ptr_ *pl));';
     $X +:=1
   END;

 CLOSE DDD /
##






