~darkmuggle-deactivatedaccount/ubuntu/quantal/grub2/fix-872244

« back to all changes in this revision

Viewing changes to debian/grub-extras/lua/lmathlib.c

  • Committer: Bazaar Package Importer
  • Author(s): Colin Watson, Colin Watson, Evan Broder, Mario Limonciello
  • Date: 2010-11-24 13:59:55 UTC
  • mfrom: (1.17.6 upstream) (17.6.15 experimental)
  • Revision ID: james.westby@ubuntu.com-20101124135955-r6ii5sepayr7jt53
Tags: 1.99~20101124-1ubuntu1
[ Colin Watson ]
* Resynchronise with Debian experimental.  Remaining changes:
  - Adjust for default Ubuntu boot options ("quiet splash").
  - Default to hiding the menu; holding down Shift at boot will show it.
  - Set a monochromatic theme for Ubuntu.
  - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title,
    recovery mode, quiet option, tweak how memtest86+ is displayed, and
    use UUIDs where appropriate.
  - Fix backslash-escaping in merge_debconf_into_conf.
  - Remove "GNU/Linux" from default distributor string.
  - Add crashkernel= options if kdump and makedumpfile are available.
  - If other operating systems are installed, then automatically unhide
    the menu.  Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus
    if available to check whether Shift is pressed.  If it is, show the
    menu, otherwise boot immediately.  If keystatus is not available, then
    fall back to a short delay interruptible with Escape.
  - Allow Shift to interrupt 'sleep --interruptible'.
  - Don't display introductory message about line editing unless we're
    actually offering a shell prompt.  Don't clear the screen just before
    booting if we never drew the menu in the first place.
  - Remove some verbose messages printed before reading the configuration
    file.
  - Suppress progress messages as the kernel and initrd load for
    non-recovery kernel menu entries.
  - Change prepare_grub_to_access_device to handle filesystems
    loop-mounted on file images.
  - Ignore devices loop-mounted from files in 10_linux.
  - Show the boot menu if the previous boot failed, that is if it failed
    to get to the end of one of the normal runlevels.
  - Don't generate /boot/grub/device.map during grub-install or
    grub-mkconfig by default.
  - Adjust upgrade version checks for Ubuntu.
  - Don't display "GRUB loading" unless Shift is held down.
  - Adjust versions of grub-doc and grub-legacy-doc conflicts to tolerate
    our backport of the grub-doc split.
  - Fix LVM/RAID probing in the absence of /boot/grub/device.map.
  - Look for .mo files in /usr/share/locale-langpack as well, in
    preference.
  - Make sure GRUB_TIMEOUT isn't quoted unnecessarily.
  - Probe all devices in 'grub-probe --target=drive' if
    /boot/grub/device.map is missing.
  - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests.
  - Use qemu rather than qemu-system-i386.
  - Program vesafb on BIOS systems rather than efifb.
  - Add a grub-rescue-efi-amd64 package containing a rescue CD-ROM image
    for EFI-AMD64.
  - On Wubi, don't ask for an install device, but just update wubildr
    using the diverted grub-install.
  - When embedding the core image in a post-MBR gap, check for and avoid
    sectors matching any of a list of known signatures.
  - Disable video_bochs and video_cirrus on PC BIOS systems, as probing
    PCI space seems to break on some systems.
* Downgrade "ACPI shutdown failed" error to a debug message, since it can
  cause spurious test failures.

[ Evan Broder ]
* Enable lua from grub-extras.
* Incorporate the bitop library into lua.
* Add enum_pci function to grub module in lua.
* Switch back to gfxpayload=keep by default, unless the video hardware
  is known to not support it.

