       C    1    1  {%pragma trace 1; debug_on;}
            1    2  program ESSAI_0;
            1    3  label et_stop;
            1    4  type real = single;
            1    5  var
            1    6    i, j, k: integer := 0;
       C    1    7  
            1    8  function err_hdl( ierr: cc__int ): cc__int;
            1    9  begin
     1      1   10    WRITELN( err, 'L''erreur # ', ierr, ' a ete detectee.' );
            1   11    goto et_stop;
            1   12    err_hdl := 1
 Ok for Entry : form_equv     , form_ennum     ->  ------        -> code = pcod_istore
     0      1   13  end err_hdl;
       C    1   14  
       C    1   15  
            1   16  function FAC( r$a: real ): real;
            1   17  begin
 Ok for Entry : form_single   ,  ------        -> form_single    -> code = pcod_fneg
 Ok for Entry : form_single   ,  ------        -> form_single    -> code = pcod_fabs
 Ok for Entry : form_single   , form_single    -> form_lit       -> code = pcod_flt
     1      1   18    if ABS(r$a - 1.0) < 0.1 then FAC := 1.0
 Ok for Entry : form_single   , form_single    ->  ------        -> code = pcod_fstore
 Ok for Entry : form_single   ,  ------        -> form_single    -> code = pcod_fneg
            1   19               else FAC := r$a*FAC( r$a - 1 )
 Ok for Entry : form_single   , form_single    -> form_single    -> code = pcod_fmul
 Ok for Entry : form_single   , form_single    ->  ------        -> code = pcod_fstore
     0      1   20  end FAC;
       C    1   21  
            1   22  begin { ESSAI_0 }
     1      1   23    ESTABLISH( err_hdl );
 Ok for Entry : form_equv     , form_ennum     ->  ------        -> code = pcod_istore
            1   24    j := 6;
            1   25  ETAA: ;
            1   26  ETBB:
            1   27    WRITE( "\n !n de 1 a ", j:0 );
 Ok for Entry : form_int      , form_int       -> form_lit       -> code = pcod_igt
            1   28    if j > 50 then WRITE( ' enfin si c''est possible !' );
            1   29    WRITELN;
 Ok for Entry : form_equv     , form_ennum     ->  ------        -> code = pcod_istore
            1   30    i := 1;
            1   31    loop
 Ok for Entry : form_int      ,  ------        -> form_single    -> code = pcod_cvif
     2      1   32      WRITELN( ' i = ', i:6, ', fac(i) =', FAC( REAL( i ) ):10:5 );
 Ok for Entry : form_int      , form_int       -> form_int       -> code = pcod_iadd
 Ok for Entry : form_equv     , form_ennum     ->  ------        -> code = pcod_istore
            1   33      i := i + 1;
 Ok for Entry : form_equv     , form_ennum     -> form_lit       -> code = pcod_eq
 Ok for Entry : form_equv     , form_ennum     -> form_lit       -> code = pcod_eq
 Ok for Entry : form_lit      , form_lit       -> form_lit       -> code = pcod_and
 Ok for Entry : form_int      , form_int       -> form_int       -> code = pcod_iadd
 Ok for Entry : form_equv     , form_ennum     ->  ------        -> code = pcod_istore
 Ok for Entry : form_equv     , form_ennum     ->  ------        -> code = pcod_istore
            1   34      if k = 0 and i = 7 then begin  k := k + 1; j := 4; goto ETAA  end;
 Ok for Entry : form_equv     , form_ennum     -> form_lit       -> code = pcod_eq
 Ok for Entry : form_equv     , form_ennum     -> form_lit       -> code = pcod_eq
 Ok for Entry : form_lit      , form_lit       -> form_lit       -> code = pcod_and
 Ok for Entry : form_int      , form_int       -> form_int       -> code = pcod_iadd
 Ok for Entry : form_equv     , form_ennum     ->  ------        -> code = pcod_istore
 Ok for Entry : form_equv     , form_ennum     ->  ------        -> code = pcod_istore
            1   35      if k = 1 and i = 5 then begin  k := k + 1; j := 499; goto ETBB  end;
 Ok for Entry : form_int      , form_int       -> form_lit       -> code = pcod_igt
            1   36    exit if i > 500;
     1      1   37    end { loop };
            1   38  et_stop:
       C    1   39  (*
       C    1   40  WRITELN( ' AU revoir' )
       C    1   41  *)
     0      1   42  end ESSAI_0.
            1   43  
/*  P A S - P. WOLFERS SOFTWARE: V3.1-B2 OF 30-JUN-2016 
  ***  PASCAL II implementation in C. *** */

/* Set specific Macro setting. */
#define CC_TYPE_SW short
#define CC_TYPE_SL   int
#define CC_TYPE_SQ  long long int

/* Include the PAS environment file. */
#include "/home/pierre/Soft/cpsh_kits/cpascal_src_V3.1B3/cpas_defs.h"

