/**************************************************************************/
/*                                                                        */
/*                                 Sources                                */
/*                                from  the                               */
/*                           XSC SOFTWARE PACKAGE                         */
/*                                                                        */
/*                Copyright (c) 1997 University of Karlsruhe              */
/*                     Institute for Appl. Mathematics                    */
/*                                                                        */
/* This program is free software for non-commercial use. For details, see */
/* the file LICENSE.XSC, distributed with this software package.          */
/*                                                                        */
/* This program is distributed WITHOUT ANY WARRANTY. For details, see the */
/* file LICENSE.XSC, distributed with this software package.              */
/*                                                                        */
/**************************************************************************/

/* RCS $Id: t_gtrg.c,v 1.2 1997/09/25 18:14:05 ae59 Exp $ */
/*
$Log: t_gtrg.c,v $
 * Revision 1.2  1997/09/25  18:14:05  ae59
 * Copyright-message
 *
 * Revision 1.1  1994/01/27  13:25:24  ae59
 * Put under RCS control
 *
 */
#ifdef AIX
#include "/u/p88c/runtime/tbyte/t_defs.h"
#else
#include "t_defs.h"
#endif

/*----------------------------------------------------------------------*
 | gza liefert ganzzahligen Anteil j: arg = j * 2/Pi + t  fuer Trg Fktn |
 *----------------------------------------------------------------------*/

#ifdef ANSI_C
#ifdef LINT_ARGS
int gza_trg(const ExtReal *arg, int jinit, int p,
                  DReal *v, ExtReal *j, int *jmod4)
#else
int gza_trg(arg, jinit, p, v, j, jmod4)
const ExtReal  *arg; /* Argumente                                       */
      int      jinit;      /* Initialisierung des ganzzahligen Anteils j*/
      int      p;          /* Kennung Periode pi/2 bzw. pi/4            */
                     /* Ergebnisse                                      */
      DReal    *v;         /* Produkt des Arguments mit 1/Periode       */
      ExtReal  *j;         /* Ganzzahliger Anteil von v                 */
      int      *jmod4;     /* j modulo 4                                */
#endif /* LINT_ARGS */
#else  /* NOT ANSI_C */
#ifdef LINT_ARGS
int gza_trg(ExtReal *arg, int jinit, int p, DReal *v, ExtReal *j, int *jmod4)
#else
int gza_trg(arg, jinit, p, v, j, jmod4)
ExtReal  *arg;
int      jinit;
int      p;
DReal    *v;
ExtReal  *j;
int      *jmod4;
#endif /* LINT_ARGS */
#endif /* ANSI_C */
{
   ExtReal     ve;         /* = *v                              */
   int         rnd;        /* RundungsMode                      */

   /* --- RundungsMode sichern --- */
   rnd  = getrndmode();

   /* --- v = arg/Periode = arg*p/Pi, p = (2 oder 4) --- */
   mulendpi(arg, p, v);

   /* --- j = int(v) --- */
   setrndmode(DOWN);
   dreal_to_extreal(v, &ve);
   rndintee(&ve, j);

   /* --- (j+jinit) mod 4, jinit = (0 fuer sin, 1 cos, 0 tan, 2 cot) --- */
   *jmod4 = mod4e(j) + jinit;
   if (*jmod4 > 3) *jmod4 -= 4;

   /* --- RundungsMode zuruecksetzen --- */
   setrndmode(rnd);

   /* --- keine Fehler moeglich --- */
   return NoErr;
} /* gza_trg() */
