/* gps.c */

/* generated by GNU MARST -- Algol-to-C Translator, Version 2.2 */

#include "algol.h"

extern struct desc main_program_0 /* program */ (void);

static struct desc GPS_3 /* local real procedure */
(     struct arg /* I: by name real */,
      struct arg /* N: by name real */,
      struct arg /* Z: by name real */,
      struct arg /* V: by name real */
);

static struct desc testmatr_8 /* local void procedure */
(     struct arg /* n: by value integer */,
      struct arg /* a: by name real array */
);

static struct desc invert140_8 /* local void procedure */
(     struct arg /* n: by value integer */,
      struct arg /* eps: by value real */,
      struct arg /* out: by name label */,
      struct arg /* a: by name real array */
);

static struct desc printmatrix_8 /* local void procedure */
(     struct arg /* name: by name string */,
      struct arg /* n: by value integer */,
      struct arg /* a: by name real array */
);

extern struct desc outstring_0 /* builtin void procedure */
(     struct arg /* channel: by value integer */,
      struct arg /* str: by name string */
);

extern struct desc outreal_0 /* builtin void procedure */
(     struct arg /* channel: by value integer */,
      struct arg /* re: by value real */
);

extern struct desc abs_0 /* builtin real procedure */
(     struct arg /* E: by value real */
);

extern struct desc outchar_0 /* builtin void procedure */
(     struct arg /* channel: by value integer */,
      struct arg /* str: by name string */,
      struct arg /* int: by value integer */
);

extern struct desc epsilon_0 /* builtin real procedure */ (void);

extern struct desc fault_0 /* builtin void procedure */
(     struct arg /* str: by name string */,
      struct arg /* r: by value real */
);

struct dsa_main_program_0
{     /* procedure main_program (level 0) declared at line 1 */
      char *proc;
      char *file;
      int line;
      struct dsa *parent;
      struct dsa *vector[0+1];
      /* level of innermost block = 4 */
      struct mem *old_top_0;
      struct mem *new_top_0;
      struct mem *old_top_1;
      struct mem *new_top_1;
      struct mem *old_top_2;
      struct mem *new_top_2;
      struct mem *old_top_3;
      struct mem *new_top_3;
      struct mem *old_top_4;
      struct mem *new_top_4;
      jmp_buf jump_4;
      /* procedure block 1 (level 0) beginning at line 1 */
      struct desc retval;
      /* local block 2 (level 1) beginning at line 1 */
      /* local block 3 (level 2) beginning at line 10 */
      /* GPS: real procedure
         declared at line 10 and first referenced at line 12 */
      /* firstexample: label
         declared at line 18 and never referenced */
      /* secondexample: label
         declared at line 34 and never referenced */
      /* local block 7 (level 3) beginning at line 20 */
      /* i: real
         declared at line 20 and first referenced at line 23 */
      double i_7;
      /* j: real
         declared at line 20 and first referenced at line 23 */
      double j_7;
      /* A: real array
         declared at line 21 and first referenced at line 23 */
      struct dv *A_7;
      /* local block 8 (level 3) beginning at line 37 */
      /* testmatr: procedure
         declared at line 37 and first referenced at line 90 */
      /* invert140: procedure
         declared at line 51 and first referenced at line 94 */
      /* printmatrix: procedure
         declared at line 69 and first referenced at line 91 */
      /* n: integer
         declared at line 83 and first referenced at line 84 */
      int n_8;
      /* local block 26 (level 4) beginning at line 88 */
      /* A: real array
         declared at line 88 and first referenced at line 90 */
      struct dv *A_26;
      /* B: real array
         declared at line 88 and first referenced at line 93 */
      struct dv *B_26;
      /* C: real array
         declared at line 88 and first referenced at line 99 */
      struct dv *C_26;
      /* i: integer
         declared at line 88 and first referenced at line 99 */
      int i_26;
      /* j: integer
         declared at line 88 and first referenced at line 99 */
      int j_26;
      /* k: integer
         declared at line 88 and first referenced at line 100 */
      int k_26;
      /* sing: label
         declared at line 96 and first referenced at line 94 */
      /* skip: label
         declared at line 97 and first referenced at line 95 */
};

struct dsa_GPS_3
{     /* procedure GPS (level 1) declared at line 10 */
      char *proc;
      char *file;
      int line;
      struct dsa *parent;
      struct dsa *vector[1+1];
      /* level of innermost block = 2 */
      struct mem *old_top_0;
      struct mem *new_top_0;
      struct mem *old_top_1;
      struct mem *new_top_1;
      struct mem *old_top_2;
      struct mem *new_top_2;
      /* procedure block 4 (level 0) beginning at line 10 */
      struct desc retval;
      /* I: by name real
         specified at line 10 and first referenced at line 11 */
      struct arg I_4;
      /* N: by name real
         specified at line 10 and first referenced at line 11 */
      struct arg N_4;
      /* Z: by name real
         specified at line 10 and first referenced at line 11 */
      struct arg Z_4;
      /* V: by name real
         specified at line 10 and first referenced at line 11 */
      struct arg V_4;
      /* local block 5 (level 1) beginning at line 11 */
      /* teta_r: real
         declared at line 11 and first referenced at line 11 */
      double teta_r_5;
      /* teta_i: integer
         declared at line 11 and first referenced at line 11 */
      int teta_i_5;
      /* local block 6 (level 2) beginning at line 11 */
};

struct dsa_testmatr_8
{     /* procedure testmatr (level 1) declared at line 37 */
      char *proc;
      char *file;
      int line;
      struct dsa *parent;
      struct dsa *vector[1+1];
      /* level of innermost block = 4 */
      struct mem *old_top_0;
      struct mem *new_top_0;
      struct mem *old_top_1;
      struct mem *new_top_1;
      struct mem *old_top_2;
      struct mem *new_top_2;
      struct mem *old_top_3;
      struct mem *new_top_3;
      struct mem *old_top_4;
      struct mem *new_top_4;
      /* procedure block 9 (level 0) beginning at line 37 */
      struct desc retval;
      /* n: by value integer
         specified at line 39 and first referenced at line 41 */
      int n_9;
      /* a: by name real array
         specified at line 39 and first referenced at line 42 */
      struct dv *a_9;
      /* local block 10 (level 1) beginning at line 40 */
      /* local block 11 (level 2) beginning at line 40 */
      /* c: real
         declared at line 40 and first referenced at line 41 */
      double c_11;
      /* d: real
         declared at line 40 and first referenced at line 42 */
      double d_11;
      /* i: integer
         declared at line 40 and first referenced at line 43 */
      int i_11;
      /* j: integer
         declared at line 40 and first referenced at line 46 */
      int j_11;
      /* teta_r: real
         declared at line 43 and first referenced at line 43 */
      double teta_r_11;
      /* teta_i: integer
         declared at line 43 and first referenced at line 43 */
      int teta_i_11;
      /* local block 12 (level 3) beginning at line 43 */
      /* teta_r: real
         declared at line 46 and first referenced at line 46 */
      double teta_r_12;
      /* teta_i: integer
         declared at line 46 and first referenced at line 46 */
      int teta_i_12;
      /* local block 13 (level 4) beginning at line 46 */
};

