source: git/kernel/misc.cc @ 041f60

spielwiese
Last change on this file since 041f60 was 041f60, checked in by Hans Schönemann <hannes@…>, 19 years ago
*hannes: static handling git-svn-id: file:///usr/local/Singular/svn/trunk@7737 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 3.9 KB
Line 
1/****************************************
2*  Computer Algebra System SINGULAR     *
3****************************************/
4/*
5* ABSTRACT:
6*/
7
8#include <string.h>
9#include <unistd.h>
10#include <stdio.h>
11#include <stddef.h>
12#include <stdlib.h>
13#include <time.h>
14
15#include "mod2.h"
16#include <mylimits.h>
17#include "omalloc.h"
18#include "structs.h"
19#include "febase.h"
20//#include "cntrlc.h"
21#include "kstd1.h"
22#include "timer.h"
23#include "intvec.h"
24#include "ring.h"
25#include "omSingularConfig.h"
26#include "p_Procs.h"
27#include "kversion.h"
28
29#define SI_DONT_HAVE_GLOBAL_VARS
30
31//#ifdef HAVE_LIBPARSER
32//#  include "libparse.h"
33//#endif /* HAVE_LIBPARSER */
34
35#ifdef HAVE_FACTORY
36#include <factory.h>
37#endif
38
39/* version strings */
40#ifdef HAVE_LIBFAC_P
41  extern const char * libfac_version;
42  extern const char * libfac_date;
43#endif
44extern "C" {
45#include <gmp.h>
46}
47#ifdef HAVE_MPSR
48#include <MP_Config.h>
49#endif
50
51/* init bins from structs.h */
52
53omBin MP_INT_bin = omGetSpecBin(sizeof(MP_INT));
54omBin char_ptr_bin = omGetSpecBin(sizeof(char_ptr));
55omBin ideal_bin = omGetSpecBin(sizeof(ideal));
56omBin int_bin = omGetSpecBin(sizeof(int));
57omBin poly_bin = omGetSpecBin(sizeof(poly));
58omBin void_ptr_bin = omGetSpecBin(sizeof(void_ptr));
59omBin indlist_bin = omGetSpecBin(sizeof(indlist));
60omBin naIdeal_bin = omGetSpecBin(sizeof(naIdeal));
61omBin snaIdeal_bin = omGetSpecBin(sizeof(snaIdeal));
62omBin sm_prec_bin = omGetSpecBin(sizeof(sm_prec));
63omBin smprec_bin = omGetSpecBin(sizeof(smprec));
64omBin sip_sideal_bin = omGetSpecBin(sizeof(sip_sideal));
65omBin sip_smap_bin = omGetSpecBin(sizeof(sip_smap));
66omBin sip_sring_bin = omGetSpecBin(sizeof(sip_sring));
67omBin ip_sideal_bin = omGetSpecBin(sizeof(ip_sideal));
68omBin ip_smap_bin = omGetSpecBin(sizeof(ip_smap));
69omBin ip_sring_bin = omGetSpecBin(sizeof(ip_sring));
70
71/*0 implementation*/
72
73/*2
74* the global exit routine of Singular
75*/
76extern "C" {
77void m2_end(short i)
78{
79  fe_reset_input_mode();
80  #ifdef PAGE_TEST
81  mmEndStat();
82  #endif
83  #ifdef HAVE_TCL
84  if (tclmode)
85  {
86    PrintTCL('Q',0,NULL);
87  }
88  #endif
89  fe_reset_input_mode();
90  if (i<=0)
91  {
92    #ifdef HAVE_TCL
93    if (!tclmode)
94    #endif
95      if (BVERBOSE(0))
96      {
97        if (i==0)
98          printf("Auf Wiedersehen.\n");
99        else
100          printf("\n$Bye.\n");
101      }
102    #ifdef sun
103      #ifndef __svr4__
104        _cleanup();
105        _exit(0);
106      #endif
107    #endif
108    exit(0);
109  }
110  else
111  {
112    #ifdef HAVE_TCL
113    if (!tclmode)
114    #endif
115      printf("\nhalt %d\n",i);
116  }
117  exit(i);
118}
119}
120
121/*2
122* the renice routine for very large jobs
123* works only on unix machines,
124* testet on : linux, HP 9.0
125*
126*#ifndef MSDOS
127*#ifndef macintosh
128*#include <sys/times.h>
129*#include <sys/resource.h>
130*extern "C" int setpriority(int,int,int);
131*void very_nice()
132*{
133*#ifndef NO_SETPRIORITY
134*  setpriority(PRIO_PROCESS,0,19);
135*#endif
136*  sleep(10);
137*}
138*#else
139*void very_nice(){}
140*#endif
141*#else
142*void very_nice(){}
143*#endif
144*/
145
146/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
147#ifdef buildin_rand
148/*
149 *
150 *  A prime modulus multiplicative linear congruential
151 *  generator (PMMLCG), or "Lehmer generator".
152 *  Implementation directly derived from the article:
153 *
154 *        S. K. Park and K. W. Miller
155 *        Random Number Generators: Good Ones are Hard to Find
156 *        CACM vol 31, #10. Oct. 1988. pp 1192-1201.
157 *
158 *  Using the following multiplier and modulus, we obtain a
159 *  generator which:
160 *
161 *        1)  Has a full period: 1 to 2^31 - 2.
162 *        2)  Is testably "random" (see the article).
163 *        3)  Has a known implementation by E. L. Schrage.
164 */
165
166
167#define  A        16807        /*  A "good" multiplier          */
168#define  M   2147483647        /*  Modulus: 2^31 - 1          */
169#define  Q       127773        /*  M / A                  */
170#define  R         2836        /*  M % A                  */
171
172
173int siSeed = 1L;
174
175
176int siRand()
177{
178  siSeed = A * (siSeed % Q) - R * (siSeed / Q);
179
180  if ( siSeed < 0 )
181    siSeed += M;
182
183  return( siSeed );
184}
185#endif
186
Note: See TracBrowser for help on using the repository browser.