/* Define the local data section. */
static Blk( Rd, 176 ) = {
  7,   7, 101, 114, 114,  95, 104, 100, 108,  54,  54,  47, 104, 111, 109, 101,
 47, 112, 105, 101, 114, 114, 101,  47,  83, 111, 102, 116,  47,  99, 112, 115,
104,  95, 107, 105, 116, 115,  47,  99, 112,  97, 115,  99,  97, 108,  95, 115,
114,  99,  95,  86,  51,  46,  49,  66,  51,  47, 101, 115,  48,  46, 112,  97,
115,  11,  11,  76,  39, 101, 114, 114, 101, 117, 114,  32,  35,  32,  16,  16,
 32,  97,  32, 101, 116, 101,  32, 100, 101, 116, 101,  99, 116, 101, 101,  46,
  3,   3, 102,  97,  99,   7,   7, 101, 115, 115,  97, 105,  95,  48,  12,  12,
 10,  32,  33, 110,  32, 100, 101,  32,  49,  32,  97,  32,  26,  26,  32, 101,
110, 102, 105, 110,  32, 115, 105,  32,  99,  39, 101, 115, 116,  32, 112, 111,
115, 115, 105,  98, 108, 101,  32,  33,   5,   5,  32, 105,  32,  61,  32,  10,
 10,  44,  32, 102,  97,  99,  40, 105,  41,  32,  61,   0,   0,   0,   0,   0
};

/* Define the local static Initialized section. */
static Blk( Ri, 16 ) = {
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0
};

/* Define the local static section. */
static Blk( Rs, 32 );

static sigjmp_buf G_lb_env;

/* Declaration of external variables. */
extern V PAS__f_error;
extern V PAS__f_output;




/* Procedure/Function : " err_hdl "  */
SL ESSAI_0_err_hdl(SL F_ierr){
  /* Define the automatic variable space. */
  Blk( Ra, 32 );

  register SL Ret;

  /* Code of procedure/function */
  Ra.v[0]=PAS__curr_cntx;
  PAS__curr_cntx=Ra.s;
  Ra.v[1]=Rd.s;
  Ra.v[2]=Rd.s+9;
  Ra.sl[6]=10; /* line # 10 */
  PAS__SELECT_OUT(PAS__f_error);
  PAS__WRITE_STR(Rd.s+65,-1,-1,32);
  PAS__WRITE_INT(F_ierr,12,0);
  PAS__WRITE_STR(Rd.s+78,-1,-1,32);
  PAS__WRITE_EOLN();
  siglongjmp(G_lb_env,1);
  Ret=1;
  PAS__curr_cntx=Ra.v[0];
  return(Ret);
}


/* Procedure/Function : " fac "  */
F ESSAI_0_fac(F F_r_A){
  /* Define the automatic variable space. */
  Blk( Ra, 32 );

  register F Ret;

  /* Code of procedure/function */
  Ra.v[0]=PAS__curr_cntx;
  PAS__curr_cntx=Ra.s;
  Ra.v[1]=Rd.s+96;
  Ra.v[2]=Rd.s+9;
  Ra.sl[6]=18; /* line # 18 */
  if (fabs( -F_r_A)<(F)1.000000E-01) Ret=(F)1.000000E+00;
  else Ret=F_r_A*ESSAI_0_fac( -F_r_A);
  PAS__curr_cntx=Ra.v[0];
  return(Ret);
}


/* Procedure/Function : " essai_0 "  */
main( int argc, C * argv[], C * env[] ) {

  /* Code of procedure/function */
  PAS__INIT( argc, argv, env );
  if (sigsetjmp(G_lb_env, 1 )) goto L_l_0;

  Rs.v[0]=PAS__curr_cntx;
  PAS__curr_cntx=Rs.s;
  Rs.v[1]=Rd.s+101;
  Rs.v[2]=Rd.s+9;
  Rs.sl[6]=23; /* line # 23 */
  PAS__ESTABLISH(ESSAI_0_err_hdl);
  Ri.sl[0]=6;
L_l_1:
  ;
L_l_2:
  Rs.sl[6]=27; /* line # 27 */
  PAS__SELECT_OUT(PAS__f_output);
  PAS__WRITE_STR(Rd.s+110,-1,-1,32);
  PAS__WRITE_INT(Ri.sl[0],0,0);
  if (Ri.sl[0]>50) {
    PAS__SELECT_OUT(PAS__f_output);
    PAS__WRITE_STR(Rd.s+124,-1,-1,32);
  }
  PAS__SELECT_OUT(PAS__f_output);
  PAS__WRITE_EOLN();
  Ri.sl[1]=1;
  while (1){
    Rs.sl[6]=32; /* line # 32 */
    PAS__SELECT_OUT(PAS__f_output);
    PAS__WRITE_STR(Rd.s+152,-1,-1,32);
    PAS__WRITE_INT(Ri.sl[1],6,0);
    PAS__WRITE_STR(Rd.s+159,-1,-1,32);
    PAS__WRITE_SNGL(ESSAI_0_fac((float)Ri.sl[1]),10,5,0);
    PAS__WRITE_EOLN();
    Ri.sl[1]=Ri.sl[1]+1;
    if (Ri.sl[2]==0&&Ri.sl[1]==7) {
      Ri.sl[2]=Ri.sl[2]+1;
      Ri.sl[0]=4;
      goto L_l_1;
    }
    if (Ri.sl[2]==1&&Ri.sl[1]==5) {
      Ri.sl[2]=Ri.sl[2]+1;
      Ri.sl[0]=499;
      goto L_l_2;
    }
    if (Ri.sl[1]>500)  break;
  }
L_l_0:
  PAS__curr_cntx=Rs.s;
  Rs.sl[6]=42; /* line # 42 */
  PAS__curr_cntx=Rs.v[0];
  PAS__EXIT( 0 );
}