struct dsa_invert140_8
{     /* procedure invert140 (level 1) declared at line 51 */
      char *proc;
      char *file;
      int line;
      struct dsa *parent;
      struct dsa *vector[1+1];
      /* level of innermost block = 5 */
      struct mem *old_top_0;
      struct mem *new_top_0;
      struct mem *old_top_1;
      struct mem *new_top_1;
      struct mem *old_top_2;
      struct mem *new_top_2;
      struct mem *old_top_3;
      struct mem *new_top_3;
      struct mem *old_top_4;
      struct mem *new_top_4;
      struct mem *old_top_5;
      struct mem *new_top_5;
      /* procedure block 14 (level 0) beginning at line 51 */
      struct desc retval;
      /* n: by value integer
         specified at line 53 and first referenced at line 55 */
      int n_14;
      /* eps: by value real
         specified at line 53 and first referenced at line 57 */
      double eps_14;
      /* out: by name label
         specified at line 53 and first referenced at line 57 */
      struct arg out_14;
      /* a: by name real array
         specified at line 53 and first referenced at line 57 */
      struct dv *a_14;
      /* local block 15 (level 1) beginning at line 54 */
      /* local block 16 (level 2) beginning at line 54 */
      /* q: real
         declared at line 54 and first referenced at line 58 */
      double q_16;
      /* i: integer
         declared at line 54 and first referenced at line 55 */
      int i_16;
      /* j: integer
         declared at line 54 and first referenced at line 60 */
      int j_16;
      /* k: integer
         declared at line 54 and first referenced at line 59 */
      int k_16;
      /* teta_r: real
         declared at line 55 and first referenced at line 55 */
      double teta_r_16;
      /* teta_i: integer
         declared at line 55 and first referenced at line 55 */
      int teta_i_16;
      /* local block 17 (level 3) beginning at line 55 */
      /* teta_r: real
         declared at line 59 and first referenced at line 59 */
      double teta_r_17;
      /* teta_i: integer
         declared at line 59 and first referenced at line 59 */
      int teta_i_17;
      /* local block 18 (level 4) beginning at line 59 */
      /* local block 19 (level 4) beginning at line 60 */
      /* teta_r: real
         declared at line 63 and first referenced at line 63 */
      double teta_r_19;
      /* teta_i: integer
         declared at line 63 and first referenced at line 63 */
      int teta_i_19;
      /* local block 20 (level 5) beginning at line 63 */
};

struct dsa_printmatrix_8
{     /* procedure printmatrix (level 1) declared at line 69 */
      char *proc;
      char *file;
      int line;
      struct dsa *parent;
      struct dsa *vector[1+1];
      /* level of innermost block = 4 */
      struct mem *old_top_0;
      struct mem *new_top_0;
      struct mem *old_top_1;
      struct mem *new_top_1;
      struct mem *old_top_2;
      struct mem *new_top_2;
      struct mem *old_top_3;
      struct mem *new_top_3;
      struct mem *old_top_4;
      struct mem *new_top_4;
      /* procedure block 21 (level 0) beginning at line 69 */
      struct desc retval;
      /* name: by name string
         specified at line 70 and first referenced at line 73 */
      char *name_21;
      /* n: by value integer
         specified at line 70 and first referenced at line 75 */
      int n_21;
      /* a: by name real array
         specified at line 70 and first referenced at line 77 */
      struct dv *a_21;
      /* local block 22 (level 1) beginning at line 71 */
      /* local block 23 (level 2) beginning at line 71 */
      /* i: integer
         declared at line 71 and first referenced at line 75 */
      int i_23;
      /* j: integer
         declared at line 71 and first referenced at line 76 */
      int j_23;
      /* teta_r: real
         declared at line 75 and first referenced at line 75 */
      double teta_r_23;
      /* teta_i: integer
         declared at line 75 and first referenced at line 75 */
      int teta_i_23;
      /* local block 24 (level 3) beginning at line 75 */
      /* teta_r: real
         declared at line 76 and first referenced at line 76 */
      double teta_r_24;
      /* teta_i: integer
         declared at line 76 and first referenced at line 76 */
      int teta_i_24;
      /* local block 25 (level 4) beginning at line 76 */
};

static void _sigma_1(void)
{     /* statement following 'do' at line 11 */
      register struct dsa_GPS_3 *dsa_1 = (void *)global_dsa->vector[1];
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      /* start of local block 6 (level 2) at line 11 */
      dsa_1->old_top_2 = stack_top;
      dsa_1->new_top_2 = stack_top;
      dsa_1->line = 11;
      set_real((global_dsa = dsa_1->Z_4.arg2, (*(struct desc (*)(void))
         dsa_1->Z_4.arg1)()), get_real((global_dsa = dsa_1->V_4.arg2, (
         *(struct desc (*)(void))dsa_1->V_4.arg1)())));
      pop_stack(dsa_1->old_top_2);
      /* end of block 6 */
      return;
}