[ Mario Limonciello ]
* Built part_msdos and vfat into bootx64.efi (LP: #677758)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
** $Id: lmathlib.c,v 1.67.1.1 2007/12/27 13:02:25 roberto Exp $
 
3
** Standard mathematical library
 
4
** See Copyright Notice in lua.h
 
5
*/
 
6
 
 
7
 
 
8
#include <stdlib.h>
 
9
#include <math.h>
 
10
 
 
11
#define lmathlib_c
 
12
#define LUA_LIB
 
13
 
 
14
#include "lua.h"
 
15
 
 
16
#include "lauxlib.h"
 
17
#include "lualib.h"
 
18
 
 
19
 
 
20
#undef PI
 
21
#define PI (3.14159265358979323846)
 
22
#define RADIANS_PER_DEGREE (PI/180.0)
 
23
 
 
24
 
 
25
 
 
26
static int math_abs (lua_State *L) {
 
27
  lua_pushnumber(L, fabs(luaL_checknumber(L, 1)));
 
28
  return 1;
 
29
}
 
30
 
 
31
static int math_sin (lua_State *L) {
 
32
  lua_pushnumber(L, sin(luaL_checknumber(L, 1)));
 
33
  return 1;
 
34
}
 
35
 
 
36
static int math_sinh (lua_State *L) {
 
37
  lua_pushnumber(L, sinh(luaL_checknumber(L, 1)));
 
38
  return 1;
 
39
}
 
40
 
 
41
static int math_cos (lua_State *L) {
 
42
  lua_pushnumber(L, cos(luaL_checknumber(L, 1)));
 
43
  return 1;
 
44
}
 
45
 
 
46
static int math_cosh (lua_State *L) {
 
47
  lua_pushnumber(L, cosh(luaL_checknumber(L, 1)));
 
48
  return 1;
 
49
}
 
50
 
 
51
static int math_tan (lua_State *L) {
 
52
  lua_pushnumber(L, tan(luaL_checknumber(L, 1)));
 
53
  return 1;
 
54
}
 
55
 
 
56
static int math_tanh (lua_State *L) {
 
57
  lua_pushnumber(L, tanh(luaL_checknumber(L, 1)));
 
58
  return 1;
 
59
}
 
60
 
 
61
static int math_asin (lua_State *L) {
 
62
  lua_pushnumber(L, asin(luaL_checknumber(L, 1)));
 
63
  return 1;
 
64
}
 
65
 
 
66
static int math_acos (lua_State *L) {
 
67
  lua_pushnumber(L, acos(luaL_checknumber(L, 1)));
 
68
  return 1;
 
69
}
 
70
 
 
71
static int math_atan (lua_State *L) {
 
72
  lua_pushnumber(L, atan(luaL_checknumber(L, 1)));
 
73
  return 1;
 
74
}
 
75
 
 
76
static int math_atan2 (lua_State *L) {
 
77
  lua_pushnumber(L, atan2(luaL_checknumber(L, 1), luaL_checknumber(L, 2)));
 
78
  return 1;
 
79
}
 
80
 
 
81
static int math_ceil (lua_State *L) {
 
82
  lua_pushnumber(L, ceil(luaL_checknumber(L, 1)));
 
83
  return 1;
 
84
}
 
85
 
 
86
static int math_floor (lua_State *L) {
 
87
  lua_pushnumber(L, floor(luaL_checknumber(L, 1)));
 
88
  return 1;
 
89
}
 
90
 
 
91
static int math_fmod (lua_State *L) {
 
92
  lua_pushnumber(L, fmod(luaL_checknumber(L, 1), luaL_checknumber(L, 2)));
 
93
  return 1;
 
94
}
 
95
 
 
96
static int math_modf (lua_State *L) {
 
97
  double ip;
 
98
  double fp = modf(luaL_checknumber(L, 1), &ip);
 
99
  lua_pushnumber(L, ip);
 
100
  lua_pushnumber(L, fp);
 
101
  return 2;
 
102
}
 
103
 
 
104
static int math_sqrt (lua_State *L) {
 
105
  lua_pushnumber(L, sqrt(luaL_checknumber(L, 1)));
 
106
  return 1;
 
107
}
 
108
 
 
109
static int math_pow (lua_State *L) {
 
110
  lua_pushnumber(L, pow(luaL_checknumber(L, 1), luaL_checknumber(L, 2)));
 
111
  return 1;
 
112
}
 
113
 
 
114
static int math_log (lua_State *L) {
 
115
  lua_pushnumber(L, log(luaL_checknumber(L, 1)));
 
116
  return 1;
 
117
}
 
118
 
 
119
static int math_log10 (lua_State *L) {
 
120
  lua_pushnumber(L, log10(luaL_checknumber(L, 1)));
 
121
  return 1;
 
122
}
 
123
 
 
124
static int math_exp (lua_State *L) {
 
125
  lua_pushnumber(L, exp(luaL_checknumber(L, 1)));
 
126
  return 1;
 
127
}
 
128
 
 
129
static int math_deg (lua_State *L) {
 
130
  lua_pushnumber(L, luaL_checknumber(L, 1)/RADIANS_PER_DEGREE);
 
131
  return 1;
 
132
}
 
133
 
 
134
static int math_rad (lua_State *L) {
 
135
  lua_pushnumber(L, luaL_checknumber(L, 1)*RADIANS_PER_DEGREE);
 
136
  return 1;
 
137
}
 
138
 
 
139
static int math_frexp (lua_State *L) {
 
140
  int e;
 
141
  lua_pushnumber(L, frexp(luaL_checknumber(L, 1), &e));
 
142
  lua_pushinteger(L, e);
 
143
  return 2;
 
144
}
 
145
 
 
146
static int math_ldexp (lua_State *L) {
 
147
  lua_pushnumber(L, ldexp(luaL_checknumber(L, 1), luaL_checkint(L, 2)));
 
148
  return 1;
 
149
}
 
150
 
 
151
 
 
152
 
 
153
static int math_min (lua_State *L) {
 
154
  int n = lua_gettop(L);  /* number of arguments */
 
155
  lua_Number dmin = luaL_checknumber(L, 1);
 
156
  int i;
 
157
  for (i=2; i<=n; i++) {
 
158
    lua_Number d = luaL_checknumber(L, i);
 
159
    if (d < dmin)
 
160
      dmin = d;
 
161
  }
 
162
  lua_pushnumber(L, dmin);
 
163
  return 1;
 
164
}
 
165
 
 
166
 
 
167
static int math_max (lua_State *L) {
 
168
  int n = lua_gettop(L);  /* number of arguments */
 
169
  lua_Number dmax = luaL_checknumber(L, 1);
 
170
  int i;
 
171
  for (i=2; i<=n; i++) {
 
172
    lua_Number d = luaL_checknumber(L, i);
 
173
    if (d > dmax)
 
174
      dmax = d;
 
175
  }
 
176
  lua_pushnumber(L, dmax);
 
177
  return 1;
 
178
}
 
179
 
 
180
 
 
181
static int math_random (lua_State *L) {
 
182
  /* the `%' avoids the (rare) case of r==1, and is needed also because on
 
183
     some systems (SunOS!) `rand()' may return a value larger than RAND_MAX */
 
184
  lua_Number r = (lua_Number)(rand()%RAND_MAX) / (lua_Number)RAND_MAX;
 
185
  switch (lua_gettop(L)) {  /* check number of arguments */
 
186
    case 0: {  /* no arguments */
 
187
      lua_pushnumber(L, r);  /* Number between 0 and 1 */
 
188
      break;
 
189
    }
 
190
    case 1: {  /* only upper limit */
 
191
      int u = luaL_checkint(L, 1);
 
192
      luaL_argcheck(L, 1<=u, 1, "interval is empty");
 
193
      lua_pushnumber(L, floor(r*u)+1);  /* int between 1 and `u' */
 
194
      break;
 
195
    }
 
196
    case 2: {  /* lower and upper limits */
 
197
      int l = luaL_checkint(L, 1);
 
198
      int u = luaL_checkint(L, 2);
 
199
      luaL_argcheck(L, l<=u, 2, "interval is empty");
 
200
      lua_pushnumber(L, floor(r*(u-l+1))+l);  /* int between `l' and `u' */
 
201
      break;
 
202
    }
 
203
    default: return luaL_error(L, "wrong number of arguments");
 
204
  }
 
205
  return 1;
 
206
}
 
207
 
 
208
 
 
209
static int math_randomseed (lua_State *L) {
 
210
  srand(luaL_checkint(L, 1));
 
211
  return 0;
 
212
}
 
213
 
 
214
 
 
215
static const luaL_Reg mathlib[] = {
 
216
  {"abs",   math_abs},
 
217
  {"acos",  math_acos},
 
218
  {"asin",  math_asin},
 
219
  {"atan2", math_atan2},
 
220
  {"atan",  math_atan},
 
221
  {"ceil",  math_ceil},
 
222
  {"cosh",   math_cosh},
 
223
  {"cos",   math_cos},
 
224
  {"deg",   math_deg},
 
225
  {"exp",   math_exp},
 
226
  {"floor", math_floor},
 
227
  {"fmod",   math_fmod},
 
228
  {"frexp", math_frexp},
 
229
  {"ldexp", math_ldexp},
 
230
  {"log10", math_log10},
 
231
  {"log",   math_log},
 
232
  {"max",   math_max},
 
233
  {"min",   math_min},
 
234
  {"modf",   math_modf},
 
235
  {"pow",   math_pow},
 
236
  {"rad",   math_rad},
 
237
  {"random",     math_random},
 
238
  {"randomseed", math_randomseed},
 
239
  {"sinh",   math_sinh},
 
240
  {"sin",   math_sin},
 
241
  {"sqrt",  math_sqrt},
 
242
  {"tanh",   math_tanh},
 
243
  {"tan",   math_tan},
 
244
  {NULL, NULL}
 
245
};
 
246
 
 
247
 
 
248
/*
 
249
** Open math library
 
250
*/
 
251
LUALIB_API int luaopen_math (lua_State *L) {
 
252
  luaL_register(L, LUA_MATHLIBNAME, mathlib);
 
253
  lua_pushnumber(L, PI);
 
254
  lua_setfield(L, -2, "pi");
 
255
  lua_pushnumber(L, HUGE_VAL);
 
256
  lua_setfield(L, -2, "huge");
 
257
#if defined(LUA_COMPAT_MOD)
 
258
  lua_getfield(L, -1, "fmod");
 
259
  lua_setfield(L, -2, "mod");
 
260
#endif
 
261
  return 1;
 
262
}
 
263