struct desc GPS_3 /* local real procedure */
(     struct arg I_4 /* by name real */,
      struct arg N_4 /* by name real */,
      struct arg Z_4 /* by name real */,
      struct arg V_4 /* by name real */
)
{     struct dsa_GPS_3 my_dsa;
      register struct dsa_GPS_3 *dsa_1 = &my_dsa;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      my_dsa.proc = "GPS";
      my_dsa.file = "gps.alg";
      my_dsa.line = 10;
      my_dsa.parent = active_dsa, active_dsa = (struct dsa *)&my_dsa;
      my_dsa.vector[0] = (void *)dsa_0;
      my_dsa.vector[1] = (void *)dsa_1;
      /* start of procedure block 4 (level 0) at line 10 */
      dsa_1->old_top_0 = stack_top;
      my_dsa.I_4 = I_4;
      my_dsa.N_4 = N_4;
      my_dsa.Z_4 = Z_4;
      my_dsa.V_4 = V_4;
      dsa_1->new_top_0 = stack_top;
      /* start of local block 5 (level 1) at line 11 */
      dsa_1->old_top_1 = stack_top;
      dsa_1->new_top_1 = stack_top;
      dsa_1->line = 11;
      dsa_1->line = 11;
      dsa_1->line = 11;
      set_real((global_dsa = dsa_1->I_4.arg2, (*(struct desc (*)(void))
         dsa_1->I_4.arg1)()), int2real(1));
      dsa_1->teta_i_5 = 1;
_gamma_1:
      dsa_1->line = 11;
      if ((get_real((global_dsa = dsa_1->I_4.arg2, (*(struct desc (*)(
         void))dsa_1->I_4.arg1)())) - (get_real((global_dsa = 
         dsa_1->N_4.arg2, (*(struct desc (*)(void))dsa_1->N_4.arg1)())))
         ) * (double)(dsa_1->teta_i_5 < 0 ? -1 : dsa_1->teta_i_5 > 0 ? 
         +1 : 0) > 0.0) goto _omega_1;
      global_dsa = (void *)dsa_1, _sigma_1();
      set_real((global_dsa = dsa_1->I_4.arg2, (*(struct desc (*)(void))
         dsa_1->I_4.arg1)()), int2real(dsa_1->teta_i_5) + get_real((
         global_dsa = dsa_1->I_4.arg2, (*(struct desc (*)(void))
         dsa_1->I_4.arg1)())));
      goto _gamma_1;
_omega_1: /* element exhausted */
      dsa_1->line = 12;
      dsa_1->retval.u.real_val = int2real(1);
      pop_stack(dsa_1->old_top_1);
      /* end of block 5 */
      pop_stack(dsa_1->old_top_0);
      /* end of block 4 */
      my_dsa.retval.lval = 0;
      my_dsa.retval.type = 'r';
      active_dsa = my_dsa.parent;
      return my_dsa.retval;
}

static struct desc _thunk_1(void)
{     /* actual parameter at line 22 */
      struct desc res;
      res.lval = 0;
      res.type = 'i';
      res.u.int_val = 1;
      return res;
}

static struct desc _thunk_2(void)
{     /* actual parameter at line 23 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 23;
      res.lval = 1;
      res.type = 'r';
      res.u.real_ptr = &(dsa_0->j_7);
      return res;
}

static struct desc _thunk_3(void)
{     /* actual parameter at line 23 */
      struct desc res;
      res.lval = 0;
      res.type = 'r';
      res.u.real_val = 3.0;
      return res;
}

static struct desc _thunk_4(void)
{     /* actual parameter at line 23 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 23;
      res.lval = 1;
      res.type = 'r';
      res.u.real_ptr = &(dsa_0->i_7);
      return res;
}

static struct desc _thunk_5(void)
{     /* actual parameter at line 23 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 23;
      res.lval = 1;
      res.type = 'r';
      res.u.real_ptr = &(dsa_0->i_7);
      return res;
}

static struct desc _thunk_6(void)
{     /* actual parameter at line 23 */
      struct desc res;
      res.lval = 0;
      res.type = 'r';
      res.u.real_val = 2.0;
      return res;
}

static struct desc _thunk_7(void)
{     /* actual parameter at line 23 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 23;
      res.lval = 1;
      res.type = 'r';
      res.u.real_ptr = &((*loc_real(dsa_0->A_7, 2, real2int(dsa_0->i_7),
          real2int(dsa_0->j_7))));
      return res;
}

static struct desc _thunk_8(void)
{     /* actual parameter at line 23 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 23;
      res.lval = 0;
      res.type = 'r';
      res.u.real_val = dsa_0->i_7 + dsa_0->j_7;
      return res;
}

static struct desc _thunk_9(void)
{     /* actual parameter at line 23 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 23;
      res.lval = 0;
      res.type = 'r';
      res.u.real_val = get_real((global_dsa = (void *)dsa_0, GPS_3(
         make_arg((void *)_thunk_5, dsa_0), make_arg((void *)_thunk_6, 
         dsa_0), make_arg((void *)_thunk_7, dsa_0), make_arg((void *)
         _thunk_8, dsa_0))));
      return res;
}

static struct desc _thunk_10(void)
{     /* actual parameter at line 25 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 25;
      res.lval = 1;
      res.type = 'r';
      res.u.real_ptr = &((*loc_real(dsa_0->A_7, 2, 1, 1)));
      return res;
}

static struct desc _thunk_11(void)
{     /* actual parameter at line 25 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 25;
      res.lval = 1;
      res.type = 'r';
      res.u.real_ptr = &((*loc_real(dsa_0->A_7, 2, 1, 2)));
      return res;
}

static struct desc _thunk_12(void)
{     /* actual parameter at line 25 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 25;
      res.lval = 1;
      res.type = 'r';
      res.u.real_ptr = &((*loc_real(dsa_0->A_7, 2, 1, 3)));
      return res;
}

static struct desc _thunk_13(void)
{     /* actual parameter at line 27 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 27;
      res.lval = 1;
      res.type = 'r';
      res.u.real_ptr = &((*loc_real(dsa_0->A_7, 2, 2, 1)));
      return res;
}

static struct desc _thunk_14(void)
{     /* actual parameter at line 27 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 27;
      res.lval = 1;
      res.type = 'r';
      res.u.real_ptr = &((*loc_real(dsa_0->A_7, 2, 2, 2)));
      return res;
}

static struct desc _thunk_15(void)
{     /* actual parameter at line 27 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 27;
      res.lval = 1;
      res.type = 'r';
      res.u.real_ptr = &((*loc_real(dsa_0->A_7, 2, 2, 3)));
      return res;
}

static void _sigma_3(void)
{     /* statement following 'do' at line 46 */
      register struct dsa_testmatr_8 *dsa_1 = (void *)
         global_dsa->vector[1];
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      /* start of local block 13 (level 4) at line 46 */
      dsa_1->old_top_4 = stack_top;
      dsa_1->new_top_4 = stack_top;
      dsa_1->line = 47;
      (*loc_real(dsa_1->a_9, 2, dsa_1->i_11, dsa_1->j_11)) = (*loc_real(
         dsa_1->a_9, 2, dsa_1->j_11, dsa_1->i_11)) = -dsa_1->d_11 * 
         int2real(dsa_1->i_11) * int2real(dsa_1->j_11);
      pop_stack(dsa_1->old_top_4);
      /* end of block 13 */
      return;
}

static void _sigma_2(void)
{     /* statement following 'do' at line 43 */
      register struct dsa_testmatr_8 *dsa_1 = (void *)
         global_dsa->vector[1];
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      /* start of local block 12 (level 3) at line 43 */
      dsa_1->old_top_3 = stack_top;
      dsa_1->new_top_3 = stack_top;
      dsa_1->line = 44;
      dsa_1->line = 44;
      (*loc_real(dsa_1->a_9, 2, dsa_1->i_11, dsa_1->n_9)) = (*loc_real(
         dsa_1->a_9, 2, dsa_1->n_9, dsa_1->i_11)) = dsa_1->d_11 * 
         int2real(dsa_1->i_11);
      dsa_1->line = 45;
      (*loc_real(dsa_1->a_9, 2, dsa_1->i_11, dsa_1->i_11)) = 
         dsa_1->d_11 * (dsa_1->c_11 - int2real(expi(dsa_1->i_11, 2)));
      dsa_1->line = 46;
      dsa_1->line = 46;
      dsa_1->j_11 = 1;
      dsa_1->teta_i_12 = 1;
_gamma_3:
      dsa_1->line = 46;
      if ((dsa_1->j_11 - (dsa_1->i_11 - 1)) * (dsa_1->teta_i_12 < 0 ? 
         -1 : dsa_1->teta_i_12 > 0 ? +1 : 0) > 0) goto _omega_3;
      global_dsa = (void *)dsa_1, _sigma_3();
      dsa_1->j_11 = dsa_1->teta_i_12 + dsa_1->j_11;
      goto _gamma_3;
_omega_3: /* element exhausted */
      pop_stack(dsa_1->old_top_3);
      /* end of block 12 */
      return;
}

struct desc testmatr_8 /* local void procedure */
(     struct arg n_9 /* by value integer */,
      struct arg a_9 /* by name real array */
)
{     struct dsa_testmatr_8 my_dsa;
      register struct dsa_testmatr_8 *dsa_1 = &my_dsa;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      my_dsa.proc = "testmatr";
      my_dsa.file = "gps.alg";
      my_dsa.line = 37;
      my_dsa.parent = active_dsa, active_dsa = (struct dsa *)&my_dsa;
      my_dsa.vector[0] = (void *)dsa_0;
      my_dsa.vector[1] = (void *)dsa_1;
      /* start of procedure block 9 (level 0) at line 37 */
      dsa_1->old_top_0 = stack_top;
      my_dsa.line = 39;
      my_dsa.n_9 = get_int((global_dsa = n_9.arg2, (*(struct desc (*)(
         void))n_9.arg1)()));
      my_dsa.a_9 = a_9.arg1;
      dsa_1->new_top_0 = stack_top;
      /* start of local block 10 (level 1) at line 40 */
      dsa_1->old_top_1 = stack_top;
      dsa_1->new_top_1 = stack_top;
      dsa_1->line = 40;
      /* start of local block 11 (level 2) at line 40 */
      dsa_1->old_top_2 = stack_top;
      dsa_1->new_top_2 = stack_top;
      dsa_1->line = 41;
      dsa_1->c_11 = int2real(dsa_1->n_9 * (dsa_1->n_9 + 1) * (2 * 
         dsa_1->n_9 - 5)) / int2real(6);
      dsa_1->line = 42;
      dsa_1->d_11 = int2real(1) / dsa_1->c_11;
      dsa_1->line = 42;
      (*loc_real(dsa_1->a_9, 2, dsa_1->n_9, dsa_1->n_9)) = -dsa_1->d_11;
      dsa_1->line = 43;
      dsa_1->line = 43;
      dsa_1->i_11 = 1;
      dsa_1->teta_i_11 = 1;
_gamma_2:
      dsa_1->line = 43;
      if ((dsa_1->i_11 - (dsa_1->n_9 - 1)) * (dsa_1->teta_i_11 < 0 ? -1 
         : dsa_1->teta_i_11 > 0 ? +1 : 0) > 0) goto _omega_2;
      global_dsa = (void *)dsa_1, _sigma_2();
      dsa_1->i_11 = dsa_1->teta_i_11 + dsa_1->i_11;
      goto _gamma_2;
_omega_2: /* element exhausted */
      pop_stack(dsa_1->old_top_2);
      /* end of block 11 */
      pop_stack(dsa_1->old_top_1);
      /* end of block 10 */
      pop_stack(dsa_1->old_top_0);
      /* end of block 9 */
      my_dsa.retval.lval = 0;
      my_dsa.retval.type = 0;
      active_dsa = my_dsa.parent;
      return my_dsa.retval;
}

static struct desc _thunk_16(void)
{     /* actual parameter at line 57 */
      struct desc res;
      register struct dsa_invert140_8 *dsa_1 = (void *)
         global_dsa->vector[1];
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_1->line = 57;
      res.lval = 1;
      res.type = 'r';
      res.u.real_ptr = &((*loc_real(dsa_1->a_14, 2, dsa_1->i_16, 
         dsa_1->i_16)));
      return res;
}

static void _sigma_5(void)
{     /* statement following 'do' at line 59 */
      register struct dsa_invert140_8 *dsa_1 = (void *)
         global_dsa->vector[1];
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      /* start of local block 18 (level 4) at line 59 */
      dsa_1->old_top_4 = stack_top;
      dsa_1->new_top_4 = stack_top;
      dsa_1->line = 59;
      (*loc_real(dsa_1->a_14, 2, dsa_1->i_16, dsa_1->k_16)) = (
         *loc_real(dsa_1->a_14, 2, dsa_1->i_16, dsa_1->k_16)) * 
         dsa_1->q_16;
      pop_stack(dsa_1->old_top_4);
      /* end of block 18 */
      return;
}

static void _sigma_7(void)
{     /* statement following 'do' at line 63 */
      register struct dsa_invert140_8 *dsa_1 = (void *)
         global_dsa->vector[1];
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      /* start of local block 20 (level 5) at line 63 */
      dsa_1->old_top_5 = stack_top;
      dsa_1->new_top_5 = stack_top;
      dsa_1->line = 64;
      (*loc_real(dsa_1->a_14, 2, dsa_1->j_16, dsa_1->k_16)) = (
         *loc_real(dsa_1->a_14, 2, dsa_1->j_16, dsa_1->k_16)) - 
         dsa_1->q_16 * (*loc_real(dsa_1->a_14, 2, dsa_1->i_16, 
         dsa_1->k_16));
      pop_stack(dsa_1->old_top_5);
      /* end of block 20 */
      return;
}

static void _sigma_6(void)
{     /* statement following 'do' at line 60 */
      register struct dsa_invert140_8 *dsa_1 = (void *)
         global_dsa->vector[1];
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      /* start of local block 19 (level 4) at line 60 */
      dsa_1->old_top_4 = stack_top;
      dsa_1->new_top_4 = stack_top;
      dsa_1->line = 61;
      if (!(notequal(dsa_1->i_16, dsa_1->j_16))) goto _omega_9;
      dsa_1->line = 62;
      dsa_1->line = 62;
      dsa_1->q_16 = (*loc_real(dsa_1->a_14, 2, dsa_1->j_16, dsa_1->i_16)
         );
      dsa_1->line = 62;
      (*loc_real(dsa_1->a_14, 2, dsa_1->j_16, dsa_1->i_16)) = int2real(
         0);
      dsa_1->line = 63;
      dsa_1->line = 63;
      dsa_1->k_16 = 1;
      dsa_1->teta_i_19 = 1;
_gamma_8:
      dsa_1->line = 63;
      if ((dsa_1->k_16 - (dsa_1->n_14)) * (dsa_1->teta_i_19 < 0 ? -1 : 
         dsa_1->teta_i_19 > 0 ? +1 : 0) > 0) goto _omega_8;
      global_dsa = (void *)dsa_1, _sigma_7();
      dsa_1->k_16 = dsa_1->teta_i_19 + dsa_1->k_16;
      goto _gamma_8;
_omega_8: /* element exhausted */
_omega_9:
      pop_stack(dsa_1->old_top_4);
      /* end of block 19 */
      return;
}

static void _sigma_4(void)
{     /* statement following 'do' at line 55 */
      register struct dsa_invert140_8 *dsa_1 = (void *)
         global_dsa->vector[1];
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      /* start of local block 17 (level 3) at line 55 */
      dsa_1->old_top_3 = stack_top;
      dsa_1->new_top_3 = stack_top;
      dsa_1->line = 56;
      dsa_1->line = 57;
      if (!(notgreater(get_real((global_dsa = (void *)dsa_1, abs_0(
         make_arg((void *)_thunk_16, dsa_1)))), dsa_1->eps_14))) goto 
         _omega_5;
      dsa_1->line = 57;
      go_to(get_label((global_dsa = dsa_1->out_14.arg2, (*(struct desc (
         *)(void))dsa_1->out_14.arg1)())));
_omega_5:
      dsa_1->line = 58;
      dsa_1->q_16 = int2real(1) / (*loc_real(dsa_1->a_14, 2, 
         dsa_1->i_16, dsa_1->i_16));
      dsa_1->line = 58;
      (*loc_real(dsa_1->a_14, 2, dsa_1->i_16, dsa_1->i_16)) = int2real(
         1);
      dsa_1->line = 59;
      dsa_1->line = 59;
      dsa_1->k_16 = 1;
      dsa_1->teta_i_17 = 1;
_gamma_6:
      dsa_1->line = 59;
      if ((dsa_1->k_16 - (dsa_1->n_14)) * (dsa_1->teta_i_17 < 0 ? -1 : 
         dsa_1->teta_i_17 > 0 ? +1 : 0) > 0) goto _omega_6;
      global_dsa = (void *)dsa_1, _sigma_5();
      dsa_1->k_16 = dsa_1->teta_i_17 + dsa_1->k_16;
      goto _gamma_6;
_omega_6: /* element exhausted */
      dsa_1->line = 60;
      dsa_1->line = 60;
      dsa_1->j_16 = 1;
      dsa_1->teta_i_17 = 1;
_gamma_7:
      dsa_1->line = 60;
      if ((dsa_1->j_16 - (dsa_1->n_14)) * (dsa_1->teta_i_17 < 0 ? -1 : 
         dsa_1->teta_i_17 > 0 ? +1 : 0) > 0) goto _omega_7;
      global_dsa = (void *)dsa_1, _sigma_6();
      dsa_1->j_16 = dsa_1->teta_i_17 + dsa_1->j_16;
      goto _gamma_7;
_omega_7: /* element exhausted */
      pop_stack(dsa_1->old_top_3);
      /* end of block 17 */
      return;
}

struct desc invert140_8 /* local void procedure */
(     struct arg n_14 /* by value integer */,
      struct arg eps_14 /* by value real */,
      struct arg out_14 /* by name label */,
      struct arg a_14 /* by name real array */
)
{     struct dsa_invert140_8 my_dsa;
      register struct dsa_invert140_8 *dsa_1 = &my_dsa;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      my_dsa.proc = "invert140";
      my_dsa.file = "gps.alg";
      my_dsa.line = 51;
      my_dsa.parent = active_dsa, active_dsa = (struct dsa *)&my_dsa;
      my_dsa.vector[0] = (void *)dsa_0;
      my_dsa.vector[1] = (void *)dsa_1;
      /* start of procedure block 14 (level 0) at line 51 */
      dsa_1->old_top_0 = stack_top;
      my_dsa.line = 53;
      my_dsa.n_14 = get_int((global_dsa = n_14.arg2, (*(struct desc (*)(
         void))n_14.arg1)()));
      my_dsa.line = 53;
      my_dsa.eps_14 = get_real((global_dsa = eps_14.arg2, (*(struct 
         desc (*)(void))eps_14.arg1)()));
      my_dsa.out_14 = out_14;
      my_dsa.a_14 = a_14.arg1;
      dsa_1->new_top_0 = stack_top;
      /* start of local block 15 (level 1) at line 54 */
      dsa_1->old_top_1 = stack_top;
      dsa_1->new_top_1 = stack_top;
      dsa_1->line = 54;
      /* start of local block 16 (level 2) at line 54 */
      dsa_1->old_top_2 = stack_top;
      dsa_1->new_top_2 = stack_top;
      dsa_1->line = 55;
      dsa_1->line = 55;
      dsa_1->i_16 = 1;
      dsa_1->teta_i_16 = 1;
_gamma_4:
      dsa_1->line = 55;
      if ((dsa_1->i_16 - (dsa_1->n_14)) * (dsa_1->teta_i_16 < 0 ? -1 : 
         dsa_1->teta_i_16 > 0 ? +1 : 0) > 0) goto _omega_4;
      global_dsa = (void *)dsa_1, _sigma_4();
      dsa_1->i_16 = dsa_1->teta_i_16 + dsa_1->i_16;
      goto _gamma_4;
_omega_4: /* element exhausted */
      pop_stack(dsa_1->old_top_2);
      /* end of block 16 */
      pop_stack(dsa_1->old_top_1);
      /* end of block 15 */
      pop_stack(dsa_1->old_top_0);
      /* end of block 14 */
      my_dsa.retval.lval = 0;
      my_dsa.retval.type = 0;
      active_dsa = my_dsa.parent;
      return my_dsa.retval;
}

static struct desc _thunk_17(void)
{     /* actual parameter at line 77 */
      struct desc res;
      register struct dsa_printmatrix_8 *dsa_1 = (void *)
         global_dsa->vector[1];
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_1->line = 77;
      res.lval = 1;
      res.type = 'r';
      res.u.real_ptr = &((*loc_real(dsa_1->a_21, 2, dsa_1->i_23, 
         dsa_1->j_23)));
      return res;
}

static struct desc _thunk_18(void)
{     /* actual parameter at line 77 */
      struct desc res;
      register struct dsa_printmatrix_8 *dsa_1 = (void *)
         global_dsa->vector[1];
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_1->line = 77;
      res.lval = 0;
      res.type = 'r';
      res.u.real_val = ((less(get_real((global_dsa = (void *)dsa_1, 
         abs_0(make_arg((void *)_thunk_17, dsa_1)))), 1e-12)) ? (
         int2real(0)) : ((*loc_real(dsa_1->a_21, 2, dsa_1->i_23, 
         dsa_1->j_23))));
      return res;
}

static void _sigma_9(void)
{     /* statement following 'do' at line 76 */
      register struct dsa_printmatrix_8 *dsa_1 = (void *)
         global_dsa->vector[1];
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      /* start of local block 25 (level 4) at line 76 */
      dsa_1->old_top_4 = stack_top;
      dsa_1->new_top_4 = stack_top;
      dsa_1->line = 77;
      ((global_dsa = (void *)dsa_1, outreal_0(make_arg((void *)_thunk_1,
          dsa_1), make_arg((void *)_thunk_18, dsa_1))));
      pop_stack(dsa_1->old_top_4);
      /* end of block 25 */
      return;
}

static void _sigma_8(void)
{     /* statement following 'do' at line 75 */
      register struct dsa_printmatrix_8 *dsa_1 = (void *)
         global_dsa->vector[1];
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      /* start of local block 24 (level 3) at line 75 */
      dsa_1->old_top_3 = stack_top;
      dsa_1->new_top_3 = stack_top;
      dsa_1->line = 76;
      dsa_1->line = 76;
      dsa_1->line = 76;
      dsa_1->j_23 = 1;
      dsa_1->teta_i_24 = 1;
_gamma_11:
      dsa_1->line = 76;
      if ((dsa_1->j_23 - (dsa_1->n_21)) * (dsa_1->teta_i_24 < 0 ? -1 : 
         dsa_1->teta_i_24 > 0 ? +1 : 0) > 0) goto _omega_11;
      global_dsa = (void *)dsa_1, _sigma_9();
      dsa_1->j_23 = dsa_1->teta_i_24 + dsa_1->j_23;
      goto _gamma_11;
_omega_11: /* element exhausted */
      dsa_1->line = 78;
      ((global_dsa = (void *)dsa_1, outchar_0(make_arg((void *)_thunk_1,
          dsa_1), make_arg("\n", NULL), make_arg((void *)_thunk_1, 
         dsa_1))));
      pop_stack(dsa_1->old_top_3);
      /* end of block 24 */
      return;
}

struct desc printmatrix_8 /* local void procedure */
(     struct arg name_21 /* by name string */,
      struct arg n_21 /* by value integer */,
      struct arg a_21 /* by name real array */
)
{     struct dsa_printmatrix_8 my_dsa;
      register struct dsa_printmatrix_8 *dsa_1 = &my_dsa;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      my_dsa.proc = "printmatrix";
      my_dsa.file = "gps.alg";
      my_dsa.line = 69;
      my_dsa.parent = active_dsa, active_dsa = (struct dsa *)&my_dsa;
      my_dsa.vector[0] = (void *)dsa_0;
      my_dsa.vector[1] = (void *)dsa_1;
      /* start of procedure block 21 (level 0) at line 69 */
      dsa_1->old_top_0 = stack_top;
      my_dsa.name_21 = name_21.arg1;
      my_dsa.line = 70;
      my_dsa.n_21 = get_int((global_dsa = n_21.arg2, (*(struct desc (*)(
         void))n_21.arg1)()));
      my_dsa.a_21 = a_21.arg1;
      dsa_1->new_top_0 = stack_top;
      /* start of local block 22 (level 1) at line 71 */
      dsa_1->old_top_1 = stack_top;
      dsa_1->new_top_1 = stack_top;
      dsa_1->line = 71;
      /* start of local block 23 (level 2) at line 71 */
      dsa_1->old_top_2 = stack_top;
      dsa_1->new_top_2 = stack_top;
      dsa_1->line = 72;
      ((global_dsa = (void *)dsa_1, outstring_0(make_arg((void *)
         _thunk_1, dsa_1), make_arg("Matrix ", NULL))));
      dsa_1->line = 73;
      ((global_dsa = (void *)dsa_1, outstring_0(make_arg((void *)
         _thunk_1, dsa_1), make_arg(dsa_1->name_21, NULL))));
      dsa_1->line = 74;
      ((global_dsa = (void *)dsa_1, outstring_0(make_arg((void *)
         _thunk_1, dsa_1), make_arg(":\n", NULL))));
      dsa_1->line = 75;
      dsa_1->line = 75;
      dsa_1->i_23 = 1;
      dsa_1->teta_i_23 = 1;
_gamma_10:
      dsa_1->line = 75;
      if ((dsa_1->i_23 - (dsa_1->n_21)) * (dsa_1->teta_i_23 < 0 ? -1 : 
         dsa_1->teta_i_23 > 0 ? +1 : 0) > 0) goto _omega_10;
      global_dsa = (void *)dsa_1, _sigma_8();
      dsa_1->i_23 = dsa_1->teta_i_23 + dsa_1->i_23;
      goto _gamma_10;
_omega_10: /* element exhausted */
      pop_stack(dsa_1->old_top_2);
      /* end of block 23 */
      pop_stack(dsa_1->old_top_1);
      /* end of block 22 */
      pop_stack(dsa_1->old_top_0);
      /* end of block 21 */
      my_dsa.retval.lval = 0;
      my_dsa.retval.type = 0;
      active_dsa = my_dsa.parent;
      return my_dsa.retval;
}

static struct desc _thunk_19(void)
{     /* actual parameter at line 90 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 90;
      res.lval = 1;
      res.type = 'i';
      res.u.int_ptr = &(dsa_0->n_8);
      return res;
}

static struct desc _thunk_20(void)
{     /* actual parameter at line 91 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 91;
      res.lval = 1;
      res.type = 'i';
      res.u.int_ptr = &(dsa_0->n_8);
      return res;
}

static struct desc _thunk_21(void)
{     /* actual parameter at line 93 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 93;
      res.lval = 1;
      res.type = 'i';
      res.u.int_ptr = &(dsa_0->n_8);
      return res;
}

static struct desc _thunk_22(void)
{     /* actual parameter at line 94 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 94;
      res.lval = 1;
      res.type = 'i';
      res.u.int_ptr = &(dsa_0->n_8);
      return res;
}

static struct desc _thunk_23(void)
{     /* actual parameter at line 94 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 94;
      res.lval = 0;
      res.type = 'l';
      res.u.label = make_label(dsa_0->jump_4, 1);
      return res;
}

static struct desc _thunk_24(void)
{     /* actual parameter at line 96 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 96;
      res.lval = 1;
      res.type = 'i';
      res.u.int_ptr = &(dsa_0->n_8);
      return res;
}

static struct desc _thunk_25(void)
{     /* actual parameter at line 97 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 97;
      res.lval = 1;
      res.type = 'i';
      res.u.int_ptr = &(dsa_0->n_8);
      return res;
}

static struct desc _thunk_26(void)
{     /* actual parameter at line 99 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 99;
      res.lval = 1;
      res.type = 'i';
      res.u.int_ptr = &(dsa_0->i_26);
      return res;
}

static struct desc _thunk_27(void)
{     /* actual parameter at line 99 */
      struct desc res;
      res.lval = 0;
      res.type = 'r';
      res.u.real_val = 1.0;
      return res;
}

static struct desc _thunk_28(void)
{     /* actual parameter at line 99 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 99;
      res.lval = 1;
      res.type = 'r';
      res.u.real_ptr = &((*loc_real(dsa_0->C_26, 2, 1, 1)));
      return res;
}

static struct desc _thunk_29(void)
{     /* actual parameter at line 99 */
      struct desc res;
      res.lval = 0;
      res.type = 'r';
      res.u.real_val = .0;
      return res;
}

static struct desc _thunk_30(void)
{     /* actual parameter at line 99 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 99;
      res.lval = 1;
      res.type = 'i';
      res.u.int_ptr = &(dsa_0->i_26);
      return res;
}

static struct desc _thunk_31(void)
{     /* actual parameter at line 99 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 99;
      res.lval = 1;
      res.type = 'i';
      res.u.int_ptr = &(dsa_0->j_26);
      return res;
}

static struct desc _thunk_32(void)
{     /* actual parameter at line 100 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 100;
      res.lval = 1;
      res.type = 'i';
      res.u.int_ptr = &(dsa_0->k_26);
      return res;
}

static struct desc _thunk_33(void)
{     /* actual parameter at line 100 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 100;
      res.lval = 1;
      res.type = 'i';
      res.u.int_ptr = &(dsa_0->n_8);
      return res;
}

static struct desc _thunk_34(void)
{     /* actual parameter at line 100 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 100;
      res.lval = 1;
      res.type = 'r';
      res.u.real_ptr = &((*loc_real(dsa_0->C_26, 2, dsa_0->i_26, 
         dsa_0->j_26)));
      return res;
}

static struct desc _thunk_35(void)
{     /* actual parameter at line 100 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 100;
      res.lval = 0;
      res.type = 'r';
      res.u.real_val = (*loc_real(dsa_0->C_26, 2, dsa_0->i_26, 
         dsa_0->j_26)) + (*loc_real(dsa_0->A_26, 2, dsa_0->i_26, 
         dsa_0->k_26)) * (*loc_real(dsa_0->B_26, 2, dsa_0->k_26, 
         dsa_0->j_26));
      return res;
}

static struct desc _thunk_36(void)
{     /* actual parameter at line 99 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 99;
      res.lval = 0;
      res.type = 'r';
      res.u.real_val = int2real((dsa_0->n_8 - 1)) * get_real((
         global_dsa = (void *)dsa_0, GPS_3(make_arg((void *)_thunk_32, 
         dsa_0), make_arg((void *)_thunk_33, dsa_0), make_arg((void *)
         _thunk_34, dsa_0), make_arg((void *)_thunk_35, dsa_0))));
      return res;
}

static struct desc _thunk_37(void)
{     /* actual parameter at line 100 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 100;
      res.lval = 1;
      res.type = 'r';
      res.u.real_ptr = &((*loc_real(dsa_0->C_26, 2, dsa_0->i_26, 
         dsa_0->j_26 + 1)));
      return res;
}

static struct desc _thunk_38(void)
{     /* actual parameter at line 99 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 99;
      res.lval = 0;
      res.type = 'r';
      res.u.real_val = int2real((dsa_0->n_8 - 1)) * get_real((
         global_dsa = (void *)dsa_0, GPS_3(make_arg((void *)_thunk_31, 
         dsa_0), make_arg((void *)_thunk_36, dsa_0), make_arg((void *)
         _thunk_37, dsa_0), make_arg((void *)_thunk_29, dsa_0))));
      return res;
}

static struct desc _thunk_39(void)
{     /* actual parameter at line 101 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 101;
      res.lval = 1;
      res.type = 'r';
      res.u.real_ptr = &((*loc_real(dsa_0->C_26, 2, dsa_0->i_26 + 1, 1))
         );
      return res;
}

static struct desc _thunk_40(void)
{     /* actual parameter at line 102 */
      struct desc res;
      register struct dsa_main_program_0 *dsa_0 = (void *)
         global_dsa->vector[0];
      dsa_0->line = 102;
      res.lval = 1;
      res.type = 'i';
      res.u.int_ptr = &(dsa_0->n_8);
      return res;
}

struct desc main_program_0 /* program */ (void)
{     struct dsa_main_program_0 my_dsa;
      register struct dsa_main_program_0 *dsa_0 = &my_dsa;
      my_dsa.proc = "main_program";
      my_dsa.file = "gps.alg";
      my_dsa.line = 1;
      my_dsa.parent = active_dsa, active_dsa = (struct dsa *)&my_dsa;
      my_dsa.vector[0] = (void *)dsa_0;
      /* start of procedure block 1 (level 0) at line 1 */
      dsa_0->old_top_0 = stack_top;
      dsa_0->new_top_0 = stack_top;
      /* start of local block 2 (level 1) at line 1 */
      dsa_0->old_top_1 = stack_top;
      dsa_0->new_top_1 = stack_top;
      dsa_0->line = 1;
      /* start of local block 3 (level 2) at line 10 */
      dsa_0->old_top_2 = stack_top;
      dsa_0->new_top_2 = stack_top;
firstexample_3:
      dsa_0->line = 19;
      /* start of local block 7 (level 3) at line 20 */
      dsa_0->old_top_3 = stack_top;
      dsa_0->line = 21;
      dsa_0->A_7 = alloc_array('r', 2, 1, 2, 1, 3);
      dsa_0->new_top_3 = stack_top;
      dsa_0->line = 22;
      ((global_dsa = (void *)dsa_0, outstring_0(make_arg((void *)
         _thunk_1, dsa_0), make_arg("First example\n", NULL))));
      dsa_0->line = 23;
      dsa_0->i_7 = get_real((global_dsa = (void *)dsa_0, GPS_3(make_arg(
         (void *)_thunk_2, dsa_0), make_arg((void *)_thunk_3, dsa_0), 
         make_arg((void *)_thunk_4, dsa_0), make_arg((void *)_thunk_9, 
         dsa_0))));
      dsa_0->line = 24;
      ((global_dsa = (void *)dsa_0, outstring_0(make_arg((void *)
         _thunk_1, dsa_0), make_arg("Matrix A:\n", NULL))));
      dsa_0->line = 25;
      ((global_dsa = (void *)dsa_0, outreal_0(make_arg((void *)_thunk_1,
          dsa_0), make_arg((void *)_thunk_10, dsa_0))));
      dsa_0->line = 25;
      ((global_dsa = (void *)dsa_0, outreal_0(make_arg((void *)_thunk_1,
          dsa_0), make_arg((void *)_thunk_11, dsa_0))));
      dsa_0->line = 25;
      ((global_dsa = (void *)dsa_0, outreal_0(make_arg((void *)_thunk_1,
          dsa_0), make_arg((void *)_thunk_12, dsa_0))));
      dsa_0->line = 26;
      ((global_dsa = (void *)dsa_0, outstring_0(make_arg((void *)
         _thunk_1, dsa_0), make_arg("\n", NULL))));
      dsa_0->line = 27;
      ((global_dsa = (void *)dsa_0, outreal_0(make_arg((void *)_thunk_1,
          dsa_0), make_arg((void *)_thunk_13, dsa_0))));
      dsa_0->line = 27;
      ((global_dsa = (void *)dsa_0, outreal_0(make_arg((void *)_thunk_1,
          dsa_0), make_arg((void *)_thunk_14, dsa_0))));
      dsa_0->line = 27;
      ((global_dsa = (void *)dsa_0, outreal_0(make_arg((void *)_thunk_1,
          dsa_0), make_arg((void *)_thunk_15, dsa_0))));
      dsa_0->line = 28;
      ((global_dsa = (void *)dsa_0, outstring_0(make_arg((void *)
         _thunk_1, dsa_0), make_arg("\n", NULL))));
      pop_stack(dsa_0->old_top_3);
      /* end of block 7 */
secondexample_3:
      dsa_0->line = 35;
      /* start of local block 8 (level 3) at line 37 */
      dsa_0->old_top_3 = stack_top;
      dsa_0->new_top_3 = stack_top;
      dsa_0->line = 84;
      dsa_0->n_8 = 5;
      dsa_0->line = 86;
      ((global_dsa = (void *)dsa_0, outstring_0(make_arg((void *)
         _thunk_1, dsa_0), make_arg("Second example\n", NULL))));
      dsa_0->line = 88;
      /* start of local block 26 (level 4) at line 88 */
      dsa_0->old_top_4 = stack_top;
      /* jmp_buf must be of array type (ISO) */
      switch (setjmp(&dsa_0->jump_4[0]))
      {  case 0: break;
         case 1: pop_stack(dsa_0->new_top_4); active_dsa = (struct dsa 
         *)dsa_0; goto sing_26;
         case 2: pop_stack(dsa_0->new_top_4); active_dsa = (struct dsa 
         *)dsa_0; goto skip_26;
         default: fault("internal error on global go to");
      }
      dsa_0->line = 88;
      dsa_0->C_26 = alloc_array('r', 2, 1, dsa_0->n_8, 1, dsa_0->n_8);
      dsa_0->line = 88;
      dsa_0->B_26 = alloc_same('r', dsa_0->C_26);
      dsa_0->line = 88;
      dsa_0->A_26 = alloc_same('r', dsa_0->B_26);
      dsa_0->new_top_4 = stack_top;
      dsa_0->line = 90;
      ((global_dsa = (void *)dsa_0, testmatr_8(make_arg((void *)
         _thunk_19, dsa_0), make_arg(dsa_0->A_26, (void *)'r'))));
      dsa_0->line = 91;
      ((global_dsa = (void *)dsa_0, printmatrix_8(make_arg("A", NULL), 
         make_arg((void *)_thunk_20, dsa_0), make_arg(dsa_0->A_26, (
         void *)'r'))));
      dsa_0->line = 93;
      ((global_dsa = (void *)dsa_0, testmatr_8(make_arg((void *)
         _thunk_21, dsa_0), make_arg(dsa_0->B_26, (void *)'r'))));
      dsa_0->line = 94;
      ((global_dsa = (void *)dsa_0, invert140_8(make_arg((void *)
         _thunk_22, dsa_0), make_arg((void *)epsilon_0, dsa_0), 
         make_arg((void *)_thunk_23, dsa_0), make_arg(dsa_0->B_26, (
         void *)'r'))));
      dsa_0->line = 95;
      goto skip_26;
sing_26:
      dsa_0->line = 96;
      ((global_dsa = (void *)dsa_0, fault_0(make_arg("Matrix is singula"
         "r", NULL), make_arg((void *)_thunk_24, dsa_0))));
skip_26:
      dsa_0->line = 97;
      ((global_dsa = (void *)dsa_0, printmatrix_8(make_arg("B = inv(A)",
          NULL), make_arg((void *)_thunk_25, dsa_0), make_arg(
         dsa_0->B_26, (void *)'r'))));
      dsa_0->line = 99;
      dsa_0->i_26 = real2int(get_real((global_dsa = (void *)dsa_0, 
         GPS_3(make_arg((void *)_thunk_26, dsa_0), make_arg((void *)
         _thunk_27, dsa_0), make_arg((void *)_thunk_28, dsa_0), 
         make_arg((void *)_thunk_29, dsa_0)))) * get_real((global_dsa = 
         (void *)dsa_0, GPS_3(make_arg((void *)_thunk_30, dsa_0), 
         make_arg((void *)_thunk_38, dsa_0), make_arg((void *)_thunk_39,
          dsa_0), make_arg((void *)_thunk_29, dsa_0)))));
      dsa_0->line = 102;
      ((global_dsa = (void *)dsa_0, printmatrix_8(make_arg("C = A * B", 
         NULL), make_arg((void *)_thunk_40, dsa_0), make_arg(
         dsa_0->C_26, (void *)'r'))));
      pop_stack(dsa_0->old_top_4);
      /* end of block 26 */
      pop_stack(dsa_0->old_top_3);
      /* end of block 8 */
      pop_stack(dsa_0->old_top_2);
      /* end of block 3 */
      pop_stack(dsa_0->old_top_1);
      /* end of block 2 */
      pop_stack(dsa_0->old_top_0);
      /* end of block 1 */
      my_dsa.retval.lval = 0;
      my_dsa.retval.type = 0;
      active_dsa = my_dsa.parent;
      return my_dsa.retval;
}

int main(void)
{     /* Algol program startup code */
      main_program_0();
      return 0;
}

/* eof */
