History

Lua 1.1

Lua Team committed 32 years ago

Commit 6a0a9ef1 parent 8fa4b5556 files · +6975 −3402Browse files

Unified · Split

56 files
  1. Makefile +8 −26
  2. README +41 −16
  3. clients/lib/Makefile +23 −0
  4. clients/lib/iolib.c +100 −22
  5. clients/lib/mathlib.c +12 −11
  6. clients/lib/mathlib.h +13 −0
  7. clients/lib/strlib.c +16 −12
  8. clients/lib/strlib.h +13 −0
  9. clients/lua/Makefile +17 −0
  10. clients/lua/README +5 −0
  11. clients/lua/lua.c +28 −0
  12. doc/lua.dvi +0 −0
  13. doc/lua.ps +1774 −0
  14. doc/manual.dvi +0 −0
  15. doc/manual.ps +2125 −0
  16. domake +6 −0
  17. fixed/iolib.c +0 −402
  18. fixed/lex_yy.c +0 −923
  19. fixed/lua.c +0 −55
  20. floatingpoint.h +0 −1
  21. globals.lua +0 −5
  22. include/lua.h +1 −1
  23. include/lualib.h +3 −2
  24. include/mm.h +0 −0
  25. lex_yy.c +0 −923
  26. lua.c +0 −54
  27. src/Makefile +24 −0
  28. src/hash.c +117 −29
  29. src/hash.h +4 −7
  30. src/inout.c +11 −22
  31. src/inout.h +2 −5
  32. src/lex.c +238 −0
  33. src/opcode.c +159 −71
  34. src/opcode.h +28 −8
  35. src/table.c +128 −142
  36. src/table.h +42 −0
  37. src/y.tab.c +707 −535
  38. src/y.tab.h +37 −0
  39. src/yacc/Makefile +27 −0
  40. src/yacc/exscript +3 −0
  41. src/yacc/lua.lex +85 −0
  42. src/yacc/lua.stx +953 −0
  43. table.h +0 −39
  44. test.lua +0 −15
  45. test/array.lua +0 −0
  46. test/dump +37 −0
  47. test/loop.lua +6 −0
  48. test/save.lua +0 −1
  49. test/sort.lua +5 −7
  50. test/sort/q.lua +51 −0
  51. test/sort/sort.lua +51 −0
  52. test/split.lua +18 −0
  53. test/teste.lua +22 −0
  54. test/type.lua +37 −0
  55. type.lua +0 −35
  56. y_tab.h +0 −35
Makefile+8−26
@@ -1,29 +1,11 @@
1OBJS= hash.o inout.o lex_yy.o opcode.o table.o y_tab.o lua.o iolib.o mathlib.o strlib.o1# makefile for lua hierarchy
2 2
3CFLAGS= -O2 -I.3all:
4 4 (cd src; make)
5T= lua5 (cd clients/lib; make)
6 6 (cd clients/lua; make)
7all: $T
8
9$T: $(OBJS)
10 $(CC) -o $@ $(OBJS) -lm
11
12A=--------------------------------------------------------------------------
13test: $T
14 @echo "$A"
15 ./$T sort.lua main
16 @echo "$A"
17 ./$T globals.lua | sort | column
18 @echo "$A"
19 ./$T array.lua
20 @echo "$A"
21 ./$T save.lua
22 @echo "$A"
23 ./$T test.lua retorno_multiplo norma
24 7
25clean:8clean:
26 rm -f $T $(OBJS) core core.*9 (cd src; make clean)
27 10 (cd clients/lib; make clean)
28diff:11 (cd clients/lua; make clean)
29 diff . fixed | grep -v ^Only
README+41−16
@@ -1,22 +1,47 @@
1This is Lua 1.0. It was never publicly released. This code is a snapshot of1* What is Lua?
2the status of Lua on 28 Jul 1993. It is distributed for historical curiosity2 Lua is a simple, yet powerful, language for extending applications.
3to celebrate 10 years of Lua and is hereby placed in the public domain.3 Lua has been developed by TeCGraf, the Computer Graphics Technology Group
4 of PUC-Rio, the Pontifical Catholic University of Rio de Janeiro, Brazil.
5 Dozens of industrial products developed by TeCGraf use Lua.
4 6
5There is no documentation, except the test programs. The manual for Lua 1.17* Some features of Lua
6probably works for this version as well.8 Lua has a simple, pascal-like, syntax.
9 Variables need no declaration, but Lua has user-controlled type constructors.
10 Lua has powerful data description constructs (e.g., associative arrays).
11 Functions can receive a variable number of arguments and can return multiple
12 values.
13 Lua programs are compiled into bytecodes, which are then interpreted to
14 simulate a virtual machine.
15 Lua is written in ANSI C and is completely portable.
7 16
8The source files for the lexer and parser have been lost: all that is left is17* Coming soon
9the output of lex and yacc. A grammar can be found inside y_tab.c in yyreds.18 Object-oriented extensions.
19 Lazy evaluation.
10 20
11The code compiles and runs in RedHat 5.2 with gcc 2.7.2.3. It may not run in21* Installing
12newer systems, because it assumes that stdin and stdout are constants, though22 To make, simply type domake.
13ANSI C does not promise they are. If make fails, try using the fixed modules23 If make succeeds, you get an interpreter in ./bin/lua.
14provided in the "fixed" directory. To see the differences (which are really24 The libraries are in ./lib. The include files are in ./include.
15quite minor), do "make diff".25 You don't need the other directories for development.
26 There is documentation in ./doc and tests in ./test.
27 The documentation includes a reference manual and an article on the
28 design and implementation of Lua.
29 This distribution is biased towards SunOS 4 with gcc but it is simple to
30 change the Makefiles for other systems.
16 31
17To see Lua 1.0 in action, do "make test". (The last test raises an error on32* Legal matters
18purpose.)33 Lua is not in the public domain; TeCGraf keeps its copyright.
34 Nevertheless, Lua is freely available for academic purposes by anonymous ftp
35 at ftp.icad.puc-rio.br:/pub/lua/lua-1.1.tar.Z.
36 For commercial purposes, please contact us.
19 37
20Enjoy!38* Contacting the authors
39 Send your comments, bug reports and anything else to lhf@icad.puc-rio.br.
40 Please send me email if you download Lua so that we can know how far it goes.
21 41
22-- The Lua team, lua@tecgraf.puc-rio.br42--
43Luiz Henrique de Figueiredo email: lhf@icad.puc-rio.br
44TeCGraf-Grupo de Tecnologia em Computacao Grafica, ITS, PUC-Rio
45Rua Marques de Sao Vicente 225 voice: +55 21 529-9424
4622453-900 Rio de Janeiro, RJ, Brasil fax: +55 21 511-5645
47--
clients/lib/Makefile+23−0
@@ -0,0 +1,23 @@
1# makefile for lualib
2
3INC= $(LUA)/include
4LIB= $(LUA)/lib
5
6CC= gcc
7CFLAGS= -Wall -O2 -I$(INC) $(DEFS)
8
9OBJS= iolib.o mathlib.o strlib.o
10SLIB= $(LIB)/liblualib.a
11DLIB= $(LIB)/liblualib.so.1.1
12
13libs: $(SLIB) $(DLIB)
14
15$(SLIB): $(OBJS)
16 ar ruvl $@ $(OBJS)
17 ranlib $(SLIB)
18
19$(DLIB): $(OBJS)
20 ld -o $@ $(OBJS)
21
22clean:
23 rm -f $(OBJS) $(SLIB) $(DLIB)
clients/lib/iolib.crenamed from iolib.c+100−22
@@ -1,20 +1,21 @@
1/*1/*
2** iolib.c2** iolib.c
3** Input/output library to LUA3** Input/output library to LUA
4**
5** Waldemar Celes Filho
6** TeCGraf - PUC-Rio
7** 19 May 93
8*/4*/
9 5
6char *rcs_iolib="$Id: iolib.c,v 1.4 1994/04/25 20:11:23 celes Exp $";
7
10#include <stdlib.h>8#include <stdlib.h>
11#include <string.h>9#include <string.h>
12#include <stdio.h>10#include <stdio.h>
13#include <ctype.h>11#include <ctype.h>
12#include <sys/stat.h>
14#ifdef __GNUC__13#ifdef __GNUC__
15#include <floatingpoint.h>14#include <floatingpoint.h>
16#endif15#endif
17 16
17#include "mm.h"
18
18#include "lua.h"19#include "lua.h"
19 20
20static FILE *in=stdin, *out=stdout;21static FILE *in=stdin, *out=stdout;
@@ -109,6 +110,58 @@ static void io_writeto (void) · 88 unmodified lines
109}110}
110 111
111 112
113/*
114** Open a file to write appended.
115** LUA interface:
116** status = appendto (filename)
117** where:
118** status = 2 -> success (already exist)
119** status = 1 -> success (new file)
120** status = 0 -> error
121*/
122static void io_appendto (void)
123{
124 lua_Object o = lua_getparam (1);
125 if (o == NULL) /* restore standart output */
126 {
127 if (out != stdout)
128 {
129 fclose (out);
130 out = stdout;
131 }
132 lua_pushnumber (1);
133 }
134 else
135 {
136 if (!lua_isstring (o))
137 {
138 lua_error ("incorrect argument to function 'appendto`");
139 lua_pushnumber (0);
140 }
141 else
142 {
143 int r;
144 FILE *fp;
145 struct stat st;
146 if (stat(lua_getstring(o), &st) == -1) r = 1;
147 else r = 2;
148 fp = fopen (lua_getstring(o),"a");
149 if (fp == NULL)
150 {
151 lua_pushnumber (0);
152 }
153 else
154 {
155 if (out != stdout) fclose (out);
156 out = fp;
157 lua_pushnumber (r);
158 }
159 }
160 }
161}
162
163
164
112/*165/*
113** Read a variable. On error put nil on stack.166** Read a variable. On error put nil on stack.
114** LUA interface:167** LUA interface:
@@ -126,7 +179,7 @@ static void io_writeto (void) · 11 unmodified lines
126static void io_read (void)179static void io_read (void)
127{180{
128 lua_Object o = lua_getparam (1);181 lua_Object o = lua_getparam (1);
129 if (o == NULL) /* free format */182 if (o == NULL || !lua_isstring(o)) /* free format */
130 {183 {
131 int c;184 int c;
132 char s[256];185 char s[256];
@@ -134,19 +187,31 @@ static void io_read (void) · 1 unmodified line
134 ;187 ;
135 if (c == '\"')188 if (c == '\"')
136 {189 {
137 if (fscanf (in, "%[^\"]\"", s) != 1)190 int c, n=0;
191 while((c = fgetc(in)) != '\"')
138 {192 {
139 lua_pushnil ();193 if (c == EOF)
140 return;194 {
195 lua_pushnil ();
196 return;
197 }
198 s[n++] = c;
141 }199 }
200 s[n] = 0;
142 }201 }
143 else if (c == '\'')202 else if (c == '\'')
144 {203 {
145 if (fscanf (in, "%[^\']\'", s) != 1)204 int c, n=0;
205 while((c = fgetc(in)) != '\'')
146 {206 {
147 lua_pushnil ();207 if (c == EOF)
148 return;208 {
209 lua_pushnil ();
210 return;
211 }
212 s[n++] = c;
149 }213 }
214 s[n] = 0;
150 }215 }
151 else216 else
152 {217 {
@@ -183,7 +248,16 @@ static void io_read (void) · 30 unmodified lines
183 char f[80];248 char f[80];
184 char s[256];249 char s[256];
185 sprintf (f, "%%%ds", m);250 sprintf (f, "%%%ds", m);
186 fscanf (in, f, s);251 if (fgets (s, m, in) == NULL)
252 {
253 lua_pushnil();
254 return;
255 }
256 else
257 {
258 if (s[strlen(s)-1] == '\n')
259 s[strlen(s)-1] = 0;
260 }
187 switch (tolower(t))261 switch (tolower(t))
188 {262 {
189 case 'i':263 case 'i':
@@ -212,22 +286,25 @@ static void io_read (void) · 22 unmodified lines
212 case 'i':286 case 'i':
213 {287 {
214 long int l;288 long int l;
215 fscanf (in, "%ld", &l);289 if (fscanf (in, "%ld", &l) == EOF)
216 lua_pushnumber(l);290 lua_pushnil();
291 else lua_pushnumber(l);
217 }292 }
218 break;293 break;
219 case 'f': case 'g': case 'e':294 case 'f': case 'g': case 'e':
220 {295 {
221 float f;296 float f;
222 fscanf (in, "%f", &f);297 if (fscanf (in, "%f", &f) == EOF)
223 lua_pushnumber(f);298 lua_pushnil();
299 else lua_pushnumber(f);
224 }300 }
225 break;301 break;
226 default: 302 default:
227 {303 {
228 char s[256];304 char s[256];
229 fscanf (in, "%s", s);305 if (fscanf (in, "%s", s) == EOF)
230 lua_pushstring(s);306 lua_pushnil();
307 else lua_pushstring(s);
231 }308 }
232 break;309 break;
233 }310 }
@@ -346,8 +423,8 @@ static void io_write (void) · 112 unmodified lines
346}423}
347 424
348/*425/*
349** Execute a executable program using "sustem".426** Execute a executable program using "system".
350** On error put 0 on stack, otherwise put 1.427** Return the result of execution.
351*/428*/
352void io_execute (void)429void io_execute (void)
353{430{
@@ -359,8 +436,8 @@ void io_execute (void) · 5 unmodified lines
359 }436 }
360 else437 else
361 {438 {
362 system(lua_getstring(o));439 int res = system(lua_getstring(o));
363 lua_pushnumber (1);440 lua_pushnumber (res);
364 }441 }
365 return;442 return;
366}443}
@@ -394,6 +471,7 @@ void iolib_open (void) · 27 unmodified lines
394{471{
395 lua_register ("readfrom", io_readfrom);472 lua_register ("readfrom", io_readfrom);
396 lua_register ("writeto", io_writeto);473 lua_register ("writeto", io_writeto);
474 lua_register ("appendto", io_appendto);
397 lua_register ("read", io_read);475 lua_register ("read", io_read);
398 lua_register ("write", io_write);476 lua_register ("write", io_write);
399 lua_register ("execute", io_execute);477 lua_register ("execute", io_execute);
clients/lib/mathlib.crenamed from mathlib.c+12−11
@@ -1,17 +1,18 @@
1/*1/*
2** mathlib.c2** mathlib.c
3** Mathematica library to LUA3** Mathematics library to LUA
4**
5** Waldemar Celes Filho
6** TeCGraf - PUC-Rio
7** 19 May 93
8*/4*/
9 5
6char *rcs_mathlib="$Id: mathlib.c,v 1.1 1993/12/17 18:41:19 celes Exp $";
7
10#include <stdio.h> /* NULL */8#include <stdio.h> /* NULL */
11#include <math.h>9#include <math.h>
12 10
13#include "lua.h"11#include "lua.h"
14 12
13#define TODEGREE(a) ((a)*180.0/3.14159)
14#define TORAD(a) ((a)*3.14159/180.0)
15
15static void math_abs (void)16static void math_abs (void)
16{17{
17 double d;18 double d;
@@ -35,7 +36,7 @@ static void math_sin (void) · 17 unmodified lines
35 if (!lua_isnumber(o))36 if (!lua_isnumber(o))
36 { lua_error ("incorrect arguments to function `sin'"); return; }37 { lua_error ("incorrect arguments to function `sin'"); return; }
37 d = lua_getnumber(o);38 d = lua_getnumber(o);
38 lua_pushnumber (sin(d));39 lua_pushnumber (sin(TORAD(d)));
39}40}
40 41
41 42
@@ -49,7 +50,7 @@ static void math_cos (void) · 7 unmodified lines
49 if (!lua_isnumber(o))50 if (!lua_isnumber(o))
50 { lua_error ("incorrect arguments to function `cos'"); return; }51 { lua_error ("incorrect arguments to function `cos'"); return; }
51 d = lua_getnumber(o);52 d = lua_getnumber(o);
52 lua_pushnumber (cos(d));53 lua_pushnumber (cos(TORAD(d)));
53}54}
54 55
55 56
@@ -63,7 +64,7 @@ static void math_tan (void) · 7 unmodified lines
63 if (!lua_isnumber(o))64 if (!lua_isnumber(o))
64 { lua_error ("incorrect arguments to function `tan'"); return; }65 { lua_error ("incorrect arguments to function `tan'"); return; }
65 d = lua_getnumber(o);66 d = lua_getnumber(o);
66 lua_pushnumber (tan(d));67 lua_pushnumber (tan(TORAD(d)));
67}68}
68 69
69 70
@@ -76,7 +77,7 @@ static void math_asin (void) · 6 unmodified lines
76 if (!lua_isnumber(o))77 if (!lua_isnumber(o))
77 { lua_error ("incorrect arguments to function `asin'"); return; }78 { lua_error ("incorrect arguments to function `asin'"); return; }
78 d = lua_getnumber(o);79 d = lua_getnumber(o);
79 lua_pushnumber (asin(d));80 lua_pushnumber (TODEGREE(asin(d)));
80}81}
81 82
82 83
@@ -89,7 +90,7 @@ static void math_acos (void) · 6 unmodified lines
89 if (!lua_isnumber(o))90 if (!lua_isnumber(o))
90 { lua_error ("incorrect arguments to function `acos'"); return; }91 { lua_error ("incorrect arguments to function `acos'"); return; }
91 d = lua_getnumber(o);92 d = lua_getnumber(o);
92 lua_pushnumber (acos(d));93 lua_pushnumber (TODEGREE(acos(d)));
93}94}
94 95
95 96
@@ -103,7 +104,7 @@ static void math_atan (void) · 7 unmodified lines
103 if (!lua_isnumber(o))104 if (!lua_isnumber(o))
104 { lua_error ("incorrect arguments to function `atan'"); return; }105 { lua_error ("incorrect arguments to function `atan'"); return; }
105 d = lua_getnumber(o);106 d = lua_getnumber(o);
106 lua_pushnumber (atan(d));107 lua_pushnumber (TODEGREE(atan(d)));
107}108}
108 109
109 110
clients/lib/mathlib.h+13−0
@@ -0,0 +1,13 @@
1/*
2** Math library to LUA
3** TeCGraf - PUC-Rio
4** $Id: mathlib.h,v 1.1 1993/12/17 18:41:19 celes Exp $
5*/
6
7
8#ifndef strlib_h
9
10void mathlib_open (void);
11
12#endif
13
clients/lib/strlib.crenamed from strlib.c+16−12
@@ -1,16 +1,16 @@
1/*1/*
2** strlib.c2** strlib.c
3** String library to LUA3** String library to LUA
4**
5** Waldemar Celes Filho
6** TeCGraf - PUC-Rio
7** 19 May 93
8*/4*/
9 5
6char *rcs_strlib="$Id: strlib.c,v 1.2 1994/03/28 15:14:02 celes Exp $";
7
10#include <stdlib.h>8#include <stdlib.h>
11#include <string.h>9#include <string.h>
12#include <ctype.h>10#include <ctype.h>
13 11
12#include "mm.h"
13
14 14
15#include "lua.h"15#include "lua.h"
16 16
@@ -21,16 +21,18 @@ · 4 unmodified lines
21*/21*/
22static void str_find (void)22static void str_find (void)
23{23{
24 int n;24 char *s1, *s2, *f;
25 char *s1, *s2;
26 lua_Object o1 = lua_getparam (1);25 lua_Object o1 = lua_getparam (1);
27 lua_Object o2 = lua_getparam (2);26 lua_Object o2 = lua_getparam (2);
28 if (!lua_isstring(o1) || !lua_isstring(o2))27 if (!lua_isstring(o1) || !lua_isstring(o2))
29 { lua_error ("incorrect arguments to function `strfind'"); return; }28 { lua_error ("incorrect arguments to function `strfind'"); return; }
30 s1 = lua_getstring(o1);29 s1 = lua_getstring(o1);
31 s2 = lua_getstring(o2);30 s2 = lua_getstring(o2);
32 n = strstr(s1,s2) - s1 + 1;31 f = strstr(s1,s2);
33 lua_pushnumber (n);32 if (f != NULL)
33 lua_pushnumber (f-s1+1);
34 else
35 lua_pushnil();
34}36}
35 37
36/*38/*
@@ -59,13 +61,15 @@ static void str_sub (void) · 22 unmodified lines
59 lua_Object o1 = lua_getparam (1);61 lua_Object o1 = lua_getparam (1);
60 lua_Object o2 = lua_getparam (2);62 lua_Object o2 = lua_getparam (2);
61 lua_Object o3 = lua_getparam (3);63 lua_Object o3 = lua_getparam (3);
62 if (!lua_isstring(o1) || !lua_isnumber(o2) || !lua_isnumber(o3))64 if (!lua_isstring(o1) || !lua_isnumber(o2))
63 { lua_error ("incorrect arguments to function `strsub'"); return; }65 { lua_error ("incorrect arguments to function `strsub'"); return; }
64 s = strdup (lua_getstring(o1));66 if (o3 != NULL && !lua_isnumber(o3))
67 { lua_error ("incorrect third argument to function `strsub'"); return; }
68 s = lua_copystring(o1);
65 start = lua_getnumber (o2);69 start = lua_getnumber (o2);
66 end = lua_getnumber (o3);70 end = o3 == NULL ? strlen(s) : lua_getnumber (o3);
67 if (end < start || start < 1 || end > strlen(s))71 if (end < start || start < 1 || end > strlen(s))
68 lua_pushstring ("");72 lua_pushstring("");
69 else73 else
70 {74 {
71 s[end] = 0;75 s[end] = 0;
clients/lib/strlib.h+13−0
@@ -0,0 +1,13 @@
1/*
2** String library to LUA
3** TeCGraf - PUC-Rio
4** $Id: strlib.h,v 1.1 1993/12/17 18:41:19 celes Exp $
5*/
6
7
8#ifndef strlib_h
9
10void strlib_open (void);
11
12#endif
13
clients/lua/Makefile+17−0
@@ -0,0 +1,17 @@
1# makefile for lua interpreter
2
3BIN= $(LUA)/bin
4INC= $(LUA)/include
5LIB= $(LUA)/lib
6
7CC= gcc
8CFLAGS= -g -Wall -O2 -I$(INC)
9
10OBJS= lua.o
11T=$(BIN)/lua
12
13$T: $(OBJS)
14 $(CC) -o $@ $(OBJS) -L$(LIB) -llua -llualib -lm
15
16clean:
17 rm -f $T $(OBJS)
clients/lua/README+5−0
@@ -0,0 +1,5 @@
1This client is a simple lua interpreter.
2It either loads and executes the files named on the command line or reads
3and executes lines from stdin.
4Note that, in the second case, each line must contain a complete statement.
5For instance, functions cannot span several lines.
clients/lua/lua.c+28−0
@@ -0,0 +1,28 @@
1/*
2** lua.c
3** Linguagem para Usuarios de Aplicacao
4*/
5
6char *rcs_lua="$Id: lua.c,v 1.1 1993/12/17 18:41:19 celes Exp $";
7
8#include <stdio.h>
9
10#include "lua.h"
11#include "lualib.h"
12
13void main (int argc, char *argv[])
14{
15 int i;
16 iolib_open ();
17 strlib_open ();
18 mathlib_open ();
19 if (argc < 2)
20 {
21 char buffer[2048];
22 while (gets(buffer) != 0)
23 lua_dostring(buffer);
24 }
25 else
26 for (i=1; i<argc; i++)
27 lua_dofile (argv[i]);
28}
doc/lua.dvi+0−0

Binary file not shown.

doc/lua.ps+1774−0
@@ -0,0 +1,1774 @@
1%!PS-Adobe-2.0
2%%Creator: dvips, version 5.4 (C) 1986-90 Radical Eye Software
3%%Title: lua.dvi
4%%Pages: 11 1
5%%BoundingBox: 0 0 612 792
6%%EndComments
7%%BeginProcSet: tex.pro
8/TeXDict 200 dict def TeXDict begin /N /def load def /B{bind def}N /S /exch
9load def /X{S N}B /TR /translate load N /isls false N /vsize 10 N /@rigin{
10isls{[0 1 -1 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
11Resolution VResolution vsize neg mul TR}B /@letter{/vsize 10 N}B /@landscape{
12/isls true N /vsize -1 N}B /@a4{/vsize 10.6929133858 N}B /@a3{/vsize 15.5531 N
13}B /@ledger{/vsize 16 N}B /@legal{/vsize 13 N}B /@manualfeed{statusdict
14/manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0
15]N /df{/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0
16]N df-tail}B /df-tail{/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N
17/FontBBox FBB N string /base X array /BitMaps X /BuildChar{CharBuilder}N
18/Encoding IE N end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[
19}B /E{pop nn dup definefont setfont}B /ch-image{ch-data dup type /stringtype
20ne{ctr get /ctr ctr 1 add N}if}B /ch-width{ch-data dup length 5 sub get}B
21/ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup length 3
22sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data
23dup length 1 sub get}B /ctr 0 N /CharBuilder{save 3 1 roll S dup /base get 2
24index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff ch-yoff
25ch-height sub ch-xoff ch-width add ch-yoff setcachedevice ch-width ch-height
26true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{ch-image}imagemask restore}B /D{
27/cc X dup type /stringtype ne{]}if nn /base get cc ctr put nn /BitMaps get S
28ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf div put}if put /ctr
29ctr 1 add N}B /I{cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI
30save N @rigin 0 0 moveto}B /eop{clear SI restore showpage userdict /eop-hook
31known{eop-hook}if}B /@start{userdict /start-hook known{start-hook}if
32/VResolution X /Resolution X 1000 div /DVImag X /IE 256 array N 0 1 255{IE S 1
33string dup 0 3 index put cvn put}for}B /p /show load N /RMat[1 0 0 -1 0 0]N
34/BDot 8 string N /v{/ruley X /rulex X V}B /V{gsave TR -.1 -.1 TR rulex ruley
35scale 1 1 false RMat{BDot}imagemask grestore}B /a{moveto}B /delta 0 N /tail{
36dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}B /d{
37-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{4 M}B /l{p
38-4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t
39{p 4 w}B /w{0 rmoveto}B /x{0 S rmoveto}B /y{3 2 roll p a}B /bos{/SS save N}B
40/eos{clear SS restore}B end
41%%EndProcSet
42TeXDict begin 1200 300 300 @start /Fa 8 58 df<00000C00001C00001C00003800003800
4300700000700000700000E00000E00001C00001C0000380000380000380000700000700000E0000
440E00000E00001C00001C0000380000380000700000700000700000E00000E00001C00001C00001
45C0000380000380000700000700000700000E00000E00001C00001C000038000038000038000070
460000700000E00000E00000C0000016317DA41D>47 D<00380000780003F800FFF800FDF80001F8
470001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8
480001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8007FFFF07FFF
49F014207C9F1D>49 D<03FC000FFF803C0FE07007F07C03F8FE01F8FE01FCFE01FCFE01FC7C01FC
503801FC0001FC0001F80003F80003F00007E0000FC0000F80001E00003C0000780000E00C01C00C
5103801C0300180600180FFFF81FFFF83FFFF87FFFF0FFFFF0FFFFF016207D9F1D>I<00FF0007FF
52C00F03F01E01F83F01F83F01FC3F81FC3F01FC1F01FC0C01F80001F80003F00003E0000FC000FF
530000FF000003E00001F80001FC0000FE0000FE0000FF7C00FF7C00FFFE00FFFE00FFFE00FE7C01
54FC7801FC3C03F00FFFE001FF0018207E9F1D>I<0000E00001E00003E00003E00007E0000FE000
551FE0001BE00033E00073E000E3E001C3E00183E00303E00703E00E03E00C03E01803E03803E070
5603E0E003E0FFFFFFFFFFFF0007E00007E00007E00007E00007E00007E00007E001FFFF01FFFF18
57207E9F1D>I<1000301E00F01FFFE01FFFE01FFFC01FFF001FFE001FF800180000180000180000
5818000019FE001FFF801E07E01C03F01801F00001F80001F80001FC0001FC7801FCFC01FCFC01FC
59FC01FCFC01F8F801F86003F03003E01C0FC00FFF0003FC0016207D9F1D>I<001FC000FFF001F0
603807C0780F80FC1F00FC1F00FC3F00FC7E00787E00007E0000FE0000FE3FC0FE7FF0FE80F8FF80
617CFF007EFF007EFE007FFE007FFE007FFE007F7E007F7E007F7E007F3E007E3E007E1F007C0F00
62F807C1F003FFE000FF0018207E9F1D>I<00FF0007FFC00F83E01F00F03E00F87E007C7E007CFE
63007EFE007EFE007EFE007FFE007FFE007FFE007F7E00FF7E00FF3E01FF1F017F0FFE7F03FC7F00
64007F00007E00007E1E007E3F00FC3F00FC3F00F83F01F01E03E01C0FC00FFF0003F80018207E9F
651D>57 D E /Fb 1 16 df<03F0000FFC001FFE003FFF007FFF807FFF80FFFFC0FFFFC0FFFFC0FF
66FFC0FFFFC0FFFFC0FFFFC0FFFFC07FFF807FFF803FFF001FFE000FFC0003F00012147D9519>15
67D E /Fc 21 115 df<00030003000700060006000E000C001C0018001800380030003000700060
6800E000C000C001C001800180038003000300070006000E000C000C001C00180018003800300070
690060006000E000C000C00010287E9D15>47 D<07E00FF01FF83C3C781E700E700EE007E007E007
70E007E007E007E007E007E007E007E007E007700E700E781E3C3C1FF80FF007E0101A7E9915>I<
71008003803F80FF80C3800380038003800380038003800380038003800380038003800380038003
728003800380038003807FFC7FFC0E1A7D9915>I<0FE01FF0387C701EE00EE00F400F4007000700
730F000F000E001E001C0038007000E001C0038007000E001C0038007000FFFFFFFF101A7E9915>
74I<07E03FF8783CE01E601E400E001E001E003C007C07F807E007F8003C001E001E000F000F000F
75800F800FC01E601E383C1FF807E0101A7E9915>I<00780000F80000B80001B80001B800033800
760338000738000638000E38001E38001C38003C3800383800783800703800F03800FFFFC0FFFFC0
77003800003800003800003800003800003800003800121A7F9915>I<7FFC7FFC70007000700070
7800700070007000700073E07FF87FFC7C3E781E000F000F000F000F000F400FC01E601C38781FF0
790FC0101A7E9915>I<00F803FC0F041C0018003800700070007000E1F0E7F8EFFCFC1EF00EF00F
80E007E007E007600770077007300E380C1C3C0FF003E0101A7E9915>I<FFFFFFFF0007000E001C
81003C00380078007000F000E001E001C003C003C0038007800780078007800F000F000F000F000F
82000F00101A7E9915>I<07E01FF8381C700EE007E007E007E007700E781E3FFC0FF00FF03E7C78
831E700EE007E007E007E007E007700E700E3C3C1FF807E0101A7E9915>I<07E00FF01C38381C70
840CE00EE00EE007E007E007E007F00F700F783F3FF71FE70F870006000E000E001C001C203870F0
853FE00F80101A7E9915>I<001C0000003E0000003E0000002E0000006700000067000000E78000
8600C7800000C3800001C3C0000183C0000381E0000381E0000301E0000700F0000700F0000600F0
87000E0078000FFFF8001FFFFC001C003C0018003C0038001E0038001E0030001E0070000F007000
880F00E0000780191C7F9B1C>65 D<003FC001FFF003C0F00700300E00001E00003C000038000078
890000780000F00000F00000F00000F00000F00000F00000F00000F000007800007800003800003C
9000001E00000E000807001803C07801FFF0003F80151C7D9B1B>67 D<FFFC00FFFF80F007C0F001
91F0F000F8F00078F0003CF0001CF0001EF0001EF0000FF0000FF0000FF0000FF0000FF0000FF000
920FF0000FF0000EF0001EF0001EF0003CF00078F00078F001F0F007E0FFFF80FFFE00181C7C9B1F
93>I<003F8001FFF003C0F80700380E00181C00003C0000380000780000780000F00000F00000F0
940000F00000F00000F007F8F007F8F000387800387800383800383C00381C00380E003807003803
95C0F801FFF0003F80151C7D9B1C>71 D<F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
96F0F0F0F0F0041C7C9B0C>73 D<FFFFFFFFFFFF003C00003C00003C00003C00003C00003C00003C
9700003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C
9800003C00003C00003C00003C00003C00003C00181C7E9B1D>84 D<0FC03FF07FF87038401C001C
99001C001C07FC3FFC7C1CE01CE01CE01CF07C7FFC7FDC3F1C0E127E9114>97
100D<07C01FF03FF83C3C700C700EFFFEFFFEFFFEE000E000E000700070003C061FFE0FFE07F80F12
1017E9113>101 D<00FC03FC07FC07000E000E000E000E000E000E00FFE0FFE00E000E000E000E00
1020E000E000E000E000E000E000E000E000E000E000E000E000E1C809B0D>I<E380E780EF80FC00
103F800F000F000E000E000E000E000E000E000E000E000E000E000E00009127D910E>114
104D E /Fd 24 122 df<00001FE0000070380000E01C0001C03C0001803C00038038000380000007
105000000070000000700000007000000070000000E0000000E000000FFFFE000FFFFE0000E00E000
1061E01C0001C01C0001C01C0001C01C0001C0380001C038000380380003803800038070000380700
107003807080070070C00700E1800700E1800700E180070063000E0062000E003C000E0000000E000
1080001C0000001C0000001C0000071800000F3800000F3000000620000003C0000001E2D82A21C>
10912 D<0000FC060007FF0C001F839C003E00DC0078007C00F0007801E0007803C0007807800038
1100F8000301F0000301E0000303E0000303E0000607C0000007C0000007C000000F8000000F80000
11100F8000000F8000000F8000000F0000000F0000180F0000180F0000300F0000300F0000600F800
112060078000C00780018003C0030001E0060000F81C00007FF000001FC00001F2478A224>67
113D<00F180038B80070F800E07001E07001C07003C0700380E00780E00780E00780E00F01C00F01C
11400F01C20F01C30F03860F0386070786070D8C03198801E0F0014157B9419>97
115D<03C03F803F800380038007000700070007000E000E000E000E001C001CF81D8C1E0E3C063C07
1163807380F700F700F700F700FE01EE01EE01EE03CE038E038607060E031C01F0010237BA217>I<
117007C01C2030307070E0F1C0F3C003800780078007800F000F000F000F000F00170037006301C18
118380FC010157B9417>I<0000780007F00007F00000700000700000E00000E00000E00000E00001
119C00001C00001C00001C000038000F380038B80070F800E07001E07001C07003C0700380E00780E
12000780E00780E00F01C00F01C00F01C20F01C30F03860F0386070786070D8C03198801E0F001523
1217BA219>I<00F803840E061C063C063806780CF038FFE0F000F000E000E000E000E000E002E006
122600C703830700F800F157A9417>I<00007C0000CE00019E00039E00038C000300000700000700
123000700000700000E00000E00000E00000E0001FFF001FFF0001C00001C00001C00001C00001C00
12400380000380000380000380000380000700000700000700000700000700000E00000E00000E000
12500E00001C00001C00001C00001C000038000738000F30000F300006600003C0000172D82A20F>
126I<001F180031B800E0F801C0F001C0700380700780700700E00F00E00F00E00F00E01E01C01E01
127C01E01C01E01C01E03800E03800E0780060F80061F0001E700000700000700000E00000E00000E
12800701C00F01800F0300060E0003F8000151F7E9417>I<00F0000FE0000FE00000E00000E00001
129C00001C00001C00001C000038000038000038000038000070000071E0007638007C1800F81C00F
13001C00E01C00E01C01C03801C03801C03801C0380380700380700380E08380E0C700E18701C1870
1311C30700C20E00C6060078016237DA219>I<00E000E001E000C000000000000000000000000000
13200000000001E00330063806380C380C700C70007000E000E000E001C001C001C40386038C070C0
1337080318031001E000C227CA10F>I<0001C00003C00003C0000180000000000000000000000000
134000000000000000000000000000000003C00004600008700018700030700030700030700000E00
135000E00000E00000E00001C00001C00001C00001C00003800003800003800003800007000007000
13600700000700000E00000E00000E00071C000F18000F380006600003C0000122C82A10F>I<00F0
137000FE0000FE00000E00000E00001C00001C00001C00001C0000380000380000380000380000700
138000701E00706300708700E10F00E20F00E20600E40001D80001E00001FC0001CE0003870003830
139003838203838307070607070607070407030C0E01880600F0014237DA217>I<01E01FC01FC001
140C001C0038003800380038007000700070007000E000E000E000E001C001C001C001C0038003800
141380038007000700071007180E300E300E300620066003C000B237CA20D>I<1E07C07C00331861
142860063B033030063E03E0380C3C03C0380C3C03C0380C380380380078078070007007007000700
14370070007007007000E00E00E000E00E00E000E00E01C100E00E01C181C01C01C301C01C038301C
14401C038601C01C0184038038018C01801800F0026157C9429>I<1E0780003318E00063B0600063
145E07000C3C07000C3807000C38070000700E0000700E0000700E0000700E0000E01C0000E01C000
1460E0382000E0383001C0386001C0706001C070C001C030800380318001801E00019157C941C>I<
147007C0001C6000303000603800E03C01C03C03C03C03803C07803C07803C07803C0F00780F00780
148F00780F00F00F00E00701E00701C003038001860000F800012157B9419>I<03C1E00666300C7C
149380C781818781C18701C18701C00E03C00E03C00E03C00E03C01C07801C07801C07801C0700380
150E003C0E003C1C003C380076700073C000700000700000E00000E00000E00000E00001C00001C00
15100FFC000FFC000161F7F9419>I<1E1F0033318063E1C063C3C0C3C3C0C38180C3800007000007
15200000700000700000E00000E00000E00000E00001C00001C00001C00001C000038000018000013
153157C9415>114 D<007801840306020E061E061E0608070007F007F803FC007C001E000E700EF0
1540CF00CE008601030601F800F157D9414>I<006000E000E000E000E001C001C001C001C00380FF
155F8FFF8038007000700070007000E000E000E000E001C001C001C101C18383038303860186018C0
1560F000D1F7C9E11>I<0F003011807021C07061C0E0C1C0E0C380E0C380E00381C00701C00701C0
1570701C00E03800E03800E03840E03860E070C0C070C0E070C0E0B1806131003E1E018157C941B>
158I<0F01C01183C021C3E061C1E0C1C0E0C380E0C380E00380C00700C00700C00700C00E01800E01
159800E01800E03000E03000E02000E04000E0C0006180001E00014157C9417>I<0F003011807021
160C07061C0E0C1C0E0C380E0C380E00381C00701C00701C00701C00E03800E03800E03800E03800E
16107000C07000E07000E0F00061E0003EE00000E00000E00001C00301C0078380078300070600060
162C0002180001E0000151F7C9418>121 D E /Fe 33 122 df<00003C007E3C00FE3C01FE3C03C0
16300038000078000078000078000078000078000078000078000078000FFFE3CFFFE3CFFFE3C0780
1643C07803C07803C07803C07803C07803C07803C07803C07803C07803C07803C07803C07803C0780
1653C07803C07803C07803C07803C07803C162480A31B>12 D<787878781830306060E0050A7CA20E
166>39 D<000F0000001F8000001F8000001B8000003BC0000039C0000079E0000071E0000070E000
16700F0F00000F0F00000E0F00001E0780001E0780001C0780003C03C0003C03C0003803C0007801E
1680007801E0007001E000F000F000FFFFF001FFFFF801FFFFF801E0007803C0003C03C0003C03800
16903C0780001E0780001E0700001E0F00000F0F00000F0E00000F01D237EA221>65
170D<FFFF0000FFFFC000FFFFF000F001F800F0007C00F0003E00F0001F00F0000F00F0000780F000
1710780F00003C0F00003C0F00003C0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F0
1720001E0F00001E0F00001E0F00001C0F00003C0F00003C0F00007C0F0000780F0000F80F0001F00
173F0003E00F0007C00F001F800FFFFF000FFFFE000FFFF00001B237BA224>68
174D<FFFFF8FFFFF8FFFFF8F00000F00000F00000F00000F00000F00000F00000F00000F00000F000
17500F00000F00000FFFFF0FFFFF0FFFFF0F00000F00000F00000F00000F00000F00000F00000F000
17600F00000F00000F00000F00000F00000F00000FFFFFCFFFFFCFFFFFC16237BA21E>I<F0F0F0F0
177F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F004237BA20E>73
178D<F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F000
17900F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F000
18000F00000F00000F00000F00000F00000F00000FFFFE0FFFFE0FFFFE013237BA21B>76
181D<FFFE00FFFFC0FFFFE0F003F0F00078F0003CF0003CF0001EF0001EF0001EF0001EF0001EF000
1821EF0003CF0003CF00078F003F0FFFFE0FFFFC0FFFE00F00000F00000F00000F00000F00000F000
18300F00000F00000F00000F00000F00000F00000F00000F00000F0000017237BA220>80
184D<00FF0003FFE007FFF00F81F01E00703C00003C00007800007800007800007800007800007C00
185003E00003F00001FE0000FFC0007FF8001FFC0003FE00003F00000F800007800007C00003C0000
1863C00003C00003C00003C00003CC00078E00078F800F07F03E01FFFC00FFF8001FE0016257EA31C
187>83 D<FFFFFFF8FFFFFFF8FFFFFFF8000780000007800000078000000780000007800000078000
188000780000007800000078000000780000007800000078000000780000007800000078000000780
189000007800000078000000780000007800000078000000780000007800000078000000780000007
19080000007800000078000000780000007800000078000000780001D237EA222>I<03F0001FFC00
1913FFE00381F00200F00000780000780000780000780000F8003FF801FFF803F0780780780F00780
192F00780F00780F007807C1F807FFF803FF7801F878011167E9518>97 D<F00000F00000F00000F0
1930000F00000F00000F00000F00000F00000F00000F00000F00000F00000F0F800F3FE00FFFF00FE
1941F80F80780F003C0F003C0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F003E0F003C0F0
19507C0F80780FC1F00FFFE00F7FC00F1F00013237CA21A>I<01FC0007FF000FFF801F03803C0180
196780000780000780000F00000F00000F00000F00000F00000F000007800007800007800003C0040
1971F03C00FFFC007FF8001FC0012167E9516>I<0001E00001E00001E00001E00001E00001E00001
198E00001E00001E00001E00001E00001E00001E003F1E007FDE00FFFE01F07E03C03E07C01E07801
199E0F801E0F001E0F001E0F001E0F001E0F001E0F001E0F001E07801E07803E03C03E03F0FE01FFD
200E00FF9E003E1E013237EA21A>I<03F00007FC001FFE003E0F003C0780780380780380F001C0FF
201FFC0FFFFC0FFFFC0F00000F00000F000007000007800007800003C00801F07800FFF8007FF0001
202F80012167E9516>I<003F00FF01FF03C0038007800780078007800780078007800780FFF8FFF8
203FFF807800780078007800780078007800780078007800780078007800780078007800780078007
20480102380A20F>I<01F07C07FFFC0FFFFC1F1F001E0F003C07803C07803C07803C07803C07801E
2050F001F1F000FFE001FFC0019F0003800003800003C00001FFF001FFFE01FFFF03FFFF87C01F878
206007CF0003CF0003CF0003CF8007C7C00F83F03F01FFFE00FFFC001FE0016217F9519>I<F00000
207F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F0F800
208F3FE00F7FF00FE1F00FC0F80F80780F80780F00780F00780F00780F00780F00780F00780F00780
209F00780F00780F00780F00780F00780F00780F00780F0078011237CA21A>I<F0F0F0F000000000
2100000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F004237DA20B>I<F00000F000
21100F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00780F00F
21200F01E00F03C00F07800F0F000F1E000F3C000F7C000FFC000FFE000FFE000FDF000F8F800F078
21300F07C00F03E00F01E00F01F00F00F00F00F80F007C012237CA218>107
214D<F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F004237D
215A20B>I<F0FC03F0F3FF0FFCF7FF9FFEFE0FB83EFC07F01FF803E00FF803E00FF003C00FF003C0
2160FF003C00FF003C00FF003C00FF003C00FF003C00FF003C00FF003C00FF003C00FF003C00FF003
217C00FF003C00FF003C00FF003C00F20167C9529>I<F0F800F3FE00F7FF00FE1F00FC0F80F80780
218F80780F00780F00780F00780F00780F00780F00780F00780F00780F00780F00780F00780F00780
219F00780F00780F0078011167C951A>I<00FC0007FF800FFFC01F03E03E01F03C00F07800787000
22038F0003CF0003CF0003CF0003CF0003CF0003C7800787800787C00F83E01F01F03E00FFFC007FF
2218000FC0016167F9519>I<F0F800F3FE00FFFF00FE1F80F80780F007C0F003C0F003E0F001E0F0
22201E0F001E0F001E0F001E0F001E0F003E0F003C0F007C0F80F80FC1F00FFFE00F7FC00F1F000F0
2230000F00000F00000F00000F00000F00000F00000F00000F00000F0000013207C951A>I<F0E0F3
224E0F7E0FF00FE00FC00F800F800F000F000F000F000F000F000F000F000F000F000F000F000F000
225F0000B167C9511>114 D<07F01FFC3FFE3C0E7806780078007C003F003FF01FF80FFC01FE001F
226000F000F000FC00FF81EFFFE3FFC0FF010167F9513>I<0F000F000F000F000F000F00FFF8FFF8
227FFF80F000F000F000F000F000F000F000F000F000F000F000F000F000F000F080F1C07FC07F803
228E00E1C7F9B12>I<F00780F00780F00780F00780F00780F00780F00780F00780F00780F00780F0
2290780F00780F00780F00780F00780F00780F00780F00F80F83F807FFF807FE7801F878011167C95
2301A>I<F000F0F000F07801E07801E07801E03C03C03C03C03C03C01E07801E07800E07000F0F00
2310F0F00070E00079E00079E00039C00039C0003DC0001D80001F80001F80014167F9517>I<F007
232C01EF00FC01EF00EE01E780EE03C781CE03C781CF03C381CF0383C1C70783C3870783C3878781C
2333878701E3838F01E3038F01E7038F00E703CE00E701CE00F601DE007601DC007600DC007400DC0
23407C00FC003C00F801F167F9522>I<7800F83C00F03E01E01E03C00F07C007878003CF0001FE00
23501FC0000FC0000780000F80000FC0001DE0003CF000787800F03800F03C01E01E03C00F07800F8
236F8007C1616809517>I<F000F0F800F07801E07801E03C01E03C03C03E03C01E03801E07800F07
237800F0700070F00078F00078E00038E00039C0001DC0001DC0001D80000D80000F8000070000070
2380000E00000E00000E00001C00001C0000380007F80007F00007E000014207F9517>I
239E /Ff 81 127 df<001FC1F00070270C00C07E1E0180FC3E0380FC3E0700F81C07007800070038
24000070038000700380007003800070038000700380007003800FFFFFFE0FFFFFFE0070038000700
241380007003800070038000700380007003800070038000700380007003800070038000700380007
24200380007003800070038000700380007003800070038007FE1FFC07FE1FFC01F2380A21D>11
243D<000FC0000078300000E0080001803C0003807C0007007C0007007C0007003800070000000700
244000007000000070000000700000007000000FFFFFC00FFFFFC0007003C0007001C0007001C0007
245001C0007001C0007001C0007001C0007001C0007001C0007001C0007001C0007001C0007001C00
24607001C0007001C0007001C0007001C007FF1FFC07FF1FFC01A2380A21C>I<000FEC0000701C00
24700E07C0001807C0003807C0007003C0007001C0007001C0007001C0007001C0007001C0007001C
2480007001C0007001C00FFFFFC00FFFFFC0007001C0007001C0007001C0007001C0007001C000700
2491C0007001C0007001C0007001C0007001C0007001C0007001C0007001C0007001C0007001C0007
250001C0007001C007FF1FFC07FF1FFC01A2380A21C>I<000FC03F00007031E0C000E00B80200180
2513E00F003807E01F007007C01F007007C01F007003C00E007001C000007001C000007001C000007
252001C000007001C000007001C0000FFFFFFFFF0FFFFFFFFF007001C00F007001C007007001C0070
25307001C007007001C007007001C007007001C007007001C007007001C007007001C007007001C00
2547007001C007007001C007007001C007007001C007007001C007007001C00707FF1FFC7FF7FF1FF
255C7FF282380A22A>I<07070F0E1C383060C0080976A219>19 D<0E000F8001C000E0007000E000
256E07FC080000C097A7E16>24 D<701CF83EFC3FFC3F741D04010401040104010802080210041004
25720084010100F7EA219>34 D<0000C00C000000C00C000000C00C000001C01C0000018018000001
258801800000180180000038038000003003000000300300000030030000007007000000600600000
259060060000006006000000E00E000000C00C000FFFFFFFFE0FFFFFFFFE000180180000018018000
260001801800000380380000030030000003003000000300300000030030000FFFFFFFFE0FFFFFFFF
261E0006006000000E00E000000C00C000000C00C000000C00C000001C01C00000180180000018018
262000001801800000380380000030030000003003000000300300000070070000006006000000600
263600000232D7DA22A>I<70F8FCFC7404040404080810102040060F7CA20E>39
264D<001000200040008001000300060004000C001800180018003000300030007000600060006000
265E000E000E000E000E000E000E000E000E000E000E000E000600060006000700030003000300018
26600180018000C00040006000300010000800040002000100C327DA413>I<800040002000100008
267000C0006000200030001800180018000C000C000C000E000600060006000700070007000700070
268007000700070007000700070007000600060006000E000C000C000C00180018001800300020006
269000C00080010002000400080000C327DA413>I<70F8FCFC7404040404080810102040060F7C84
2700E>44 D<FFF0FFF00C027F8B11>I<70F8F8F87005057C840E>I<01F800070E000E07001C038038
27101C03801C07801E07000E07000E07000E0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F0
27200F0F000F0F000F0F000F0F000F0F000F0F000F07000E07000E07000E07801E03801C03801C01C
27303800E0700070E0001F80014227EA019>48 D<004001C007C0FFC0F9C001C001C001C001C001C0
27401C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001
275C001C07FFF7FFF10217CA019>I<03F8000FFE00181F802007C04003C04001E0F801E0FC01F0FC
27600F0FC00F07800F03001F00001E00001E00003E00003C0000780000700000E00001C0000380000
277700000E0000080000100000200100400100800101000302000207FFFE0FFFFE0FFFFE014217EA0
27819>I<01F8000FFE001C0F803003C03803C07C03E07C01E07C01E03C03E01803E00003C0000380
279000780000E00001C0003F800000E000007800003C00003E00001E00001F00001F03001F07801F0
280FC01F0FC01F0FC01E0F803E04003C02007801C0F000FFE0003F80014227EA019>I<0003000003
28100000700000F00000F0000170000370000270000470000C7000087000107000307000207000407
282000C0700080700100700300700200700400700C00700FFFFFCFFFFFC0007000007000007000007
2830000070000070000070000FFF800FFF816217FA019>I<1800401E03801FFF801FFF001FFC0013
284F00010000010000010000010000010000010000010FC001306001403801801801001C00000E000
28500E00000F00000F00000F07000F0F800F0F800F0F800F0F800E0C001E04001C06003C03003801C
2860F000FFE0003F00014227EA019>I<003E0000FF8003C0C00700E00E01E01C03E01C03E03801C0
287380000780000700000700000F0F800F30600F40300F40180F801C0F800E0F000E0F000F0F000F0
288F000F0F000F0F000F07000F07000F07800E03800E03801E01C01C01C03800F070003FE0001F800
28914227EA019>I<4000006000007FFFF07FFFF07FFFE0400020C000408000808001008001000002
2900000040000040000080000180000100000300000300000700000700000E00000E00000E00001E0
2910001E00001E00001E00003E00003E00003E00003E00003E00003E00003E00001C00014237DA119
292>I<01F80007FE000E07801801C03000C02000606000606000606000607000607800C03E00801F
29381001FC60007FC0003F80001FE00067F000C1F80100FC03003E06001E0600070C00070C00030C0
2940030C00030C000306000607000403800C01E07800FFE0001F80014227EA019>I<01F80007FE00
2950E0F001C03803803807801C07001C07001E0F000E0F000E0F000F0F000F0F000F0F000F0F000F0
2967000F07001F03801F01802F00C02F0060CF001F0F00000E00000E00001E00001C03801C07C0380
2977C0380780700300E00303C001FF80007E00014227EA019>I<70F8F8F870000000000000000000
298000070F8F8F87005157C940E>I<70F8F8F870000000000000000000000070F8F8F87808080808
299101010204040051F7C940E>I<0001800000018000000180000003C0000003C0000003C0000005
300E0000005E0000005E0000008F0000008F0000008F00000107800001078000010780000203C0000
301203C0000603E0000401E0000401E0000C01F0000800F0000FFFF0001FFFF800100078001000780
302020003C0020003C0020003C0040001E0040001E00C0001E01E0001F0FFC01FFFFFC01FFF20237E
303A225>65 D<FFFFF800FFFFFE0007800F80078007C0078003E0078001E0078001F0078001F00780
30401F0078001F0078001F0078001E0078003E0078007C007800F8007803E0007FFFE000780078007
3058003C0078001E0078001F0078000F0078000F8078000F8078000F8078000F8078000F8078000F8
306078001F0078003F0078007E007800FC0FFFFFF00FFFFFC001D227EA123>I<0007F008003FFC18
30700FC061801F0013803C000F8078000780F0000381E0000381E0000183C0000183C0000187C0000
308087C00000878000008F8000000F8000000F8000000F8000000F8000000F8000000F8000000F800
3090000780000007C0000087C0000083C0000083C0000081E0000101E0000100F0000200780002003
310C0004001F0018000FC0700003FFC000007F0001D247DA224>I<FFFFF800FFFFFE0007800F8007
3118003C0078001E0078000F007800078078000780780003C0780003C0780001E0780001E0780001E
3120780001F0780001F0780001F0780001F0780001F0780001F0780001F0780001F0780001F078000
3131E0780001E0780003E0780003C0780003C07800078078000F0078001E0078003C007800F80FFFF
314FF00FFFFF80020227EA126>I<FFFFFFE0FFFFFFE0078003E0078000E007800060078000200780
3150030078000300780001007802010078020100780201007802000078060000780E00007FFE00007
316FFE0000780E0000780600007802000078020000780200407802004078000040780000807800008
3170780000807800018078000180780003807800078078001F0FFFFFFF0FFFFFFF01E227EA122>I<
318FFFFFFE0FFFFFFE0078003E0078000E00780006007800020078000300780003007800010078000
3191007802010078020100780200007802000078060000780E00007FFE00007FFE0000780E0000780
320600007802000078020000780200007802000078000000780000007800000078000000780000007
3218000000780000007800000FFFE0000FFFE00001C227EA121>I<0007F008003FFC1800FC061801
322F0013803C000F8078000780F0000381E0000381E0000183C0000183C0000187C0000087C000008
32378000008F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8001FFF78001F
324FF7C0000787C0000783C0000783C0000781E0000781F0000780F0000780780007803C000B801F0
32501B800FC0718003FFC080007F00020247DA227>I<FFFC3FFFFFFC3FFF078001E0078001E00780
32601E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E007
3278001E007FFFFE007FFFFE0078001E0078001E0078001E0078001E0078001E0078001E0078001E0
328078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0FFFC3FFFFFFC3F
329FF20227EA125>I<FFFCFFFC078007800780078007800780078007800780078007800780078007
330800780078007800780078007800780078007800780078007800780078007800780FFFCFFFC0E22
3317EA112>I<07FFF007FFF0000F00000F00000F00000F00000F00000F00000F00000F00000F0000
3320F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F0000
3330F00300F00780F00FC0F00FC0F00FC0E00F81E00401C0020380018700007C00014237EA11A>I<
334FFFC01FF80FFFC01FF800780007800078000600007800040000780008000078001000007800200
33500078004000007800800000780100000078020000007804000000780C000000781C000000783E0
33600000784F000000788F00000079078000007A03C000007C03C000007801E000007800F00000780
3370F00000780078000078003C000078003C000078001E000078000F000078000F000078000780007
3388000FC00FFFC03FFC0FFFC03FFC022227EA127>I<FFFE0000FFFE000007800000078000000780
339000007800000078000000780000007800000078000000780000007800000078000000780000007
340800000078000000780000007800000078000000780000007800000078000400780004007800040
34107800040078000C0078000C00780008007800180078003800780078007801F80FFFFFF80FFFFFF
342801A227EA11F>I<FF800001FF80FF800001FF8007800001F00005C00002F00005C00002F00004
343E00004F00004E00004F00004E00004F00004700008F00004700008F00004380010F00004380010
344F00004380010F000041C0020F000041C0020F000041C0020F000040E0040F000040E0040F00004
345070080F00004070080F00004070080F00004038100F00004038100F00004038100F0000401C200
346F0000401C200F0000400E400F0000400E400F0000400E400F00004007800F00004007800F0001F
347003000F000FFE0301FFF80FFE0301FFF8029227EA12E>I<FF8007FFFFC007FF07C000F805E000
3482004F0002004F0002004780020047C0020043C0020041E0020041E0020040F0020040780200407
34980200403C0200401E0200401E0200400F0200400F8200400782004003C2004003C2004001E2004
350000F2004000F20040007A0040003E0040003E0040001E0040001E0040000E01F000060FFE00060
351FFE0002020227EA125>I<000FF00000381C0000E0070001C00380078001E0070000E00E000070
3521E0000783C00003C3C00003C7C00003E7C00003E7800001E7800001EF800001FF800001FF80000
3531FF800001FF800001FF800001FF800001FF800001FF800001F7C00003E7C00003E7C00003E3C00
354003C3E00007C1E0000780F0000F00F0000F0078001E003C003C000E0070000381C00000FF00020
355247DA227>I<FFFFF800FFFFFE0007801F00078007C0078003C0078001E0078001E0078001F007
3568001F0078001F0078001F0078001F0078001E0078003E0078003C00780078007801F0007FFFC00
357078000000780000007800000078000000780000007800000078000000780000007800000078000
3580007800000078000000780000007800000FFFC0000FFFC00001C227EA122>I<FFFFE00000FFFF
359FC000007801F00000780078000078003C000078003E000078001E000078001F000078001F00007
3608001F000078001F000078001E000078003E000078003C000078007000007803E000007FFF00000
361078038000007801C000007800E000007800F000007800700000780078000078007800007800780
362000780078000078007C000078007C000078007C000078007C040078007E040078003E040FFFC01
363E080FFFC00F1000000003E0022237EA125>82 D<03F8100FFE301E07303801F07000F0700070E0
3640030E00030E00010E00010E00010F00000F000007C00007F00003FF0001FFE000FFF8003FFC000
3653FE00003F00000F0000070000078000038800038800038800038800038C00030C00070E00060F8
36600E0CF03C0C7FF0080FE0015247DA21C>I<7FFFFFFC7FFFFFFC7803C03C6003C00C4003C00440
36703C004C003C006C003C0068003C0028003C0028003C0028003C0020003C0000003C0000003C000
3680003C0000003C0000003C0000003C0000003C0000003C0000003C0000003C0000003C0000003C0
369000003C0000003C0000003C0000003C0000003C0000003C0000003C00001FFFF8001FFFF801F22
3707EA124>I<FFFC07FFFFFC07FF078000F807800020078000200780002007800020078000200780
371002007800020078000200780002007800020078000200780002007800020078000200780002007
372800020078000200780002007800020078000200780002007800020078000200380004003C00040
37303C0004001C0008000E0018000700300003C0E00001FF8000003F00020237EA125>I<FFF800FF
374C0FFF800FFC00F80001E000780000800078000080003C000100003C000100003C000100001E000
375200001E000200001F000200000F000400000F0004000007800800000780080000078008000003C
376010000003C010000003C010000001E020000001E020000001F060000000F040000000F04000000
37707880000000788000000078800000003D000000003D000000003F000000001E000000001E00000
3780000C000000000C000000000C0000022237FA125>I<FFF83FFE03FFFFF83FFE03FF0F8003E000
379780F0001E00030078001E00020078001E00020078001F0002003C001F0004003C001F0004003C0
3800278004001E00278008001E00278008001E0043C008000F0043C010000F0043C010000F0081E01
3810000F8081E03000078081E02000078181F02000078100F0200003C100F0400003C100F0400003C
38220078400001E20078800001E20078800001E4003C800000F4003D000000F4003D000000F8001F0
3830000078001E00000078001E00000070000E00000070000E00000030000C0000002000040003023
3847FA133>I<7FFC0FFF007FFC0FFF0003E001F00003E000C00001F000800000F001000000F80200
385000078020000003C040000003E080000001E080000000F100000000FB000000007A000000003C0
38600000003E000000001E000000001F000000003F80000000278000000047C0000000C3C00000008
3871E000000101F000000300F00000020078000004007C00000C003C000008001E000010001F00003
3880000F0000F8001F800FFE007FFC0FFE007FFC022227FA125>I<FFF8007FC0FFF8007FC00F8000
3891E0007C000180003C000100003E000100001E000200001F000600000F00040000078008000007C
390008000003C010000003E030000001E020000000F040000000F84000000078800000007D8000000
39103D000000003E000000001E000000001E000000001E000000001E000000001E000000001E00000
3920001E000000001E000000001E000000001E000000001E000000001E00000003FFF0000003FFF00
3930022227FA125>I<FEFEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
394C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FEFE07317BA40E>91 D<08021004200820084010401080
39520802080208020B82EFC3FFC3F7C1F380E100F7AA219>I<FEFE06060606060606060606060606
3960606060606060606060606060606060606060606060606060606060606060606FEFE07317FA40E
397>I<1FF000381C007C06007C07007C0380380380000380000380007F8007C3801E03803C038078
3980380780380F00384F00384F00384F00784780B843C11C80FE0F016157E9419>97
399D<0E0000FE0000FE00001E00000E00000E00000E00000E00000E00000E00000E00000E00000E00
400000E00000E1F800E60E00E80300F00380E001C0E001E0E000E0E000F0E000F0E000F0E000F0E00
4010F0E000F0E000F0E000E0E001E0E001C0F00380C80700C60E0081F8018237FA21C>I<01FE0007
40207000C0F801C0F80380F80780700700000F00000F00000F00000F00000F00000F00000F0000070
40300007800403800401C00800C010007060001F80012157E9416>I<0000700007F00007F00000F0
40400007000007000007000007000007000007000007000007000007000007001F8700706700E0170
4051C00F0380070780070700070F00070F00070F00070F00070F00070F00070F00070700070780070
4063800701C00F00C017807067F01F87F18237EA21C>I<01FC000707000C03801C01C03801C07800
407E07000E0F000E0FFFFE0F00000F00000F00000F00000F000007000007800203800201C00400E00
4088007030000FC0013157F9416>I<003E0000E30001C780038F80030F8007070007000007000007
4090000070000070000070000070000070000FFF800FFF80007000007000007000007000007000007
41000000700000700000700000700000700000700000700000700000700000700000700007FF8007F
411F800112380A20F>I<00007801F08C071D1C0E0E1C1C07001C07003C07803C07803C07803C0780
4121C07001C07000E0E000F1C0019F0001000001000001800001C00001FFF000FFFE00FFFF03800F8
41360001840001CC0000CC0000CC0000C6000186000183800700E01C001FE0016217F9519>I<0E00
4140000FE000000FE0000001E0000000E0000000E0000000E0000000E0000000E0000000E0000000E
4150000000E0000000E0000000E0000000E1F80000E60E0000E8070000F0038000F0038000E003800
4160E0038000E0038000E0038000E0038000E0038000E0038000E0038000E0038000E0038000E0038
417000E0038000E0038000E003800FFE3FF80FFE3FF8019237FA21C>I<1C003E003E003E001C0000
4180000000000000000000000000000000E00FE00FE001E000E000E000E000E000E000E000E000E00
4190E000E000E000E000E000E000E00FFC0FFC00A227FA10E>I<00E001F001F001F000E000000000
42000000000000000000000000000F007F007F000F000700070007000700070007000700070007000
42170007000700070007000700070007000700070007000707070F870F8E0F8C071801F000C2C82A1
4220F>I<0E0000FE0000FE00001E00000E00000E00000E00000E00000E00000E00000E00000E0000
4230E00000E00000E03FC0E03FC0E01E00E01800E02000E04000E08000E10000E38000EF8000F1C00
4240E1E000E0E000E07000E07800E03C00E01C00E01E00E01F0FFE3FEFFE3FE17237FA21A>I<0E00
425FE00FE001E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E
426000E000E000E000E000E000E000E000E000E000E000E000E00FFE0FFE00B237FA20E>I<0E1FC0
4277F00FE60E18380FE807201C01F003C00E00F003C00E00E003800E00E003800E00E003800E00E00
4283800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E
429003800E00E003800E00E003800E0FFE3FF8FFEFFE3FF8FFE27157F942A>I<0E1F8000FE60E000
430FE8070001F0038000F0038000E0038000E0038000E0038000E0038000E0038000E0038000E0038
431000E0038000E0038000E0038000E0038000E0038000E0038000E003800FFE3FF80FFE3FF801915
4327F941C>I<00FC000703800E01C01C00E0380070780078700038F0003CF0003CF0003CF0003CF0
433003CF0003CF0003C7000387800783800701C00E00E01C007038000FC0016157F9419>I<0E1F80
434FE60E0FE80700F00380E001C0E001E0E001E0E000F0E000F0E000F0E000F0E000F0E000F0E000F
4350E001E0E001E0E001C0F00380E80700E60E00E1F800E00000E00000E00000E00000E00000E0000
4360E00000E0000FFE000FFE000181F7F941C>I<01F8200704600E02601C01603801E07800E07800
437E0F000E0F000E0F000E0F000E0F000E0F000E0F000E07000E07800E03801E01C01E00C02E0070C
438E001F0E00000E00000E00000E00000E00000E00000E00000E00000E0000FFE000FFE171F7E941A
439>I<0E1E00FE6300FE87801E87800F03000F00000E00000E00000E00000E00000E00000E00000E
44000000E00000E00000E00000E00000E00000E0000FFF000FFF00011157F9414>I<0FC4303C600C
441C00CC004C004E004F0007F803FF00FF800FC001E800E8006C006C006C004E00CD81887E00F157E
4429414>I<020002000200020002000600060006000E001E003FF8FFF80E000E000E000E000E000E
443000E000E000E000E000E040E040E040E040E040E040708030801F00E1F7F9E13>I<0E003800FE
44403F800FE03F8001E0078000E0038000E0038000E0038000E0038000E0038000E0038000E003800
4450E0038000E0038000E0038000E0038000E0038000E0078000E0078000700BC0003833F8000FC3F
4468019157F941C>I<FFC1FEFFC1FE1E00700E00200E002007004007004003808003808003808001
447C10001C10000E20000E20000E20000740000740000380000380000380000100017157F941A>I<
448FF8FF87F80FF8FF87F801E01C01E000E00C00C000E00E008000E01E00800070160100007017010
4490007023030000382382000038238200001C418400001C41C400001C41C400000E80C800000E80E
450800000E80E8000007007000000700700000070070000002002000021157F9424>I<FF83FEFF83
451FE0F01E007008003810003830001C20000E400007800007000003800003C00004E00008E000187
452000103800201C00601C01E00E0FF03FEFF03FE17157F941A>I<FFC1FEFFC1FE1E00700E00200E
453002007004007004003808003808003808001C10001C10000E20000E20000E20000740000740000
4543800003800003800001000001000002000002000002000F84000F84000F88000B980006300003E
4550000171F7F941A>I<3FFFC0380380300780200700600E00401C00403C0040380000700000E000
45601E00001C0000380400700400F00400E00C01C0080380080780180700780FFFF8012157F9416>
457I<FFFFFF1801808C19>I<0E011F02318C40F8807010057CA019>126 D E
458/Fg 25 121 df<F8F8F8F8F805057B8410>46 D<0003F000000003F000000007F800000007F800
459000007780000000F3C0000000F3C0000000F3C0000001E3E0000001E1E0000001E1E0000003E1F
4600000003C1F0000007C0F8000007C0F800000780F800000F807C00000F807C00000F007C00001F0
46103E00001F003E00001E003E00003E001F00003E001F00003C001F00007C000F80007FFFFF80007
462FFFFF8000FFFFFFC000F80007C000F00007C001F00003E001F00003E001E00003E003E00001F00
4633E00001F003C00001F007C00000F807C00000F80F800000FC0F8000007C0F8000007C0222A7EA9
46427>65 D<0003FE00000FFFC0003FFFF000FFFFF001FE03F003F8006007E0002007C000000F8000
465001F8000001F0000003E0000003E0000007C0000007C0000007C0000007C000000F8000000F800
4660000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F80000007C0000007C
4670000007C0000007C0000003E0000003E0000001F0000001F8000000F80000007C0000007E00008
46803F8003801FE01F800FFFFF8003FFFF0000FFFC00003FE001D2C7CAA25>67
469D<FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC0F8000000F8000000F8000000F8000000F8000000F800
4700000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000FFFFFF00FF
471FFFF00FFFFFF00FFFFFF00F8000000F8000000F8000000F8000000F8000000F8000000F8000000
472F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000FFFFFF
473E0FFFFFFE0FFFFFFE0FFFFFFE01B2A7BA923>69 D<F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8
474F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8052A7BA910>73
475D<F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F800
47600F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F800
47700F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000FFFF
478FFFFFFFFFFFFFFFFFFFF182A7BA920>76 D<FFFFE000FFFFFC00FFFFFF00F8003F80F8000FC0F8
4790003E0F80001F0F80001F0F80000F8F80000F8F80000F8F80000F8F80000F8F80000F8F80001F0
480F80001F0F80003E0F8000FE0F8003FC0FFFFFF80FFFFFE00FFFFF800FFFFE000F801F000F801F0
48100F800F800F800F800F8007C00F8003C00F8003E00F8001E00F8001F00F8000F80F8000F80F800
48207C0F80007C0F80003E0F80001E0F80001F0F80000F8F80000F8F800007C1E2A7BA926>82
483D<01FC000FFF003FFF803FFFC03C07E03003E00001F00001F00001F00001F00001F00003F001FF
484F007FFF01FFFF03FC1F07E01F0FC01F0F801F0F801F0F801F0FC03F07E0FF07FFFF03FFFF01FF9
485F00FE1F0141B7E9A1C>97 D<F80000F80000F80000F80000F80000F80000F80000F80000F80000
486F80000F80000F80000F80000F80000F80000F87E00F9FF80FFFFC0FFFFE0FF07E0FC03F0F801F8
487F800F8F800F8F8007CF8007CF8007CF8007CF8007CF8007CF8007CF8007CF800FCF800F8F800F8
488F801F0FC03F0FE0FE0FFFFC0FFFF80FBFF00F8FC00162A7BA91E>I<007F8001FFE007FFF80FFF
489F81FC0783F00103E00007C00007C00007C0000F80000F80000F80000F80000F80000F80000F800
490007C00007C00007C00003E00003F00181FC0780FFFF807FFF801FFE0007F80151B7E9A1A>I<00
491007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00
492007C00007C00FC7C03FF7C07FFFC0FFFFC1FC1FC3F00FC3E007C7C007C7C007CFC007CF8007CF8
493007CF8007CF8007CF8007CF8007CF8007CF8007C7C007C7C007C7E00FC3F00FC1F83FC1FFFFC0F
494FF7C03FE7C01F87C162A7EA91E>I<00FC0003FF0007FF800FFFC01F87E03F01E03E00F07C00F0
4957C0070F80078FFFFF8FFFFF8FFFFF8FFFFF8F80000F80000F800007800007C00007C00003E0000
4963F00181FC0F80FFFF807FFF801FFE0007F00151B7E9A1A>I<001FC0007FC000FFC001FFC003F0
4970003E00007C00007C00007C00007C00007C00007C00007C00007C00007C000FFFE00FFFE00FFFE
4980007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C0
4990007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C000122A7FA912
500>I<00F80F0003FE7F800FFFFF801FFFFF801F07C0003E03E0003E03E0007C01F0007C01F0007C
50101F0007C01F0007C01F0003E03E0003E03E0001F07C0001FFFC0003FFF80003BFE000038F80000
50278000000780000007C0000003FFF80003FFFF0001FFFF8001FFFFC003FFFFE007C00FE007C003F
50300F8001F00F8001F00F8001F00F8001F00FC003F007E007E003F81FC001FFFF8000FFFF00007FF
504E00000FF000019287E9A1D>I<F8F8F8F8F800000000000000000000F8F8F8F8F8F8F8F8F8F8F8
505F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8052A7CA90E>105 D<F8F8F8F8F8F8F8F8F8F8F8F8F8F8
506F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8052A7CA90E>108
507D<F83F007E00F9FF83FF00FBFFC7FF80FFFFEFFFC0FF07FE0FC0FE03FC07E0FC01F803E0FC01F8
50803E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801
509F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F8
51001F003E0F801F003E0F801F003E0F801F003E0231B7B9A2E>I<F87E00F9FF00FBFF80FFFFC0FF
5110FC0FE07E0FC03E0FC03E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F8
51203E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0131B7B9A1E>I<007E00
51301FF8007FFE00FFFF01F81F83F00FC3E007C7C003E7C003E78001EF8001FF8001FF8001FF8001F
514F8001FF8001FF8001F7C003E7C003E7C003E3E007C3F00FC1FC3F80FFFF007FFE003FFC0007E00
515181B7E9A1D>I<F87E00F9FF80FFFFC0FFFFE0FF0FE0FC03F0F801F8F800F8F800F8F800FCF800
5167CF8007CF8007CF8007CF8007CF8007CF8007CF800FCF800F8F801F8F801F0FC03F0FE0FE0FFFF
517C0FFFF80FBFF00F8FC00F80000F80000F80000F80000F80000F80000F80000F80000F80000F800
51800F80000F8000016277B9A1E>I<F838F8F8F9F8FBF8FFC0FF00FE00FE00FC00FC00F800F800F8
51900F800F800F800F800F800F800F800F800F800F800F800F800F800F8000D1B7B9A14>114
520D<07F8001FFF003FFF807FFF807C0780F80100F80000F80000F80000FC00007F00007FF0003FFC
521001FFE0007FF0000FF80001FC0000FC00007C00007C04007C0E007C0FC1F80FFFF807FFF001FFE
5220007F800121B7E9A16>I<07C00007C00007C00007C00007C00007C00007C000FFFF80FFFF80FF
523FF8007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007
524C00007C00007C00007C00007C00007C00007C08007E38003FFC003FFC001FF0000FC0012227FA1
52515>I<F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0
526F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F807E0F807E0FC1FE0FFFFE07FFBE0
5273FF3E01F83E0131B7B9A1E>I<7C001F803E003F003F003E001F807C000F80FC0007C0F80007E1
528F00003F3E00001F7E00000FFC000007F8000007F0000003E0000003E0000003F0000007F800000
529FFC00001F3E00003E1E00003E1F00007C0F8000F807C001F807C001F003E003E001F007C001F80
530FC000FC01A1B809A1B>120 D E /Fh 69 126 df<701CF01EF01EF01EF01EF01EF01EF01EF01E
531701C701C701C701C600C0F0E7B9D1A>34 D<01818003C3C003C3C003C3C003C3C003C3C003C3C0
5327FFFF0FFFFF8FFFFF8FFFFF80787800787800787800F8F800F0F000F0F000F0F000F0F00FFFFF8
533FFFFF8FFFFF87FFFF01E1E001E1E001E1E001E1E001E1E001E1E000C0C00151E7E9D1A>I<1C3E
5343E3F1F070707070E0E1C3C78F0600810789D1A>39 D<0038007800F001E003C007800F000E001C
535001C0038003800700070007000E000E000E000E000E000E000E000E000E000E000700070007000
536380038001C001C000E000F00078003C001E000F8007800380D2878A21A>I<6000F00078003C00
5371E000F000780038001C001C000E000E00070007000700038003800380038003800380038003800
53838003800700070007000E000E001C001C0038007800F001E003C007800F00060000D287CA21A>
539I<00E00000E00000E00000E00040E040F0E1E0F8E3E07EEFC01FFF0007FC0003F80007FC001FFF
540007EEFC0F8E3E0F0E1E040E04000E00000E00000E00000E00013157D991A>I<00300000780000
54178000078000078000078000078000078000078007FFFF0FFFFF8FFFFF87FFFF000780000780000
542780000780000780000780000780000780000300015167E991A>I<183E7E7F3F1F070E0E1CFCF8
543E0080D77851A>I<7FFFC0FFFFE0FFFFE07FFFC013047D901A>I<3078FCFC7830060676851A>I<
5440000C00001E00001E00003E00003C00007C0000780000F80000F00000F00001F00001E00003E00
545003C00007C0000780000780000F80000F00001F00001E00003E00003C00003C00007C000078000
5460F80000F00001F00001E00001E00003E00003C00007C0000780000F80000F00000F00000600000
54713277DA21A>I<01F00007FC000FFE001F1F001C07003803803803807001C07001C07001C0E000
548E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0F001E07001C07001C07803C03803
549803C07801C07001F1F000FFE0007FC0001F000131E7D9D1A>I<00C001C001C003C007C00FC07F
550C0FDC071C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C0
55101C07FFFFFFF7FFF101E7B9D1A>I<03F0000FFC001FFF003C0F807803C07001C0E000E0F000E0
552F000E06000E00000E00000E00001C00001C0000380000780000F00000E00003C00007C0000F000
55301E00003C0000780000F00001E00E03C00E07FFFE0FFFFE07FFFE0131E7D9D1A>I<01FC0007FF
554001FFF801E03C03C01C03C00E03C00E00000E00000E00001C00003C000078001FF0001FF0001FF
555C00003E00000F0000070000038000038000038600038F00038F00038E000707000F07E03E03FFF
556C00FFF0001FC00151E7E9D1A>I<000F80001F80003F80003B80007B8000F38000E38001E38003
557C3800383800783800F03800E03801E03803C0380380380780380F00380FFFFFEFFFFFEFFFFFE00
5580380000380000380000380000380000380007FFC007FFC007FFC171E7F9D1A>I<3078FCFC7830
5590000000000000000003078FCFC7830061576941A>58 D<183C7E7E3C1800000000000000000018
5603C7E7E3E1E0E0E1C3CF8F0C0071C77941A>I<7FFFF0FFFFF8FFFFF87FFFF00000000000000000
561000000007FFFF0FFFFF8FFFFF87FFFF0150C7E941A>61 D<003E0001FF0003FF8007C3C00F01C0
5621E0EE03C3FE0387FE07071F070E0F070E0F0E1C070E1C070E1C070E1C070E1C070E1C070E1C070
563E1C07070E0E070E0E07071C0387FC03C3F801E0E000F007007C1F003FFE001FFC0003F00141E7E
5649D1A>64 D<003800007C00007C00006C0000EE0000EE0000EE0000EE0000C60001C70001C70001
565C70001C7000383800383800383800383800783C00701C007FFC007FFC007FFC00E00E00E00E00E
56600E00E00E01C00707F83FCFF83FE7F83FC171E7F9D1A>I<FFFE00FFFF80FFFFC01C03E01C00E0
5671C00F01C00701C00701C00701C00701C00E01C01E01C07C01FFF801FFF801FFFC01C01E01C00F0
5681C00701C00381C00381C00381C00381C00381C00781C00F01C01F0FFFFE0FFFFC0FFFF00151E7E
5699D1A>I<007C3801FF3807FFF80F83F81E00F81C0078380078380038700038700038700000E000
57000E00000E00000E00000E00000E00000E00000E000007000007000387000383800383800381C00
571701E00F00F83E007FFC001FF80007C00151E7E9D1A>I<FFFE00FFFF00FFFF801C07C01C01E01C
57200F01C00701C00781C00381C00381C003C1C001C1C001C1C001C1C001C1C001C1C001C1C001C1C
573001C1C003C1C00381C00381C00781C00701C00F01C01E01C07C0FFFFC0FFFF00FFFE00161E7F9D
5741A>I<7FFFFCFFFFFC7FFFFC0E001C0E001C0E001C0E001C0E001C0E00000E00000E07000E0700
5750E07000FFF000FFF000FFF000E07000E07000E07000E00000E00000E00000E000E0E000E0E000E
5760E000E0E000E7FFFFEFFFFFE7FFFFE171E7F9D1A>I<7FFFFCFFFFFC7FFFFC0E001C0E001C0E00
5771C0E001C0E001C0E00000E00000E07000E07000E07000FFF000FFF000FFF000E07000E07000E07
578000E00000E00000E00000E00000E00000E00000E00000E00007FE000FFF0007FE000161E7F9D1A
579>I<00F8E003FEE007FFE00F07E01E03E03C01E03800E07000E07000E07000E0E00000E00000E0
5800000E00000E00000E00000E00FF8E00FF8E00FF8E000E07000E07000E07001E03801E03C03E01E
58103E00F07E007FFE003FEE000F8E0151E7E9D1A>I<FF8FF8FF8FF8FF8FF81C01C01C01C01C01C0
5821C01C01C01C01C01C01C01C01C01C01C01C01C01C01FFFC01FFFC01FFFC01C01C01C01C01C01C0
5831C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C0FF8FF8FF8FF8FF8FF8151E7E9D1A>
584I<FFFF80FFFF80FFFF8001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0
5850001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0
5860001C000FFFF80FFFF80FFFF80111E7C9D1A>I<03FFC003FFE003FFC0000E00000E00000E0000
5870E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0000
5880E00000E00000E00000E00600E00F00E00F01E00F03C007FF8003FF0000FC000131E7C9D1A>I<
589FF83F8FF87FCFF83F81C01E01C03C01C03801C07001C0F001C1E001C1C001C38001C78001CF000
5901CF8001DF8001FDC001F9C001F0E001E0F001E07001C07801C03801C01C01C01C01C00E01C00E0
5911C0070FF81FCFF81FEFF81FC171E7F9D1A>I<7FE000FFF0007FE0000E00000E00000E00000E00
592000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00
593000E00000E00000E00380E00380E00380E00380E00387FFFF8FFFFF87FFFF8151E7E9D1A>I<7E
594003F00FF007F807F007F001D80DC001D80DC001D80DC001DC1DC001DC1DC001CC19C001CC19C00
5951CE39C001CE39C001C631C001C771C001C771C001C361C001C361C001C3E1C001C1C1C001C1C1C
596001C001C001C001C001C001C001C001C001C001C001C001C001C001C007F007F00FF80FF807F00
5977F00191E809D1A>I<FE0FF8FF0FF8FF0FF81D81C01D81C01D81C01D81C01DC1C01CC1C01CC1C0
5981CE1C01CE1C01C61C01C61C01C71C01C71C01C31C01C31C01C39C01C39C01C19C01C19C01C1DC0
5991C0DC01C0DC01C0DC01C0DC0FF87C0FF87C0FF83C0151E7E9D1A>I<0FFE003FFF807FFFC07C07
600C07001C0F001E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000
601E0E000E0E000E0E000E0E000E0E000E0E000E0F001E0F001E07001C07C07C07FFFC03FFF800FFE
60200131E7D9D1A>I<7FFF00FFFFC07FFFE00E01F00E00780E00380E003C0E001C0E001C0E001C0E
603001C0E003C0E00380E00780E01F00FFFE00FFFC00FFF000E00000E00000E00000E00000E00000E
60400000E00000E00000E00007FC000FFE0007FC000161E7F9D1A>I<FFF000FFFC00FFFF001C0F80
6051C07801C03C01C01C01C01C01C01C01C01C01C03C01C07801C0F801FFF001FFC001FFE001C0F00
6061C07001C03801C03801C03801C03801C03801C03841C038E1C038E1C038EFF81FCFF81FCFF8070
607171E7E9D1A>82 D<03F1C00FFDC03FFFC07C0FC07003C0E003C0E001C0E001C0E001C0E0000070
60800007800003F00001FF00007FE0000FF00000F800003C00001C00000E00000E06000E0E000E0E0
60900E0E001C0F001C0FC0780FFFF80EFFE00E3F800131E7D9D1A>I<7FFFFEFFFFFEFFFFFEE0380E
610E0380EE0380EE0380EE0380E003800003800003800003800003800003800003800003800003800
61100380000380000380000380000380000380000380000380000380000380003FF8007FFC003FF80
612171E7F9D1A>I<7FC1FF00FFE3FF807FC1FF000E0038000E0038000E0038000E0038000E003800
6130E0038000E0038000E0038000E0038000E0038000E0038000E0038000E0038000E0038000E0038
614000E0038000E0038000E0038000E0038000E00380007007000070070000380E00003C1E00001FF
615C00000FF8000003E0000191E809D1A>I<3FFFF87FFFF87FFFF87000707000E07001E07001C070
6160380000780000700000E00001E00001C0000380000780000F00000E00001C00003C00003800007
61700000F00380E00381C00383C0038380038700038FFFFF8FFFFF8FFFFF8151E7E9D1A>90
618D<FFF8FFF8FFF8E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000
619E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000FFF8FFF8FF
620F80D2776A21A>I<FFF8FFF8FFF800380038003800380038003800380038003800380038003800
621380038003800380038003800380038003800380038003800380038003800380038003800380038
6220038FFF8FFF8FFF80D277EA21A>93 D<7FFFC0FFFFE0FFFFE07FFFC013047D7E1A>95
623D<1FF0003FFC007FFE00780F00300700000380000380007F8007FF801FFF803F83807803807003
62480E00380E00380E00380700780780F803FFFFC1FFDFC07F0FC16157D941A>97
625D<FE0000FE0000FE00000E00000E00000E00000E00000E00000E00000E3E000EFF800FFFE00FC1
626F00F80700F00380E00380E001C0E001C0E001C0E001C0E001C0E001C0E001C0F00380F00780F80
627F00FC1E00FFFC00EFF80063E00161E7F9D1A>I<00FF8003FFC00FFFE01F01E03C00C078000070
6280000700000E00000E00000E00000E00000E000007000007000007800703C00701F01F00FFFE003
629FFC000FE0014157D941A>I<001FC0001FC0001FC00001C00001C00001C00001C00001C00001C0
63001F1C007FDC00FFFC01E0FC03C07C07803C07001C0E001C0E001C0E001C0E001C0E001C0E001C0
631E001C07003C07003C03807C03E0FC01FFFFC07FDFC01F1FC161E7E9D1A>I<01F80007FF000FFF
632801E07C03C01C07800E07000E0E00070E00070FFFFF0FFFFF0FFFFF0E000007000007000007800
633703C00701F01F00FFFE003FFC000FE0014157D941A>I<0007E0001FF0003FF800787800F03000
634E00000E00000E00000E0007FFFF0FFFFF0FFFFF000E00000E00000E00000E00000E00000E00000
635E00000E00000E00000E00000E00000E00000E00000E00000E0007FFFC07FFFC07FFFC0151E7F9D
6361A>I<00F87C03FFFE07FFFE0F078C0E03801C01C01C01C01C01C01C01C01C01C00E03800F0780
6370FFF000FFE001CF8001C00001C00000E00000FFF800FFFE03FFFF87C007C70001CE0000EE0000E
638E0000EE0000E70001C78003C3E00F81FFFF007FFC001FF0017217F941A>I<FE0000FE0000FE00
639000E00000E00000E00000E00000E00000E00000E3E000EFF800FFFC00FC1C00F80E00F00E00E00
640E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0FFE3FEFFE3
641FEFFE3FE171E7F9D1A>I<01C00003E00003E00003E00001C00000000000000000000000000000
64200007FE000FFE0007FE00000E00000E00000E00000E00000E00000E00000E00000E00000E00000
643E00000E00000E00000E00000E00000E000FFFFC0FFFFC0FFFFC0121F7C9E1A>I<001C003E003E
644003E001C000000000000000000000FFE0FFE0FFE000E000E000E000E000E000E000E000E000E00
6450E000E000E000E000E000E000E000E000E000E000E000E000E000E001C601CF038FFF87FF01FC0
6460F2A7E9E1A>I<FFE000FFE000FFE00000E00000E00000E00000E00000E00000E00000E00000E0
6470000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0
6480000E00000E00000E000FFFFE0FFFFE0FFFFE0131E7D9D1A>108 D<7CE0E000FFFBF8007FFFF8
649001F1F1C001E1E1C001E1E1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C
6501C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C007F1F1F00FF9F9F807F1F1F00191580941A
651>I<FE3E00FEFF80FFFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E
65200E00E00E00E00E00E00E00E00E00E00E0FFE3FEFFE3FEFFE3FE17157F941A>I<01F00007FC00
6531FFF003E0F803C07807803C07001C0E000E0E000E0E000E0E000E0E000E0E000E0F001E07001C0
6547803C03C07803E0F801FFF0007FC0001F00013157D941A>I<FE3E00FEFF80FFFFE00FC1F00F80
655700F00380E00380E001C0E001C0E001C0E001C0E001C0E001C0E001C0F00380F00780F80F00FC1
656E00FFFC00EFF800E3E000E00000E00000E00000E00000E00000E00000E00000E0000FFE000FFE0
65700FFE00016207F941A>I<FF83F0FF8FF8FFBFFC03FC3C03F01803E00003C00003C00003800003
6588000038000038000038000038000038000038000038000038000FFFF00FFFF80FFFF0016157E94
6591A>114 D<07FB801FFF807FFF80780780E00380E00380E003807800007FC0003FFC0007FF0000
6603F800003806001C0E001C0E001C0F003C0FC0780FFFF00EFFE00E3F80012157C941A>I<00C000
66101C00001C00001C00001C00001C00001C0007FFFE0FFFFE0FFFFE001C00001C00001C00001C000
66201C00001C00001C00001C00001C00001C00001C07001C07001C07001C07000E0E000FFE0007FC0
663001F00141C7F9B1A>I<FE0FE0FE0FE0FE0FE00E00E00E00E00E00E00E00E00E00E00E00E00E00
664E00E00E00E00E00E00E00E00E00E00E00E00E00E01E00F03E007FFFE03FFFE00FCFE17157F941A
665>I<7FC7FCFFC7FE7FC7FC0E00E00E00E00F01E00701C00701C00783C003838003838003838001
666C70001C70001C70000EE0000EE0000EE00007C00007C0000380017157F941A>I<FF83FEFFC7FE
667FF83FE3800381C00701C00701C00701C00701C38701C7C700C7C600E6CE00E6CE00EEEE00EEEE0
6680EEEE006C6C006C6C007C7C007C7C003838017157F941A>I<7FC7F87FCFFC7FC7F80703C00387
6698003C70001EE0000FE00007C00007800003800007C0000EE0001EE0001C7000383800783C00701
670C07FC7FCFFC7FE7FC7FC17157F941A>I<7FC7FCFFC7FE7FC7FC0E00E00F00E00701E00701C007
67181C00381C003838001C38001C38001C70000E70000E70000E600006600006E00003C00003C0000
6723C00003C0000380000380000780000700030700078E00079E0007FC0003F80001E000017207F94
6731A>I<0007E0001FE0003FE000780000F00000E00000E00000E00000E00000E00000E00000E000
67400E00000E00000E00000E00001E00003C000FF8000FF0000FF800003C00001E00000E00000E000
67500E00000E00000E00000E00000E00000E00000E00000E00000E00000F000007800003FE0001FE0
6760007E013277DA21A>123 D<7C0000FF0000FF800003C00001E00000E00000E00000E00000E000
67700E00000E00000E00000E00000E00000E00000E00000F000007800003FE0001FE0003FE0007800
67800F00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00001E000
67903C000FF8000FF00007C000013277DA21A>125 D E /Fi 62 127 df<0000FE0000038100000E
6800080001C03C0003807C0007007C0007007800070030000E0000000E0000000E0000000E0000000
681E0000000E000003FFFFF003FFFFF0001C00F0001C0070001C0070001C0070003800E0003800E00
68203800E0003800E0003800E0003800E0007001C0007001C0007001C0007001C0007001C0007001C
683000F003C00FFE3FF80FFE3FF801A237FA21C>12 D<0380078007000E001C003800700040008000
6840A0971A219>19 D<0700078001E000F0007000E001E0FF800C087B7E16>24
685D<0001E000000003100000000C080000000C080000001808000000380800000038080000003008
68600000030100000007010000000702000000070400000007080000000710000000072000000003C
687003FF00038003FF00038000F800038000600007C000800009C000800011C001000061E0020000C
6880E004000180F004000380700800078078100007003820000F003C40000F001C80000F001F00080
689F800F00180F800F001007801B803003E0F1E0E001FFC0FFC0007E003F00024257DA327>38
690D<1C3E7E7E3A02020404080810204080070F78A20E>I<1C3E7E7E3A0202040408081020408007
6910F7D840E>44 D<FFF0FFF00C027D8B11>I<3078F8787005057C840E>I<001F0000E1C001C06003
69280700700300E00380E00381E00381C00381C00383C00383C003838007878007878007878007878
6930078780078F000F0F000F0F000F0F000F0F000E0F001E0F001E0F001C0F001C0F0038070038070
6940700700600380C001C380007E00015227CA019>48 D<000FC0007FF000E0FC01003E02001E0400
6951F07800F0FC00F0FC00F0FC00F0F801F03001E00001E00003C00003C0000780000F00001E00003
696C0000700000E00001C0000300000600000C0000180080200080400080800103000107FFFF0FFFF
697E0FFFFE018217EA019>50 D<001FC0007FE001C0F803007C07803C07C03C0FC03C0FC03C07803C
69803007C0000780000F00000E00001C000070000FE000003800001C00001E00000F00000F00000F0
6990000F81000F87C01F0FC01F0FC01F0FC01E0F803E0C007C0600780381F001FFC0007F00016227D
700A019>I<0000200000600000E00001E00001E00002E00005C00009C00011C00031C00061C00041
701C00083800103800203800403800C0380080380100700200700400700800700FFFFFCFFFFFC000E
70200000E00000E00000E00000E00000E00001E0003FFE003FFE016217DA019>I<00800400E03C01
703FFF801FFF001FFC0017F00010000010000020000020000020000020000023F0002C1C00500E006
70400600400700000700000780000780000780000783800787C0078FC00F0F800F0F800E08001E040
70501C0400380200700381E000FFC0007E00016227DA019>I<001FC0007FE000E07801801802000C
70606000C04000C0C000C0C000C0E000C0F00180F803007E06003F0C001FF0000FE00007F00019FC0
707060FE00C03E01801F03000F0600070600030C00030C00030C00030C00020E000606000C0300180
7083C0F000FFC0003F00016227DA019>56 D<003F0000FFC001E0E00380700700700E00381E00381C
70900383C00383C00383C00383C00787800787800787800783800F83800F83801781C01F00C02F006
7100CF001F0E00001E00001E00001C00003C0700380F80700F80600F00E00803C00E070007FE0001F
711800015227CA019>I<060F1F1F0E00000000000000000000003078F8787008157C940E>I<000004
7120000000006000000000E000000000E000000001E000000001E000000003F000000006F00000000
7134F00000000CF000000008F000000018F000000010F800000020780000002078000000407800000
714040780000008078000000803C000001003C000001003C000002003C000003FFFC000007FFFC000
715004001E000008001E000008001E000010001E000010001E000020001F000020000F000060000F0
716001F0001F000FFC01FFF80FFC01FFF0021237EA225>65 D<07FFFFE007FFFFF8003C007C003C00
7173E003C001F003C001F003C000F0078000F0078000F0078001F0078001F0078003E0078003C00F0
718007800F001F000F007C000FFFFC000F001F000F000F801E0007C01E0007C01E0003C01E0003E01
719E0003E01E0003E03C0003C03C0007C03C0007C03C000F803C001F003C003E007C00FC0FFFFFF80
720FFFFFC0020227EA123>I<0000FE010007FF83001F81C6007C006E00F0003E01E0001E03C0001E
7210780000E0F00000C1F00000C1E0000043E0000043C0000047C0000047C000000F8000000F80000
72200F8000000F8000000F8000000F8000000F0000000F0000000F0000010F8000010F8000020F800
7230020780000207C0000403C0000801E0001800F0003000780060003E0380001FFF000003F800020
724247AA224>I<07FFFFE00007FFFFF800003C007C00003C001E00003C000F00003C000780003C00
725078000780003C000780003C000780003E000780003E000780003E000780003E000F00003E000F0
7260003E000F00003E000F00003E000F00003E000F00003E001E00003C001E00007C001E00007C001
727E000078001E0000F8001E0000F0003C0001F0003C0001E0003C0003C0003C000780003C000F000
72803C003E00007C00FC000FFFFFF0000FFFFF8000023227EA126>I<07FFFFFF8007FFFFFF80003C
729001F00003C000700003C000300003C000300003C00010000780001000078000100007802010000
730780201000078020100007806000000F004000000F01C000000FFFC000000FFFC000000F01C0000
73100F00C000001E008000001E008000001E008010001E008010001E000020001E000020003C00002
7320003C000040003C000040003C0000C0003C000180003C000380007C001F800FFFFFFF000FFFFFF
733F00021227EA122>I<0000FE010007FF83001F81C6007C006E00F0003E01E0001E03C0001E0780
734000E0F00000C1F00000C1E0000043E0000043C0000047C0000047C000000F8000000F8000000F8
735000000F8000000F8000000F8000000F0003FFFF0003FFFF00000F0F80000F0F80000F0F80001E0
736780001E07C0001E03C0001E01E0003E00F0003E0078004C003F038C001FFF040003F800020247A
737A227>71 D<07FFF007FFF0003E00003C00003C00003C00003C0000780000780000780000780000
738780000780000F00000F00000F00000F00000F00000F00001E00001E00001E00001E00001E00001
739E00003C00003C00003C00003C00003C00003C00007C000FFFE00FFFC0014227EA112>73
740D<003FFF003FFF0000F00000F00000F00000F00000F00001E00001E00001E00001E00001E00001
741E00003C00003C00003C00003C00003C00003C0000780000780000780000780000780000780300F
742007C0F00FC0F00FC0F00FC1E00F81E00803C0040380030E0000F800018237DA11A>I<07FFF00F
743FE07FFF00FFC003E0003E0003C000300003C000200003C000400003C0018000078002000007800
7444000007800800000780100000078020000007808000000F018000000F03C000000F07C000000F0
7459E000000F31E000000F40F000001E80F000001F00F800001E007800001E007C00001E003C00001
746E003E00003C001E00003C001F00003C000F00003C000F80003C000780003C0007C0007C0007E00
747FFFC03FFC0FFFC03FFC027227EA127>I<07FFF80007FFF800003E0000003C0000003C0000003C
7480000003C000000780000007800000078000000780000007800000078000000F0000000F0000000
749F0000000F0000000F0000000F0000001E0000001E0000001E0001001E0001001E0003001E00020
75003C0002003C0006003C0006003C000C003C001C003C003C007C00FC0FFFFFF80FFFFFF801C227E
751A11F>I<07FC000007FE07FC00000FFE002E00000FC0002E00001780002E00001780002E000027
75280002700002780004700004F00004700008F00004700008F00004700010F00004380010F000043
75380020F00008380021E00008380041E000081C0041E000081C0081E000081C0081E000081C0101E
754000101C0203C000100E0203C000100E0403C000100E0403C000100E0803C000100E0803C000200
7557100780002007100780002007200780002007200780002003C0078000600380078000F003800F8
75600FFE0301FFF80FFE0301FFF802F227EA12E>I<07FFFFC007FFFFF0003C00FC003C003E003C00
7571E003C001F003C001F0078001F0078001F0078001F0078001F0078001E0078003E00F0003C00F0
758007800F000F000F003E000FFFF8000F0000001E0000001E0000001E0000001E0000001E0000001
759E0000003C0000003C0000003C0000003C0000003C0000003C0000007C00000FFFC0000FFFC0000
76020227EA122>80 D<07FFFF800007FFFFF000003C00F800003C003C00003C001E00003C001F0000
7613C001F000078001F000078001F000078001F000078001F000078003E000078003C0000F0007800
76200F000F00000F007C00000FFFE000000F00E000000F003000001E003800001E001C00001E001C0
7630001E001E00001E001E00001E001E00003C003E00003C003E00003C003E00003C003E00003C003
764E02003C003E04007C003E040FFFC01F080FFFC00F1800000003E0023237EA125>82
765D<000FC040003FF0C000F0398001C00F80018003800300038007000180070001800E0001000E00
76601000E0001000F0000000F0000000F80000007E0000007FE000003FFC00001FFF000007FF80000
76707FC0000007C0000003C0000001E0000001E0000001E0020001E0040001C0040001C0060001C00
768600018006000380070007000F800E000EF03C000C7FF800080FE00001A247DA21C>I<1FFFFFFF
7693FFFFFFF3C01E01E3001E0062001E0026001E0024001E0024003C0024003C0028003C0028003C0
770028003C0020003C000000780000007800000078000000780000007800000078000000F0000000F
7710000000F0000000F0000000F0000000F0000001E0000001E0000001E0000001E0000001E000000
7721E0000003E00001FFFF8001FFFF80020227AA124>I<FFFE07FF80FFFE07FF8007C00078000780
7730020000780002000078000200007800020000F000040000F000040000F000040000F000040000F
774000040000F000040001E000080001E000080001E000080001E000080001E000080001E00008000
7753C000100003C000100003C000100003C000100003C000100003C000200003C000200003C000200
776003C000400003C000C00001C000800001E001000000E006000000781C0000003FF800000007E00
7770000212379A125>I<FFFC007FE0FFF8007FE00F80001E000780000C0007800008000780001000
77803C000100003C000200003C000200003C000400003C000C00001E000800001E001000001E00100
7790001E002000001E002000000F004000000F004000000F008000000F008000000F0100000007810
78000000078200000007860000000784000000078800000003C800000003D000000003D000000003E
781000000003E000000001C000000001C0000000018000000001800000023237AA125>I<FFF81FFF
78203FF80FFF81FFE03FF800F8003E00078000F8001E0003000078001E0002000078001E000200007
7838001E0004000078003F0004000078002F0008000078004F000800007C004F001000003C008F001
784000003C008F002000003C010F002000003C010F804000003C0307804000003C0207808000001E0
785207808000001E0407810000001E0407810000001E0807830000001E0803C20000001E1003C2000
7860001E1003C40000000F2003C40000000F2003C80000000F4003C80000000F4003D00000000F800
7871F00000000F8001E00000000F0001E0000000070001C0000000060001C00000000600018000000
7880040001800000031237AA133>I<03FFF03FF803FFE03FF8001F800F80000F000600000F000C00
789000780080000078010000007C020000003C040000003E0C0000001E080000001F100000000F200
790000000FC0000000078000000007C000000003C000000003E000000005E000000009F000000018F
791000000030F800000020780000004078000000803C000001003C000003003E000002001E0000040
79201F000008000F000018000F80007C000F800FFF007FFC0FFF007FFC025227FA125>I<FFF8007F
793E0FFF8007FE007C0001E0007C000180003C000100003C000200003E000200001E000400001F000
794800000F001000000F801000000780200000078040000007C080000003C180000003E100000001E
795200000001F400000001FC00000000F800000000F000000000F000000000F000000000F00000000
7960E000000001E000000001E000000001E000000001E000000001E000000001C000000003E000000
79707FFE0000007FFE0000023227AA125>I<0100038007C00CC018603030601080080D0876A219>
79894 D<03FC000E07001F01801F01C01E00C00C00E00001C00001C0003FC003E1C00F01C01E01C0
799380380780380F00384F00384F00784F00784F00B887833D01FC1E016157D9419>97
800D<0780003F80003F00000700000700000700000700000700000E00000E00000E00000E00000E00
801000E00001C3F001CC1C01D00601E00701C00381C003838003C38003C38003C38003C38003C3800
8023C7000787000787000707000F07000E06801C0E80380C60E0081F80016237BA21C>I<00FF0003
80383800607C00C07C01C0780380300780000700000F00000F00000F00000F00000F00000E00000F0
8040000F000807001007001003806001C180007E00012157C9416>I<00000F00007F00007E00000E
80500000E00000E00000E00000E00001C00001C00001C00001C00001C00001C007E3803C1380700B8
8060E00781C0038380038780070700070F00070F00070F00070F00070E000E0E000E0E000E0F000E0
8077001E07003E03805E01C19FC07E1FC18237CA21C>I<007E000383800701C00C00E01C00E03800
808E07800E07000E0FFFFE0F00000F00000F00000F00000E00000E00000F000407000803000801803
809000E0C0003F00013157D9416>I<0001E0000630001C780018F80038F800707000700000700000
810E00000E00000E00000E00000E00000E0003FFE003FFE0001C00001C00001C00001C00003800003
81180000380000380000380000380000700000700000700000700000700000700000F0000FFF000FF
812F00015237FA20F>I<00000380001F8CC00070D1C000E0E1C001C0700003C0700003C070000780
813F0000780F0000780F0000780E0000381E0000181C00002C30000027E0000040000000400000004
8140000000600000007FFC00007FFF00007FFF8001C007C0030000C0060000C0060000C00C0000C00
815C0000C004000180060003000300060000C03800003FE00001A21809519>I<0078000003F80000
81603F00000007000000070000000700000007000000070000000E0000000E0000000E0000000E000
8170000E0000000E0000001C1F80001C60C0001D80E0001E0070001E0070001C0070003C00E000380
8180E0003800E0003800E0003800E0003800E0007001C0007001C0007001C0007001C0007001C0007
819001C000F003C00FFE3FF80FFE3FF8019237FA21C>I<007000F001F000F000E000000000000000
82000000000000000000001C00FC01FC003C001C001C0038003800380038003800380070007000700
8210700070007000F00FFE0FFE00C227FA10E>I<0078000003F8000003F000000070000000700000
82200700000007000000070000000E0000000E0000000E0000000E0000000E0000000E0000001C07F
823C001C07FC001C03C0001C0300001C0400001C080000383000003840000038E000003BE000003CF
82400000387000007078000070380000701C0000701C0000700E0000700F0000F00F800FFE3FF00FF
825E3FE001A237FA21A>107 D<007803F803F00070007000700070007000E000E000E000E000E000
826E001C001C001C001C001C001C00380038003800380038003800700070007000700070007000F00
827FFE0FFE00D237FA20E>I<01C1F807E01FC60C18301FD80E603803E007801C01E007801C01C007
828001C03C00F003803800E003803800E003803800E003803800E003803800E003807001C00700700
8291C007007001C007007001C007007001C007007001C00700F003C00F0FFE3FF8FFEFFE3FF8FFE27
830157F942A>I<01C1F8001FC60C001FD80E0003E0070001E0070001C0070003C00E0003800E0003
831800E0003800E0003800E0003800E0007001C0007001C0007001C0007001C0007001C0007001C00
8320F003C00FFE3FF80FFE3FF8019157F941C>I<007F0001C1C00700E00E00701C00383800387800
8333C70003CF0003CF0003CF0003CF0003CE00078E00078E00070F000F07000E07001C03803800E0E
8340003F00016157D9419>I<00E1F8000FE60E000FE8070000F0038000E003C000E001C001C001E0
83501C001E001C001E001C001E001C001E001C001E0038003C0038003C0038007800380078003800F
8360003C00E0007403C0007307000070FC0000700000007000000070000000E0000000E0000000E00
83700000E0000000E000000FFC00000FFC000001B1F80941C>I<00FC100382100701300E00F01C00
838F03800F07800E07800E0F000E0F000E0F000E0F000E0F001C0F001C0F001C0F001C07003C07005
839C0380B801C338007C380000380000380000380000700000700000700000700000700007FE0007F
840E0141F7C941A>I<01C3E01FC4701FD8F003D0F001E06001C00003C00003800003800003800003
84180000380000700000700000700000700000700000700000F0000FFF000FFF00014157F9414>I<
84201FC800603800C01801801801801801800801801001E00001FE0000FFC0003FE00007E00000700
843400700400300400300600200600600F00400C8180087E00011157E9414>I<0080008000800180
844010001000300030007000F001FF8FFF80E000E000E000E001C001C001C001C001C001C00381038
84510381038103810382038201C4007800D1F7C9E13>I<0E0038FE03F8FE03F81E00780E00380E00
846381C00701C00701C00701C00701C00701C00703800E03800E03800E03800E03801E03802E01805
847E01C19FC07E1FC16157C941C>I<FFCFFC3FC0FFCFF87F801E01E01E000E00C008000E00C00800
8480E01E010000E03E010000E02E02000070660200007046040000708704000070870800007107180
84900079031000003A033000003A03A000003C03C000003C03C000003801800000180180000010010
850000022157C9424>119 D<1FF83FC01FF87FC001E03C0000E0100000E020000070400000388000
85100390000001E0000001C0000000E0000001F0000003700000063800000C380000181C0000101C0
852000600E0001E00F000FF03FF00FF03FF001A157F941A>I<0FFC0FE00FFC0FE000E0078000E002
8530000E0040000E00400007008000070080000701000007030000038200000384000003840000038
8548000003C8000001D0000001D0000001E0000001C0000000C000000080000000800000010000000
8551000000020000078400000F8400000F8800000F1000000420000003C0000001B1F80941A>I<FF
856FFFF18017E8C19>123 D<0E011F03318440F88070100577A019>126 D E
857/Fj 27 123 df<70F8FCFC7404040404080810102040060F7A8410>44 D<0003F802001FFF0600
8587E038601F000CE03E0003E0780001E0F00001E1F00000E1E0000063E0000063C0000067C000002
8597C00000278000002F8000000F8000000F8000000F8000000F8000000F8000000F8000000F80000
86000780000007C0000027C0000023C0000023E0000021E0000041F0000040F0000080780001803E0
861003001F00060007E03C0001FFF000003FC001F247CA227>67 D<FFFFFFE0FFFFFFE0078003E007
8628000E0078000600780002007800030078000300780001007800010078020100780201007802000
86307802000078060000780E00007FFE00007FFE0000780E000078060000780200007802000078020
86400078020000780000007800000078000000780000007800000078000000780000007800000FFFE
8650000FFFE00001C227CA123>70 D<FFFC1FFF80FFFC1FFF80078000F000078000F000078000F000
866078000F000078000F000078000F000078000F000078000F000078000F000078000F000078000F0
86700078000F000078000F00007FFFFF00007FFFFF000078000F000078000F000078000F000078000
868F000078000F000078000F000078000F000078000F000078000F000078000F000078000F0000780
86900F000078000F000078000F000078000F000FFFC1FFF80FFFC1FFF8021227CA129>72
870D<FFFCFFFC07800780078007800780078007800780078007800780078007800780078007800780
8710780078007800780078007800780078007800780078007800780FFFCFFFC0E227DA114>I<FFFE
8720000FFFE0000078000000780000007800000078000000780000007800000078000000780000007
873800000078000000780000007800000078000000780000007800000078000000780000007800000
8740780000007800020078000200780002007800020078000600780006007800040078000C0078001
875C0078003C007800FC0FFFFFFC0FFFFFFC01B227CA122>76 D<FFFFE00000FFFFFC000007801F00
876000780078000078003C000078003E000078001E000078001F000078001F000078001F000078001
877F000078001E000078003E000078003C000078007000007803E000007FFF0000007807800000780
8781C000007800E000007800F00000780070000078007800007800780000780078000078007800007
8798007C000078007C000078007C000078007C020078003E020078003E020FFFC01E040FFFC00F080
8800000003F0023237CA128>82 D<FFF80FFF807FE0FFF80FFF807FE00F8000F8000F000F80007800
8810600078000780004000780007C00040007C000BC000C0003C000BC00080003C000BE00080003E0
882011E00080001E0011E00100001E0011E00100001E0020F00100000F0020F00200000F0020F0020
8830000F00407802000007804078040000078040780400000780803C04000003C0803C08000003C08
88403C08000003C1001E08000001E1001E10000001E1001E10000001E2000F10000000F2000F20000
885000F2000F20000000F40007A00000007C0007C00000007C0007C0000000780003C000000038000
88638000000038000380000000300001800000001000010000033237EA137>87
887D<00040000000E0000000E0000000E0000001F0000001F0000003F800000278000002780000043
888C0000043C0000043C0000081E0000081E0000101F0000100F0000100F00003FFF8000200780006
889007C0004003C0004003C000C001E000C001E003C003F00FF00FFE01B1A7F991F>97
890D<FFFF800F00E00F00700F00380F003C0F003C0F003C0F003C0F003C0F00780F00700F01E00FFF
891C00F00F00F00380F003C0F001C0F001E0F001E0F001E0F001E0F001C0F003C0F00780F00F0FFFF
892C0171A7E991D>I<003F0201C0C603002E0E001E1C000E1C0006380006780002700002700002F0
8930000F00000F00000F00000F00000F000007000027000027800023800041C00041C00080E000803
894003001C0C0003F00171A7E991D>I<FFFF80000F01E0000F0070000F0038000F001C000F000E00
8950F000E000F0007000F0007000F0007800F0007800F0007800F0007800F0007800F0007800F0007
896800F0007800F0007000F0007000F000F000F000E000F001C000F0038000F0070000F01E000FFFF
8978000191A7E991F>I<FFFFF80F00380F00180F00080F000C0F00040F00040F00040F02000F0200
8980F02000F06000FFE000F06000F02000F02000F02000F00020F00020F00020F00060F00040F0004
8990F000C0F003CFFFFFC171A7E991C>I<003F810001E063000380170006000F000C0007001C0003
9000038000300780001007800010070000100F0000000F0000000F0000000F0000000F0000000F001
901FFE070001F0078000F0078000F0038000F001C000F000C000F0006000F000380170001E0630000
9023F81001B1A7E9920>103 D<FFE3FF800F0078000F0078000F0078000F0078000F0078000F0078
903000F0078000F0078000F0078000F0078000F0078000FFFF8000F0078000F0078000F0078000F00
90478000F0078000F0078000F0078000F0078000F0078000F0078000F0078000F007800FFE3FF8019
9051A7E991F>I<FFF00F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F
906000F000F000F000F000F000F000F000F00FFF00C1A7F990F>I<FFF0000F80000F00000F00000F
90700000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F
90800100F00100F00100F00300F00200F00600F00600F01E0FFFFE0141A7E991A>108
909D<FF0003FE0F0003E00F0003E00B8005E00B8005E00B8005E009C009E009C009E009C009E008E0
91011E008E011E008E011E0087021E0087021E0083841E0083841E0083841E0081C81E0081C81E008
9111C81E0080F01E0080F01E0080F01E0080601E01C0601E0FF861FFE1F1A7E9925>I<FF00FF800F
912801C000F8008000BC0080009E0080009E0080008F0080008F8080008780800083C0800083C0800
913081E0800080F0800080F0800080788000803C8000803C8000801E8000800F8000800F800080078
914000800780008003800080018001C001800FF800800191A7E991F>I<007F800001C0E000070038
915000E001C001C000E003C000F0038000700780007807000038070000380F00003C0F00003C0F000
91603C0F00003C0F00003C0F00003C0F00003C07800078078000780380007003C000F001C000E000E
917001C000700380001C0E000007F80001A1A7E9920>I<007F800001C0E000070038000E001C001C
918000E003C000F0038000700780007807800078070000380F00003C0F00003C0F00003C0F00003C0
919F00003C0F00003C0F00003C07000038078000780380007003C1E0F001C310E000E209C000720B8
9200001E0E000007FC0400000404000006040000070C000007F8000003F8000003F0000001E001A21
9217E9920>113 D<FFFE00000F03C0000F00E0000F00F0000F0078000F0078000F0078000F007800
9220F0078000F00F0000F00E0000F03C0000FFE00000F0380000F01E0000F00E0000F00F0000F00F0
923000F00F0000F00F0000F00F0000F00F0000F00F0400F0070400F003880FFF01F001A1A7E991E>
924I<07E100181B00300700600300600300E00100E00100E00100F00000F800007F80003FF8001FFC
925000FFE0000FF00000F00000780000780800380800380800380C00300C00700E00600DC0C0083F0
92600111A7E9917>I<7FFFFF00701E0700601E0100401E0100C01E0180801E0080801E0080801E00
92780001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E
9280000001E0000001E0000001E0000001E0000001E0000001E0000003F000003FFF000191A7F991D
929>I<FFF0FF800F001C000F0008000F0008000F0008000F0008000F0008000F0008000F0008000F
9300008000F0008000F0008000F0008000F0008000F0008000F0008000F0008000F0008000F000800
9310F00080007001000078010000380200001C0600000E08000003F0000191A7E991F>I<FFC00FF0
9321F0007801F0003000F8002000780040007C0040003E0080001E0080001F0100000F83000007820
93300007C4000003E4000001E8000001F8000000F0000000F0000000F0000000F0000000F0000000F
9340000000F0000000F0000000F0000000F000000FFE0001C1A7F991F>121
935D<7FFFE07803C07003C0600780400780400F00401E00401E00003C00003C0000780000F00000F0
9360001E00001E00003C0000780200780200F00200F00201E00603C00403C00C07801C07803C0FFFF
937C0131A7E9919>I E /Fk 19 121 df<FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
938FFFFFFFFFFFFFFFFFFFFFFFFFF000007F00000000007F00000000007F00000000007F000000000
93907F00000000007F00000000007F00000000007F00000000007F00000000007F00000000007F000
94000000007F00000000007F00000000007F00000000007F00000000007F00000000007F000000000
94107F00000000007F00000000007F00000000007F00000000007F00000000007F00000000007F000
94200000007F00000000007F00000000007F00000000007F00000000007F00000000007F000000000
94307F00000000007F00000000007F00000000007F00000000007F00000000007F00000000007F000
94400000007F00000000007F00000000007F00000000007F00000000007F00000000007F000000000
94507F00000000007F00000000007F00000000007F00000000007F00000000007F00000000007F000
94600000007F00000000007F00000000007F00000000007F00000303C7DBB37>84
947D<003FF00001FFFC0007FFFF001FFFFF801FFFFFC01FC01FE01E000FE0180007F0100007F00000
94803F8000003F8000003F8000003F8000003F8000003F8000003F80007FFF8007FFFF801FFFFF807
949FFFFF81FFF03F83FF003F87FC003F87F0003F8FF0003F8FE0003F8FE0003F8FE0003F8FE0003F8
950FF0007F87F800FF87FE07FF83FFFFFF83FFFFFF81FFFFBF807FFE3F803FE03F81D257DA427>97
951D<0007FE00003FFFC000FFFFF001FFFFF803FFFFF807FC03F80FF000701FE000301FC000003F80
95200003F8000007F0000007F0000007F000000FE000000FE000000FE000000FE000000FE000000FE
953000000FE000000FE000000FE0000007F0000007F0000007F0000003F8000003F8000001FC00004
9541FE0001C0FF0007C07FC03FC03FFFFFC01FFFFFC00FFFFF0003FFFC00007FC001E257DA424>99
955D<0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000
956007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F00
95700007F0000007F0000007F0000007F001FE07F007FF87F01FFFE7F03FFFFFF07FFFFFF0FFE07FF
9580FF001FF1FE000FF3FC0007F3F80007F7F80007F7F00007F7F00007F7F00007FFE00007FFE0000
9597FFE00007FFE00007FFE00007FFE00007FFE00007FFE00007FFE00007F7F00007F7F00007F7F00
960007F7F80007F3F80007F3FC000FF1FE001FF1FF003FF0FFC0FFF07FFFFFF03FFFF7F01FFFC7F00
9617FF87F001FC07F203C7DBB2A>I<0007F800003FFE0000FFFF8001FFFFC003FFFFE007FC1FF00F
962F007F01FE003F81FC001F83F8000FC3F8000FC7F0000FC7F00007E7FFFFFFEFFFFFFFEFFFFFFFE
963FFFFFFFEFFFFFFFEFE000000FE000000FE000000FE000000FE0000007E0000007F0000007F0000
964003F8000003F8000001FC000041FE0001C0FF8007C07FE03FC03FFFFFC01FFFFF8007FFFE0001F
965FF800003FC001F257EA424>I<0000FFC00003FFC00007FFC0001FFFC0003FFFC0003F8040007F
966000000FE000000FC000000FC000001FC000001FC000001FC000001FC000001FC000001FC000001
967FC000001FC000001FC000001FC000001FC000001FC000001FC0000FFFFFC00FFFFFC00FFFFFC00
968FFFFFC00FFFFFC0001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00
9690001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC
970000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001
971FC000001FC000001FC000001FC000001FC00001A3C7FBB19>I<001FE007E0007FF83FE001FFFF
972FFF003FFFFFFF007FFFFFFF00FF87FE0000FE01FC0001FC00FE0001FC00FE0003F8007F0003F80
97307F0003F8007F0003F8007F0003F8007F0003F8007F0003F8007F0001F8007E0001FC00FE0001F
974C00FE0000FE01FC0000FF87FC00007FFFF80000FFFFF00001FFFFE00001E7FF800001E1FE00000
9753E000000003E000000003E000000003F000000001F800000001FFFFF00001FFFFFF0000FFFFFFC
976000FFFFFFE000FFFFFFF001FFFFFFF803FFFFFFFC03F8000FFC07E00001FC07E00000FE0FC0000
97707E0FC000007E0FC000007E0FC000007E0FC000007E07E00000FC07F00001FC03FC0007F801FF8
97803FF000FFFFFFE0007FFFFFC0001FFFFF000007FFFC000000FFE000024377EA428>I<FE000000
979FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000
98000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00
9810000FE000000FE000000FE03FC00FE0FFF00FE3FFFC0FE7FFFE0FEFFFFE0FFF01FF0FFE00FF0FF
982C007F8FF8007F8FF0003F8FF0003F8FF0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8
983FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003
984F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE00
98503F81D3C7ABB2A>I<FEFEFEFEFEFEFE0000000000000000000000000000FEFEFEFEFEFEFEFEFE
986FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE073A7AB914>I<FEFEFEFE
987FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
988FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE073C7ABB14>108 D<FE03FC000FF000FE0FFF003FFC
98900FE3FFFC0FFFF00FE7FFFE1FFFF80FEFFFFE3FFFF80FFF01FF7C07FC0FFE00FFF803FC0FFC007
990FF001FE0FF8007FE001FE0FF0003FC000FE0FF0003FC000FE0FF0003FC000FE0FE0003F8000FE0
991FE0003F8000FE0FE0003F8000FE0FE0003F8000FE0FE0003F8000FE0FE0003F8000FE0FE0003F8
992000FE0FE0003F8000FE0FE0003F8000FE0FE0003F8000FE0FE0003F8000FE0FE0003F8000FE0FE
9930003F8000FE0FE0003F8000FE0FE0003F8000FE0FE0003F8000FE0FE0003F8000FE0FE0003F800
9940FE0FE0003F8000FE0FE0003F8000FE0FE0003F8000FE0FE0003F8000FE0FE0003F8000FE0FE00
99503F8000FE0FE0003F8000FE033257AA440>I<FE03FC00FE0FFF00FE3FFFC0FE7FFFE0FEFFFFE0
996FFF01FF0FFE00FF0FFC007F8FF8007F8FF0003F8FF0003F8FF0003F8FE0003F8FE0003F8FE0003
997F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE00
99803F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE
9990003F8FE0003F8FE0003F81D257AA42A>I<0007FC0000001FFF0000007FFFC00001FFFFF00003
1000FFFFF80007FC07FC000FF001FE001FE000FF001FC0007F003F80003F803F80003F807F00001FC0
10017F00001FC07E00000FC0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000F
1002E0FE00000FE0FE00000FE0FE00000FE07F00001FC07F00001FC07F00001FC03F80003F803F8000
10033F801FC0007F001FE000FF000FF001FE0007FE0FFC0003FFFFF80001FFFFF000007FFFC000001F
1004FF00000007FC000023257EA428>I<FE03FC00FE1FFF00FE7FFF80FEFFFFC0FFFFFFE0FFF03FF0
1005FFC00FF8FF0007F8FE0003FCFE0001FCFE0001FEFE0000FEFE0000FEFE0000FFFE00007FFE0000
10067FFE00007FFE00007FFE00007FFE00007FFE00007FFE00007FFE00007FFE0000FEFE0000FEFE00
100701FEFE0001FCFE0003FCFF0003FCFF0007F8FF801FF0FFE07FE0FFFFFFC0FEFFFF80FE7FFF00FE
10081FFE00FE07F000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000
1009FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00000020367A
1010A42A>I<FE00F0FE07F0FE1FF0FE3FF0FE7FF0FEFFF0FFFF00FFF800FFF000FFE000FFC000FF80
101100FF8000FF0000FF0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
101200FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00001425
10137AA41C>114 D<007FC00003FFFC0007FFFF000FFFFF801FFFFF803F803F803F000F007E000300
10147E0000007E0000007E0000007E0000007F0000007FC000003FFC00003FFFC0001FFFF0000FFFFC
10150007FFFE0001FFFF00007FFF000007FF8000007F8000001FC000001FC000000FC000000FC04000
10160FC060000FC078001F80FC001F80FF807F80FFFFFF007FFFFE001FFFFC0007FFF000007FC0001A
1017257EA41F>I<01FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001
1018FC000001FC000001FC0000FFFFFE00FFFFFE00FFFFFE00FFFFFE00FFFFFE0001FC000001FC0000
101901FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00
10200001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC
1021000001FC000001FC000001FC010001FE030001FE0F8000FFFF8000FFFF80007FFE00003FF80000
10221FC00019307FAF1D>I<FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE
10230003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8
1024FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003
1025F8FE0007F8FE0007F8FE000FF8FF001FF8FF807FF87FFFFFF87FFFFBF83FFFE3F81FFF83F807FC
102603F81D257AA42A>I<7F80003FC03FC0003FC03FC0007F801FE000FF000FF001FE0007F801FC00
102703F803FC0003FC07F80001FE07F00000FF0FE000007F1FE000003FBFC000003FFF8000001FFF00
102800000FFF00000007FE00000007FC00000003F800000003F800000007FC00000007FE0000000FFF
10290000001FFF8000003F9F8000003F1FC000007F0FE00000FE07F00001FC07F80003FC03F80003F8
103001FC0007F001FE000FF000FF001FE0007F001FC0003F803FC0003FC07F80001FE0FF00000FF024
10312580A425>120 D E end
1032%%EndProlog
1033%%BeginSetup
1034%%Feature: *Resolution 300
1035TeXDict begin @letter /letter where {pop letter} if
1036%%EndSetup
1037%%Page: 1 1
1038bop -5 173 a Fk(The)27 b(design)f(and)g(implementation)e(of)-5
1039255 y(a)j(language)f(fo)n(r)h(extending)e(applications)-5 370
1040y Fj(Luiz)18 b(Henrique)e(de)i(Figueiredo,)f(R)o(ober)m(to)f(Ier)o
1041(usalimschy,)g(W)-6 b(aldemar)17 b(Celes)g(Filho)-5 454 y Fi(T)l(eCGraf{Grup)
1042q(o)f(de)g(T)l(ecnologia)g(em)g(Computa\030)-22 b(c~)d(ao)16
1043b(Gr\023)-25 b(a\014ca,)15 b(ITS,)h(PUC-Rio)-5 514 y(Pr)o(\023)-24
1044b(edio)16 b(do)g(ITS,)g(Rua)g(Marqu)o(^)-24 b(es)15 b(de)i(S~)-25
1045b(ao)16 b(Vicen)o(te)h(225,)f(22453-900)f(Rio)h(de)h(Janeiro,)e(RJ,)h(Brasil)
1046-5 574 y Fh({lhf,roberto,celes}@ic)q(ad.puc)q(-rio.br)-5 779
1047y Fg(Abstract.)26 b Ff(W)l(e)16 b(describ)q(e)g(the)h(design)e(and)h(the)h
1048(implemen)o(tation)d(of)j Fe(Lua)p Ff(,)f(a)g(simple,)f(y)o(et)i(p)q(o)o(w)o
1049(erful,)-5 839 y(language)i(for)g(extending)g(applications.)29
1050b(Although)19 b Fe(Lua)g Ff(is)g(a)h(pro)q(cedural)d(language,)i(it)h(has)f
1051(data)-5 899 y(description)11 b(facilities,)h(and)g(has)f(b)q(een)h(extensiv)
1052o(ely)g(used)f(in)h(pro)q(duction)f(for)g(sev)o(eral)h(tasks)f(including)-5
1053959 y(user)i(con\014guration,)g(general-purp)q(ose)e(data-en)o(try)l(,)i
1054(description)g(of)h(user)f(in)o(terfaces,)g(description)g(of)-5
10551019 y(application)j(ob)s(jects,)g(and)g(storage)g(of)h(structured)e
1056(graphical)g(meta\014les.)-5 1133 y Fg(Resumo.)26 b Ff(Descrev)o(emos)11
1057b(o)g(pro)s(jeto)h(e)f(a)h(implemen)o(ta\030)-22 b(c~)d(ao)10
1058b(de)i Fe(Lua)p Ff(,)g(uma)f(linguagem)f(simples,)h(p)q(or)o(\023)-24
1059b(em)-5 1193 y(p)q(o)q(derosa,)17 b(para)f(extens~)-25 b(ao)18
1060b(de)f(aplica\030)-22 b(c~)d(oes.)24 b(Em)o(b)q(ora)16 b(pro)q(cedural,)f
1061Fe(Lua)j Ff(con)o(t)o(\023)-24 b(em)16 b(mecanismos)g(para)-5
10621253 y(descri\030)-22 b(c~)d(ao)20 b(de)g(dados)f(e)i(tem)g(sido)e(largamen)o
1063(te)g(utilizada)h(em)g(pro)q(du\030)-22 b(c~)d(ao)19 b(para)h
1064(con\014gura\030)-22 b(c~)d(ao)19 b(p)q(elo)-5 1313 y(usu\023)-25
1065b(ario,)24 b(en)o(trada)e(de)i(dados,)g(descri\030)-22 b(c~)d(ao)23
1066b(de)h(in)o(terfaces,)g(descri\030)-22 b(c~)d(ao)23 b(de)h(ob)s(jetos)f(da)h
1067(aplica\030)-22 b(c~)d(ao)23 b(e)-5 1373 y(armazenagem)15 b(de)i
1068Fd(meta\014les)f Ff(gr\023)-25 b(a\014cos)15 b(estruturados.)-5
10691553 y Fg(Intro)r(duction)-5 1638 y Ff(There)k(is)h(increasing)e(demand)g
1070(for)i(customizable)e(applications.)30 b(As)20 b(applications)e(b)q(ecame)i
1071(more)-5 1698 y(complex,)k(customization)e(with)g(simple)g(parameters)f(b)q
1072(ecame)i(imp)q(ossible:)32 b(users)22 b(no)o(w)f(w)o(an)o(t)h(to)-5
10731758 y(mak)o(e)14 b(con\014guration)e(decisions)g(at)i(execution)g(time;)h
1074(users)d(also)h(w)o(an)o(t)g(to)i(write)e(macros)g(and)g(scripts)-5
10751817 y(to)18 b(increase)d(pro)q(ductivit)o(y)i(\(Ry)o(an)f(1990\).)24
1076b(Therefore,)16 b(no)o(w)o(ada)o(ys,)e(larger)i(applications)f(almost)i(in-)
1077-5 1877 y(v)m(ariably)j(carry)g(their)h(o)o(wn)f(con\014guration)e(or)i
1078(scripting)g(languages)f(for)h(end-user)f(programming.)-5 1937
1079y(These)g(languages)f(are)h(usually)f(simple,)g(but)h(eac)o(h)g(has)f(its)h
1080(o)o(wn)g(particular)f(syn)o(tax.)29 b(As)19 b(a)h(conse-)-5
10811997 y(quence,)e(users)f(ha)o(v)o(e)g(to)h(learn)f(\(and)h(dev)o(elop)q(ers)f
1082(ha)o(v)o(e)g(to)h(design,)f(implemen)o(t)g(and)g(debug\))g(a)h(new)-5
10832056 y(language)e(for)g(eac)o(h)g(application.)-5 2141 y(Our)c(\014rst)g(exp)
1084q(erience)h(with)g(a)g(proprietary)e(scripting)g(language)h(arose)g(in)g(a)h
1085(data-en)o(try)f(application,)-5 2201 y(for)23 b(whic)o(h)f(a)h(v)o(ery)g
1086(simple)f(declarativ)o(e)h(language)f(w)o(as)g(designed)g
1087(\(Figueiredo{Souza{Gattass{)-5 2261 y(Co)q(elho)h(1992\).)41
1088b(\(Data-en)o(try)23 b(is)f(an)h(area)f(where)h(user)f(de\014ned)g(actions)g
1089(are)g(esp)q(ecially)h(needed)-5 2320 y(b)q(ecause)13 b(pre-co)q(ded)e(v)m
1090(alidation)i(tests)g(can)f(hardly)g(b)q(e)h(adequate)f(for)h(all)f
1091(applications.\))20 b(When)12 b(users)-5 2380 y(b)q(egan)i(to)g(demand)f
1092(increasingly)f(more)h(p)q(o)o(w)o(er)g(in)g(this)g(language,)h(w)o(e)f
1093(decided)h(that)g(a)g(more)f(general)-5 2440 y(approac)o(h)i(w)o(as)h(needed)
1094h(and)f(started)g(the)h(design)f(of)h(a)g(general-purp)q(ose)d(em)o(b)q
1095(edded)i(language.)21 b(A)o(t)-5 2500 y(the)16 b(same)f(time,)g(another)g
1096(declarativ)o(e)g(language)f(w)o(as)h(b)q(eing)g(added)g(to)h(a)f(di\013eren)
1097o(t)g(application)f(for)-5 2560 y(data)h(description.)k(Therefore,)14
1098b(w)o(e)h(decided)e(to)i(merge)f(the)h(t)o(w)o(o)f(languages)f(in)o(to)h
1099(one,)g(and)g(designed)-5 2619 y Fe(Lua)19 b Ff(to)g(b)q(e)g(a)g(pro)q
1100(cedural)f(language)g(with)h(data)f(description)g(facilities.)29
1101b Fe(Lua)18 b Ff(has)h(since)f(outgro)o(wn)-5 2679 y(its)f(original)e(ro)q
1102(ots)h(and)g(is)g(b)q(eing)g(used)g(in)g(sev)o(eral)g(other)g(industrial)f
1103(pro)s(jects.)-5 2764 y(This)h(pap)q(er)g(describ)q(es)f(the)i(design)f
1104(decisions)f(and)h(the)g(details)g(of)h(our)f(implemen)o(tation)e(of)j
1105Fe(Lua)p Ff(.)-5 2883 y Fc(T)l(eCGraf/ICAD)1674 b(1)p eop
1106%%Page: 2 2
1107bop -5 163 a Fg(Extension)20 b(languages)-5 248 y Ff(The)d(use)g(of)g
1108(languages)f(for)g(extending)h(applications)f(is)g(no)o(w)h(recognized)f(as)g
1109(an)h(imp)q(ortan)o(t)f(design)-5 308 y(tec)o(hnique:)k(it)13
1110b(allo)o(ws)f(a)h(cleaner)f(design)g(for)h(the)g(application)f(and)g(it)h
1111(pro)o(vides)f(con\014guration)f(b)o(y)i(the)-5 367 y(user.)26
1112b(Because)18 b(most)f(extension)h(languages)f(are)g(simple,)g(sp)q(ecialized)
1113h(to)g(a)g(task,)h(they)f(ha)o(v)o(e)g(b)q(een)-5 427 y(called)d(\\little)h
1114(languages")d(\(Ben)o(tley)j(1986;)f(V)l(ald)o(\023)-24 b(es)15
1115b(1991\),)g(in)g(con)o(trast)f(to)i(the)f(\\big",)g(mainstream)-5
1116487 y(languages,)k(in)h(whic)o(h)e(applications)h(are)g(written.)32
1117b(This)19 b(distinction)f(is)i(not)f(so)h(sharp)e(no)o(w)o(ada)o(ys,)-5
1118547 y(since)f(a)g(ma)s(jor)f(part)g(of)h(sev)o(eral)g(applications)e(is)i
1119(actually)g(written)g(using)f(an)g(extension)h(language.)-5
1120607 y(Extension)f(languages)g(come)g(in)g(sev)o(eral)g(\015a)o(v)o(ors:)-5
1121741 y Fb(\017)25 b Fi(con\014guration)d(languages)r Ff(:)34
1122b(for)23 b(selecting)g(preferences,)g(usually)g(implemen)o(ted)e(as)i
1123(parameter)45 801 y(lists)13 b(in)f(command)g(lines)g(or)g(as)h(v)m
1124(ariable-v)m(alue)f(pairs)g(read)g(from)g(con\014guration)g(\014les)g
1125(\(e.g.,)i(DOS's)45 861 y Fh(config.sys)p Ff(,)k(MS-Windo)o(ws')c
1126Fh(.ini)j Ff(\014les,)f(X11)h(resource)e(\014les,)h(Motif)t('s)g(UIL)h
1127(\014les\);)-5 930 y Fb(\017)25 b Fi(scripting)19 b(languages)r
1128Ff(:)29 b(for)20 b(automating)f(tasks,)i(with)g(limited)e(\015o)o(w)h(con)o
1129(trol,)g(suc)o(h)g(as)g(the)g(ones)45 990 y(used)c(in)g(DOS's)g(batc)o(h)f
1130(\014les)h(or)g(in)h(the)f(v)m(arious)g(Unix)h(shells;)-5 1060
1131y Fb(\017)25 b Fi(macro)15 b(languages)r Ff(:)21 b(also)15
1132b(for)h(automating)g(tasks,)g(but)g(usually)f(only)h(as)f(a)i(sequence)f(of)g
1133(primitiv)o(e)45 1120 y(op)q(erations,)f(with)i(no)f(\015o)o(w)g(con)o(trol;)
1134-5 1190 y Fb(\017)25 b Fi(em)o(b)q(edded)20 b(languages)r Ff(:)29
1135b(for)21 b(extending)f(applications)f(with)i(user)f(de\014ned)g(functions)g
1136(based)g(on)45 1249 y(primitiv)o(es)h(pro)o(vided)g(b)o(y)h(the)g
1137(applications.)38 b(These)22 b(languages)f(are)h(usually)g(quite)g(p)q(o)o(w)
1138o(erful,)45 1309 y(b)q(eing)16 b(simpli\014ed)f(v)m(arian)o(ts)g(of)i
1139(mainstream)e(programming)e(languages)i(suc)o(h)h(as)g(LISP)g(and)g(C.)-5
11401459 y(What)21 b(mak)o(es)f(em)o(b)q(edded)f(languages)g(di\013eren)o(t)h
1141(from)g(standalone)f(languages)g(is)h(that)h(em)o(b)q(edded)-5
11421518 y(languages)c(only)i(w)o(ork)e Fd(emb)m(e)m(dde)m(d)k
1143Ff(in)d(a)h(host)f(clien)o(t,)g(called)g(the)h Fd(emb)m(e)m(dding)h
1144Ff(program.)26 b(Moreo)o(v)o(er,)-5 1578 y(the)e(host)e(program)f(can)i
1145(usually)f(pro)o(vide)g(domain-sp)q(eci\014c)f(extensions)h(to)i(the)f(em)o
1146(b)q(edded)f(lan-)-5 1638 y(guage,)16 b(th)o(us)f(creating)h(a)g(v)o(ersion)f
1147(of)i(the)f(em)o(b)q(edded)f(language)h(customized)f(for)h(its)g(o)o(wn)g
1148(purp)q(oses,)-5 1698 y(p)q(ossibly)g(b)o(y)h(pro)o(viding)f(higher)g(lev)o
1149(el)h(abstractions.)22 b(F)l(or)16 b(this,)h(an)g(em)o(b)q(edded)f(language)g
1150(has)h(b)q(oth)-5 1758 y(a)h(syn)o(tax)f(for)h(its)f(o)o(wn)g(programs)e(and)
1151i(an)h(application)e(program)g(in)o(terface)h(\(API\))i(for)e(in)o(terfacing)
1152-5 1817 y(with)i(hosts.)30 b(Th)o(us,)18 b(unlik)o(e)g(simpler)g(extension)h
1153(languages,)f(whic)o(h)h(are)f(used)h(to)g(supply)f(parame-)-5
11541877 y(ter)i(v)m(alues)g(and)f(sequences)h(of)g(actions)f(to)i(hosts,)f
1155(there)f(is)h(a)g(t)o(w)o(o-w)o(a)o(y)e(comm)o(unication)g(b)q(et)o(w)o(een)
1156-5 1937 y(em)o(b)q(edded)d(languages)f(and)i(host)f(programs.)20
1157b(Note)c(that)h(the)f(application)e(programmer)g(in)o(terfaces)-5
11581997 y(with)j(an)g(em)o(b)q(edded)f(language)g(in)h(the)g(mainstream)f
1159(language)g(used)g(for)h(host)g(programs,)e(whereas)-5 2056
1160y(the)i(user)f(in)o(terfaces)f(with)i(the)g(application)e(using)g(solely)i
1161(the)f(em)o(b)q(edded)g(language.)-5 2141 y(LISP)e(has)f(alw)o(a)o(ys)f(b)q
1162(een)i(a)g(p)q(opular)e(c)o(hoice)h(for)h(extension)f(languages,)g(for)g(its)
1163h(simple,)f(easily)g(parsed)-5 2201 y(syn)o(tax)j(and)g(built-in)f
1164(extensibilit)o(y)h(\(Bec)o(kman)g(1991;)g(Nahab)q(o)q(o\).)22
1165b(F)l(or)16 b(instance,)f(a)i(ma)s(jor)e(part)h(of)-5 2261
1166y(Emacs)h(is)g(actually)g(written)h(in)f(its)g(o)o(wn)g(v)m(arian)o(t)g(of)h
1167(LISP;)f(sev)o(eral)f(other)h(text)i(editors)e(follo)o(w)g(the)-5
11682320 y(same)e(path.)22 b(Ho)o(w)o(ev)o(er,)15 b(LISP)h(cannot)f(b)q(e)h
1169(called)g(user-friendly)e(when)h(it)h(comes)g(to)g(customization.)-5
11702380 y(Neither)f(can)f(C)g(and)g(the)g(shell)g(languages;)f(the)i(latter)f
1171(ev)o(en)h(ha)o(v)o(e)e(a)i(more)e(complicated,)h(unfamiliar)-5
11722440 y(syn)o(tax.)-5 2525 y(One)g(of)g(the)h(fundamen)o(tal)d(decisions)h
1173(made)g(in)h(the)g(design)f(of)h Fe(Lua)g Ff(w)o(as)f(that)i(it)f(should)f
1174(ha)o(v)o(e)g(a)h(clean)-5 2584 y(but)d(familiar)f(syn)o(tax:)20
1175b(w)o(e)11 b(quic)o(kly)g(settled)h(for)f(a)g(simpli\014ed)f(P)o(ascal-lik)o
1176(e)f(syn)o(tax.)20 b(W)l(e)12 b(a)o(v)o(oided)e(a)i(syn-)-5
11772644 y(tax)j(based)f(on)g(LISP)g(or)g(C)h(b)q(ecause)f(it)h(could)f(b)q(e)g
1178(discouraging)f(to)h(outsiders)f(or)h(non-programmer)o(s.)-5
11792704 y(Th)o(us,)22 b Fe(Lua)f Ff(is)h(primarily)d(a)j(pro)q(cedural)e
1180(language.)37 b(Nev)o(ertheless,)22 b(as)g(already)f(men)o(tioned,)g
1181Fe(Lua)-5 2764 y Ff(acquired)16 b(data)h(description)e(facilities)h(to)h
1182(increase)e(its)i(expression)e(p)q(o)o(w)o(er.)-5 2883 y Fc(T)l(eCGraf/ICAD)
11831674 b(2)p eop
1184%%Page: 3 3
1185bop -5 163 a Fg(Lua)19 b(concepts)-5 248 y Fe(Lua)c Ff(is)g(a)g(general)g
1186(purp)q(ose)f(em)o(b)q(edded)g(programming)e(language)i(designed)h(to)g(supp)
1187q(ort)f(pro)q(cedural)-5 308 y(programming)k(with)i(data)h(description)e
1188(facilities.)34 b(Being)21 b(an)f(em)o(b)q(edded)f(language,)i
1189Fe(Lua)f Ff(has)g(no)-5 367 y(notion)e(of)g(a)h(\\main")e(program;)g(it)h
1190(only)g(w)o(orks)f(em)o(b)q(edded)g(in)h(a)h(host)e(clien)o(t)h(\()p
1191Fe(Lua)h Ff(is)f(pro)o(vided)e(as)-5 427 y(a)i(library)e(of)i(C)f(functions)g
1192(to)h(b)q(e)g(link)o(ed)f(to)h(host)f(applications\).)24 b(The)17
1193b(host)h(can)f(in)o(v)o(ok)o(e)g(functions)-5 487 y(to)k(execute)h(a)f(piece)
1194g(of)g(co)q(de)g(in)g Fe(Lua)p Ff(,)g(can)g(write)f(and)g(read)h
1195Fe(Lua)f Ff(v)m(ariables,)h(and)f(can)h(register)f(C)-5 547
1196y(functions)f(to)h(b)q(e)g(called)g(b)o(y)f Fe(Lua)g Ff(co)q(de.)32
1197b(With)20 b(registered)f(C)h(functions,)f Fe(Lua)h Ff(can)f(b)q(e)h(augmen)o
1198(ted)-5 607 y(to)h(cop)q(e)f(with)g(rather)g(di\013eren)o(t)f(domains,)g(th)o
1199(us)g(creating)h(customized)f(programming)e(languages)-5 666
1200y(sharing)e(a)i(syn)o(tactical)f(framew)o(ork)f(\(Bec)o(kman)i(1991\).)-5
1201751 y(This)23 b(section)g(con)o(tains)f(a)h(brief)g(description)f(of)h(the)h
1202(main)e(concepts)h(in)g Fe(Lua)p Ff(.)42 b(Some)23 b(examples)-5
1203811 y(of)e(actual)f(co)q(de)g(are)g(included,)f(to)i(giv)o(e)f(a)g(\015a)o(v)
1204o(or)f(of)h(the)h(language.)31 b(A)21 b(precise)e(de\014nition)g(of)i(the)-5
1205871 y(language)16 b(can)g(b)q(e)h(found)f(in)g(its)g(reference)h(man)o(ual)d
1206(\(Ierusalimsc)o(h)o(y{Figu)o(eiredo{Celes)f(1994\).)-5 990
1207y Fe(Syntax)-5 1075 y Ff(As)g(men)o(tioned)d(b)q(efore,)j(w)o(e)f(explicitly)
1208h(designed)e Fe(Lua)h Ff(to)g(ha)o(v)o(e)g(a)g(simple,)g(familiar)f(syn)o
1209(tax.)20 b(As)12 b(a)g(con-)-5 1135 y(sequence,)17 b Fe(Lua)f
1210Ff(supp)q(orts)g(an)g(almost)g(con)o(v)o(en)o(tional)f(set)i(of)g(statemen)o
1211(ts,)f(with)h(implicit,)f(but)g(expli-)-5 1194 y(citly)g(terminated,)f(blo)q
1212(c)o(k)h(structure.)21 b(The)15 b(con)o(v)o(en)o(tional)f(statemen)o(ts)h
1213(include)g(simple)f(assignmen)o(t;)-5 1254 y(con)o(trol)f(structures)g(suc)o
1214(h)g(as)h Fh(while-do-end)p Ff(,)i Fh(repeat-until)p Ff(,)g
1215Fh(if-then-elseif-else-en)q(d)p Ff(;)h(and)-5 1314 y(function)22
1216b(calls.)40 b(Non-con)o(v)o(en)o(tional)20 b(statemen)o(ts)i(include)g(m)o
1217(ultiple)f(assignmen)o(t;)j(lo)q(cal)e(v)m(ariable)-5 1374
1218y(declarations,)17 b(whic)o(h)g(can)h(b)q(e)g(placed)f(an)o(ywhere)g(inside)g
1219(a)h(blo)q(c)o(k;)g(and)f(table)h(constructors,)f(whic)o(h)-5
12201434 y(ma)o(y)f(con)o(tain)g(user)f(de\014ned)h(v)m(alidation)g(functions)g
1221(\(see)g(b)q(elo)o(w\).)22 b(Moreo)o(v)o(er,)15 b(functions)h(in)g
1222Fe(Lua)g Ff(can)-5 1493 y(tak)o(e)j(a)g(v)m(ariable)f(n)o(um)o(b)q(er)e(of)j
1223(parameters)e(and)h(can)g(return)g(man)o(y)f(v)m(alues.)28
1224b(This)18 b(a)o(v)o(oids)f(the)i(need)-5 1553 y(for)e(passing)d(parameters)h
1225(b)o(y)i(reference)f(when)g(more)f(than)i(one)f(result)g(need)g(to)h(b)q(e)g
1226(returned.)-5 1673 y Fe(Environment)e(and)h(mo)q(dules)-5 1757
1227y Ff(All)e(statemen)o(ts)e(in)h Fe(Lua)g Ff(are)g(executed)h(in)f(a)g(global)
1228g(en)o(vironmen)o(t.)19 b(This)12 b(en)o(vironmen)o(t,)g(whic)o(h)g(k)o(eeps)
1229-5 1817 y(all)j(global)f(v)m(ariables)g(and)g(functions,)g(is)h(initialized)f
1230(at)h(the)h(b)q(eginning)d(of)i(the)h(em)o(b)q(edding)d(program)-5
12311877 y(and)k(p)q(ersists)f(un)o(til)g(its)h(end.)23 b(The)17
1232b(global)f(en)o(vironmen)o(t)f(can)i(b)q(e)g(manipulated)f(b)o(y)g
1233Fe(Lua)h Ff(co)q(de)h(or)e(b)o(y)-5 1937 y(the)i(em)o(b)q(edding)e(program,)g
1234(whic)o(h)g(can)i(read)e(and)h(write)h(global)f(v)m(ariables)f(using)h
1235(functions)f(in)i(the)-5 1997 y(library)d(that)i(implemen)o(ts)e
1236Fe(Lua)p Ff(.)-5 2081 y(The)20 b(unit)f(of)h(execution)g(of)g
1237Fe(Lua)f Ff(is)h(called)f(a)h Fd(mo)m(dule)t Ff(.)31 b(A)20
1238b(mo)q(dule)f(ma)o(y)g(con)o(tain)g(statemen)o(ts)g(and)-5
12392141 y(function)f(de\014nitions,)f(and)g(ma)o(y)h(b)q(e)g(in)g(a)g(\014le)g
1240(or)f(in)h(a)g(string)f(inside)g(the)i(host)e(program.)25 b(When)18
1241b(a)-5 2201 y(mo)q(dule)g(is)f(executed,)i(\014rst)f(all)f(its)h(functions)g
1242(and)f(statemen)o(ts)h(are)g(compiled,)f(and)g(the)i(functions)-5
12432261 y(added)14 b(to)g(the)h(global)f(en)o(vironmen)o(t;)f(then)h(the)g
1244(statemen)o(ts)g(are)g(executed)h(in)f(sequen)o(tial)g(order.)20
1245b(All)-5 2320 y(mo)q(di\014cations)10 b(a)h(mo)q(dule)g(e\013ects)g(on)g(the)
1246h(global)e(en)o(vironmen)o(t)f(p)q(ersist)i(after)g(its)g(end.)20
1247b(Those)11 b(include)-5 2380 y(mo)q(di\014cations)17 b(to)h(global)f(v)m
1248(ariables)g(and)g(de\014nitions)g(of)h(new)g(functions)f(\(a)h(function)f
1249(de\014nition)g(is)-5 2440 y(actually)g(an)f(assignmen)o(t)f(to)h(a)h(global)
1250f(v)m(ariable;)f(see)i(b)q(elo)o(w\).)-5 2560 y Fe(Data)g(t)o(yp)q(es)f(and)g
1251(va)o(riables)-5 2644 y(Lua)22 b Ff(is)f(a)h(dynamically)f(t)o(yp)q(ed)h
1252(language:)31 b(v)m(ariables)21 b(do)h(not)f(ha)o(v)o(e)h(t)o(yp)q(es;)i
1253(only)e(v)m(alues)f(do.)38 b(All)-5 2704 y(v)m(alues)16 b(carry)g(their)g(o)o
1254(wn)g(t)o(yp)q(e.)22 b(Therefore,)16 b(there)g(are)g(no)g(t)o(yp)q(e)h
1255(de\014nitions)e(in)h(the)h(language.)k(The)-5 2764 y(absence)d(of)h(v)m
1256(ariable)f(t)o(yp)q(e)g(declarations,)g(apparen)o(tly)f(a)h(minor)f(p)q(oin)o
1257(t,)h(is)g(actually)h(an)f(imp)q(ortan)o(t)-5 2883 y Fc(T)l(eCGraf/ICAD)1674
1258b(3)p eop
1259%%Page: 4 4
1260bop -5 163 a Ff(factor)20 b(in)f(simplifying)f(the)i(language;)g(it)g(is)f
1261(frequen)o(tly)h(presen)o(ted)e(as)i(a)f(ma)s(jor)g(feature)g(in)h(man)o(y)-5
1262223 y(v)m(arian)o(ts)14 b(of)g(t)o(yp)q(ed)h(languages)e(mo)q(di\014ed)h(to)h
1263(b)q(e)f(used)g(as)g(extension)g(languages.)20 b(Moreo)o(v)o(er,)13
1264b Fe(Lua)h Ff(has)-5 283 y(garbage)g(collection:)20 b(it)15
1265b(k)o(eeps)f(trac)o(k)g(of)g(whic)o(h)g(v)m(alues)g(are)g(b)q(eing)g(used)f
1266(and)h(discards)e(the)j(ones)e(that)-5 343 y(are)k(not.)23
1267b(This)17 b(a)o(v)o(oids)e(the)j(need)e(for)h(explicit)g(managing)f(memory)g
1268(allo)q(cation,)h(a)g(ma)s(jor)e(source)i(of)-5 402 y(programming)d(errors.)
126920 b(There)c(are)g(sev)o(en)g(basic)g(data)h(t)o(yp)q(es)f(in)g
1270Fe(Lua)p Ff(:)-5 492 y Fb(\017)25 b Fi(nil)r Ff(:)c(the)c(t)o(yp)q(e)g(of)g
1271(a)f(single)g(v)m(alue)h(called)f Fh(nil)p Ff(;)-5 552 y Fb(\017)25
1272b Fi(n)o(um)o(b)q(er)t Ff(:)19 b(\015oating)d(p)q(oin)o(t)g(n)o(um)o(b)q
1273(ers;)-5 612 y Fb(\017)25 b Fi(string)t Ff(:)c(arra)o(ys)15
1274b(of)i(c)o(haracters;)-5 671 y Fb(\017)25 b Fi(function)p Ff(:)d(user)15
1275b(de\014ned)h(functions;)-5 731 y Fb(\017)25 b Fi(Cfunction)p
1276Ff(:)d(functions)15 b(pro)o(vided)g(b)o(y)h(the)h(host)f(program;)-5
1277791 y Fb(\017)25 b Fi(userdata)p Ff(:)c(p)q(oin)o(ters)15 b(to)i(host)f
1278(data;)-5 851 y Fb(\017)25 b Fi(table)s Ff(:)d(asso)q(ciativ)o(e)16
1279b(arra)o(ys.)-5 966 y Fe(Lua)24 b Ff(pro)o(vides)f(some)g(automatic)h(t)o(yp)
1280q(e)h(con)o(v)o(ersions.)42 b(A)25 b(string)e(taking)h(part)g(in)g(an)f
1281(arithmetic)-5 1025 y(op)q(eration)d(is)g(con)o(v)o(erted)g(to)g(a)h(n)o(um)o
1282(b)q(er,)e(if)h(p)q(ossible.)33 b(Con)o(v)o(ersely)l(,)19 b(whenev)o(er)h(a)g
1283(n)o(um)o(b)q(er)f(is)h(used)-5 1085 y(when)g(a)g(string)f(is)h(exp)q(ected,)
1284i(that)e(n)o(um)o(b)q(er)e(is)i(con)o(v)o(erted)f(to)h(a)g(string.)32
1285b(This)19 b(co)q(ercion)h(is)g(useful)-5 1145 y(b)q(ecause)d(it)f
1286(simpli\014es)f(programs)f(and)i(a)o(v)o(oids)f(the)i(need)f(for)g(explicit)h
1287(con)o(v)o(ersion)e(functions.)-5 1230 y(Global)h(v)m(ariables)f(do)h(not)h
1288(need)f(declaration;)f(only)h(lo)q(cal)h(v)m(ariables)e(do.)21
1289b(An)o(y)c(v)m(ariable)f(is)g(assumed)-5 1289 y(to)24 b(b)q(e)f(global)f
1290(unless)g(explicitly)h(declared)f(lo)q(cal.)42 b(Lo)q(cal)23
1291b(v)m(ariable)g(declarations)e(can)i(b)q(e)g(placed)-5 1349
1292y(an)o(ywhere)c(inside)f(a)i(blo)q(c)o(k.)31 b(Therefore,)20
1293b(b)q(ecause)f(only)h(lo)q(cal)f(v)m(ariables)g(are)g(declared,)h(and)f
1294(these)-5 1409 y(declarations)h(can)h(b)q(e)g(made)f(close)h(to)g(the)h(use)e
1295(of)i(the)f(v)m(ariable,)g(it)g(is)g(usually)f(simple)g(to)h(decide)-5
12961469 y(whether)16 b(a)h(giv)o(en)f(v)m(ariable)g(is)g(lo)q(cal)h(or)f
1297(global.)-5 1553 y(Before)j(the)g(\014rst)e(assignmen)o(t,)g(the)i(v)m(alue)g
1298(of)f(a)h(v)m(ariable)f(is)g Fh(nil)p Ff(.)28 b(Therefore,)18
1299b(there)g(are)g(no)g(unini-)-5 1613 y(tialized)h(v)m(ariables)g(in)g
1300Fe(Lua)p Ff(,)g(another)g(ma)s(jor)f(source)g(of)i(programming)c(errors.)28
1301b(Nev)o(ertheless,)20 b(the)-5 1673 y(only)f(v)m(alid)f(op)q(erations)g(on)h
1302Fh(nil)g Ff(are)f(assignmen)o(t)f(and)h(equalit)o(y)h(test)g(\(the)h(main)d
1303(prop)q(ert)o(y)h(of)h Fh(nil)-5 1733 y Ff(is)f(to)h(b)q(e)g(di\013eren)o(t)e
1304(from)h(an)o(y)g(other)g(v)m(alue\).)28 b(Therefore,)18 b(using)f(an)h
1305(\\uninitialized")f(v)m(ariable)h(in)g(a)-5 1792 y(con)o(text)k(where)f(an)g
1306(\\actual")g(v)m(alue)g(is)g(needed)f(\(e.g.,)j(an)e(arithmetic)f
1307(expression\))g(results)g(in)h(an)-5 1852 y(execution)h(error,)g(alerting)f
1308(the)h(programmer)c(that)k(the)g(v)m(ariable)g(w)o(as)e(not)i(prop)q(erly)f
1309(initialized.)-5 1912 y(Th)o(us,)c(the)g(purp)q(ose)f(of)i(automatically)f
1310(initializing)g(v)m(ariables)f(with)h Fh(nil)i Ff(is)e(not)g(to)h(encourage)f
1311(the)-5 1972 y(programmer)h(to)i(a)o(v)o(oid)g(initializing)f(v)m(ariables,)h
1312(but)g(rather)f(to)i(enable)e Fe(Lua)h Ff(to)h(signal)e(the)i(use)f(of)-5
13132032 y(actually)d(uninitialized)e(v)m(ariables.)-5 2116 y(F)l(unctions)d(are)
1314i(considered)e(\014rst-class)g(v)m(alues)h(in)h Fe(Lua)p Ff(:)20
1315b(they)14 b(can)g(b)q(e)g(stored)f(in)g(v)m(ariables,)h(passed)e(as)-5
13162176 y(argumen)o(ts)k(to)i(other)g(functions)f(and)g(returned)g(as)g
1317(results.)25 b(When)17 b(a)h(function)g(in)f Fe(Lua)h Ff(is)f(de\014ned,)-5
13182236 y(its)e(b)q(o)q(dy)g(is)f(compiled)f(and)h(stored)g(in)g(a)g(global)g(v)
1319m(ariable)g(with)g(the)h(giv)o(en)f(name.)20 b Fe(Lua)15 b
1320Ff(can)f(call)g(\(and)-5 2296 y(manipulate\))i(functions)g(written)g(in)g(b)q
1321(oth)h Fe(Lua)f Ff(and)g(C;)g(the)h(latter)g(ha)o(v)o(e)f(t)o(yp)q(e)h
1322Fd(Cfunction)t Ff(.)-5 2380 y(The)j(t)o(yp)q(e)g Fd(user)m(data)h
1323Ff(is)e(pro)o(vided)f(to)i(allo)o(w)f(arbitrary)f(\()p Fh(void*)p
1324Ff(\))k(C)d(p)q(oin)o(ters)g(to)h(b)q(e)g(stored)f(in)g Fe(Lua)-5
13252440 y Ff(v)m(ariables;)d(its)g(only)g(v)m(alid)h(op)q(erations)e(in)i
1326Fe(Lua)f Ff(are)g(assignmen)o(t)e(and)i(equalit)o(y)h(test.)-5
13272525 y(The)d(t)o(yp)q(e)g Fd(table)g Ff(implemen)o(ts)e(asso)q(ciativ)o(e)h
1328(arra)o(ys,)g(that)h(is,)g(arra)o(ys)e(that)j(can)e(b)q(e)i(indexed)e(with)h
1329(b)q(oth)-5 2584 y(n)o(um)o(b)q(ers)20 b(and)h(strings.)37
1330b(Therefore,)23 b(this)f(t)o(yp)q(e)g(ma)o(y)g(b)q(e)g(used)f(not)i(only)e
1331(to)i(represen)o(t)d(ordinary)-5 2644 y(arra)o(ys,)j(but)g(also)g(sym)o(b)q
1332(ol)f(tables,)i(sets,)h(records,)e(etc.)43 b(T)l(o)23 b(represen)o(t)e(a)j
1333(record,)f Fe(Lua)g Ff(uses)g(the)-5 2704 y(\014eld)15 b(name)g(as)h(an)f
1334(index.)21 b(The)16 b(language)e(supp)q(orts)h(this)g(represen)o(tation)f(b)o
1335(y)h(pro)o(viding)f Fh(a.name)i Ff(as)-5 2764 y(syn)o(tactic)h(sugar)e(for)h
1336Fh(a["name"])p Ff(.)-5 2883 y Fc(T)l(eCGraf/ICAD)1674 b(4)p
1337eop
1338%%Page: 5 5
1339bop -5 163 a Ff(Asso)q(ciativ)o(e)21 b(arra)o(ys)e(are)h(a)h(p)q(o)o(w)o
1340(erful)e(language)h(construct;)i(man)o(y)e(algorithms)f(are)h(simpli\014ed)e
1341(to)-5 223 y(the)j(p)q(oin)o(t)f(of)h(trivialit)o(y)f(b)q(ecause)g(the)h
1342(required)e(data)i(structures)e(and)h(algorithms)e(for)j(searc)o(hing)-5
1343283 y(them)13 b(are)f(pro)o(vided)f(b)o(y)h(the)h(language)f
1344(\(Aho{Kerninghan{W)l(ein)o(b)q(erg)o(er)e(1988;)j(Ben)o(tley)g(1988\).)21
1345b(F)l(or)-5 343 y(example,)c(the)g(core)f(of)h(a)g(program)e(that)i(coun)o
1346(ts)f(the)h(o)q(ccurrences)f(of)h(eac)o(h)g(w)o(ord)e(in)i(a)g(text)h(can)f
1347(b)q(e)-5 402 y(written)195 499 y Fh(table[word])27 b(=)g(table[word])g(+)g
1348(1)-5 583 y Ff(without)22 b(ha)o(ving)f(to)h(searc)o(h)e(the)i(list)g(of)g(w)
1349o(ords.)36 b(\(Ho)o(w)o(ev)o(er,)22 b(an)g(alphab)q(etically)f(ordered)f(rep)
1350q(ort)-5 643 y(requires)c(some)f(real)h(w)o(ork,)g(b)q(ecause)g(the)h
1351(indices)f(in)g(a)g(table)h(are)f(ordered)f(arbitrarily)g(inside)h
1352Fe(Lua)p Ff(.\))-5 728 y(T)l(ables)g(can)g(b)q(e)h(created)g(in)f(man)o(y)f
1353(w)o(a)o(ys.)21 b(The)c(simplest)e(w)o(a)o(y)h(corresp)q(onds)e(to)j
1354(ordinary)e(arra)o(ys:)195 824 y Fh(t)26 b(=)g(@\(100\))-5
1355909 y Ff(Suc)o(h)12 b(an)g(expression)f(results)g(in)h(a)h(new)f(empt)o(y)g
1356(table.)21 b(The)12 b(dimension)e(\(100)j(in)f(the)h(example)f(ab)q(o)o(v)o
1357(e\))-5 969 y(is)j(optional)g(and)g(ma)o(y)f(b)q(e)i(giv)o(en)f(as)g(a)g(hin)
1358o(t)g(to)h(the)f(initial)g(table)g(size.)22 b(Indep)q(enden)o(tly)14
1359b(of)i(the)f(initial)-5 1028 y(dimension,)i(all)i(tables)f(in)g
1360Fe(Lua)h Ff(expand)f(dynamically)f(as)i(needed.)28 b(Th)o(us,)17
1361b(it)i(is)f(p)q(erfectly)i(v)m(alid)e(to)-5 1088 y(refer)e(to)h
1362Fh(t[200])h Ff(or)e(ev)o(en)g(to)h Fh(t["day"])p Ff(.)-5 1173
1363y(There)f(are)g(t)o(w)o(o)g(alternativ)o(e)g(syn)o(taxes)g(for)g(creating)g
1364(tables)g(without)g(explicitly)g(\014lling)f(eac)o(h)h(en)o(try:)-5
13651233 y(one)f(for)h(lists)e(\()p Fh(@[])p Ff(\))j(and)e(one)g(for)g(records)f
1366(\()p Fh(@{})p Ff(\).)23 b(F)l(or)14 b(instance,)h(it)h(is)f(m)o(uc)o(h)f
1367(easier)g(to)i(create)g(a)f(list)-5 1293 y(b)o(y)h(pro)o(viding)f(its)h
1368(elemen)o(ts,)g(as)g(in)195 1389 y Fh(t)26 b(=)g(@["red",)i("green",)f
1369("blue",)g(3])-5 1474 y Ff(than)17 b(with)f(the)h(equiv)m(alen)o(t)f
1370(explicit)h(co)q(de)195 1559 y Fh(t)26 b(=)g(@\(\))195 1619
1371y(t[1])g(=)h("red")195 1679 y(t[2])f(=)h("green")195 1739 y(t[3])f(=)h
1372("blue")195 1799 y(t[4])f(=)h(3)-5 1883 y Ff(Moreo)o(v)o(er,)15
1373b(it)i(is)f(p)q(ossible)f(to)i(pro)o(vide)e(user)h(functions)g(when)g
1374(creating)g(lists)g(and)g(records,)f(as)h(in)195 1969 y Fh(t)26
1375b(=)g(@colors["red",)i("green",)g("blue",)f("yellow"])195 2029
1376y(t)f(=)g(@employee{name="john)j(smith",)f(age=34})-5 2114
1377y Ff(Here,)15 b Fh(colors)g Ff(and)f Fh(employee)h Ff(are)f(user)f(functions)
1378h(that)g(are)g(automatically)g(called)g(after)g(the)h(table)-5
13792173 y(is)i(created.)22 b(Suc)o(h)16 b(functions)g(can)h(b)q(e)g(used)f(to)h
1380(c)o(hec)o(k)f(\014eld)h(v)m(alues,)f(to)h(create)g(default)g(\014elds,)f(or)
1381g(for)-5 2233 y(an)o(y)g(other)h(side-e\013ect.)k(Th)o(us,)15
1382b(the)i(co)q(de)g(for)f(the)h Fh(employee)h Ff(record)d(is)h(equiv)m(alen)o
1383(t)h(to:)195 2320 y Fh(t)26 b(=)g(@\(\))195 2380 y(t.name)h(=)f("john)h
1384(smith")195 2440 y(t.age)53 b(=)26 b(34)195 2500 y(employee\(t\))-5
13852584 y Ff(Note)17 b(that,)g(ev)o(en)f(though)f Fe(Lua)h Ff(do)q(es)g(not)g
1386(ha)o(v)o(e)f(t)o(yp)q(e)i(declarations,)d(the)j(p)q(ossibilit)o(y)d(of)j(ha)
1387o(ving)e(user)-5 2644 y(functions)c(called)g(automatically)g(after)g(table)h
1388(creation)e(actually)i(pro)o(vides)d Fe(Lua)i Ff(with)h(user)e(con)o(trolled)
1389-5 2704 y Fd(typ)m(e)21 b(c)m(onstructors)p Ff(.)30 b(This)19
1390b(non-con)o(v)o(en)o(tional)d(construct)j(is)f(a)h(v)o(ery)g(p)q(o)o(w)o
1391(erful)f(feature,)h(and)g(is)g(the)-5 2764 y(expression)c(of)i(declarativ)o
1392(e)f(programming)e(using)h Fe(Lua)p Ff(.)-5 2883 y Fc(T)l(eCGraf/ICAD)1674
1393b(5)p eop
1394%%Page: 6 6
1395bop -5 163 a Fe(The)17 b(application)h(p)o(rogram)c(interface)-5
1396248 y Ff(The)24 b(library)e(that)i(implemen)o(ts)e Fe(Lua)h
1397Ff(has)g(an)g(API,)h(i.e.,)h(a)e(set)h(of)g(C)g(functions)f(for)g(in)o
1398(terfacing)-5 308 y Fe(Lua)h Ff(with)f(host)h(programs)d(\(there)j(are)f
1399(appro)o(ximately)f(30)i(suc)o(h)e(functions\).)43 b(These)24
1400b(functions)-5 367 y(c)o(haracterize)16 b Fe(Lua)h Ff(as)f(an)h(em)o(b)q
1401(edded)f(language,)f(and)i(handle)f(the)h(follo)o(wing)e(tasks:)23
1402b(executing)17 b Fe(Lua)-5 427 y Ff(co)q(de)25 b(con)o(tained)e(in)h(a)g
1403(\014le)g(or)g(in)g(a)g(string;)j(con)o(v)o(erting)c(v)m(alues)h(b)q(et)o(w)o
1404(een)g(C)g(and)f Fe(Lua)p Ff(;)28 b(reading)-5 487 y(and)17
1405b(writing)g Fe(Lua)h Ff(ob)s(jects)g(con)o(tained)f(in)g(global)g(v)m
1406(ariables;)g(calling)g Fe(Lua)h Ff(functions;)f(registering)g(C)-5
1407547 y(functions)i(to)h(b)q(e)g(called)f(b)o(y)g Fe(Lua)p Ff(,)h(including)e
1408(error)g(handlers.)29 b(A)20 b(simple)e Fe(Lua)h Ff(in)o(terpreter)f(can)i(b)
1409q(e)-5 607 y(written)d(as)f(follo)o(ws:)195 668 y Fh(#include)27
1410b("lua.h")195 728 y(int)f(main\(void\))195 787 y({)221 847
1411y(char)g(s[1000];)221 907 y(while)h(\(gets\(s\)\))273 967 y
1412(lua_dostring\(s\);)221 1026 y(return)g(0;)195 1086 y(})-5
14131171 y Ff(This)15 b(simple)f(in)o(terpreter)g(can)h(b)q(e)h(augmen)o(ted)e
1414(with)i(domain)e(sp)q(eci\014c)h(functions)g(written)g(in)g(C)g(and)-5
14151231 y(made)h(a)o(v)m(ailable)g(to)h Fe(Lua)g Ff(with)f(the)h(API)g(function)
1416f Fh(lua_register)p Ff(.)25 b(Extension)16 b(functions)g(follo)o(w)g(a)-5
14171290 y(proto)q(col)h(to)f(receiv)o(e)h(and)f(return)f(v)m(alues)h(to)h
1418Fe(Lua)p Ff(.)-5 1402 y Fe(Prede\014ned)f(functions)h(and)f(lib)o(ra)o(ries)
1419-5 1486 y Ff(The)e(set)g(of)h(prede\014ned)d(functions)h(in)h
1420Fe(Lua)g Ff(is)f(small)g(but)h(p)q(o)o(w)o(erful.)20 b(Most)13
1421b(of)i(them)e(pro)o(vide)g(features)-5 1546 y(that)20 b(allo)o(w)e(some)g
1422(degree)g(of)h(re\015exivit)o(y)g(in)g(the)g(language.)28 b(Suc)o(h)17
1423b(features)i(cannot)f(b)q(e)i(sim)o(ulated)-5 1606 y(with)c(the)h(rest)f(of)g
1424(the)h(language)e(nor)g(with)h(the)h(standard)d(API.)j(The)f(prede\014ned)e
1425(functions)i(handle)-5 1666 y(the)j(follo)o(wing)d(tasks:)25
1426b(executing)19 b(a)f Fe(Lua)f Ff(mo)q(dule)h(con)o(tained)f(in)g(a)h(\014le)g
1427(or)f(string;)h(en)o(umerating)e(all)-5 1726 y(\014elds)g(of)h(a)f(table;)g
1428(en)o(umerating)f(all)h(global)g(v)m(ariables;)f(t)o(yp)q(e)i(querying)f(and)
1429g(con)o(v)o(ersion.)-5 1810 y(The)j(libraries,)f(on)g(the)i(other)e(hand,)h
1430(pro)o(vide)f(useful)g(routines)g(whic)o(h)g(are)h(implemen)o(ted)e(directly)
1431-5 1870 y(through)22 b(the)h(standard)e(API.)h(Therefore,)i(they)f(are)f(not)
1432h(necessary)e(to)i(the)g(language,)g(and)f(are)-5 1930 y(pro)o(vided)14
1433b(as)g(separate)h(C)g(mo)q(dules,)f(whic)o(h)g(can)h(b)q(e)g(link)o(ed)f(to)h
1434(applications)f(as)h(needed.)20 b(Curren)o(tly)l(,)-5 1990
1435y(there)c(are)g(libraries)d(for)j(string)f(manipulation,)f(mathematical)h
1436(functions,)g(and)g(input)g(and)g(output.)-5 2101 y Fe(P)o(ersistence)-5
14372186 y Ff(The)k(en)o(umeration)e(functions)h(can)g(b)q(e)i(used)e(to)h(pro)o
1438(vide)e(p)q(ersistency)i(of)g(the)g(global)f(en)o(vironmen)o(t)-5
14392245 y(within)e Fe(Lua)p Ff(,)h(i.e.,)f(it)h(is)f(p)q(ossible)f(to)i(write)g
1440Fe(Lua)f Ff(co)q(de)h(that)g(writes)f Fe(Lua)g Ff(co)q(de)h(that,)g(when)f
1441(executed,)-5 2305 y(restores)i(the)h(v)m(alues)g(of)g(all)g(global)f(v)m
1442(ariables.)28 b(W)l(e)20 b(no)o(w)e(sho)o(w)g(some)g(w)o(a)o(ys)g(to)h(store)
1443g(and)f(retriev)o(e)-5 2365 y(v)m(alues)k(in)g Fe(Lua)p Ff(,)h(using)e(a)h
1444(text)h(\014le)f(written)g(in)g(the)g(language)f(itself)i(as)e(the)i(storage)
1445e(media.)38 b(T)l(o)-5 2425 y(restore)16 b(v)m(alues)g(sa)o(v)o(ed)g(in)g
1446(this)g(w)o(a)o(y)l(,)g(it)h(is)f(enough)f(to)i(execute)h(the)f(output)f
1447(\014le.)-5 2509 y(T)l(o)h(store)f(a)g(single)g(v)m(alue)h(with)f(a)h(name,)e
1448(the)i(follo)o(wing)e(co)q(de)i(is)f(enough:)195 2584 y Fh(function)27
1449b(store\(name,)h(value\))247 2644 y(write\(name)g(..)e('='\))247
14502704 y(write_value\(value\))195 2764 y(end)-5 2883 y Fc(T)l(eCGraf/ICAD)1674
1451b(6)p eop
1452%%Page: 7 7
1453bop -5 163 a Ff(Here,)15 b(\\)p Fh(..)p Ff(")22 b(is)15 b(the)g(string)e
1454(concatenation)i(op)q(erator)f(and)g Fh(write)i Ff(is)e(a)h(library)e
1455(function)i(for)f(output.)-5 223 y(The)j(function)g Fh(write_value)i
1456Ff(outputs)e(a)g(suitable)f(represen)o(tation)f(of)j(a)f(v)m(alue)g(based)f
1457(on)h(its)g(t)o(yp)q(e,)-5 283 y(using)f(a)g(string)g(returned)f(b)o(y)h(the)
1458h(prede\014ned)e(function)h Fh(type)p Ff(:)195 359 y Fh(function)27
1459b(write_value\(value\))247 419 y(local)g(t)f(=)g(type\(value\))351
1460478 y(if)h(t)f(=)h('nil')105 b(then)27 b(write\('nil'\))247
1461538 y(elseif)g(t)f(=)h('number')g(then)g(write\(value\))247
1462598 y(elseif)g(t)f(=)h('string')g(then)g(write\('"')g(..)g(value)g(..)f
1463('"'\))247 658 y(end)195 718 y(end)-5 802 y Ff(Storing)16 b(tables)g(is)g(a)h
1464(little)g(more)e(complex.)22 b(First,)15 b Fh(write_value)j
1465Ff(is)e(augmen)o(ted)g(with)247 888 y Fh(elseif)27 b(t)f(=)h('table')g(then)f
1466(write_record\(value\))-5 972 y Ff(Assuming)13 b(that)h(tables)g(are)f(b)q
1467(eing)h(used)f(as)h(records)e(\(i.e.,)j(there)f(are)f(no)h(circular)f
1468(references)g(and)g(all)-5 1032 y(indices)h(are)h(iden)o(ti\014ers\),)f(the)h
1469(v)m(alue)h(of)f(a)g(table)g(can)g(b)q(e)g(written)g(directly)g(with)g(table)
1470g(constructors:)195 1110 y Fh(function)27 b(write_record\(t\))247
14711169 y(local)g(i,)f(v)h(=)f(next\(t,)h(nil\))79 b(--)27 b("next")g
1472(enumerates)g(the)g(fields)g(of)f(t)247 1229 y(write\('@{'\))446
1473b(--)27 b(starts)g(constructor)247 1289 y(while)g(i)f(do)299
14741349 y(store\(i,v\))299 1408 y(i,)h(v)f(=)g(next\(t,)h(i\))299
14751468 y(if)g(i)f(then)h(write\(',)g('\))f(end)247 1528 y(end)247
14761588 y(write\('}'\))472 b(--)27 b(closes)g(constructor)195
14771648 y(end)-5 1810 y Fg(Implementation)-5 1894 y Ff(Extension)22
1478b(languages)f(are)g(alw)o(a)o(ys)g(in)o(terpreted,)i(in)e(one)h(w)o(a)o(y)g
1479(or)f(another,)i(b)o(y)f(the)g(application.)-5 1954 y(Simple)e(extension)h
1480(languages)f(can)h(b)q(e)g(in)o(terpreted)f(directly)h(from)g(source)f(co)q
1481(de.)36 b(On)21 b(the)g(other)-5 2014 y(hand,)j(em)o(b)q(edded)e(languages)f
1482(are)i(usually)f(p)q(o)o(w)o(erful)g(programming)e(languages,)j(with)g
1483(complex)-5 2074 y(syn)o(tax)11 b(and)g(seman)o(tics.)18 b(A)12
1484b(more)e(e\016cien)o(t)g(implemen)o(tation)f(tec)o(hnique)i(for)g(em)o(b)q
1485(edded)f(languages)f(is)-5 2133 y(to)k(design)f(a)h Fd(virtual)h(machine)g
1486Ff(suited)e(to)i(the)f(needs)f(of)h(the)g(language,)g(compile)f(extension)g
1487(programs)-5 2193 y(in)o(to)23 b Fd(byte)m(c)m(o)m(des)j Ff(for)d(this)h(mac)
1488o(hine,)f(and)g(then)h(sim)o(ulate)e(the)i(virtual)f(mac)o(hine)f(b)o(y)h(in)
1489o(terpreting)-5 2253 y(b)o(yteco)q(des)e(\(Betz)i(1988,)f(1991;)h(F)l(ranks)c
1490(1991\).)36 b(W)l(e)21 b(ha)o(v)o(e)g(c)o(hosen)f(this)g(h)o(ybrid)g(arc)o
1491(hitecture)g(for)-5 2313 y(implemen)o(ting)12 b Fe(Lua)p Ff(;)i(it)f(has)g
1492(the)h(follo)o(wing)e(adv)m(an)o(tages)h(o)o(v)o(er)g(direct)g(in)o
1493(terpretation)f(of)i(source)f(co)q(de:)-5 2395 y Fb(\017)25
1494b Ff(b)q(ecause)19 b(lexical)g(and)g(syn)o(tactical)g(analysis)f(are)h(done)f
1495(only)h(once,)h(p)q(ossibly)e(using)g(an)h(external)45 2455
1496y(parser)j(b)q(efore)i(the)g(actual)g(em)o(b)q(edding,)g(simple)e(errors)g
1497(are)i(iden)o(ti\014ed)e(early)l(,)j(resulting)d(in)i(a)45
14982515 y(shorter)15 b(dev)o(elopmen)o(t)h(cycle)h(and)f(faster)g(execution;)-5
14992584 y Fb(\017)25 b Ff(if)18 b(an)g(external)g(compiler)f(is)h(used,)f(there)
1500h(is)g(the)g(p)q(ossibilit)o(y)f(of)h(pro)o(viding)e(extension)i(programs)45
15012644 y(in)f(b)o(yteco)q(de)g(form)f(only)l(,)h(i.e.,)f(pre-compiled,)f
1502(resulting)h(in)g(faster)h(loading,)f(safer)g(en)o(vironmen)o(ts)45
15032704 y(and)e(smaller)e(run-time)h(supp)q(ort)g(\(ho)o(w)o(ev)o(er,)h(linking)
1504f(sev)o(eral)g(pre-compiled)f(extension)i(programs)45 2764
1505y(can)i(b)q(e)h(a)g(di\016cult)e(task\).)-5 2883 y Fc(T)l(eCGraf/ICAD)1674
1506b(7)p eop
1507%%Page: 8 8
1508bop -5 163 a Ff(This)18 b(arc)o(hitecture)g(w)o(as)g(pioneered)g(in)h
1509(Smalltalk)f(\(Goldb)q(erg{Robson)e(1983;)k(Budd)e(1987\))h(\(from)-5
1510223 y(whic)o(h)k(the)h(term)f Fd(byte)m(c)m(o)m(des)j Ff(w)o(as)d(b)q(orro)o
1511(w)o(ed\))f(and)h(also)g(used)f(in)i(the)g(successful)e(UCSD)i(P)o(ascal)-5
1512283 y(system)e(based)g(on)f(P-co)q(de)h(\(Clark{Ko)q(ehler)g(1982\).)39
1513b(In)22 b(these)g(systems,)h(b)o(yteco)q(des)f(for)g(virtual)-5
1514343 y(mac)o(hines)14 b(w)o(ere)g(used)h(b)q(oth)g(for)g(reducing)e(complexit)
1515o(y)i(and)g(for)g(increasing)e(p)q(ortabilit)o(y)l(.)21 b(This)14
1516b(path)-5 402 y(w)o(as)i(also)g(used)g(in)g(p)q(orting)g(the)g(BCPL)h
1517(compiler)f(\(Ric)o(hards{Whitb)o(y-S)o(trev)o(ens)d(1980\).)-5
1518487 y(Co)q(de)19 b(for)e(compilation)g(of)h(extension)g(programs)e(can)i(b)q
1519(e)g(built)g(with)g(standard)f(to)q(ols,)h(suc)o(h)f(as)h Fe(lex)-5
1520547 y Ff(and)e Fe(y)o(acc)g Ff(\(Levine{Mason{Bro)o(wn)e(1992\).)22
1521b(The)16 b(existence)h(of)f(go)q(o)q(d)g(to)q(ols)g(for)g(compiler)f
1522(construc-)-5 607 y(tion,)25 b(whic)o(h)c(b)q(ecame)i(widely)g(a)o(v)m
1523(ailable)f(in)h(the)g(late)g(sev)o(en)o(ties,)h(w)o(as)e(the)h(main)f(reason)
1524g(for)h(the)-5 666 y(sprouting)16 b(of)h(sev)o(eral)f(little)i(languages,)e
1525(sp)q(ecially)h(in)g(Unix)g(en)o(vironmen)o(ts.)22 b(Our)16
1526b(implemen)o(tation)-5 726 y(of)i Fe(Lua)f Ff(uses)g Fe(y)o(acc)h
1527Ff(for)f(syn)o(tactical)g(analysis.)24 b(Initially)l(,)17 b(w)o(e)g(wrote)h
1528(the)g(lexical)f(analyzer)h(using)e Fe(lex)p Ff(.)-5 786 y(After)21
1529b(p)q(erformance)e(pro\014les)f(with)i(pro)q(duction)f(programs,)g(w)o(e)g
1530(detected)i(that)g(this)e(mo)q(dule)h(w)o(as)-5 846 y(resp)q(onsible)e(for)h
1531(almost)g(half)g(of)g(the)h(time)f(required)f(for)h(loading)g(and)f
1532(executing)i(extension)f(pro-)-5 905 y(grams.)24 b(W)l(e)18
1533b(then)g(rewrote)f(this)h(mo)q(dule)f(directly)g(in)h(C;)f(the)h(new)g
1534(lexical)g(analyzer)f(is)g(more)g(than)-5 965 y(t)o(wice)g(as)f(fast)h(as)f
1535(the)h(old)f(one.)-5 1135 y Fe(Lua's)g(virtual)j(machine)-5
15361219 y Ff(The)h(virtual)f(mac)o(hine)f(used)h(in)g(our)g(implemen)o(tation)f
1537(of)i Fe(Lua)f Ff(is)g(a)h Fd(stack)h(machine)p Ff(.)32 b(This)19
1538b(means)-5 1279 y(that)e(it)f(do)q(es)g(not)g(ha)o(v)o(e)g(random)e(access)i
1539(memory:)21 b(all)16 b(temp)q(orary)f(v)m(alues)h(and)g(lo)q(cal)g(v)m
1540(ariables)f(are)-5 1339 y(k)o(ept)j(in)e(a)i(stac)o(k.)24 b(Moreo)o(v)o(er,)
154115 b(it)j(do)q(es)f(not)g(ha)o(v)o(e)g(general)f(purp)q(ose)g(registers,)g
1542(only)h(sp)q(ecial)g(con)o(trol)-5 1399 y(registers,)f(whic)o(h)g(con)o(trol)
1543h(the)g(stac)o(k)g(and)g(the)g(execution)h(of)f(programs.)22
1544b(These)17 b(registers)f(are)h Fd(b)m(ase)-5 1458 y(of)i(stack)p
1545Ff(,)d Fd(top)j(of)f(stack)f Ff(and)f Fd(pr)m(o)m(gr)m(am)k(c)m(ounter)p
1546Ff(.)-5 1543 y(Programs)j(for)h(the)g(virtual)g(mac)o(hine)f(are)h(sequences)
1547g(of)h(instructions,)f(called)g Fd(byte)m(c)m(o)m(des)p Ff(.)48
1548b(The)-5 1603 y(execution)24 b(of)g(programs)d(is)i(ac)o(hiev)o(ed)g(b)o(y)g
1549(in)o(terpreting)f(b)o(yteco)q(des,)k(eac)o(h)d(corresp)q(onding)e(to)j(an)-5
15501663 y(instruction)16 b(that)g(op)q(erates)h(on)f(the)h(top)f(p)q(ortion)g
1551(of)h(the)g(stac)o(k.)22 b(F)l(or)15 b(example,)h(the)h(statemen)o(t)195
15521777 y Fh(a)26 b(=)g(b)g(+)h(f\(c\))-5 1862 y Ff(is)16 b(compiled)g(in)o(to)
1553195 1962 y Fh(PUSHGLOBAL)80 b("b")195 2022 y(PUSHGLOBAL)g("f")195
15542081 y(PUSHMARK)195 2141 y(PUSHGLOBAL)g("c")195 2201 y(CALLFUNC)195
15552261 y(ADJUST)210 b(2)195 2320 y(ADD)195 2380 y(STOREGLOBAL)54
1556b("a")-5 2465 y Fe(Lua)p Ff('s)13 b(virtual)f(mac)o(hine)g(has)g(ab)q(out)h
1557(60)g(instructions;)g(accordingly)l(,)f(it)i(is)e(p)q(ossible)g(to)i(use)e
1558(8-bit)h(b)o(yte-)-5 2525 y(co)q(des.)22 b(Man)o(y)15 b(instructions)f
1559(\(e.g.,)h Fh(ADD)p Ff(\))i(do)e(not)h(need)f(additional)g(parameters;)f
1560(these)h(instructions)-5 2584 y(op)q(erate)d(directly)g(on)f(the)h(stac)o(k)g
1561(and)f(tak)o(e)h(exactly)h(one)f(b)o(yte)g(in)f(compiled)g(co)q(de.)20
1562b(Other)11 b(instructions)-5 2644 y(\(e.g.,)16 b Fh(PUSHGLOBAL)i
1563Ff(and)d Fh(STOREGLOBAL)p Ff(\))j(need)d(additional)g(parameters,)f(and)h
1564(tak)o(e)h(more)f(than)h(one)-5 2704 y(b)o(yte.)22 b(Since)16
1565b(parameters)e(tak)o(e)i(either)g(one,)f(t)o(w)o(o)h(or)f(four)g(b)o(ytes,)h
1566(this)g(creates)f(alignmen)o(t)g(problems)-5 2764 y(in)h(some)g(arc)o
1567(hitectures,)f(whic)o(h)h(are)g(solv)o(ed)g(b)o(y)g(padding)f(with)h
1568Fh(NOP)p Ff(s)h(to)g(the)g(alignmen)o(t)e(b)q(oundary)l(.)-5
15692883 y Fc(T)l(eCGraf/ICAD)1674 b(8)p eop
1570%%Page: 9 9
1571bop -5 163 a Ff(Man)o(y)15 b(of)i(the)f(instructions)e(exist)i(for)g
1572(optimization)f(only)l(.)21 b(F)l(or)15 b(instance,)g(there)h(is)g(a)g
1573Fh(PUSH)g Ff(instruc-)-5 223 y(tion,)f(whic)o(h)g(tak)o(es)g(a)g(n)o(um)o(b)q
1574(er)e(as)i(a)g(parameter)f(and)g(pushes)g(it)h(on)o(to)g(the)g(stac)o(k,)h
1575(but)f(there)g(are)f(also)-5 283 y(single-b)o(yte)i(optimized)f(v)o(ersions)g
1576(for)h(pushing)f(common)g(v)m(alues)h(suc)o(h)f(as)h(zero)h(and)e(one.)22
1577b(Th)o(us,)15 b(w)o(e)-5 343 y(ha)o(v)o(e)k Fh(PUSHNIL)p Ff(,)h
1578Fh(PUSH0)p Ff(,)h Fh(PUSH1)p Ff(,)g Fh(PUSH2)p Ff(.)31 b(Suc)o(h)18
1579b(optimizations)g(reduce)h(b)q(oth)g(the)h(space)f(required)-5
1580402 y(for)e(compiled)e(b)o(yteco)q(des)h(and)g(the)h(time)g(required)e(for)h
1581(in)o(terpreting)f(instructions.)-5 487 y(Recall)k(that)h Fe(Lua)f
1582Ff(supp)q(orts)f(m)o(ultiple)f(assignmen)o(t)h(and)g(m)o(ultiple)g(return)g
1583(v)m(alues)h(from)g(functions.)-5 547 y(Therefore,)e(sometimes,)g(a)g(list)h
1584(of)g(v)m(alues)f(m)o(ust)g(b)q(e)g Fd(adjuste)m(d)5 b Ff(,)20
1585b(at)e(run)f(time,)g(to)h(a)g(giv)o(en)f(length:)24 b(if)-5
1586607 y(there)c(are)g(more)f(v)m(alues)h(than)g(are)f(needed,)h(then)g(the)h
1587(excess)f(v)m(alues)f(are)h(thro)o(wn)f(a)o(w)o(a)o(y;)i(if)f(more)-5
1588666 y(v)m(alues)15 b(are)f(needed)g(than)g(are)g(presen)o(t,)g(then)g(the)h
1589(list)f(is)g(extended)h(with)f(as)g(man)o(y)g Fh(nil)p Ff('s)g(as)g(needed.)
1590-5 726 y(Adjustmen)o(t)i(is)g(done)g(on)g(the)h(stac)o(k)g(with)f(the)h
1591Fh(ADJUST)h Ff(instruction.)-5 811 y(Although)g(m)o(ultiple)f(assignmen)o(t)f
1592(and)i(returns)e(are)i(a)g(p)q(o)o(w)o(erful)f(feature)i(of)f
1593Fe(Lua)p Ff(,)g(they)h(are)f(an)g(im-)-5 871 y(p)q(ortan)o(t)g(source)e(of)i
1594(complexit)o(y)g(in)f(b)q(oth)h(the)g(compiler)e(and)i(the)g(in)o(terpreter.)
159524 b(Because)17 b(there)h(are)-5 930 y(no)c(t)o(yp)q(e)h(declarations)e(for)h
1596(functions,)g(the)h(compiler)d(do)q(es)j(not)f(kno)o(w)g(ho)o(w)f(man)o(y)h
1597(v)m(alues)g(a)g(function)-5 990 y(will)j(return.)k(Th)o(us,)15
1598b(adjustmen)o(t)h(m)o(ust)g(b)q(e)h(done)f(at)h(run)f(time.)22
1599b(Similarly)l(,)15 b(the)i(compiler)e(do)q(es)i(not)-5 1050
1600y(kno)o(w)f(ho)o(w)g(man)o(y)f(parameters)g(a)h(function)g(tak)o(es.)22
1601b(Because)16 b(this)g(n)o(um)o(b)q(er)f(ma)o(y)g(v)m(ary)i(at)g(run)e(time,)
1602-5 1110 y(the)i(list)f(of)h(parameters)e(is)h(brac)o(k)o(eted)g(b)q(et)o(w)o
1603(een)g(a)h Fh(PUSHMARK)g Ff(and)f(a)h Fh(CALLFUNC)h Ff(instruction.)-5
16041194 y(One)e(w)o(a)o(y)f(to)h(extend)g Fe(Lua)f Ff(with)h(functions)f(pro)o
1605(vided)f(b)o(y)h(the)h(host)f(w)o(ould)g(b)q(e)g(to)h(assign)f(a)g(b)o(yteco)
1606q(de)-5 1254 y(to)j(eac)o(h)f(suc)o(h)g(function)g(\(Betz)i(1988\).)25
1607b(Although)17 b(this)g(strategy)h(w)o(ould)e(simplify)h(the)g(in)o
1608(terpreter,)-5 1314 y(it)k(has)g(the)g(disadv)m(an)o(tage)e(that)i(few)o(er)g
1609(than)g(200)f(external)h(functions)f(could)g(b)q(e)h(added,)g(b)q(ecause)-5
16101374 y Fe(Lua)e Ff(has)f(8-bit)g(b)o(yteco)q(des)h(and)f(already)g(uses)g(ab)
1611q(out)g(60)h(of)g(them)f(for)h(its)f(primitiv)o(e)g(instructions.)-5
16121433 y(W)l(e)f(ha)o(v)o(e)f(c)o(hosen)g(to)h(ha)o(v)o(e)f(the)h(host)f
1613(explicitly)h(register)f(external)h(functions,)f(and)g(handling)f(these)-5
16141493 y(functions)24 b(lik)o(e)g(nativ)o(e)h Fe(Lua)f Ff(functions.)45
1615b(Th)o(us,)25 b(there)f(is)h(a)f(single)g Fh(CALLFUNC)h Ff(instruction;)j
1616(the)-5 1553 y(in)o(terpreter)15 b(decides)h(what)h(to)g(do)f(based)f(on)i
1617(the)f(t)o(yp)q(e)i(of)e(the)h(function)f(b)q(eing)g(called.)-5
16181638 y(A)21 b(rather)e(di\013eren)o(t)g(strategy)h(w)o(as)f(prop)q(osed)g(b)o
1619(y)g(F)l(ranks)f(\(1991\):)30 b Fd(al)s(l)19 b Ff(external)h(functions)f(in)h
1620(the)-5 1697 y(host)f(can)g(b)q(e)h(called)f(b)o(y)g(the)g(em)o(b)q(edded)f
1621(language;)i(no)f(explicit)g(registration)f(is)h(needed.)30
1622b(This)18 b(is)-5 1757 y(done)h(b)o(y)g(reading)f(and)g(in)o(terpreting)g
1623(the)h(map)g(generated)f(b)o(y)h(the)h(link)o(er.)29 b(This)18
1624b(solution)g(is)h(v)o(ery)-5 1817 y(con)o(v)o(enien)o(t)g(for)h(the)g
1625(application)e(programmer,)g(but)i(is)f(not)h(p)q(ortable,)g(b)q(eing)g(dep)q
1626(enden)o(t)f(on)h(the)-5 1877 y(format)14 b(of)g(the)h(map)e(\014le)h(and)g
1627(on)g(the)g(relo)q(cation)g(strategy)h(used)e(b)o(y)h(the)g(op)q(erating)g
1628(system)g(\(F)l(ranks)-5 1937 y(used)i(a)h(sp)q(eci\014c)f(compiler)f(for)h
1629(DOS\).)-5 2091 y Fe(Internal)h(data)f(structures)-5 2176 y
1630Ff(As)22 b(men)o(tioned)e(b)q(efore,)i(v)m(ariables)f(in)f
1631Fe(Lua)i Ff(are)f(not)g(t)o(yp)q(ed;)j(only)d(v)m(alues)g(are.)36
1632b(Th)o(us,)21 b(v)m(alues)g(are)-5 2236 y(implemen)o(ted)15
1633b(in)g(a)h Fh(struct)i Ff(with)e(t)o(w)o(o)f(\014elds:)21 b(a)16
1634b(t)o(yp)q(e)h(and)e(a)i Fh(union)g Ff(con)o(taining)d(the)j(actual)f(v)m
1635(alue.)-5 2296 y(These)g Fh(struct)p Ff(s)g(o)q(ccur)g(in)g(the)g(stac)o(k)g
1636(and)f(in)g(the)h(sym)o(b)q(ol)f(table,)h(whic)o(h)f(holds)g(all)g(global)g
1637(sym)o(b)q(ols.)-5 2380 y(Num)o(b)q(ers)j(are)h(stored)f(directly)h(in)o(to)g
1638(the)g Fh(union)p Ff(.)31 b(Strings)18 b(are)g(k)o(ept)i(in)e(a)h(single)g
1639(arra)o(y;)g(v)m(alues)g(of)-5 2440 y(t)o(yp)q(e)i Fd(string)g
1640Ff(con)o(tain)e(p)q(oin)o(ters)h(to)g(this)g(arra)o(y)l(.)32
1641b(V)l(alues)20 b(of)h(t)o(yp)q(e)g Fd(function)f Ff(con)o(tain)g(p)q(oin)o
1642(ters)f(to)i(a)-5 2500 y(b)o(yteco)q(de)d(arra)o(y)l(.)23 b(V)l(alues)17
1643b(of)g(t)o(yp)q(e)h Fd(Cfunction)f Ff(con)o(tain)g(the)g(actual)g(p)q(oin)o
1644(ter)g(to)g(the)h(C)f(function,)g(as)-5 2560 y(pro)o(vided)e(b)o(y)h(the)h
1645(host)f(program;)f(the)i(same)e(happ)q(ens)h(for)g(v)m(alues)g(of)h(t)o(yp)q
1646(e)g Fd(user)m(data)p Ff(.)-5 2644 y(T)l(ables)g(are)g(implemen)o(ted)f(as)h
1647(hash)g(tables,)g(with)h(collisions)d(handled)i(b)o(y)g(separate)g(c)o
1648(haining)f(\(this)-5 2704 y(explains)23 b(wh)o(y)g(indices)g(in)g(a)g(table)h
1649(are)f(ordered)f(arbitrarily\).)41 b(If)24 b(a)g(dimension)d(is)i(giv)o(en)g
1650(when)-5 2764 y(a)f(table)g(is)g(created,)h(then)f(this)g(dimension)e(is)i
1651(used)f(as)h(the)g(size)g(of)g(the)h(hash)e(table.)38 b(Th)o(us,)22
1652b(b)o(y)-5 2883 y Fc(T)l(eCGraf/ICAD)1674 b(9)p eop
1653%%Page: 10 10
1654bop -5 163 a Ff(pro)o(viding)13 b(a)i(dimension)e(appro)o(ximately)h(equal)h
1655(to)g(the)g(exp)q(ected)h(n)o(um)o(b)q(er)d(of)i(indices)f(in)h(the)g(table,)
1656-5 223 y(few)i(collisions)d(will)i(o)q(ccur,)g(resulting)e(in)i(v)o(ery)g
1657(e\016cien)o(t)g(index)f(lo)q(cation.)22 b(Moreo)o(v)o(er,)15
1658b(if)h(the)g(table)g(is)-5 283 y(used)g(as)g(an)g(arra)o(y)l(,)e(with)j(n)o
1659(umeric)d(indices)h(only)l(,)h(then)g(c)o(ho)q(osing)g(the)g(righ)o(t)f
1660(dimension)g(at)h(creation)-5 343 y(time)h(guaran)o(tees)e(that)i(no)f
1661(collisions)f(will)h(o)q(ccur.)-5 427 y(All)k(in)o(ternal)e(data)h
1662(structures)f(in)h Fe(Lua)h Ff(are)f(dynamically)f(allo)q(cated)i(arra)o(ys.)
166329 b(When)19 b(there)g(are)g(no)-5 487 y(more)13 b(free)h(slots)g(in)f(one)h
1664(of)g(these)g(arra)o(ys,)e(garbage)h(collection)h(is)f(automatically)h(p)q
1665(erformed)e(using)h(a)-5 547 y(standard)i(mark-and-sw)n(eep)e(algorithm.)21
1666b(If)16 b(no)f(space)h(is)f(reco)o(v)o(ered)g(\(b)q(ecause)h(all)f(v)m(alues)
1667h(are)f(b)q(eing)-5 607 y(referenced\),)h(then)h(the)g(arra)o(y)e(is)h
1668(reallo)q(cated)g(with)h(double)e(its)i(curren)o(t)e(size.)-5
1669691 y(Garbage)h(collection)h(is)g(v)o(ery)g(con)o(v)o(enien)o(t)e(for)i(the)g
1670(programmer)d(b)q(ecause)j(it)g(a)o(v)o(oids)f(explicit)h(mem-)-5
1671751 y(ory)d(managemen)o(t.)20 b(When)14 b Fe(Lua)g Ff(is)g(used)g(as)g(a)g
1672(standalone)f(language)h(\(whic)o(h)f(it)i(frequen)o(tly)f(is\),)h(then)-5
1673811 y(garbage)20 b(collection)g(is)g(an)g(asset.)34 b(Ho)o(w)o(ev)o(er,)20
1674b(when)g Fe(Lua)g Ff(is)g(used)g(em)o(b)q(edded)f(in)h(a)h(host)f(program)-5
1675871 y(\(whic)o(h)13 b(is)g(its)h(main)e(purp)q(ose\),)h(then)h(garbage)e
1676(collection)h(creates)h(a)f(new)h(w)o(orry)e(for)h(the)h(application)-5
1677930 y(programmer)f(who)i(needs)g(to)h(in)o(terface)g(with)f
1678Fe(Lua)p Ff(:)21 b(care)16 b(should)e(b)q(e)i(tak)o(en)g(not)f(to)h(store)g
1679Fe(Lua)f Ff(tables)-5 990 y(and)g(strings)f(in)o(to)i(C)f(v)m(ariables,)g(b)q
1680(ecause)g(these)h(v)m(alues)f(ma)o(y)g(b)q(e)h(reclaimed)f(during)e(garbage)i
1681(collec-)-5 1050 y(tion,)i(if)g(they)h(do)f(not)g(ha)o(v)o(e)f(an)o(y)h
1682(further)f(references)h(within)f Fe(Lua)p Ff('s)h(en)o(vironmen)o(t.)k(More)c
1683(precisely)l(,)-5 1110 y(the)d(programmer)d(m)o(ust)i(explicitly)h(cop)o(y)f
1684(these)h(v)m(alues)f(in)o(to)g(C)h(v)m(ariables,)f(b)q(efore)h(returning)e
1685(con)o(trol)-5 1169 y(to)i Fe(Lua)p Ff(.)21 b(Although)12 b(this)h(is)g(a)h
1686(di\013eren)o(t)e(paradigm,)g(it)h(is)g(not)h(w)o(orse)e(than)h(the)h
1687(familiar)e Fh(malloc)p Ff(-)p Fh(free)-5 1229 y Ff(proto)q(col)17
1688b(for)f(memory)f(managemen)o(t)g(using)h(the)g(standard)f(C)i(library)l(.)-5
16891397 y Fg(Conclusion)-5 1482 y Fe(Lua)g Ff(has)e(b)q(een)i(extensiv)o(ely)g
1690(used)f(in)g(pro)q(duction)f(since)h(mid)g(93,)g(for)g(the)h(follo)o(wing)e
1691(tasks:)-5 1560 y Fb(\017)25 b Ff(user)16 b(con\014guration)e(of)j
1692(application)f(en)o(vironmen)o(t;)-5 1625 y Fb(\017)25 b Ff(general-purp)q
1693(ose)14 b(data-en)o(try)l(,)h(with)i(user)e(de\014ned)h(dialogs)f(and)h(v)m
1694(alidation)g(pro)q(cedures;)-5 1690 y Fb(\017)25 b Ff(description)15
1695b(of)i(user)e(in)o(terfaces;)-5 1755 y Fb(\017)25 b Ff(programmer)14
1696b(description)h(of)i(application)e(ob)s(jects;)-5 1819 y Fb(\017)25
1697b Ff(storage)f(of)h(structured)e(graphical)g(meta\014les,)i(used)f(for)g
1698(comm)o(unication)e(b)q(et)o(w)o(een)i(graphical)45 1879 y(editors)16
1699b(and)g(application)f(programs.)-5 1977 y(Moreo)o(v)o(er,)g
1700Fe(Lua)g Ff(is)h(curren)o(tly)e(b)q(eing)i(considered)e(as)i(the)g(basis)f
1701(for)g(a)h(visual)f(programming)e(system.)-5 2062 y(The)k(abilit)o(y)g(to)g
1702(load)f(and)h(execute)h Fe(Lua)f Ff(programs)d(at)k(run-time)d(has)h(pro)o(v)
1703o(ed)g(to)h(b)q(e)h(a)f(ma)s(jor)f(com-)-5 2122 y(p)q(onen)o(t)g(in)f(making)
1704g(con\014guration)f(an)i(easy)g(task)g(for)g(b)q(oth)g(users)e(and)i(dev)o
1705(elop)q(ers.)k(Moreo)o(v)o(er,)15 b(the)-5 2182 y(existence)i(of)g(a)f
1706(single)g(general)g(purp)q(ose)f(em)o(b)q(edded)g(language)h(discourages)e
1707(the)j(m)o(ultiplication)e(of)-5 2241 y(incompatible)d(languages)g(and)h
1708(encourages)f(a)h(b)q(etter)h(design,)f(one)g(that)h(clearly)f(separates)f
1709(the)i(main)-5 2301 y(tec)o(hnology)i(con)o(tained)g(in)g(an)g(application)g
1710(from)f(its)i(con\014guration)e(issues.)-5 2386 y(The)21 b(implemen)o(tation)
1711e(of)i Fe(Lua)f Ff(describ)q(ed)g(in)g(this)h(pap)q(er)f(is)g(a)o(v)m
1712(ailable)g(b)o(y)h(anon)o(ymous)d Fh(ftp)k Ff(from)-5 2446
1713y Fh(ftp.icad.puc-rio.br:/p)q(ub/lua)q(/lua-1.)q(1.tar.Z)q
1714Ff(.)-5 2560 y Fe(Ackno)o(wledgments)-5 2644 y Ff(W)l(e)f(w)o(ould)d(lik)o(e)
1715i(to)h(thank)f(the)g(sta\013)g(at)h(ICAD)f(and)g(T)l(eCGraf)f(for)h(using)f
1716(and)h(testing)g Fe(Lua)p Ff(.)32 b(The)-5 2704 y(industrial)16
1717b(applications)g(men)o(tioned)g(in)h(the)h(text)h(are)e(b)q(eing)h(dev)o
1718(elop)q(ed)f(in)g(patternship)f(with)i(the)-5 2764 y(researc)o(h)d(cen)o
1719(ters)h(at)h(PETR)o(OBR)674 2751 y(\023)668 2764 y(AS)e(\(CENPES\))i(and)f
1720(at)h(ELETR)o(OBR)1452 2751 y(\023)1446 2764 y(AS)f(\(CEPEL\).)-5
17212883 y Fc(T)l(eCGraf/ICAD)1652 b(10)p eop
1722%%Page: 11 11
1723bop -5 163 a Fg(References)-5 268 y Ff(M.)14 b(Abrash,)g(D.)g(Illo)o(wsky)l
1724(,)g(\\Roll)g(y)o(our)f(o)o(wn)h(minilanguages)e(with)j(mini-in)o(terpreters)
1725o(",)d Fi(Dr.)i(Dobb's)70 328 y(Journal)h Fa(14)h Ff(\(9\))h(\(Sep)f(1989\))h
1726(52{72.)-5 402 y(A.)27 b(V.)h(Aho,)e(B.)i(W.)f(Kerninghan,)d(P)l(.)j(J.)f(W)l
1727(ein)o(b)q(erger,)g Fi(The)g(A)-6 b(WK)28 b(programming)c(language)p
1728Ff(,)70 462 y(Addison-W)l(esley)l(,)15 b(1988.)-5 537 y(B.)i(Bec)o(kman,)f
1729(\\A)h(Sc)o(heme)f(for)g(little)h(languages)f(in)g(in)o(teractiv)o(e)g
1730(graphics",)f Fi(Soft)o(w)o(are,)h(practice)g(&)70 597 y(exp)q(erience)h
1731Fa(21)f Ff(\(1991\))h(187{207.)-5 671 y(J.)c(Ben)o(tley)l(,)f(\\Programming)e
1732(p)q(earls:)i(little)h(languages",)f Fi(Comm)o(unications)e(of)j(the)g(A)o
1733(CM)f Fa(29)g Ff(\(1986\))70 731 y(711{721.)-5 806 y(J.)k(Ben)o(tley)l(,)h
1734Fi(More)f(programming)d(p)q(earls)p Ff(,)j(Addison-W)l(esley)l(,)f(1988.)-5
1735881 y(D.)i(Betz,)g(\\Em)o(b)q(edded)e(languages",)g Fi(Byte)j
1736Fa(13)e Ff(#12)f(\(No)o(v)j(1988\))e(409{416.)-5 955 y(D.)g(Betz,)h(\\Y)l
1737(our)f(o)o(wn)f(tin)o(y)h(ob)s(ject-orien)o(ted)f(language",)g
1738Fi(Dr.)h(Dobb's)f(Journal)f Fa(16)i Ff(\(9\))h(\(Sep)f(1991\))70
17391015 y(26{33.)-5 1090 y(T.)h(Budd,)e Fi(A)i(Little)h(Smalltalk)p
1740Ff(,)d(Addison-W)l(esley)l(,)g(1987.)-5 1164 y(R.)e(Clark,)h(S.)f(Ko)q
1741(ehler,)g Fi(The)g(UCSD)h(P)o(ascal)f(handb)q(o)q(ok:)g(a)g(reference)g(and)g
1742(guideb)q(o)q(ok)h(for)f(program-)70 1224 y(mers)p Ff(,)i(Pren)o(tice-Hall,)h
1743(1982.)-5 1299 y(M.)g(Co)o(wlisha)o(w,)f Fi(The)h(REXX)h(programming)d
1744(language)p Ff(,)h(Pren)o(tice-Hall,)g(1990.)-5 1374 y(L.)j(H.)f(de)g
1745(Figueiredo,)f(C.)h(S.)g(de)g(Souza,)g(M.)f(Gattass,)i(L.)f(C.)g(G.)g(Co)q
1746(elho,)g(\\Gera\030)-22 b(c~)d(ao)17 b(de)h(in)o(terfaces)70
17471433 y(para)k(captura)g(de)h(dados)f(sobre)f(desenhos",)h Fi(Anais)g(do)h
1748(SIBGRAPI)f(V)i Ff(\(1992\))f(169{175)f([in)70 1493 y(P)o(ortuguese].)-5
17491568 y(N.)e(F)l(ranks,)d(\\Adding)h(an)h(extension)g(language)f(to)i(y)o(our)
1750e(soft)o(w)o(are",)g Fi(Dr.)g(Dobb's)g(Journal)g Fa(16)g Ff(\(9\))70
17511628 y(\(Sep)e(1991\))h(34{43.)-5 1702 y(A.)24 b(Goldb)q(erg,)f(D.)h(Robson,)
1752e Fi(Smalltalk-80:)g(the)i(language)f(and)g(its)h(implemen)o(tation)p
1753Ff(,)d(Addison-)70 1762 y(W)l(esley)l(,)16 b(1983.)-5 1837
1754y(R.)g(Ierusalimsc)o(h)o(y)l(,)d(L.)j(H.)g(de)g(Figueiredo,)e(W.)i(Celes)f
1755(Filho,)g(\\Reference)h(man)o(ual)e(of)i(the)g(program-)70
17561897 y(ming)g(language)f Fe(Lua)p Ff(",)h Fi(Monogra\014as)e(em)j(Ci)o(^)-24
1757b(encia)16 b(da)g(Computa\030)-22 b(c~)d(ao)16 b Fa(4/94)p
1758Ff(,)f(Departamen)o(to)g(de)70 1956 y(Inform\023)-25 b(atica,)15
1759b(PUC-Rio,)h(1994.)-5 2031 y(J.)g(R.)g(Levine,)h(T.)f(Mason,)g(D.)g(Bro)o
1760(wn,)g Fi(Lex)h(&)f(Y)l(acc)p Ff(,)h(O'Reilly)f(and)g(Asso)q(ciates,)g(1992.)
1761-5 2106 y(C.)h(Nahab)q(o)q(o,)f Fi(A)h(catalog)g(of)g(em)o(b)q(edded)e
1762(languages)p Ff(,)g(a)o(v)m(ailable)h(from)f Fh(colas@indri.inria.fr)p
1763Ff(.)-5 2181 y(M.)i(Ric)o(hards,)e(C.)j(Whitb)o(y-Strev)o(ens,)d
1764Fi(BCPL:)j(the)g(language)e(and)h(its)g(compiler)p Ff(,)f(Cam)o(bridge)f
1765(Uni-)70 2240 y(v)o(ersit)o(y)h(Press,)f(1980.)-5 2315 y(B.)i(Ry)o(an,)f
1766(\\Scripts)f(un)o(b)q(ounded",)f Fi(Byte)k Fa(15)e Ff(\(8\))h(\(Aug)g(1990\))
1767f(235{240.)-5 2390 y(R.)g(V)l(ald)o(\023)-24 b(es,)16 b(\\Little)h
1768(languages,)e(big)i(questions",)e Fi(Dr.)h(Dobb's)f(Journal)g
1769Fa(16)h Ff(\(9\))h(\(Sep)g(1991\))f(16{25.)-5 2883 y Fc(T)l(eCGraf/ICAD)1652
1770b(11)p eop
1771%%Trailer
1772end
1773userdict /end-hook known{end-hook}if
1774%%EOF
doc/manual.dvi+0−0

Binary file not shown.

doc/manual.ps+2125−0
@@ -0,0 +1,2125 @@
1%!PS-Adobe-2.0
2%%Creator: dvips, version 5.4 (C) 1986-90 Radical Eye Software
3%%Title: manual.dvi
4%%Pages: 19 1
5%%BoundingBox: 0 0 596 843
6%%EndComments
7%%BeginProcSet: tex.pro
8/TeXDict 200 dict def TeXDict begin /N /def load def /B{bind def}N /S /exch
9load def /X{S N}B /TR /translate load N /isls false N /vsize 10 N /@rigin{
10isls{[0 1 -1 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
11Resolution VResolution vsize neg mul TR}B /@letter{/vsize 10 N}B /@landscape{
12/isls true N /vsize -1 N}B /@a4{/vsize 10.6929133858 N}B /@a3{/vsize 15.5531 N
13}B /@ledger{/vsize 16 N}B /@legal{/vsize 13 N}B /@manualfeed{statusdict
14/manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0
15]N /df{/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0
16]N df-tail}B /df-tail{/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N
17/FontBBox FBB N string /base X array /BitMaps X /BuildChar{CharBuilder}N
18/Encoding IE N end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[
19}B /E{pop nn dup definefont setfont}B /ch-image{ch-data dup type /stringtype
20ne{ctr get /ctr ctr 1 add N}if}B /ch-width{ch-data dup length 5 sub get}B
21/ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup length 3
22sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data
23dup length 1 sub get}B /ctr 0 N /CharBuilder{save 3 1 roll S dup /base get 2
24index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff ch-yoff
25ch-height sub ch-xoff ch-width add ch-yoff setcachedevice ch-width ch-height
26true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{ch-image}imagemask restore}B /D{
27/cc X dup type /stringtype ne{]}if nn /base get cc ctr put nn /BitMaps get S
28ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf div put}if put /ctr
29ctr 1 add N}B /I{cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI
30save N @rigin 0 0 moveto}B /eop{clear SI restore showpage userdict /eop-hook
31known{eop-hook}if}B /@start{userdict /start-hook known{start-hook}if
32/VResolution X /Resolution X 1000 div /DVImag X /IE 256 array N 0 1 255{IE S 1
33string dup 0 3 index put cvn put}for}B /p /show load N /RMat[1 0 0 -1 0 0]N
34/BDot 8 string N /v{/ruley X /rulex X V}B /V{gsave TR -.1 -.1 TR rulex ruley
35scale 1 1 false RMat{BDot}imagemask grestore}B /a{moveto}B /delta 0 N /tail{
36dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}B /d{
37-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{4 M}B /l{p
38-4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t
39{p 4 w}B /w{0 rmoveto}B /x{0 S rmoveto}B /y{3 2 roll p a}B /bos{/SS save N}B
40/eos{clear SS restore}B end
41%%EndProcSet
42TeXDict begin 1000 300 300 @start /Fa 7 121 df<1FF0003FFC007FFE00780F00300700
43000380000380007F8007FF801FFF803F8380780380700380E00380E00380E00380700780780F80
443FFFFC1FFDFC07F0FC16157D941A>97 D<01F80007FF000FFF801E07C03C01C07800E07000E0E0
450070E00070FFFFF0FFFFF0FFFFF0E000007000007000007800703C00701F01F00FFFE003FFC000
46FE0014157D941A>101 D<FE3E00FEFF80FFFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E
4700E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0FFE3FEFFE7FEFFE3FE17157F94
481A>110 D<7F83F0FF8FF87FBFFC03FC3C03F01803E00003C00003C00003800003800003800003
4980000380000380000380000380000380000380007FFF00FFFF007FFF0016157E941A>114
50D<00C00001C00001C00001C00001C00001C00001C0007FFFE0FFFFE0FFFFE001C00001C00001C0
510001C00001C00001C00001C00001C00001C00001C00001C07001C07001C07001C07000E0E000FF
52E0007FC0001F00141C7F9B1A>116 D<7F83FCFFC7FE7F83FC0E00E00E00E00E00E00701C00701
53C00701C003838003838003838001C70001C70001C70000EE0000EE0000EE00007C00007C000038
540017157F941A>118 D<7FC7F87FCFFC7FC7F80703C003838003C70001EF0000FE00007C000078
5500003800007C0000EE0001EE0001C7000383800783C00F01C07FC7FCFFC7FE7FC7FC17157F941A
56>120 D E /Fb 46 121 df<000FF000007FFC0001F80E0003E01F0007C03F000F803F000F803F
57000F801E000F800C000F8000000F8000000F8000000F800000FFFFFF00FFFFFF000F801F000F80
581F000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F
59801F000F801F000F801F000F801F000F801F000F801F000F801F007FF0FFE07FF0FFE01B237FA2
601F>12 D<387CFEFEFE7C3807077C8610>46 D<0000180000380000380000700000700000E00000
61E00000E00001C00001C0000380000380000380000700000700000700000E00000E00001C00001C
6200001C0000380000380000700000700000700000E00000E00001C00001C00001C0000380000380
63000700000700000700000E00000E00000E00001C00001C00003800003800003800007000007000
6400E00000E00000C0000015317DA41C>I<00180000780001F800FFF800FFF80001F80001F80001
65F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001
66F80001F80001F80001F80001F80001F80001F80001F80001F80001F8007FFFE07FFFE013207C9F
671C>49 D<03FC000FFF003C1FC07007E07C07F0FE03F0FE03F8FE03F8FE01F87C01F83803F80003
68F80003F00003F00007E00007C0000F80001F00003E0000380000700000E01801C0180380180700
69180E00380FFFF01FFFF03FFFF07FFFF0FFFFF0FFFFF015207D9F1C>I<00FE0007FFC00F07E01E
7003F03F03F03F81F83F81F83F81F81F03F81F03F00003F00003E00007C0001F8001FE0001FF0000
7107C00001F00001F80000FC0000FC3C00FE7E00FEFF00FEFF00FEFF00FEFF00FC7E01FC7801F81E
7207F00FFFC001FE0017207E9F1C>I<0000E00001E00003E00003E00007E0000FE0001FE0001FE0
730037E00077E000E7E001C7E00187E00307E00707E00E07E00C07E01807E03807E07007E0E007E0
74FFFFFEFFFFFE0007E00007E00007E00007E00007E00007E00007E000FFFE00FFFE17207E9F1C>
75I<1000201E01E01FFFC01FFF801FFF001FFE001FF8001BC00018000018000018000018000019FC
76001FFF001E0FC01807E01803E00003F00003F00003F80003F83803F87C03F8FE03F8FE03F8FC03
77F0FC03F07007E03007C01C1F800FFF0003F80015207D9F1C>I<001F8000FFE003F07007C0F00F
7801F81F01F83E01F83E01F87E00F07C00007C0000FC0800FC7FC0FCFFE0FD80F0FF00F8FE007CFE
79007CFC007EFC007EFC007EFC007E7C007E7C007E7C007E3C007C3E007C1E00F80F00F00783E003
80FFC000FF0017207E9F1C>I<6000007800007FFFFE7FFFFE7FFFFC7FFFF87FFFF87FFFF0E00060
81E000C0C00180C00300C00300000600000C00001C0000180000380000780000780000F00000F000
8200F00001F00001F00001F00003F00003F00003F00003F00003F00003F00003F00001E00017227D
83A11C>I<000070000000007000000000F800000000F800000000F800000001FC00000001FC0000
840003FE00000003FE00000003FE00000006FF000000067F0000000E7F8000000C3F8000000C3F80
850000183FC00000181FC00000381FE00000300FE00000300FE00000600FF000006007F00000E007
86F80000FFFFF80000FFFFF800018001FC00018001FC00038001FE00030000FE00030000FE000600
87007F000600007F00FFE00FFFF8FFE00FFFF825227EA12A>65 D<0003FE0080001FFF818000FF01
88E38001F8003F8003E0001F8007C0000F800F800007801F800007803F000003803F000003807F00
890001807E000001807E00000180FE00000000FE00000000FE00000000FE00000000FE00000000FE
9000000000FE00000000FE000000007E000000007E000001807F000001803F000001803F00000380
911F800003000F8000030007C000060003F0000C0001F800380000FF00F000001FFFC0000003FE00
920021227DA128>67 D<FFFFFF8000FFFFFFF00007F003FC0007F0007E0007F0003F0007F0001F80
9307F0000FC007F00007E007F00007E007F00007F007F00003F007F00003F007F00003F007F00003
94F807F00003F807F00003F807F00003F807F00003F807F00003F807F00003F807F00003F807F000
9503F807F00003F007F00003F007F00003F007F00007E007F00007E007F0000FC007F0001F8007F0
96003F0007F0007E0007F003FC00FFFFFFF000FFFFFF800025227EA12B>I<FFFFFFFCFFFFFFFC07
97F000FC07F0003C07F0001C07F0000C07F0000E07F0000E07F0000607F0180607F0180607F01806
9807F0180007F0380007F0780007FFF80007FFF80007F0780007F0380007F0180007F0180007F018
990307F0180307F0000307F0000607F0000607F0000607F0000E07F0000E07F0001E07F0003E07F0
10001FCFFFFFFFCFFFFFFFC20227EA125>I<FFFFFFF8FFFFFFF807F001F807F0007807F0003807F0
101001807F0001C07F0001C07F0000C07F0000C07F0180C07F0180C07F0180007F0180007F0380007
102F0780007FFF80007FFF80007F0780007F0380007F0180007F0180007F0180007F0180007F00000
10307F0000007F0000007F0000007F0000007F0000007F0000007F00000FFFFE000FFFFE0001E227E
104A123>I<FFFF83FFFEFFFF83FFFE07F0001FC007F0001FC007F0001FC007F0001FC007F0001FC0
10507F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001F
106C007FFFFFFC007FFFFFFC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F000
1071FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0
108001FC007F0001FC0FFFF83FFFEFFFF83FFFE27227EA12C>72 D<FFFFE0FFFFE003F80003F80003
109F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003
110F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003
111F80003F800FFFFE0FFFFE013227FA115>I<FFFFE000FFFFE00007F0000007F0000007F0000007
112F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F00000
11307F0000007F0000007F0000007F0000007F0000007F0000007F0001807F0001807F0001807F000
1141807F0003807F0003807F0007007F0007007F000F007F001F007F007F0FFFFFFF0FFFFFFF01D22
1157EA122>76 D<FFF000000FFFFFF800001FFF07F800001FE006FC000037E006FC000037E006FC00
1160037E0067E000067E0067E000067E0063F0000C7E0063F0000C7E0061F800187E0061F800187E0
117060FC00307E0060FC00307E0060FC00307E00607E00607E00607E00607E00603F00C07E00603F0
1180C07E00601F81807E00601F81807E00601F81807E00600FC3007E00600FC3007E006007E6007E0
11906007E6007E006003FC007E006003FC007E006001F8007E006001F8007E006001F8007E006000F
1200007E0FFF00F00FFFFFFF00600FFFF30227EA135>I<0007FC0000003FFF800000FC07E00003F0
12101F80007E000FC000FC0007E001F80003F001F80003F003F00001F803F00001F807F00001FC07E
12200000FC07E00000FC0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0
123FE00000FE0FE00000FE0FE00000FE07E00000FC07F00001FC07F00001FC03F00001F803F80003F
124801F80003F000FC0007E0007E000FC0003F001F80000FC07E000003FFF80000007FC000023227D
125A12A>79 D<FFFFFF00FFFFFFE007F007F007F001FC07F000FC07F0007E07F0007E07F0007F07F0
126007F07F0007F07F0007F07F0007F07F0007E07F0007E07F000FC07F001FC07F007F007FFFFE007
127FFFF0007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F00000
12807F0000007F0000007F0000007F00000FFFF8000FFFF800020227EA126>I<01FC0407FF8C1F03
129FC3C007C7C003C78001C78001CF8000CF8000CFC000CFC0000FF0000FFE0007FFF007FFFC03FFF
130F01FFFF80FFFFC03FFFE003FFE0003FF00007F00003F00003FC0001FC0001FC0001FE0001EE000
1311EF0003CFC003CFF00F8C7FFE080FF8018227DA11F>83 D<7FFFFFFF807FFFFFFF807E03F80F80
1327803F807807003F803806003F80180E003F801C0E003F801C0C003F800C0C003F800C0C003F800
133C0C003F800C00003F800000003F800000003F800000003F800000003F800000003F800000003F8
13400000003F800000003F800000003F800000003F800000003F800000003F800000003F800000003
135F800000003F800000003F800000003F800000003F800000003F8000003FFFFF80003FFFFF80022
136227EA127>I<FFFF800FFEFFFF800FFE07F00000C007F80000C003F800018003F800018001FC00
137030001FC00030001FE00070000FE00060000FF000600007F000C00007F800C00003F801800003F
138801800003FC03800001FC03000001FE03000000FE06000000FF060000007F0C0000007F0C00000
13907F9C0000003F980000003FD80000001FF00000001FF00000000FE00000000FE00000000FE0000
14000007C000000007C00000000380000000038000027227FA12A>86 D<07FC001FFF803F07C03F03
141E03F01E03F01F01E01F00001F00001F0003FF003FDF01FC1F03F01F07E01F0FC01F0FC01F0FC01
142F0FC01F07E02F07E0CF81FF87F07E03F18167E951B>97 D<FF000000FF0000001F0000001F0000
143001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0F
144E0001F3FF8001FF07C001F801E001F001F001F000F801F000F801F000FC01F000FC01F000FC01F
145000FC01F000FC01F000FC01F000FC01F000FC01F000F801F001F801F801F001FC03E001EE07C00
1461C3FF800180FC0001A237EA21F>I<00FF8007FFE00F83F01F03F03E03F07E03F07C01E07C0000
147FC0000FC0000FC0000FC0000FC0000FC00007C00007E00007E00003E00301F00600FC0E007FF80
14800FE0014167E9519>I<0001FE000001FE0000003E0000003E0000003E0000003E0000003E0000
149003E0000003E0000003E0000003E0000003E0000003E0001FC3E0007FFBE000F81FE001F007E00
1503E003E007E003E007C003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E
15100FC003E007C003E007C003E003E007E001E00FE000F83BE0007FF3FC001FC3FC01A237EA21F>
152I<00FE0007FF800F87C01E01E03E01F07C00F07C00F8FC00F8FC00F8FFFFF8FFFFF8FC0000FC00
15300FC00007C00007C00007E00003E00181F00300FC07003FFC000FF0015167E951A>I<003F8000
154FFC001E3E003C7E007C7E00F87E00F83C00F80000F80000F80000F80000F80000F8000FFFC00FF
155FC000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F
15680000F80000F80000F80000F80000F80007FF8007FF80013237FA211>I<03FC1E0FFF7F1F0F8F
1573E07CF3C03C07C03E07C03E07C03E07C03E07C03E03C03C03E07C01F0F801FFF0013FC00300000
1583000003800003FFF801FFFF00FFFF81FFFFC3800FC70003EF0001EF0001EF0001EF0001E78003C
1597C007C3F01F80FFFE001FF0018217E951C>I<FF000000FF0000001F0000001F0000001F000000
1601F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F07E0001F1FF8
161001F307C001F403C001F803E001F803E001F003E001F003E001F003E001F003E001F003E001F00
1623E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E00FFE1FFC0FF
163E1FFC01A237EA21F>I<1C003F007F007F007F003F001C000000000000000000000000000000FF
16400FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00
165FFE0FFE00B247EA310>I<0038007C00FE00FE00FE007C00380000000000000000000000000000
16603FE03FE003E003E003E003E003E003E003E003E003E003E003E003E003E003E003E003E003E00
1673E003E003E003E003E003E783EFC3EFC3CFC7C78F87FE01F800F2E83A311>I<FF00FF001F001F
168001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00
1691F001F001F001F001F001F001F001F001F001F00FFE0FFE00B237EA210>108
170D<FF07F007F000FF1FFC1FFC001F303E303E001F403E403E001F801F801F001F801F801F001F00
1711F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
172001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00
1731F001F00FFE0FFE0FFE0FFE0FFE0FFE02B167E9530>I<FF07E000FF1FF8001F307C001F403C00
1741F803E001F803E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E
175001F003E001F003E001F003E001F003E001F003E001F003E00FFE1FFC0FFE1FFC01A167E951F>
176I<00FE0007FFC00F83E01E00F03E00F87C007C7C007C7C007CFC007EFC007EFC007EFC007EFC00
1777EFC007EFC007E7C007C7C007C3E00F81F01F00F83E007FFC000FE0017167E951C>I<FF0FE000
178FF3FF8001FF07C001F803E001F001F001F001F801F001F801F000FC01F000FC01F000FC01F000F
179C01F000FC01F000FC01F000FC01F000FC01F001F801F001F801F803F001FC03E001FE0FC001F3F
180F8001F0FC0001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F000000FF
181E00000FFE000001A207E951F>I<FE1F00FE3FC01E67E01EC7E01E87E01E87E01F83C01F00001F
18200001F00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F0000FFF000FF
183F00013167E9517>114 D<0FF3003FFF00781F00600700E00300E00300F00300FC00007FE0007F
184F8003FFE000FFF0001FF00000F80C00780C00380E00380E00380F00700FC0E00EFFC00C7F00011
185167E9516>I<0180000180000180000180000380000380000780000780000F80003F8000FFFF00
186FFFF000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F8180
1870F81800F81800F81800F81800F830007C30003FE0000F80011207F9F16>I<FF01FE00FF01FE00
1881F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E
189001F003E001F003E001F003E001F003E001F003E001F007E001F00FE000F81BE0007FF3FC001FC
1903FC01A167E951F>I<FFE01FE0FFE01FE00F8006000F8006000FC00E0007C00C0007E01C0003E0
191180003E0180001F0300001F0300000F8600000F86000007CC000007CC000007FC000003F800000
1923F8000001F0000001F0000000E0000000E00001B167F951E>I<FFE7FF07F8FFE7FF07F81F0078
19300C00F807801800F807C01800F807C018007C07E030007C0DE030007E0DE070003E0DF060003E1
1948F060001F18F0C0001F38F8C0001FB079C0000FB07D80000FE03D800007E03F000007E03F00000
1957C01F000003C01E000003800E000001800C00025167F9528>I<FFE07FC0FFE07FC00F801C0007
196C0380003E0700003F0600001F8C00000F98000007F8000003F0000001F0000001F8000003FC000
1970037C0000063E00000C1F00001C0F8000380FC0007007E000E003E00FF80FFE0FF80FFE01B167F
198951E>I E /Fc 1 98 df<03CC0E2E181C381C301C701CE038E038E038E038C072C072C07260F2
19961341E180F107C8F14>97 D E /Fd 2 104 df<007001C0038007000700070007000700070007
200000700070007000700070007000E001C00F0001C000E0007000700070007000700070007000700
20107000700070007000700038001C000700C257D9B13>102 D<F0001C000E000700070007000700
202070007000700070007000700070007000700038001C0007001C003800700070007000700070007
2030007000700070007000700070007000E001C00F0000C257D9B13>I E /Fe
20434 122 df<00FC000182000703000607000E02000E00000E00000E00000E00000E0000FFFF000E
20507000E07000E07000E07000E07000E07000E07000E07000E07000E07000E07000E07000E07000E
20607007F0FE0131A809915>12 D<60F0F868080808101020C0050B7D990B>39
207D<60F0F07010101020204080040B7D830B>44 D<60F0F06004047D830B>46
208D<078018603030303060186018E01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01C6018
209601870383030186007800E187E9713>48 D<0F8010E02070607870382038007800700070006000
210C00F8000E000700038003C003CE03CE03CC03C4038407030E00F800E187E9713>51
211D<60F0F060000000000000000060F0F0701010102020408004177D8F0B>59
212D<000C0000000C0000000C0000001E0000001E0000003F00000027000000270000004380000043
2138000004380000081C0000081C0000081C0000100E0000100E00001FFE000020070000200700006
214007800040038000400380008001C0008001C001C001E00FF00FFC01A1A7F991D>65
215D<FFFF000E01C00E00E00E00700E00780E00780E00780E00780E00780E00F00E00E00E03C00FFF
216800E01E00E00700E00780E003C0E003C0E003C0E003C0E003C0E00380E00780E00F00E01E0FFFF
21780161A7E991B>I<FFFFE00E00E00E00600E00200E00300E00100E00100E00100E04000E04000E
21804000E0C000FFC000E0C000E04000E04000E04000E00000E00000E00000E00000E00000E00000E
21900000E0000FFF000141A7E9919>70 D<FE01FF0F00380F00100B80100B801009C01008E01008E0
22010087010087010083810081C10081C10080E10080E100807100803900803900801D00801D00800
221F00800700800700800301C0030FF8010181A7E991D>78 D<0FC21836200E6006C006C002C002C0
22202E00070007E003FE01FF807FC003E000E00070003800380038003C002C006E004D81887E0101A
2237E9915>83 D<FEFEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
224C0C0FEFE07257D9B0B>91 D<FEFE06060606060606060606060606060606060606060606060606
2250606060606060606FEFE0725809B0B>93 D<3F8070C070E020700070007007F01C7030707070E0
22670E071E071E0F171FB1E3C10107E8F13>97 D<FC00001C00001C00001C00001C00001C00001C00
227001C00001C00001C00001CF8001F0E001E07001C03801C01801C01C01C01C01C01C01C01C01C01
228C01C01C01C03801C03001E07001B0C0010F000121A7F9915>I<07F80C1C381C30087000E000E0
22900E000E000E000E0007000300438080C1807E00E107F8F11>I<007E00000E00000E00000E0000
2300E00000E00000E00000E00000E00000E0003CE000C3E00380E00300E00700E00E00E00E00E00E0
2310E00E00E00E00E00E00E00600E00700E00381E001C2E0007CFC0121A7F9915>I<07C01C303018
2327018600CE00CFFFCE000E000E000E0006000300438080C1807E00E107F8F11>I<01F003180738
2330E100E000E000E000E000E000E00FFC00E000E000E000E000E000E000E000E000E000E000E000E
234000E000E007FE00D1A80990C>I<0FCE187330307038703870387038303018602FC02000600070
235003FF03FFC1FFE600FC003C003C003C0036006381C07E010187F8F13>I<18003C003C00180000
2360000000000000000000000FC001C001C001C001C001C001C001C001C001C001C001C001C001C00
2371C00FF80091A80990A>105 D<FC001C001C001C001C001C001C001C001C001C001C001C001C00
2381C001C001C001C001C001C001C001C001C001C001C001C00FF80091A80990A>108
239D<FC7C1F001D8E63801E0781C01E0781C01C0701C01C0701C01C0701C01C0701C01C0701C01C07
24001C01C0701C01C0701C01C0701C01C0701C01C0701C0FF9FE7F81D107F8F20>I<FCF8001D0C00
2411E0E001E0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E00
242FF9FC012107F8F15>I<07E01C38300C700E6006E007E007E007E007E007E0076006700E381C1C
2433807E010107F8F13>I<FCF8001F0E001E07001C03801C03801C01C01C01C01C01C01C01C01C01
244C01C01C01C03801C03001E07001F0C001CF0001C00001C00001C00001C00001C00001C0000FF80
2450012177F8F15>I<FCE01D701E701E201C001C001C001C001C001C001C001C001C001C001C00FF
246C00C107F8F0F>114 D<1F2060E04020C020C020F0007F003FC01FE000F080708030C030C020F0
247408F800C107F8F0F>I<0400040004000C000C001C003C00FFC01C001C001C001C001C001C001C
248001C001C201C201C201C201C200E4003800B177F960F>I<FC7E001C0E001C0E001C0E001C0E00
2491C0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C1E000C2E0007CFC012107F8F15>
250I<FF1F803C06001C04001C04001E0C000E08000E080007100007100007900003A00003A00001C0
2510001C00001C00000800011107F8F14>I<FF3F803C1C001C18000E100007200007600003C00001
252C00001E00003E000027000043800083800181C00381E00FC3FC012107F8F14>120
253D<FF1F803C06001C04001C04001E0C000E08000E080007100007100007900003A00003A00001C0
2540001C00001C000008000008000010000010000E10000E20000E4000078000011177F8F14>I
255E /Ff 3 51 df<00C00000C00000C00000C00000C00000C00000C00000C00000C000FFFF80FFFF
2568000C00000C00000C00000C00000C00000C00000C00000C00000C00011147E8F17>43
257D<0C003C00CC000C000C000C000C000C000C000C000C000C000C000C000C00FF8009107E8F0F>
25849 D<1F00618040C08060C0600060006000C00180030006000C00102020207FC0FFC00B107F8F
2590F>I E /Fg 5 107 df<07E01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFE7F
260FE3FFC1FF807E010127D9317>15 D<000000040000000002000000000200000000010000000000
2618000000000400000000020FFFFFFFFFCFFFFFFFFFC000000002000000000400000000080000000
262010000000002000000000200000000040026107D922D>33 D<000F0038006000E001C001C001C0
26301C001C001C001C001C001C001C001C001C001C001C001C0038007001E00F8001E000700038001
264C001C001C001C001C001C001C001C001C001C001C001C001C001C001C000E000600038000F102D
2657DA117>102 D<F8001E000700038001C001C001C001C001C001C001C001C001C001C001C001C0
26601C001C001C000E000600038000F0038006000E001C001C001C001C001C001C001C001C001C001
267C001C001C001C001C001C0038007001E00F800102D7DA117>I<C0C0C0C0C0C0C0C0C0C0C0C0C0
268C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0022D7BA10D>
269106 D E /Fh 2 51 df<03000700FF000700070007000700070007000700070007000700070007
27000070007000700070007007FF00C157E9412>49 D<0F8030E040708030C038E038403800380070
2710070006000C00180030006000C08080810183FF07FF0FFF00D157E9412>I
272E /Fi 44 121 df<387CFEFFFF7F3B030306060E0C18702008107C9F0F>39
273D<387CFEFEFE7C3807077C860F>46 D<00E00001E0000FE000FFE000F3E00003E00003E00003E0
2740003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0
2750003E00003E00003E00003E00003E00003E000FFFF80FFFF80111D7C9C1A>49
276D<07F0001FFE00383F007C1F80FE0FC0FE0FC0FE0FE0FE07E07C07E03807E0000FE0000FC0000F
277C0001F80001F00003E0000780000F00000E00001C0000380600700600E00601C00E01FFFC03FFF
278C07FFFC0FFFFC0FFFFC0131D7D9C1A>I<01FC0007FF000E0F801E0FC03F07E03F07E03F07E03F
27907E01E0FC0000FC0000F80001F0001FC0001FC00000F800007C00003E00003F00003F83803F87C
28003F8FE03F8FE03F8FE03F0FC03F07807E03C0FC01FFF8003FC00151D7E9C1A>I<0001C00003C0
2810007C00007C0000FC0001FC0003BC00073C00063C000C3C00183C00383C00703C00E03C00C03C0
2821803C03803C07003C0E003C0FFFFFEFFFFFE0007C00007C00007C00007C00007C00007C000FFFE
28300FFFE171D7F9C1A>I<3803803FFF803FFF003FFE003FFC003FF0003F80003000003000003000
2840030000033F8003FFE003C1F00380F803007C00007C00007E00007E07807E0FC07E0FC07E0FC07
285E0FC07C0780FC0600F80381F001FFC0007F000131D7D9C1A>I<003F0001FFC007E0E00F81E01F
28603F01E03F03E03F07C03F07C01E07C0000FC1000FCFF00FDFFC0FD03E0FE01F0FE01F0FC01F8FC
28701F8FC01F8FC01F87C01F87C01F87C01F83C01F03E01F01E03E00F07C007FF8001FE00151D7E9C
2881A>I<6000007FFFF87FFFF87FFFF07FFFE07FFFE0E001C0C00380C00700C00E00000C00001C00
28900380000780000780000F00000F00000F00001F00001F00001F00003F00003F00003F00003F000
29003F00003F00003F00003F00001E000151E7D9D1A>I<01FC0007FF000E07801C01C01800E03800
291E03800E03C00E03F00E03FC1C01FE3801FFF000FFE0007FF8007FFC01FFFE03C3FF0780FF07803
292F8F001F8F000F8F00078F00078F000707800707C00E03E03C00FFF8003FC00151D7E9C1A>I<00
29300E000000000E000000001F000000001F000000001F000000003F800000003F800000006FC0000
2940006FC0000000EFE0000000C7E0000000C7E000000183F000000183F000000303F800000301F80
2950000701FC00000600FC00000600FC00000C007E00000FFFFE00001FFFFF000018003F000018003
296F000030001F800030001F800060001FC00060000FC000E0000FE00FFE00FFFE0FFE00FFFE0231F
2977E9E28>65 D<FFFFFE00FFFFFFC007C007E007C003F007C001F807C001FC07C001FC07C001FC07
298C001FC07C001FC07C001F807C003F807C007F007C00FE007FFFF8007FFFFC007C003F007C001F8
29907C001FC07C000FC07C000FE07C000FE07C000FE07C000FE07C000FE07C000FC07C001FC07C003
300F807C007F0FFFFFFE0FFFFFF001F1F7E9E25>I<0007FC02003FFF0E00FE03DE03F000FE07E000
3013E0FC0001E1F80001E3F00000E3F00000E7F0000067E0000067E000006FE000000FE000000FE00
3020000FE000000FE000000FE000000FE0000007E0000007E0000067F0000063F0000063F00000C1F
30380000C0FC0001807E0003803F0007000FE01C0003FFF800007FC001F1F7D9E26>I<FFFFFE0000
304FFFFFFC00007E007F00007E001F80007E000FC0007E0007E0007E0003F0007E0003F0007E0001F
3058007E0001F8007E0001F8007E0001FC007E0001FC007E0001FC007E0001FC007E0001FC007E000
3061FC007E0001FC007E0001FC007E0001FC007E0001F8007E0001F8007E0001F8007E0003F0007E0
307003F0007E0007E0007E000FC0007E001F80007E007F000FFFFFFC000FFFFFE0000221F7E9E28>
308I<FFFFFFE0FFFFFFE007E007E007E001E007E000E007E0006007E0007007E0003007E0003007E0
309603007E0603007E0600007E0E00007E1E00007FFE00007FFE00007E1E00007E0E00007E0600007
310E0600C07E0600C07E0000C07E0001807E0001807E0001807E0003807E0007807E000F807E003F0
311FFFFFFF0FFFFFFF01E1F7E9E22>I<FFFFFFE0FFFFFFE007E007E007E001E007E000E007E00060
31207E0007007E0003007E0003007E0603007E0603007E0600007E0E00007E1E00007FFE00007FFE0
3130007E1E00007E0E00007E0600007E0600007E0600007E0000007E0000007E0000007E0000007E0
314000007E0000007E0000007E00000FFFF8000FFFF80001C1F7E9E21>I<FFFFFFFF07E007E007E0
31507E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007
316E007E007E007E007E0FFFFFFFF101F7E9E14>73 D<FFFF8000FFFF800007E0000007E0000007E0
317000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007
318E0000007E0000007E0000007E0000007E0000007E000C007E000C007E000C007E001C007E001C0
31907E001C007E0038007E0038007E00F8007E01F80FFFFFF80FFFFFF801A1F7E9E1F>76
320D<001FF80000FFFF0001F81F8007E007E00FC003F01F8001F81F0000F83F0000FC7F0000FE7E00
321007E7E00007EFE00007FFE00007FFE00007FFE00007FFE00007FFE00007FFE00007FFE00007FFE
32200007F7E00007E7F0000FE7F0000FE3F0000FC3F8001FC1F8001F80FC003F007E007E001F81F80
32300FFFF00001FF800201F7D9E27>79 D<FFFFFE00FFFFFF8007E00FE007E003F007E001F807E001
324F807E001FC07E001FC07E001FC07E001FC07E001FC07E001F807E001F807E003F007E00FE007FF
325FF8007FFFE0007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007
326E0000007E0000007E0000007E00000FFFF0000FFFF00001E1F7E9E24>I<FFFFF80000FFFFFF00
3270007E01FC00007E007E00007E003F00007E003F00007E003F80007E003F80007E003F80007E003
328F80007E003F00007E003F00007E007E00007E01FC00007FFFF000007FFFC000007E03E000007E0
3291F000007E01F800007E00FC00007E00FC00007E00FC00007E00FE00007E00FE00007E00FE00007
330E00FE03007E00FF03007E00FF07007E007F860FFFF01FFE0FFFF007F80241F7E9E27>82
331D<03FC080FFF381E03F83800F8700078700038F00038F00018F00018F80000FC00007FC0007FFE
332003FFF801FFFE00FFFF007FFF000FFF80007F80000FC00007C00003CC0003CC0003CC0003CE000
33338E00078F80070FE01E0E7FFC081FF00161F7D9E1D>I<7FFFFFFC7FFFFFFC7C07E07C7007E01C
3346007E00C6007E00CE007E00EC007E006C007E006C007E006C007E0060007E0000007E0000007E0
335000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007
336E0000007E0000007E0000007E0000007E00003FFFFC003FFFFC01F1E7E9D24>I<07FC001FFF00
3373F0F803F07C03F03E03F03E00C03E00003E0007FE007FBE01F03E03C03E07C03E0F803E0F803E0
338F803E0FC05E07E0DE03FF9FE0FE07E17147F9319>97 D<FF0000FF00001F00001F00001F00001F
33900001F00001F00001F00001F00001F00001F00001F1FC01F7FF01FE0F81F807C1F007E1F003E1F
340003E1F003F1F003F1F003F1F003F1F003F1F003F1F003E1F003E1F007C1F807C1EC1F81C7FE018
3411F8018207E9F1D>I<01FE0007FF801F0FC03E0FC03E0FC07C0FC07C0300FC0000FC0000FC0000
342FC0000FC0000FC00007C00007E00003E00603F00C01F81C007FF0001FC0013147E9317>I<0007
343F80007F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F801F8F80FFE
344F81F83F83E01F87E00F87C00F87C00F8FC00F8FC00F8FC00F8FC00F8FC00F8FC00F87C00F87C00
345F87E00F83E01F81F07F80FFEFF03F8FF18207E9F1D>I<01FE0007FF801F83E03F01F07E00F07E
34600F8FC00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007E00003E00183F00380F807007
347FFE000FF8015147F9318>I<001F8000FFC001F3E003E7E003C7E007C7E007C3C007C00007C000
34807C00007C00007C000FFFC00FFFC0007C00007C00007C00007C00007C00007C00007C00007C000
34907C00007C00007C00007C00007C00007C00007C00007C0003FFC003FFC0013207F9F10>I<01FC
3503C07FFFE0F079E1E03DE3E03E03E03E03E03E03E03E03E03E01E03C00F07800FFF0009FC001800
351001800001C00001FFF800FFFF007FFF81FFFFC3C007C70003EF0001EF0001EF0001E78003C7800
3523C3F01F80FFFE001FF00171E7F931A>I<FF0000FF00001F00001F00001F00001F00001F00001F
35300001F00001F00001F00001F00001F0FC01F3FE01F61F01FC0F81F80F81F00F81F00F81F00F81F
35400F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8FFE3FFFFE3FF18207D9F
3551D>I<1C003F007F007F007F003F001C00000000000000000000000000FF00FF001F001F001F00
3561F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B217EA00E>I<FF00
35700FF00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F01FE1F01
358FE1F00F01F01C01F03801F07001F1E001F38001F7C001FFE001FFF001F1F001E0F801E07C01E07
359E01E03F01E01F01E00F8FFC3FFFFC3FF18207E9F1C>107 D<FF00FF001F001F001F001F001F00
3601F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
361001F001F001F00FFE0FFE00B207E9F0E>I<FE0FE03F80FE1FF07FC01E70F9C3E01E407D01F01E
362807E01F01F807E01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F0
3631F007C01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F0FFE3FF8FFEFFE3FF8F
364FE27147D932E>I<FE0FC0FE3FE01E61F01EC0F81E80F81F00F81F00F81F00F81F00F81F00F81F
36500F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8FFE3FFFFE3FF18147D931D>I<01FF00
36607FFC01F83F03E00F83E00F87C007C7C007CFC007EFC007EFC007EFC007EFC007EFC007E7C007C
3677C007C3E00F83E00F81F83F007FFC001FF0017147F931A>I<FF1FC0FF7FF01FE1F81F80FC1F00
3687E1F007E1F003E1F003F1F003F1F003F1F003F1F003F1F003F1F003E1F007E1F007C1F80FC1FC1
369F81F7FE01F1F801F00001F00001F00001F00001F00001F00001F0000FFE000FFE000181D7E931D
370>I<FE3E00FE7F801ECFC01E8FC01E8FC01F8FC01F03001F00001F00001F00001F00001F00001F
37100001F00001F00001F00001F00001F0000FFF000FFF00012147E9316>114
372D<0FE63FFE701E600EE006E006F800FFC07FF83FFC1FFE03FE001FC007C007E007F006F81EFFFC
373C7F010147E9315>I<01800180018003800380038007800F803F80FFFCFFFC0F800F800F800F80
3740F800F800F800F800F800F800F860F860F860F860F8607CC03F801F00F1D7F9C14>I<FF07F8FF
37507F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F
37600F81F01F81F01F80F06F807FCFF03F8FF18147D931D>I<FFE7FE1FE0FFE7FE1FE01F00F00700
3771F00F803000F80F806000F80F8060007C1BC0C0007C1BC0C0007C1BE0C0003E31E180003E31E18
3780001F60F300001F60F300001F60FB00000FC07E00000FC07E000007803C000007803C000007803
379C000003001800023147F9326>119 D<FFE1FF00FFE1FF000F80700007C0E00007E0C00003E180
3800001F3800000FF0000007E0000003E0000003F0000007F8000006F800000C7C0000183E0000381
381F0000701F8000E00FC00FF81FF80FF81FF8019147F931C>I E /Fj 73 127
382df<70F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F870000000000070F8F8F870051C779B18>33
383D<4010E038F078E038E038E038E038E038E038E038E038E038E03860300D0E7B9C18>I<030600
384078F00078F00078F00078F00078F00078F007FFFC0FFFFE0FFFFE07FFFC00F1E000F1E000F1E00
3850F1E000F1E000F1E007FFFC0FFFFE0FFFFE07FFFC01E3C001E3C001E3C001E3C001E3C001E3C00
3860C1800131C7E9B18>I<3803007C07807C0780EE0F80EE0F00EE0F00EE1F00EE1E00EE1E00EE3E
387007C3C007C3C00387C0000780000780000F80000F00001F00001E00001E00003E00003C00003C0
3880007C0000783800787C00F87C00F0EE00F0EE01F0EE01E0EE01E0EE03E0EE03C07C03C07C01803
3898013247E9F18>37 D<387C7C7E3E0E0E0E1C1C38F8F0C0070E789B18>39
390D<007000F001E003C007800F001E001C00380038007000700070007000E000E000E000E000E000
391E000E000E0007000700070007000380038001C001E000F00078003C001F000F000700C24799F18
392>I<6000F00078003C001E000F000780038001C001C000E000E000E000E0007000700070007000
3937000700070007000E000E000E000E001C001C0038007800F001E003C007800F00060000C247C9F
39418>I<01C00001C00001C00001C000C1C180F1C780F9CF807FFF001FFC0007F00007F0001FFC00
3957FFF00F9CF80F1C780C1C18001C00001C00001C00001C00011147D9718>I<00600000F00000F0
3960000F00000F00000F00000F00000F0007FFFC0FFFFE0FFFFE07FFFC000F00000F00000F00000F0
3970000F00000F00000F00000600013147E9718>I<1C3E7E7F3F1F070E1E7CF860080C788518>I<7F
398FF00FFFF80FFFF807FFF0011047D8F18>I<3078FCFC78300606778518>I<000300000780000780
399000F80000F00001F00001E00001E00003E00003C00007C0000780000780000F80000F00001F000
40001E00003E00003C00003C00007C0000780000F80000F00000F00001F00001E00003E00003C0000
4013C00007C0000780000F80000F00000F0000060000011247D9F18>I<01F00007FC000FFE001F1F
402001C07003803807803C07001C07001C0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000
403E0E000E0F001E07001C07001C07803C03803801C07001F1F000FFE0007FC0001F000131C7E9B18
404>I<01800380038007800F803F80FF80FB80438003800380038003800380038003800380038003
405800380038003800380038003807FFCFFFE7FFC0F1C7B9B18>I<03F0000FFE003FFF007C0F8070
40603C0E001C0F000E0F000E06000E00000E00000E00001C00001C00003C0000780000F00001E0000
4073C0000780000F00001E00007C0000F80001E00E03C00E07FFFE0FFFFE07FFFE0131C7E9B18>I<
40807F8001FFE003FFF007807807803C07801C03001C00001C00003C0000380000F0003FF0003FE00
40903FF000007800003C00001C00000E00000E00000E0F000E0F000E0F001C0F003C07C07803FFF00
4101FFE0003F800131C7E9B18>I<001F00003F0000770000770000E70001E70001C7000387000787
411000707000E07001E07003C0700380700780700F00700FFFFF8FFFFF8FFFFF80007000007000007
41200000700000700000700007FF000FFF8007FF0151C7F9B18>I<1FFF803FFF803FFF8038000038
41300003800003800003800003800003800003800003BF8003FFE003FFF003C07801803C00001C000
41400E00000E06000E0F000E0F000E0E001C07003C07C0F803FFF001FFC0003F000131C7E9B18>I<
415E00000FFFFE0FFFFE0FFFFE0E003C0E00780000700000E00001E00001C00003800003800007000
41600700000E00000E00000E00001C00001C00001C00001C00003C000038000038000038000038000
417038000038000038000131D7E9C18>55 D<3078FCFC783000000000000000003078FCFC78300614
418779318>58 D<183C7E7E3C180000000000000000183C7E7E3E1E0E1C3C78F060071A789318>I<
419000300000780001F80003F00007E0001FC0003F00007E0001FC0003F00007E0000FC0000FC0000
4207E00003F00001FC00007E00003F00001FC00007E00003F00001F8000078000030011187D9918>
421I<7FFFC0FFFFE0FFFFE0FFFFE0000000000000000000000000FFFFE0FFFFE0FFFFE07FFFC0130C
4227E9318>I<600000F00000FC00007E00003F00001FC00007E00003F00001FC00007E00003F0000
4231F80001F80003F00007E0001FC0003F00007E0001FC0003F00007E0000FC0000F0000060000011
424187D9918>I<0FF0003FFC007FFF00700F00F00380F00380600780000F00003E00007C0001F000
42501E00003C00003C00003C00003C00003C000038000000000000000000000000000000000038000
42607C00007C00007C000038000111C7D9B18>I<007C0001FE0007FF000F87801E03C03C1DC0387F
427C070FFE071E3E071C1E0E1C1E0E380E0E380E0E380E0E380E0E380E0E380E0E1C1C071C1C071E3
428C070FF80387F003C1C001E00E00F83E007FFC001FF80007E00131C7E9B18>I<00700000F80000
429F80000D80000D80001DC0001DC0001DC00018C00038E00038E00038E00038E0003060007070007
43007000707000707000FFF800FFF800FFF800E03800E03801C01C01C01C07F07F0FF8FF87F07F015
4311C7F9B18>I<00F8E003FEE007FFE00F07E01E03E03C01E03800E07000E07000E0700000E00000
432E00000E00000E00000E00000E00000E00000E000007000007000E07000E03800E03C00E01E01C0
4330F07C007FF8003FE0000F800131C7E9B18>67 D<FFFFF0FFFFF0FFFFF01C00701C00701C00701C
43400701C00001C00001C0E001C0E001C0E001FFE001FFE001FFE001C0E001C0E001C0E001C00001C
43500001C00381C00381C00381C00381C0038FFFFF8FFFFF8FFFFF8151C7F9B18>69
436D<FFFFE0FFFFE0FFFFE01C00E01C00E01C00E01C00E01C00001C00001C1C001C1C001C1C001FFC
437001FFC001FFC001C1C001C1C001C1C001C00001C00001C00001C00001C00001C00001C0000FFC0
43800FFC000FFC000131C7E9B18>I<01F1C003FDC00FFFC01F0FC01C03C03803C03801C07001C070
43901C0700000E00000E00000E00000E00000E00000E00FF0E01FF0E00FF07001C07001C07003C038
44003C03803C01C07C01F0FC00FFFC003FDC001F1C0141C7E9B18>I<7FFF00FFFF807FFF0001C000
44101C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000
44201C00001C00001C00001C00001C00001C00001C00001C0007FFF00FFFF807FFF00111C7D9B18>
44373 D<7FE000FFE0007FE0000E00000E00000E00000E00000E00000E00000E00000E00000E0000
4440E00000E00000E00000E00000E00000E00000E00000E00000E00700E00700E00700E00700E0070
4457FFFF0FFFFF07FFFF0141C7F9B18>76 D<FC01F8FE03F8FE03F83B06E03B06E03B06E03B06E03B
4468EE03B8EE0398CE0398CE039DCE039DCE039DCE038D8E038D8E038F8E03870E03870E03800E038
44700E03800E03800E03800E03800E0FE03F8FE03F8FE03F8151C7F9B18>I<7E07F0FF0FF87F07F0
4481D81C01D81C01D81C01DC1C01CC1C01CC1C01CE1C01CE1C01CE1C01C61C01C71C01C71C01C31C0
4491C39C01C39C01C39C01C19C01C19C01C1DC01C0DC01C0DC01C0DC07F07C0FF87C07F03C0151C7F
4509B18>I<0FF8003FFE007FFF00780F00700700F00780E00380E00380E00380E00380E00380E003
45180E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380F00780700700780F
452007FFF003FFE000FF800111C7D9B18>I<FF07F8FF07F8FF07F81C01C01C01C01C01C01C01C00E
45303800E03800E03800E03800F0780070700070700070700070700038E00038E00038E00038E0001
4548C0001DC0001DC0001DC0000D80000F80000F800007000151C7F9B18>86
455D<3FFFE07FFFE07FFFE07001C07003C0700780700700000F00001E00001C00003C000078000070
4560000F00001E00001C00003C0000780000700000F00001E00E01C00E03C00E07800E07000E0FFFF
457E0FFFFE0FFFFE0131C7E9B18>90 D<FFF8FFF8FFF8E000E000E000E000E000E000E000E000E000
458E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
45900E000FFF8FFF8FFF80D24779F18>I<600000F00000F00000F800007800007C00003C00003C00
460003E00001E00001F00000F00000F00000F800007800007C00003C00003C00003E00001E00001F0
4610000F00000F800007800007800007C00003C00003E00001E00001E00001F00000F00000F800007
4628000078000030011247D9F18>I<FFF8FFF8FFF800380038003800380038003800380038003800
463380038003800380038003800380038003800380038003800380038003800380038003800380038
4640038FFF8FFF8FFF80D247F9F18>I<7FFF00FFFF80FFFF807FFF0011047D7F18>95
465D<061E3E387070E0E0E0F8FC7C7C38070E789E18>I<1FE0003FF8007FFC00781E00300E000007
4660000070000FF0007FF001FFF007F0700780700E00700E00700E00700F00F00781F003FFFF01FFB
467F007E1F014147D9318>I<7E0000FE00007E00000E00000E00000E00000E00000E00000E3E000E
468FF800FFFC00FC1E00F80E00F00700E00700E00380E00380E00380E00380E00380E00380F00700F
46900700F80E00FC1E00FFFC00EFF80063E00151C809B18>I<01FE0007FF001FFF803E0780380300
470700000700000E00000E00000E00000E00000E00000E000007000007001C03801C03E03C01FFF80
47107FF0001FC0012147D9318>I<001F80003F80001F8000038000038000038000038000038003E3
472800FFB801FFF803C1F80380F80700780700380E00380E00380E00380E00380E00380E003807007
47380700780380F803C1F801FFFF00FFBF803E3F0151C7E9B18>I<01F00007FC001FFE003E0F0038
4740780700380700380E001C0E001C0FFFFC0FFFFC0FFFFC0E000007000007001C03801C03E03C01F
475FF8007FF0001FC0012147D9318>I<001F80007FC000FFE000E1E001C0C001C00001C00001C000
4767FFFC0FFFFC0FFFFC001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000
47701C00001C00001C00001C0007FFF007FFF007FFF00131C7F9B18>I<01E1F007FFF80FFFF81E1E
478301C0E003807003807003807003807003807001C0E001E1E001FFC001FF80039E0003800001C00
479001FFE001FFFC03FFFE07801F0700070E00038E00038E00038E000387800F07E03F01FFFC00FFF
4808001FC00151F7F9318>I<7E0000FE00007E00000E00000E00000E00000E00000E00000E3E000E
481FF800FFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E
48200E00E00E00E00E07FC3FCFFE7FE7FC3FC171C809B18>I<03800007C00007C00007C000038000
4830000000000000000000000007FC000FFC0007FC00001C00001C00001C00001C00001C00001C000
48401C00001C00001C00001C00001C00001C00001C00001C000FFFF00FFFF80FFFF00111D7C9C18>
485I<0038007C007C007C003800000000000000000FFC1FFC0FFC001C001C001C001C001C001C001C
486001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C6038F078FFF07FE03F
487800E277E9C18>I<FE0000FE0000FE00000E00000E00000E00000E00000E00000E3FF00E7FF00E
4883FF00E07800E0F000E1E000E3C000E78000EF0000FF8000FFC000F9C000F0E000E0F000E07000E
48903800E03C0FFC7F8FFC7F8FFC7F8151C7F9B18>I<7FE000FFE0007FE00000E00000E00000E000
49000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E000
49100E00000E00000E00000E00000E00000E0007FFFC0FFFFE07FFFC0131C7E9B18>I<7CE0E000FF
492FBF8007FFFF8001F1F1C001E1E1C001E1E1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C00
4931C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C007F1F1F00FFBFBF807F1F1F00191481
4949318>I<7E3E00FEFF807FFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00
495E00E00E00E00E00E00E00E00E00E00E07FC3FCFFE7FE7FC3FC1714809318>I<01F0000FFE001F
496FF003E0F803803807001C07001C0E000E0E000E0E000E0E000E0E000E0F001E07001C07803C03C
49707803E0F801FFF000FFE0001F00013147E9318>I<7E3E00FEFF807FFFC00FC1E00F80E00F0070
4980E00700E00380E00380E00380E00380E00380E00380F00700F00700F80E00FC1E00FFFC00EFF80
4990E3E000E00000E00000E00000E00000E00000E00000E00007FC000FFE0007FC000151E809318>
500I<01E38007FB801FFF803E1F80380F80700780700780E00380E00380E00380E00380E00380E003
50180700780700780380F803C1F801FFF800FFB8003E3800003800003800003800003800003800003
50280000380003FF8003FF8003FF8151E7E9318>I<7F87E0FF9FF07FBFF803F87803F03003E00003
503C00003C0000380000380000380000380000380000380000380000380000380007FFE00FFFF007F
504FE0015147F9318>I<07F7003FFF007FFF00780F00E00700E00700E007007C00007FE0001FFC00
50503FE00001F00600780E00380E00380F00380F80F00FFFF00FFFC00E7F00011147D9318>I<0180
506000380000380000380000380007FFFC0FFFFC0FFFFC00380000380000380000380000380000380
507000380000380000380000380400380E00380E00380E001C1C001FFC000FF80003E0013197F9818
508>I<7E07E0FE0FE07E07E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E
50900E00E00E00E00E00E01E00F03E007FFFC03FFFE01FCFC1714809318>I<7F8FF0FF8FF87F8FF0
5101E03C00E03800E03800E0380070700070700070700038E00038E00038E00038E0001DC0001DC00
51101DC0000F80000F80000700015147F9318>I<FF8FF8FF8FF8FF8FF83800E03800E03800E01C01
512C01C01C01C71C01CF9C01CF9C01CD9C01CD9C00DDD800DDD800DDD800D8D800F8F800F8F800707
5130015147F9318>I<7F8FF07F9FF07F8FF0070700078E00039E0001DC0001F80000F80000700000
514F00000F80001DC00039E00038E000707000F07807F8FF0FF8FF87F8FF015147F9318>I<7F8FF0
515FF8FF87F8FF00E01C00E03800E0380070380070700070700038700038600038E0001CE0001CE00
51600CC0000CC0000DC0000780000780000780000700000700000700000F00000E00079E0007BC000
5177F80003F00001E0000151E7F9318>I<0007E0001FE0007FE000780000E00000E00000E00000E0
5180000E00000E00000E00000E00000E00000E00000E00001E0007FC000FF8000FF80007FC00001E0
5190000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E000007800007F
520E0001FE00007E013247E9F18>123 D<60F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
521F0F0F0F0F0F0F0F0F0F0F0F0600424769F18>I<7C0000FF0000FFC00003C00000E00000E00000
522E00000E00000E00000E00000E00000E00000E00000E00000E00000F000007FC0003FE0003FE000
5237FC000F00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00003
524C000FFC000FF00007C000013247E9F18>I<060C1F1E3FBEFBF8F1F060C00F067C9B18>I
525E /Fk 27 121 df<00003FE00000E0100001803800038078000300780007003000070000000700
5260000070000000E0000000E0000000E000000FFFFE0000E00E0001C01C0001C01C0001C01C0001C
52701C0001C03800038038000380380003803800038070000380700007007000070071000700E2000
528700E2000700E2000E00E2000E0064000E0038000E0000000C0000001C0000001C0000031800000
52979800000F3000000620000003C0000001D29829F1A>12 D<00003FC0FF800000E0E38040000181
530E600E0000381EC01E0000300DC01E00007001C00C0000700180000000700380000000E00380000
531000E00380000000E00380000000E0070000000FFFFFFFF80001C00700380001C00700700001C00
532700700001C00700700001C00E00700001C00E00E00003800E00E00003800E00E00003800E00E00
533003801C01C00003801C01C00007001C01C00007001C01C40007001C03880007003803880007003
53480388000E00380388000E00380190000E003000E0000E00700000000C00700000001C006000000
53501C00600000031860E000000798F0C000000F31E18000000620C300000003C07C00000002B2982
5369F28>14 D<0E1F3F3F1D0102020404081020C0080E779F0E>39 D<000200020006000E003C00DC
537031C001C0038003800380038007000700070007000E000E000E000E001C001C001C001C0038003
53880038003800780FFF80F1E7B9D17>49 D<0000FE0200078186001C004C0038003C0060003C00C0
539001C01C0001803800018070000180F0000181E0000101E0000103C0000003C0000007800000078
5400000007800000078000000F0000000F0000000F0000000F0000000F00000807000008070000080
541700001003800010038000200180004000C001800060020000381C00000FE00001F217A9F21>67
542D<01FF007FE0001F000F00001F0004000017800400001780040000278008000023C008000023C0
54308000023C008000041E010000041E010000041F010000040F010000080F0200000807820000080
544782000008078200001003C400001003C400001003C400001001E400002001E800002001E800002
545000F800002000F800004000F0000040007000004000700000C000700001C00020000FF80020000
546231F7D9E22>78 D<00F1800389C00707800E03801C03803C0380380700780700780700780700F0
5470E00F00E00F00E00F00E20F01C40F01C40703C40705C40308C800F070013147C9317>97
548D<07803F8007000700070007000E000E000E000E001C001C001CF01D0C3A0E3C0E380F380F700F
549700F700F700FE01EE01EE01EE01CE03CE038607060E031C01F0010207B9F15>I<007E0001C100
5500300800E07801E07801C07003C0200780000780000780000F00000F00000F00000F00000F00000
55170010070020030040018380007C00011147C9315>I<0000780003F80000700000700000700000
552700000E00000E00000E00000E00001C00001C000F1C00389C00707800E03801C03803C03803807
55300780700780700780700F00E00F00E00F00E00F00E20F01C40F01C40703C40705C40308C800F07
5540015207C9F17>I<007C01C207010E011C013C013802780C7BF07C00F000F000F000F000700070
5550170023804183807C010147C9315>I<00007800019C00033C00033C000718000700000700000E
55600000E00000E00000E00000E0001FFE0001C00001C00001C00001C000038000038000038000038
5570000380000700000700000700000700000700000700000E00000E00000E00000E00000C00001C0
5580001C0000180003180007B0000F300006600003C00001629829F0E>I<003C6000E27001C1E003
55980E00700E00F00E00E01C01E01C01E01C01E01C03C03803C03803C03803C03803C07003C07001C
5600F001C17000C2E0003CE00000E00000E00001C00001C00301C00783800F0700060E0003F800014
5611D7E9315>I<00C001E001E001C000000000000000000000000000000E00330023004380430047
5620087000E000E000E001C001C001C003840388030807080310033001C000B1F7C9E0E>105
563D<0001800003C00003C0000380000000000000000000000000000000000000000000003C000046
56400008700008700010700010700020E00000E00000E00000E00001C00001C00001C00001C000038
5650000380000380000380000700000700000700000700000E00000E00030E00079C000F180006300
566003C00001228829E0E>I<01E0000FE00001C00001C00001C00001C00003800003800003800003
56780000700000700000703C00704200E08E00E11E00E21E00E40C01C80001D00001E00001FC00038
568E000387000387000383840707080707080707080703100E03100601E0013207D9F15>I<03C01F
569C0038003800380038007000700070007000E000E000E000E001C001C001C001C00380038003800
57038007000700070007100E200E200E200E200640038000A207C9F0C>I<1C0F80F0002630C31800
5714740640C004780680E004700700E004700700E008E00E01C000E00E01C000E00E01C000E00E01C
572001C01C038001C01C038001C01C038001C01C0708038038071003803806100380380E100380380
57362007007006600300300380021147C9325>I<1C0F802630C04740604780604700704700708E00
574E00E00E00E00E00E00E01C01C01C01C01C01C01C03843803883803083807083803107003303001
575C016147C931A>I<007C0001C3000301800E01C01E01C01C01E03C01E07801E07801E07801E0F0
57603C0F003C0F003C0F00780F00700700F00700E0030180018700007C00013147C9317>I<01C1E0
57702621804741C04781C04701E04701E08E01E00E01E00E01E00E01E01C03C01C03C01C03C01C038
5780380780380700380E003C1C0072380071E000700000700000E00000E00000E00000E00001C0000
5791C0000FFC000171D809317>I<1C1E002661004783804787804707804703008E00000E00000E00
580000E00001C00001C00001C00001C000038000038000038000038000070000030000011147C9313
581>114 D<00FC030206010C030C070C060C000F800FF007F803FC003E000E700EF00CF00CE00840
5821020601F8010147D9313>I<018001C0038003800380038007000700FFF007000E000E000E000E
583001C001C001C001C003800380038003820704070407080708031001E000C1C7C9B0F>I<0E00C0
5843300E02301C04381C04301C04701C08703800E03800E03800E03801C07001C07001C07001C0710
5851C0E20180E20180E201C1E200C264007C38014147C9318>I<0E03803307802307C04383C04301
586C04700C08700800E00800E00800E00801C01001C01001C01001C02001C02001C04001C04001C08
587000E300003C00012147C9315>I<0383800CC4401068E01071E02071E02070C040E00000E00000
588E00000E00001C00001C00001C00001C040638080F38080F38100E5810084C60078780013147D93
58915>120 D E /Fl 40 122 df<0001FF0000001FFFC000007F80F00000FE00F80003FC01FC0003
590F803FC0007F003FC0007F003FC0007F003FC0007F001F80007F000F00007F000000007F0000000
59107F000000007F0000000FFFFFFFC00FFFFFFFC00FFFFFFFC0007F001FC0007F001FC0007F001FC
5920007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001
593FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F0
59401FC0007F001FC0007F001FC007FFF1FFFC07FFF1FFFC07FFF1FFFC0222A7FA926>12
595D<000E00001E00007E0007FE00FFFE00FFFE00F8FE0000FE0000FE0000FE0000FE0000FE0000FE
5960000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE
5970000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE007FFFFE7FFFFE7FFF
598FE17277BA622>49 D<00FF800003FFF0000FFFFC003F03FF007C00FF807C007FC0FE007FC0FF00
5993FE0FF003FE0FF003FE0FF001FE07E001FE03C003FE000003FE000003FC000003FC000007F8000
600007F800000FF000001FE000001FC000003F0000007E000000FC000001F0000003E0000007C00E0
601007800E000F000E001E001C0038001C0070001C00FFFFFC01FFFFFC03FFFFFC07FFFFFC0FFFFFF
60280FFFFFF80FFFFFF801B277DA622>I<007F800003FFF00007FFFC001F81FE001F00FF003F80FF
603003F807F803FC07F803F807F803F807F801F007F800000FF800000FF000000FF000001FE000003
604F8000007F00000FFC00000FFF0000001FC000000FF0000007F8000007FC000003FC000003FE000
605003FE000003FE03C003FE07E003FE0FF003FE0FF003FE0FF003FC0FF007FC0FE007F807C00FF80
6063F01FF001FFFFC0007FFF00000FF80001B277DA622>I<00000E0000001E0000003E0000007E00
6070000FE000000FE000001FE000003FE0000077E00000E7E00000E7E00001C7E0000387E0000707E
6080000E07E0000E07E0001C07E0003807E0007007E000E007E000E007E001C007E0038007E007000
6097E00E0007E00FFFFFFF8FFFFFFF8FFFFFFF80000FE000000FE000000FE000000FE000000FE0000
61000FE000000FE000000FE00007FFFF8007FFFF8007FFFF81D277EA622>I<0C0003000F803F000F
611FFFE000FFFFE000FFFFC000FFFF8000FFFE0000FFFC0000FFE00000E0000000E0000000E000000
6120E0000000E0000000E0000000E7FC0000FFFF8000F80FE000E007F000C003F8000003F8000001F
613C000001FC000001FE000001FE018001FE07E001FE0FE001FE0FE001FE0FE001FE0FE001FE0FE00
6141FC078003FC078003F803C007F001F01FE000FFFFC0003FFF00000FF80001B277DA622>I<0007
615F000003FFC0000FFFF0001FC0F0007F01F800FE03F800FC03F801FC03F803F803F803F801F007F
6168000007F0000007F0000007F000000FF000000FF0FC000FF3FF800FF70FE00FFE03F00FFC03F80
617FF801FC0FF801FC0FF801FC0FF001FE0FF001FE0FF001FE0FF001FE07F001FE07F001FE07F001F
618E07F001FE03F801FC03F801FC01F803F800FC03F8007E0FF0003FFFC0000FFF000003FC0001B27
6197DA622>I<380000003E0000003FFFFFF03FFFFFF03FFFFFF07FFFFFE07FFFFFC07FFFFFC07FFF
620FF8070000F0070001E0070003C00E0003800E0007800E000F0000001E0000003C0000003C00000
62107800000078000000F0000001F0000001F0000001F0000003F0000003F0000003E0000007E0000
622007E0000007E0000007E000000FE000000FE000000FE000000FE000000FE000000FE000000FE00
6230000FE000000FE0000003800001C297CA822>I<000003800000000007C00000000007C0000000
624000FE0000000000FE0000000000FE0000000001FF0000000001FF0000000003FF8000000003FF8
625000000003FF80000000073FC0000000073FC00000000F3FE00000000E1FE00000000E1FE000000
62601C0FF00000001C0FF00000003C0FF80000003807F80000007807FC0000007003FC0000007003F
627C000000E003FE000000E001FE000001E001FF000001C000FF000001FFFFFF000003FFFFFF80000
6283FFFFFF80000780007FC0000700003FC0000700003FC0000E00001FE0000E00001FE0001E00001
629FF0001C00000FF0001C00000FF00FFFE001FFFFEFFFE001FFFFEFFFE001FFFFE2F297EA834>65
630D<FFFFFFFFE0FFFFFFFFE0FFFFFFFFE003FC001FE003FC0007F003FC0001F003FC0001F003FC00
63100F003FC00007003FC00007003FC00007003FC01C07803FC01C03803FC01C03803FC01C03803FC
63203C00003FC03C00003FC0FC00003FFFFC00003FFFFC00003FFFFC00003FC0FC00003FC03C00003
633FC03C00003FC01C00E03FC01C00E03FC01C00E03FC01C01C03FC00001C03FC00001C03FC00001C
63403FC00003C03FC00003803FC00007803FC0000F803FC0001F803FC0003F803FC001FF8FFFFFFFF
635F0FFFFFFFFF0FFFFFFFFF027297DA82D>69 D<FFFFFFFFC0FFFFFFFFC0FFFFFFFFC003FC003FC0
63603FC000FE003FC0003E003FC0001E003FC0001E003FC0000E003FC0000E003FC0000E003FC0000
637F003FC03807003FC03807003FC03807003FC03800003FC07800003FC07800003FC1F800003FFFF
638800003FFFF800003FFFF800003FC1F800003FC07800003FC07800003FC03800003FC03800003FC
63903800003FC03800003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003
640FC00000003FC00000003FC000000FFFFFC0000FFFFFC0000FFFFFC000024297DA82B>I<FFFFFC
641FFFFFCFFFFFC01FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00
64201FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00
64301FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00FFFFFCFFFFFC
644FFFFFC16297EA81A>73 D<FFFFFC0000FFFFFC0000FFFFFC000003FC00000003FC00000003FC00
645000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC
64600000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003
647FC00000003FC00000003FC00000003FC0001C003FC0001C003FC0001C003FC0001C003FC0003C0
64803FC00038003FC00038003FC00078003FC00078003FC000F8003FC000F8003FC001F8003FC007F
6498003FC01FF00FFFFFFFF00FFFFFFFF00FFFFFFFF0022297DA829>76 D<FFFE0000001FFFC0FFFE
6500000001FFFC0FFFF0000003FFFC003FF0000003FF00003FF0000003FF00003BF80000077F00003
651BF80000077F000039FC00000E7F000039FC00000E7F000038FE00001C7F000038FE00001C7F000
6520387F0000387F0000387F0000387F0000387F0000387F0000383F8000707F0000383F8000707F0
653000381FC000E07F0000381FC000E07F0000380FE001C07F0000380FE001C07F0000380FF003807
654F00003807F003807F00003807F003807F00003803F807007F00003803F807007F00003801FC0E0
65507F00003801FC0E007F00003800FE1C007F00003800FE1C007F00003800FE1C007F000038007F3
6568007F000038007F38007F000038003FF0007F000038003FF0007F000038001FE0007F000038001
657FE0007F000038000FC0007F000038000FC0007F000FFFE00FC01FFFFC0FFFE007801FFFFC0FFFE
658007801FFFFC03A297DA841>I<FFFFFFF800FFFFFFFF00FFFFFFFFC003FC003FE003FC000FF003
659FC0007F803FC0007FC03FC0003FC03FC0003FE03FC0003FE03FC0003FE03FC0003FE03FC0003FE
66003FC0003FE03FC0003FE03FC0003FC03FC0007FC03FC0007F803FC000FF003FC003FE003FFFFFF
6618003FFFFFE0003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00
662000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC
66300000003FC000000FFFFF00000FFFFF00000FFFFF0000027297DA82F>80
664D<007F806003FFF0E00FFFFFE01F807FE03F001FE07E0007E07E0003E07C0003E0FC0001E0FC00
66501E0FC0000E0FE0000E0FE0000E0FF000000FFC000007FFE00007FFFE0003FFFFC003FFFFF001F
666FFFF8007FFFFC003FFFFE000FFFFF00007FFF000007FF000000FF8000007F8000003F8E00003F8
667E00001F8E00001F8E00001F8F00001F8F00001F0F80003F0FC0003E0FF0007E0FFE01FC0FFFFFF
66800E0FFFE00C01FF0001D297CA826>83 D<7FFFFFFFFFC07FFFFFFFFFC07FFFFFFFFFC07F803FC0
6693FC07E003FC007C078003FC003C078003FC003C070003FC001C0F0003FC001E0F0003FC001E0E0
670003FC000E0E0003FC000E0E0003FC000E0E0003FC000E0E0003FC000E000003FC0000000003FC0
671000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000
672003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0
673000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000
674003FC00000007FFFFFE000007FFFFFE000007FFFFFE0002B287EA730>I<01FF800007FFF0000F
67581FC001FC0FE001FC07F001FC07F001FC03F800F803F8000003F8000003F8000003F80000FFF80
67600FFFF8007FC3F801FE03F803F803F807F803F807F003F80FE003F80FE003F80FE003F80FE007F
67780FF007F807F00FFC03F83DFFC0FFF0FFC01FC03FC1E1B7E9A21>97 D<FFE0000000FFE0000000
678FFE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000
679000FE00000000FE00000000FE00000000FE00000000FE00000000FE1FE00000FE7FF80000FFE07
680E0000FF803F8000FF001FC000FE000FE000FE000FE000FE0007F000FE0007F000FE0007F800FE0
681007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800F
682E0007F000FE000FF000FE000FE000FF000FE000FF001FC000FF803F8000F9E07E0000F0FFF8000
6830E01FC0000212A7EA926>I<001FF80000FFFE0003F01F000FE03F801FC03F803F803F803F803F
684807F801F007F000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00
6850000FF0000007F0000007F8000003F8001C03FC001C01FC003C00FE0078003F01F0000FFFC0000
6861FE0001A1B7E9A1F>I<00003FF80000003FF80000003FF800000003F800000003F800000003F8
68700000003F800000003F800000003F800000003F800000003F800000003F800000003F800000003
688F800000003F800001FE3F80000FFFBF80003F03FF8000FE00FF8001FC007F8003F8003F8003F80
68903F8007F8003F8007F0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF
6900003F800FF0003F800FF0003F800FF0003F8007F0003F8007F0003F8003F8003F8003F8007F800
6911FC00FF8000FE01FF80003F03FFF8000FFF3FF80003FC3FF80212A7EA926>I<003FE00001FFF8
6920003F07E000FE03F001FC01F803F800FC03F800FC07F000FC07F0007E0FF0007E0FF0007E0FF00
69307E0FFFFFFE0FFFFFFE0FF000000FF000000FF000000FF0000007F0000007F8000003F8000E03F
6948001E01FC001C00FE003C003F81F8000FFFE00001FF0001B1B7E9A20>I<0007F0003FFC00FE3E
69501FC7F03F87F03F87F07F07F07F03E07F00007F00007F00007F00007F00007F00007F000FFFFC0
696FFFFC0FFFFC007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F000
69707F00007F00007F00007F00007F00007F00007F00007F00007F00007F0007FFF807FFF807FFF80
698182A7EA915>I<00FF81F003FFE7FC0FC1FE7C1F80FC7C3F80FE7C3F007E107F007F007F007F00
6997F007F007F007F007F007F007F007F003F007E003F80FE001F80FC000FC1F8001FFFE00018FF80
70000380000003C0000003C0000003E0000003FFFF8003FFFFF001FFFFFC00FFFFFE007FFFFF01FFF
701FFF07E0007F87C0001F8F80001F8F80000F8F80000F8F80000F8FC0001F87E0003F03F0007E00F
702C01F8003FFFE00007FF0001E287E9A22>I<FFE0000000FFE0000000FFE00000000FE00000000F
703E00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0000000
7040FE00000000FE00000000FE00000000FE07F00000FE1FFC0000FE787E0000FEE07F0000FFC03F8
705000FF803F8000FF003F8000FF003F8000FF003F8000FE003F8000FE003F8000FE003F8000FE003
706F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE0
70703F8000FE003F8000FE003F8000FE003F800FFFE3FFF80FFFE3FFF80FFFE3FFF80212A7DA926>
708I<07001FC01FE03FE03FE03FE01FE01FC007000000000000000000000000000000FFE0FFE0FFE0
7090FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F
710E00FE0FFFEFFFEFFFE0F2B7DAA14>I<FFE00000FFE00000FFE000000FE000000FE000000FE000
711000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE0
7121FFC0FE01FFC0FE01FFC0FE007C00FE00F800FE01E000FE07C000FE0F8000FE1F0000FE3E0000F
713E7C0000FEFE0000FFFF0000FFFF0000FFFF8000FF3FC000FE1FE000FC0FE000FC0FF000FC07F80
7140FC03F800FC03FC00FC01FE00FC00FF0FFFC3FFEFFFC3FFEFFFC3FFE1F2A7EA924>107
715D<FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0
7160FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F
717E0FFFEFFFEFFFE0F2A7DA914>I<FFC07F800FF000FFC1FFE03FFC00FFC783F0F07E000FCE03F9
718C07F000FDC01FB803F000FF801FF003F800FF001FE003F800FF001FE003F800FF001FE003F800F
719E001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC00
7203F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE0
72101FC003F800FE001FC003F800FE001FC003F800FE001FC003F80FFFE1FFFC3FFF8FFFE1FFFC3FF
722F8FFFE1FFFC3FFF8351B7D9A3C>I<FFC07F0000FFC1FFC000FFC787E0000FCE07F0000FDC03F8
723000FF803F8000FF003F8000FF003F8000FF003F8000FE003F8000FE003F8000FE003F8000FE003
724F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE0
72503F8000FE003F8000FE003F8000FE003F800FFFE3FFF80FFFE3FFF80FFFE3FFF80211B7D9A26>
726I<003FE00001FFFC0003F07E000FC01F801F800FC03F800FE03F0007E07F0007F07F0007F07F00
72707F0FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F87F0007F07F
7280007F03F800FE03F800FE01F800FC00FC01F8007F07F0001FFFC00003FE0001D1B7E9A22>I<FF
729E1FE0000FFE7FF8000FFFE07E0000FF803F8000FF001FC000FE001FE000FE000FE000FE000FF00
7300FE000FF000FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F
731800FE0007F800FE0007F800FE000FF000FE000FF000FE000FE000FF001FE000FF003FC000FF803
732F8000FFE0FE0000FEFFF80000FE1FC00000FE00000000FE00000000FE00000000FE00000000FE0
7330000000FE00000000FE00000000FE00000000FE0000000FFFE000000FFFE000000FFFE00000021
734277E9A26>I<FFC1F0FFC7FCFFCE3E0FDC7F0FD87F0FF87F0FF07F0FF03E0FF0000FE0000FE000
7350FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE000
736FFFF00FFFF00FFFF00181B7E9A1C>114 D<03FE300FFFF03E03F07800F07000F0F00070F00070
737F80070FC0000FFE000FFFE007FFFC03FFFE01FFFF007FFF800FFFC0003FC0000FCE0007CE0003C
738F0003CF0003CF80078FC0078FF01F0F7FFC0C1FF00161B7E9A1B>I<0070000070000070000070
7390000F00000F00000F00001F00003F00003F00007F0001FFFF0FFFFF0FFFFF007F00007F00007F0
7400007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F03807F03807F0
7413807F03807F03807F03807F03803F87001F8F000FFE0001F8015267FA51B>I<FFE03FF800FFE0
7423FF800FFE03FF8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000F
743E003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F800
7440FE003F8000FE003F8000FE003F8000FE007F8000FE007F8000FE00FF80007E01FF80003F03BFF
7458001FFF3FF80003FC3FF80211B7D9A26>I<FFFE03FF80FFFE03FF80FFFE03FF8007F000700007
746F000700007F800F00003F800E00003FC01E00001FC01C00001FC01C00000FE03800000FE038000
747007F070000007F070000007F8F0000003F8E0000003FDE0000001FDC0000001FDC0000000FF800
74800000FF80000000FF800000007F000000007F000000003E000000003E000000001C00000211B7F
7499A24>I<FFFE7FFC0FFEFFFE7FFC0FFEFFFE7FFC0FFE0FE007E000E007F003F001C007F003F001
750C007F807F803C003F807F8038003F807F8038001FC0EFC070001FC0EFC070001FE1EFC0F0000FE
7511C7E0E0000FE1C7E0E0000FF383F1E00007F383F1C00007F783F3C00003FF01FB800003FF01FB8
75200003FF01FF800001FE00FF000001FE00FF000000FC007E000000FC007E000000FC007E0000007
7538003C00000078003C0002F1B7F9A32>I<FFFC0FFF00FFFC0FFF00FFFC0FFF0007F003C00003F8
75407800001FC07800000FE0F000000FF1E0000007F3C0000003FF80000001FF00000000FF0000000
7550FF000000007F000000007F80000000FFC0000001FFE0000001EFE0000003C7F000000783F8000
75600F01FC00001E01FE00001C00FE00003C007F000FFF01FFF80FFF01FFF80FFF01FFF80211B7F9A
75724>I<FFFE03FF80FFFE03FF80FFFE03FF8007F000700007F000700007F800F00003F800E00003
758FC01E00001FC01C00001FC01C00000FE03800000FE038000007F070000007F070000007F8F0000
759003F8E0000003FDE0000001FDC0000001FDC0000000FF80000000FF80000000FF800000007F000
760000007F000000003E000000003E000000001C000000001C0000000038000000003800000380780
76100007C07000000FE0F000000FE0E000000FE1E000000FE3C0000007C780000003FE00000000FC0
76200000021277F9A24>I E /Fm 75 123 df<001F83E000F06E3001C078780380F8780300F03007
763007000070070000700700007007000070070000700700007007000FFFFFF800700700007007000
764070070000700700007007000070070000700700007007000070070000700700007007000070070
765000700700007007000070070000700700007007000070070007FE3FF001D20809F1B>11
766D<003F0000E0C001C0C00381E00701E00701E0070000070000070000070000070000070000FFFF
767E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700
768E00700E00700E00700E00700E00700E07FC3FE1720809F19>I<003FE000E0E001C1E00381E007
76900E00700E00700E00700E00700E00700E00700E00700E0FFFFE00700E00700E00700E00700E007
77000E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E007
77100E07FE7FE1720809F19>I<001F81F80000F04F040001C07C06000380F80F000300F00F000700
772F00F00070070000007007000000700700000070070000007007000000700700000FFFFFFFF0007
773007007000700700700070070070007007007000700700700070070070007007007000700700700
774070070070007007007000700700700070070070007007007000700700700070070070007007007
77500070070070007007007007FE3FE3FF02420809F26>I<07070F1C383060C00808779F17>19
776D<7038F87CFC7EFC7E743A0402040204020804080410081008201040200F0E7E9F17>34
777D<70F8FCFC74040404080810102040060E7C9F0D>39 D<0020004000800100020006000C000C00
778180018003000300030007000600060006000E000E000E000E000E000E000E000E000E000E000E0
77900E0006000600060007000300030003000180018000C000C000600020001000080004000200B2E
7807DA112>I<800040002000100008000C00060006000300030001800180018001C000C000C000C0
78100E000E000E000E000E000E000E000E000E000E000E000E000C000C000C001C001800180018003
782000300060006000C00080010002000400080000B2E7DA112>I<70F8FCFC740404040808101020
78340060E7C840D>44 D<FFC0FFC00A027F8A0F>I<70F8F8F87005057C840D>I<0003000300070006
7840006000E000C000C001C0018001800380030003000700060006000E000C000C001C00180018001
785800380030003000700060006000E000C000C001C0018001800380030003000700060006000E000
786C000C000102D7DA117>I<03F0000E1C001C0E00180600380700700380700380700380700380F0
78703C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C070
78803807003807003807807803807001806001C0E000E1C0003F000121F7E9D17>I<018003800F80
789F38003800380038003800380038003800380038003800380038003800380038003800380038003
790800380038003800380038007C0FFFE0F1E7C9D17>I<03F0000C1C00100E002007004007808007
79180F007C0F803C0F803C0F803C02007C00007C0000780000780000F00000E00001C000038000070
7920000600000C0000180000300000600400C00401800401000803FFF807FFF80FFFF80121E7E9D17
793>I<03F0000C1C00100E00200F00780F80780780780780380F80000F80000F00000F00000E0000
7941C0000380003F000003C00000E00000F000007800007800007C02007C0F807C0F807C0F807C0F0
7950780400780400F00200E001C3C0003F000121F7E9D17>I<000600000600000E00000E00001E00
796002E00002E00004E00008E00008E00010E00020E00020E00040E00080E00080E00100E00200E00
797200E00400E00C00E00FFFFF0000E00000E00000E00000E00000E00000E00000E0000FFE0141E7F
7989D17>I<1803001FFE001FFC001FF8001FE00010000010000010000010000010000010000011F0
79900161C00180E001007001007800003800003800003C00003C00003C07003C0F003C0F003C0E003
80080400380400700200600100E000C380003E000121F7E9D17>I<007C000182000701000E03800C
80107801C0780380300380000780000700000700000F1F000F21C00F40600F80700F80380F80380F0
80203C0F003C0F003C0F003C0F003C07003C07003C07003803803803807001807000C0E00061C0001
803F000121F7E9D17>I<4000007FFFC07FFF807FFF80400100800200800200800400000800000800
80400100000200000200000400000400000C00000C00001C000018000038000038000038000038000
805078000078000078000078000078000078000078000030000121F7D9D17>I<03F0000C0C001006
806003003002001806001806001806001807001807803003E03003F06001FC8000FF00003F80007FC
807000C7E00103F00300F806003804001C0C001C0C000C0C000C0C000C0C000806001802001001002
808000C0C0003F000121F7E9D17>I<03F0000E18001C0C00380600380700700700700380F00380F0
8090380F003C0F003C0F003C0F003C0F003C07007C07007C03807C0180BC00E13C003E3C000038000
8100380000380000700300700780600780E00700C002018001070000FC000121F7E9D17>I<70F8F8
811F8700000000000000000000070F8F8F87005147C930D>I<70F8F8F87000000000000000000000
81270F0F8F878080808101010202040051D7C930D>I<7FFFFFE0FFFFFFF000000000000000000000
81300000000000000000000000000000000000000000000FFFFFFF07FFFFFE01C0C7D9023>61
814D<001F800000E0700001000800060006000800010008000100100F00802030C0402060404040C0
815202041C01C2041C01C2081801C1083801C1083801C1083801C1083801C1083801C1083801C1081
816801C1041C01C1041C01C1040C03C2020605C202030CC40100F0780080000000800000006000070
817010001C000E01F00001FF0001C207D9F23>64 D<000100000003800000038000000380000007C0
818000007C0000007C0000009E0000009E0000009E0000010F0000010F0000010F000002078000020
81978000020780000403C0000403C0000403C0000801E0000801E0000FFFE0001000F0001000F0001
820000F00020007800200078002000780040003C00E0003C01F0007E0FFC03FFE1F207F9F22>I<FF
821FFE0000F80380007801E0007801F0007800F0007800F8007800F8007800F8007800F8007800F80
82207800F0007801F0007801E0007803C0007FFF00007803C0007801E0007800F0007800F80078007
82380078007C0078007C0078007C0078007C0078007C00780078007800F8007800F0007801F000F80
8243C00FFFFF0001A1F7E9E20>I<000FC040007030C001C009C0038005C0070003C00E0001C01E00
82500C01C0000C03C0000C07C0000407C00004078000040F8000000F8000000F8000000F8000000F8
826000000F8000000F8000000F8000000F8000000780000007C0000407C0000403C0000401C000040
8271E0000800E000080070001000380020001C0040000703800000FC0001A217D9F21>I<FFFFFF00
8280F800F000780030007800300078001000780018007800080078000800780008007808080078080
8290007808000078080000781800007FF800007818000078080000780800007808000078080000780
83000200780002007800020078000400780004007800040078000C0078000C0078001800F800F80FF
831FFFF801B1F7E9E1F>69 D<FFFFFF000F800F000780030007800300078001000780018007800080
832078000800780008007800080078080000780800007808000078080000781800007FF8000078180
833000780800007808000078080000780800007800000078000000780000007800000078000000780
834000007800000078000000FC00000FFFE0000191F7E9E1E>I<000FE0200078186000E004E00380
83502E0070001E00F0000E01E0000601E0000603C0000603C0000207C00002078000020F8000000F8
836000000F8000000F8000000F8000000F8000000F8000000F8007FFCF80003E0780001E07C0001E0
8373C0001E03C0001E01E0001E01E0001E00F0001E0070001E0038002E000E0046000781820000FE0
838001E217D9F24>I<FFF8FFF80F800F8007800F0007800F0007800F0007800F0007800F0007800F
8390007800F0007800F0007800F0007800F0007800F0007800F0007FFFF0007800F0007800F000780
8400F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007
841800F0007800F000F800F80FFF8FFF81D1F7E9E22>I<FFFC0FC007800780078007800780078007
842800780078007800780078007800780078007800780078007800780078007800780078007800780
84307800FC0FFFC0E1F7F9E10>I<FFFE000FC0000780000780000780000780000780000780000780
844000780000780000780000780000780000780000780000780000780000780000780000780020780
8450207800207800207800607800407800407800C07801C0F807CFFFFFC171F7E9E1C>76
846D<FF80001FF80F80001F800780001F0005C0002F0005C0002F0005C0002F0004E0004F0004E000
8474F000470008F000470008F000470008F000438010F000438010F000438010F00041C020F00041C
848020F00041C020F00040E040F00040E040F00040E040F000407080F000407080F000407080F0004
84903900F000403900F000401E00F000401E00F000401E00F000E00C00F001F00C01F80FFE0C1FFF8
850251F7E9E2A>I<FF803FF807C007C007C0038005E0010005E0010004F001000478010004780100
851043C0100043C0100041E0100040F0100040F010004078100040781000403C1000401E1000401E1
852000400F1000400F1000400790004003D0004003D0004001F0004001F0004000F00040007000400
85307000E0003001F000300FFE001001D1F7E9E22>I<001F800000F0F00001C0380007801E000F00
8540F000E0007001E0007803C0003C03C0003C07C0003E0780001E0780001E0F80001F0F80001F0F8
8550001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0780001E07C0003E07C0003E0
8563C0003C03C0003C01E0007800E0007000F000F0007801E0001C0380000F0F000001F80001C217D
8579F23>I<FFFFE0000F80780007801C0007801E0007800F0007800F8007800F8007800F8007800F
8588007800F8007800F8007800F0007801E0007801C000780780007FFE00007800000078000000780
859000007800000078000000780000007800000078000000780000007800000078000000780000007
8608000000FC00000FFFC0000191F7E9E1F>I<FFFF80000F80F0000780780007803C0007801E0007
861801E0007801F0007801F0007801F0007801F0007801E0007801E0007803C00078078000780F000
86207FF80000781C0000780E0000780F0000780700007807800078078000780780007807C0007807C
8630007807C0007807C0407807E0407803E040FC01E08FFFC0F10000003E01E207E9E21>82
864D<07E0800C1980100780300380600180600180E00180E00080E00080E00080F00000F000007800
865007F00003FF0001FFC000FFE0003FF00001F800007800003C00003C00001C08001C08001C08001
866C08001C0C00180C00380E00300F00600CE0C0081F80012217D9F19>I<7FFFFFE0780F01E0600F
8670060400F0020400F0020C00F0030800F0010800F0010800F0010800F0010000F0000000F000000
8680F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000
869000F0000000F0000000F0000000F0000000F0000000F0000000F0000001F800007FFFE001C1F7E
8709E21>I<FFFC3FF80FC007C0078003800780010007800100078001000780010007800100078001
871000780010007800100078001000780010007800100078001000780010007800100078001000780
87201000780010007800100078001000780010007800100038002000380020001C0020001C0040000
873E008000070180000382000000FC0001D207E9E22>I<FFF003FE1F8000F80F0000600F80006007
8748000400780004003C0008003C0008003C0008001E0010001E0010001F0010000F0020000F00200
87500F806000078040000780400003C0800003C0800003C0800001E1000001E1000001F3000000F20
87600000F20000007C0000007C0000007C000000380000003800000038000000100001F207F9E22>
877I<FFF07FF81FF01F800FC007C00F00078003800F00078001000F0007C00100078007C002000780
87807C00200078007C0020003C009E0040003C009E0040003C009E0040003E010F00C0001E010F008
8790001E010F0080001F02078080000F02078100000F02078100000F0403C10000078403C20000078
880403C20000078C03E2000003C801E4000003C801E4000003C801E4000001F000F8000001F000F80
88100001F000F8000001E00078000000E00070000000E00070000000C000300000004000200002C20
8827F9E2F>I<FEFEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
883C0C0C0C0C0C0C0C0C0FEFE072D7CA10D>91 D<080410082010201040204020804080408040B85C
884FC7EFC7E7C3E381C0F0E7B9F17>I<FEFE06060606060606060606060606060606060606060606
88506060606060606060606060606060606060606FEFE072D7FA10D>I<1FE000303000781800781C
88600300E00000E00000E00000E0000FE00078E001E0E00380E00780E00F00E10F00E10F00E10F01E
88710781E103867200F83C014147E9317>97 D<0E0000FE00000E00000E00000E00000E00000E0000
8880E00000E00000E00000E00000E00000E3E000EC3800F01C00F00E00E00E00E00700E00700E0078
8890E00780E00780E00780E00780E00780E00700E00700E00E00F00E00D01C00CC300083E0015207F
8909F19>I<03F80E0C1C1E381E380C70007000F000F000F000F000F000F00070007000380138011C
891020E0C03F010147E9314>I<000380003F80000380000380000380000380000380000380000380
89200038000038000038003E380061B801C0780380380380380700380700380F00380F00380F00380
893F00380F00380F003807003807003803803803807801C07800E1B8003E3F815207E9F19>I<03F0
894000E1C001C0E00380700380700700700700380F00380F00380FFFF80F00000F00000F000007000
895007000003800801800800C010007060001F80011147F9314>I<007C00C6018F038F0706070007
8960007000700070007000700FFF00700070007000700070007000700070007000700070007000700
897070007000700070007007FF01020809F0E>I<0000E003E3300E3C301C1C30380E00780F00780F
89800780F00780F00780F00380E001C1C001E380033E0002000002000003000003000003FFE001FFF
899800FFFC03001E0600070C00030C00030C00030C000306000603000C01C038003FC00141F7F9417
900>I<0E0000FE00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E
9013E000E43000E81800F01C00F01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E
90201C00E01C00E01C00E01C00E01C00E01C0FFE7FC16207F9F19>I<1C001E003E001E001C000000
903000000000000000000000E007E000E000E000E000E000E000E000E000E000E000E000E000E000E
904000E000E000E000E00FFC00A1F809E0C>I<00E001F001F001F000E00000000000000000000000
90500007007F000F00070007000700070007000700070007000700070007000700070007000700070
906007000700070007000706070F060F0C061803F000C28829E0E>I<0E0000FE00000E00000E0000
9070E00000E00000E00000E00000E00000E00000E00000E00000E0FF00E03C00E03000E02000E0400
9080E08000E10000E30000E70000EF8000F38000E1C000E1E000E0E000E07000E07800E03800E03C0
9090E03E0FFCFF815207F9F18>I<0E00FE000E000E000E000E000E000E000E000E000E000E000E00
9100E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00FFE00B
91120809F0C>I<0E1F01F000FE618618000E81C81C000F00F00E000F00F00E000E00E00E000E00E0
9120E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00
913E00E000E00E00E000E00E00E000E00E00E000E00E00E00FFE7FE7FE023147F9326>I<0E3E00FE
91443000E81800F01C00F01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E
91501C00E01C00E01C00E01C00E01C0FFE7FC16147F9319>I<01F800070E001C03803801C03801C0
9167000E07000E0F000F0F000F0F000F0F000F0F000F0F000F07000E07000E03801C03801C01C0380
917070E0001F80014147F9317>I<0E3E00FEC3800F01C00F00E00E00E00E00F00E00700E00780E00
918780E00780E00780E00780E00780E00700E00F00E00E00F01E00F01C00EC3000E3E000E00000E00
919000E00000E00000E00000E00000E00000E0000FFE000151D7F9319>I<03E0800619801C05803C
9200780380380780380700380F00380F00380F00380F00380F00380F0038070038078038038038038
92107801C0B800E138003E380000380000380000380000380000380000380000380000380003FF815
9221D7E9318>I<0E78FE8C0F1E0F1E0F0C0E000E000E000E000E000E000E000E000E000E000E000E
923000E000E00FFE00F147F9312>I<1F9030704030C010C010C010E00078007F803FE00FF0007080
9243880188018C018C018E030D0608F800D147E9312>I<020002000200060006000E000E003E00FF
925F80E000E000E000E000E000E000E000E000E000E000E000E080E080E080E080E080610031001E0
9260D1C7F9B12>I<0E01C0FE1FC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01
927C00E01C00E01C00E01C00E01C00E01C00E03C00603C0030DC001F1FC16147F9319>I<FF83F81E
92801E01C00C00E00800E00800E008007010007010003820003820003820001C40001C40001EC0000
929E80000E80000700000700000700000200015147F9318>I<FF9FE1FC3C0780701C0300601C0380
930200E0380400E0380400E03C0400707C0800704C0800704E080038861000388710003C8730001D0
931320001D03A0000F03C0000E01C0000E01C0000601800004008001E147F9321>I<7FC3FC0F01E0
9320701C007018003810001C20000E40000EC00007800003800003C00007C00004E00008700010700
9330303800201C00601E01E01E0FF07FE1714809318>I<FF83F81E01E01C00C00E00800E00800E00
9348007010007010003820003820003820001C40001C40001EC0000E80000E8000070000070000070
93500002000002000004000004000004000F08000F08000F100006200003C0000151D7F9318>I<3F
936FF380E200E201C40384078407000E001E001C00380078007010E011E011C0338027006700EFFFE
93710147F9314>I E /Fn 13 118 df<0F001F003F803F007E00F800F000C0000A08769C18>19
938D<00038000000380000007C0000007C0000007C000000FE000000FE000001FF000001BF000001B
939F0000031F8000031F8000061FC000060FC0000E0FE0000C07E0000C07E0001803F0001FFFF0003
940FFFF8003001F8003001F8006000FC006000FC00E000FE00C0007E0FFC07FFEFFC07FFE1F1C7E9B
94124>65 D<07F8201FFEE03C07E07801E07000E0F000E0F00060F00060F80000FE0000FFE0007FFE
942003FFF003FFF800FFFC007FFE0007FE00003F00001F00000F0C000F0C000F0C000E0E000E0F001
943C0FC03C0EFFF0083FC00141C7D9B1B>83 D<0FF8001C1E003E0F803E07803E07C01C07C00007C0
944007FC007E7C01F07C03C07C07C07C0F807C0F807C0F807C0780BC03E13F80FE1F815127F9117>
94597 D<FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F3F80
9461FE1E01F80701F00781F003C1F003C1F003E1F003E1F003E1F003E1F003E1F003E1F003C1F003C
9471F00781F80701EC1E01C3F00171D7F9C1B>I<03FC000E0E001C1F003C1F00781F00780E00F800
94800F80000F80000F80000F80000F800007800007801803C01801C03000E0E0003F80011127E9115
949>I<1E003F003F003F003F001E00000000000000000000000000FF00FF001F001F001F001F001F
950001F001F001F001F001F001F001F001F001F00FFE0FFE00B1E7F9D0E>105
951D<FF0FC07E00FF31E18F001F40F207801F80FC07C01F80FC07C01F00F807C01F00F807C01F00F8
95207C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00
953F807C0FFE7FF3FF8FFE7FF3FF825127F9128>109 D<01FC000F07801C01C03C01E07800F07800
954F0F800F8F800F8F800F8F800F8F800F8F800F87800F07800F03C01E01E03C00F078001FC001512
9557F9118>111 D<FE3E00FE47001E8F801E8F801E8F801F07001F00001F00001F00001F00001F00
956001F00001F00001F00001F00001F0000FFF000FFF00011127F9114>114
957D<1FD830786018E018E018F000FF807FE07FF01FF807FC007CC01CC01CE01CE018F830CFC00E12
9587E9113>I<0300030003000300070007000F000F003FFCFFFC1F001F001F001F001F001F001F00
9591F001F001F0C1F0C1F0C1F0C0F08079803F00E1A7F9913>I<FF07F8FF07F81F00F81F00F81F00
960F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F01F80F01F80786FF01F8
961FF18127F911B>I E /Fo 45 127 df<007E0001C1800301800703C00E03C00E01800E00000E00
962000E00000E00000E0000FFFFC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01
963C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07F87F8151D809C17>12
964D<FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF800912
9657F910C>16 D<1C1C3C3870C0800707779C15>19 D<1C001E00078003C001C00380FF000A077B7E
96612>24 D<60F0F0701010101020204080040C7C830C>44 D<FFE0FFE00B0280890E>I<60F0F060
96704047C830C>I<003F800000C0600003001800040004000800020010000100201F008020708080
96840E0404040C0384041C03840818038208380382083803820838038208380382083803820818038
9692041C0382040C0384040E0784020709880201F0F00100000000800000004000000030001E000C0
9701F80003FF0001B1D7E9C20>64 D<000600000006000000060000000F0000000F0000000F000000
97117800000178000001780000023C0000023C0000023C0000041E0000041E0000041E0000080F000
9720080F0000180F8000100780001FFF80003007C0002003C0002003C0006003E0004001E0004001E
973000C001F001E001F00FF80FFF01C1D7F9C1F>I<001F808000E0618001801980070007800E0003
974801C0003801C00018038000180780000807800008070000080F0000000F0000000F0000000F000
9750000F0000000F0000000F0000000F0000000700000807800008078000080380000801C0001001C
9760001000E000200070004000180080000E03000001FC000191E7E9C1E>67
977D<FFFFFC0F003C0F000C0F00040F00040F00060F00020F00020F02020F02000F02000F02000F06
978000FFE000F06000F02000F02000F02000F02010F00010F00020F00020F00020F00060F00060F00
9790C0F003CFFFFFC181C7E9B1C>69 D<001F808000E0618001801980070007800E0003801C000380
9801C00018038000180780000807800008070000080F0000000F0000000F0000000F0000000F00000
98100F0000000F000FFF0F0000F80700007807800078078000780380007801C0007801C0007800E00
982078007000B800180118000E06080001F80001C1E7E9C21>71 D<FFF00F000F000F000F000F000F
983000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00
9840F00FFF00C1C7F9B0F>73 D<FFF8000F80000F00000F00000F00000F00000F00000F00000F0000
9850F00000F00000F00000F00000F00000F00000F00000F00000F00000F00080F00080F00080F0018
9860F00180F00100F00300F00700F01F0FFFFF0151C7E9B1A>76 D<003F800000E0E0000380380007
987001C000E000E001C0007003C00078038000380780003C0780003C0700001C0F00001E0F00001E0
988F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0700001C0780003C0780003C0380003
989803C0007801C0007000E000E0007001C000380380000E0E000003F80001B1E7E9C20>79
990D<FFFF800F00E00F00780F003C0F001C0F001E0F001E0F001E0F001E0F001E0F001C0F003C0F00
991780F00E00FFF800F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00
992000F0000FFF000171C7E9B1C>I<FFFF00000F01E0000F0078000F003C000F001C000F001E000F
993001E000F001E000F001E000F001C000F003C000F0078000F01E0000FFF00000F03C0000F00E000
9940F00F0000F0078000F0078000F0078000F0078000F0078000F0078000F0078100F0078100F0038
995100F003C20FFF01C20000007C01C1D7E9B1F>82 D<7FFFFFC0700F01C0600F00C0400F0040400F
9960040C00F0020800F0020800F0020800F0020000F0000000F0000000F0000000F0000000F000000
9970F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000
998000F0000000F0000001F800003FFFC001B1C7F9B1E>84 D<FFF07FC00F000E000F0004000F0004
999000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F00
100004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000700080007
1001800800038010000180100000C020000070C000001F00001A1D7E9B1F>I<1FC000307000783800
1002781C00301C00001C00001C0001FC000F1C00381C00701C00601C00E01C40E01C40E01C40603C40
1003304E801F870012127E9115>97 D<FC00001C00001C00001C00001C00001C00001C00001C00001C
100400001C00001C00001C7C001D86001E03001C01801C01C01C00C01C00E01C00E01C00E01C00E01C
100500E01C00E01C00C01C01C01C01801E030019060010F800131D7F9C17>I<07E00C301878307870
1006306000E000E000E000E000E000E00060007004300418080C3007C00E127E9112>I<003F000007
10070000070000070000070000070000070000070000070000070000070003E7000C1700180F003007
100800700700600700E00700E00700E00700E00700E00700E00700600700700700300700180F000C37
10090007C7E0131D7E9C17>I<03E00C301818300C700E6006E006FFFEE000E000E000E00060007002
1010300218040C1803E00F127F9112>I<00F8018C071E061E0E0C0E000E000E000E000E000E00FFE0
10110E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E007FE00F1D809C0D
1012>I<00038003C4C00C38C01C3880181800381C00381C00381C00381C001818001C38000C300013
1013C0001000003000001800001FF8001FFF001FFF803003806001C0C000C0C000C0C000C060018030
101403001C0E0007F800121C7F9215>I<FC00001C00001C00001C00001C00001C00001C00001C0000
10151C00001C00001C00001C7C001C87001D03001E03801C03801C03801C03801C03801C03801C0380
10161C03801C03801C03801C03801C03801C03801C0380FF9FF0141D7F9C17>I<18003C003C001800
10170000000000000000000000000000FC001C001C001C001C001C001C001C001C001C001C001C001C
1018001C001C001C001C00FF80091D7F9C0C>I<00C001E001E000C000000000000000000000000000
1019000FE000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
102000E000E060E0F0C0F1C061803E000B25839C0D>I<FC001C001C001C001C001C001C001C001C00
10211C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF
102280091D7F9C0C>108 D<FC7E07E0001C838838001D019018001E01E01C001C01C01C001C01C01C
1023001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C0
10241C001C01C01C001C01C01C001C01C01C00FF8FF8FF8021127F9124>I<FC7C001C87001D03001E
102503801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C
10260380FF9FF014127F9117>I<03F0000E1C00180600300300700380600180E001C0E001C0E001C0
1027E001C0E001C0E001C06001807003803003001806000E1C0003F00012127F9115>I<FC7C001D86
1028001E03001C01801C01C01C00C01C00E01C00E01C00E01C00E01C00E01C00E01C01C01C01C01C01
1029801E03001D06001CF8001C00001C00001C00001C00001C00001C00001C0000FF8000131A7F9117
1030>I<03C1000C3300180B00300F00700700700700E00700E00700E00700E00700E00700E0070060
10310700700700300F00180F000C370007C70000070000070000070000070000070000070000070000
10323FE0131A7E9116>I<FCE01D301E781E781C301C001C001C001C001C001C001C001C001C001C00
10331C001C00FFC00D127F9110>I<1F9030704030C010C010E010F8007F803FE00FF000F880388018
1034C018C018E010D0608FC00D127F9110>I<04000400040004000C000C001C003C00FFE01C001C00
10351C001C001C001C001C001C001C001C101C101C101C101C100C100E2003C00C1A7F9910>I<FC1F
1036801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03
1037801C07800C07800E1B8003E3F014127F9117>I<FF07E03C03801C01001C01000E02000E020007
1038040007040007040003880003880003D80001D00001D00000E00000E00000E00000400013127F91
103916>I<FF3FCFE03C0F03801C0701801C0701001C0B01000E0B82000E0B82000E1182000711C400
10400711C4000720C40003A0E80003A0E80003C0680001C0700001C0700001803000008020001B127F
1041911E>I<7F8FF00F03800F030007020003840001C80001D80000F00000700000780000F800009C
104200010E00020E000607000403801E07C0FF0FF81512809116>I<FF07E03C03801C01001C01000E
104302000E020007040007040007040003880003880003D80001D00001D00000E00000E00000E00000
10444000004000008000008000F08000F10000F300006600003C0000131A7F9116>I<FFFFFFFFFF80
10452901808B2A>124 D<1C043F0843F080E00E047D9B15>126 D E /Fp 33
1046123 df<70F8FCFC7404040404080810102040060F7C840E>44 D<008003800F80F38003800380
1047038003800380038003800380038003800380038003800380038003800380038003800380038003
1048800380038003800380038007C0FFFE0F217CA018>49 D<03F0000C1C001007002007804003C040
104903C08003E0F003E0F801E0F801E0F801E02003E00003E00003C00003C0000780000700000E0000
10501C0000180000300000600000C0000180000100000200200400200800201800603000403FFFC07F
1051FFC0FFFFC013217EA018>I<000200000600000E00000E00001E00001E00002E00004E00004E00
1052008E00008E00010E00020E00020E00040E00040E00080E00100E00100E00200E00200E00400E00
1053800E00FFFFF8000E00000E00000E00000E00000E00000E00000E00001F0001FFF015217FA018>
105452 D<4000006000007FFFE07FFFC07FFFC0400080C00100800100800200800200000400000800
105500080000100000300000200000600000600000600000E00000C00000C00001C00001C00001C000
105601C00003C00003C00003C00003C00003C00003C00003C00003C00001800013237DA118>55
1057D<01F000060C000C0600180700380380700380700380F001C0F001C0F001C0F001E0F001E0F001
1058E0F001E0F001E07001E07003E03803E01805E00C05E00619E003E1E00001C00001C00001C00003
105980000380300300780700780600700C002018001030000FC00013227EA018>57
1060D<0007E0100038183000E0063001C00170038000F0070000F00E0000701E0000701C0000303C00
106100303C0000307C0000107800001078000010F8000000F8000000F8000000F8000000F8000000F8
1062000000F8000000F800000078000000780000107C0000103C0000103C0000101C0000201E000020
10630E000040070000400380008001C0010000E0020000381C000007E0001C247DA223>67
1064D<FFFFFFC00F8007C0078001C0078000C007800040078000400780006007800020078000200780
1065002007802020078020000780200007802000078060000780E00007FFE0000780E0000780600007
1066802000078020000780200007802000078000000780000007800000078000000780000007800000
10670780000007800000078000000FC00000FFFE00001B227EA120>70 D<FFFC3FFF0FC003F0078001
1068E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E00780
106901E0078001E0078001E0078001E007FFFFE0078001E0078001E0078001E0078001E0078001E007
10708001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0
10710FC003F0FFFC3FFF20227EA125>72 D<FFFC0FC007800780078007800780078007800780078007
1072800780078007800780078007800780078007800780078007800780078007800780078007800780
107307800FC0FFFC0E227EA112>I<FFFE00000FC00000078000000780000007800000078000000780
1074000007800000078000000780000007800000078000000780000007800000078000000780000007
1075800000078000000780000007800000078000000780000007800080078000800780008007800080
1076078001800780018007800100078003000780030007800F000F803F00FFFFFF0019227EA11E>76
1077D<FFC00003FF0FC00003F007C00003E005E00005E005E00005E004F00009E004F00009E004F000
107809E004780011E004780011E004780011E0043C0021E0043C0021E0043C0021E0041E0041E0041E
10790041E0040F0081E0040F0081E0040F0081E004078101E004078101E004078101E00403C201E004
108003C201E00401E401E00401E401E00401E401E00400F801E00400F801E00400F801E004007001E0
10810E007001E01F007003F0FFE0203FFF28227EA12D>I<FFFFE000000F803C000007800E00000780
1082078000078007C000078003C000078003E000078003E000078003E000078003E000078003E00007
10838003C000078007C000078007800007800E000007803C000007FFE0000007807000000780380000
108407801C000007801E000007800E000007800F000007800F000007800F000007800F000007800F80
10850007800F800007800F800007800F808007800FC080078007C0800FC003C100FFFC01E200000000
10867C0021237EA124>82 D<FFF03FFC03FE1F8007E000F80F0003C000700F0003C000200F0003C000
108720078001E00040078001E00040078001E0004003C002F0008003C002F0008003C002F0008001E0
10880478010001E00478010001E00478010000F0083C020000F0083C020000F0083C020000F8183E06
1089000078101E04000078101E0400007C101E0400003C200F0800003C200F0800003C200F0800001E
109040079000001E40079000001E40079000000F8003E000000F8003E000000F8003E00000070001C0
10910000070001C00000070001C0000003000180000002000080002F237FA132>87
1092D<0FE0001838003C0C003C0E0018070000070000070000070000FF0007C7001E07003C07007807
109300700700F00708F00708F00708F00F087817083C23900FC1E015157E9418>97
1094D<0E0000FE00001E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00
1095000E00000E1F000E61C00E80600F00300E00380E003C0E001C0E001E0E001E0E001E0E001E0E00
10961E0E001E0E001E0E001C0E003C0E00380F00700C80600C41C0083F0017237FA21B>I<01FE0007
109703000C07801C0780380300780000700000F00000F00000F00000F00000F00000F00000F0000070
109800007800403800401C00800C010007060001F80012157E9416>I<0000E0000FE00001E00000E0
10990000E00000E00000E00000E00000E00000E00000E00000E00000E00000E001F8E00704E00C02E0
11001C01E03800E07800E07000E0F000E0F000E0F000E0F000E0F000E0F000E0F000E07000E07800E0
11013800E01801E00C02E0070CF001F0FE17237EA21B>I<01FC000707000C03801C01C03801C07801
1102E07000E0F000E0FFFFE0F00000F00000F00000F00000F000007000007800203800201C00400E00
11038007030000FC0013157F9416>I<00007001F198071E180E0E181C07001C07003C07803C07803C
110407803C07801C07001C07000E0E000F1C0019F0001000001000001800001800001FFE000FFFC00F
1105FFE03800F0600030400018C00018C00018C000186000306000303800E00E038003FE0015217F95
110618>103 D<0E0000FE00001E00000E00000E00000E00000E00000E00000E00000E00000E00000E
110700000E00000E00000E1F800E60C00E80E00F00700F00700E00700E00700E00700E00700E00700E
110800700E00700E00700E00700E00700E00700E00700E00700E00700E0070FFE7FF18237FA21B>I<
11091C001E003E001E001C00000000000000000000000000000000000E00FE001E000E000E000E000E
1110000E000E000E000E000E000E000E000E000E000E000E000E000E00FFC00A227FA10E>I<0E00FE
1111001E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00
11120E000E000E000E000E000E000E000E000E000E000E000E000E00FFE00B237FA20E>108
1113D<0E1FC07F00FE60E183801E807201C00F003C00E00F003C00E00E003800E00E003800E00E0038
111400E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E00
11153800E00E003800E00E003800E00E003800E00E003800E0FFE3FF8FFE27157F942A>I<0E1F80FE
111660C01E80E00F00700F00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E
111700700E00700E00700E00700E00700E0070FFE7FF18157F941B>I<01FC000707000C01801800C0
11183800E0700070700070F00078F00078F00078F00078F00078F00078F000787000707800F03800E0
11191C01C00E038007070001FC0015157F9418>I<01F8200704600E02601C01603801E07800E07800
1120E0F000E0F000E0F000E0F000E0F000E0F000E0F000E07000E07800E03801E01C01E00C02E0070C
1121E001F0E00000E00000E00000E00000E00000E00000E00000E00000E00000E0000FFE171F7E941A
1122>113 D<0E3CFE461E8F0F0F0F060F000E000E000E000E000E000E000E000E000E000E000E000E
1123000E000F00FFF010157F9413>I<0F8830786018C018C008C008E008F0007F803FE00FF001F800
11243C801C800C800CC00CC008E018D0308FC00E157E9413>I<02000200020002000600060006000E
1125001E003E00FFF80E000E000E000E000E000E000E000E000E000E000E000E040E040E040E040E04
11260E040708030801F00E1F7F9E13>I<0E0070FE07F01E00F00E00700E00700E00700E00700E0070
11270E00700E00700E00700E00700E00700E00700E00700E00700E00F00E00F006017003827800FC7F
112818157F941B>I<FFC1FE1E00780E00300E00200E002007004007004003808003808003808001C1
11290001C10000E20000E20000E2000074000074000038000038000038000010000010000020000020
113000002000004000F04000F08000F180004300003C0000171F7F941A>121
1131D<3FFFC0380380300780200700600E00401C00403C0040380000700000E00001E00001C0000380
1132400700400F00400E00C01C0080380080780180700780FFFF8012157F9416>I
1133E /Fq 18 118 df<FFFFC00000FFFFC0000007F000000003E000000003E000000003E000000003
1134E000000003E000000003E000000003E000000003E000000003E000000003E000000003E0000000
113503E000000003E000000003E000000003E000000003E000000003E000000003E000000003E00000
11360003E000000003E000000003E000000003E000000003E000000003E000000003E000000003E000
1137000003E000000003E000004003E000004003E000004003E000004003E000008003E000008003E0
113800008003E000008003E000018003E000018003E000038003E000038003E000078003E0000F0003
1139E0003F0007E000FF00FFFFFFFF00FFFFFFFF0022317CB029>76 D<FFF00000007FF8FFF0000000
11407FF807F00000007F0002F8000000BE0002F8000000BE0002F8000000BE00027C0000013E00027C
11410000013E00023E0000023E00023E0000023E00023E0000023E00021F0000043E00021F0000043E
114200021F0000043E00020F8000083E00020F8000083E00020F8000083E000207C000103E000207C0
114300103E000207C000103E000203E000203E000203E000203E000201F000403E000201F000403E00
11440201F000403E000200F800803E000200F800803E000200F800803E0002007C01003E0002007C01
1145003E0002007C01003E0002003E02003E0002003E02003E0002003E02003E0002001F04003E0002
1146001F04003E0002000F88003E0002000F88003E0002000F88003E00020007D0003E00020007D000
11473E00020007D0003E00020003E0003E00020003E0003E00020003E0003E00070001C0003E000F80
114801C0007F00FFF801C00FFFF8FFF800800FFFF835317CB03D>I<FFFFFFC000FFFFFFF80007E000
1149FE0003E0001F0003E0000F8003E00007C003E00003E003E00003F003E00001F003E00001F003E0
11500001F803E00001F803E00001F803E00001F803E00001F803E00001F803E00001F003E00001F003
1151E00003E003E00003E003E00007C003E0000F8003E0001F0003E000FC0003FFFFF00003E0000000
115203E000000003E000000003E000000003E000000003E000000003E000000003E000000003E00000
11530003E000000003E000000003E000000003E000000003E000000003E000000003E000000003E000
1154000003E000000003E000000003E000000003E000000007F0000000FFFF800000FFFF8000002531
11557CB02D>80 D<FFFFFF000000FFFFFFF0000007E001FC000003E0003E000003E0001F800003E000
115607C00003E00007E00003E00003E00003E00003F00003E00001F00003E00001F80003E00001F800
115703E00001F80003E00001F80003E00001F80003E00001F80003E00001F00003E00003F00003E000
115803E00003E00007C00003E0000F800003E0001F000003E0003C000003E001F0000003FFFF000000
115903E003E0000003E00078000003E0003C000003E0001E000003E0000F000003E0000F800003E000
116007800003E00007C00003E00007C00003E00007C00003E00007C00003E00007C00003E00007E000
116103E00007E00003E00007E00003E00007E00003E00007E00003E00007E00803E00007F00803E000
116203F00803E00003F00807F00001F010FFFF8000F810FFFF80007C60000000000F802D327CB031>
116382 D<00FE00000303C0000C00E00010007000100038003C003C003E001C003E001E003E001E00
116408001E0000001E0000001E0000001E00000FFE0000FC1E0003E01E000F801E001F001E003E001E
1165003C001E007C001E00F8001E04F8001E04F8001E04F8003E04F8003E0478003E047C005E043E00
11668F080F0307F003FC03E01E1F7D9E21>97 D<003F8000E0600380180700040F00041E001E1C003E
11673C003E7C003E7C0008780000F80000F80000F80000F80000F80000F80000F80000F80000F80000
11687800007C00007C00003C00011E00011E00020F000207000403801800E060003F80181F7D9E1D>
116999 D<003F800000E0E0000380380007003C000E001E001E001E001C000F003C000F007C000F00
117078000F8078000780F8000780F8000780FFFFFF80F8000000F8000000F8000000F8000000F80000
117100F8000000780000007C0000003C0000003C0000801E0000800E0001000F0002000780020001C0
11720C0000F03000001FC000191F7E9E1D>101 D<0007E0001C1000383800707C00E07C01E07C01C0
11733803C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C000FFFF
1174C0FFFFC003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C0
11750003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C0
11760003C00007E0007FFF007FFF0016327FB114>I<000000F0007F030801C1C41C0380E81C070070
1177080F0078001E003C001E003C003E003E003E003E003E003E003E003E003E003E003E003E001E00
11783C001E003C000F007800070070000780E00009C1C000087F000018000000180000001800000018
1179000000180000001C0000000E0000000FFFF80007FFFF0003FFFF800E000FC0180001E0300000F0
118070000070E0000038E0000038E0000038E0000038E00000387000007070000070380000E01C0001
1181C00700070001C01C00003FE0001E2F7E9F21>I<01800000003F80000000FF80000000FF800000
1182000F80000000078000000007800000000780000000078000000007800000000780000000078000
1183000007800000000780000000078000000007800000000780000000078000000007800000000780
1184FE00000783078000078C03C000079001E00007A001E00007A000F00007C000F00007C000F00007
11858000F000078000F000078000F000078000F000078000F000078000F000078000F000078000F000
1186078000F000078000F000078000F000078000F000078000F000078000F000078000F000078000F0
118700078000F000078000F000078000F000078000F0000FC001F800FFFC1FFF80FFFC1FFF8021327E
1188B125>I<07000F801F801F800F8007000000000000000000000000000000000000000000000001
1189801F80FF80FF800F80078007800780078007800780078007800780078007800780078007800780
1190078007800780078007800780078007800FC0FFF8FFF80D307EAF12>I<01803F80FF80FF800F80
1191078007800780078007800780078007800780078007800780078007800780078007800780078007
1192800780078007800780078007800780078007800780078007800780078007800780078007800780
11930780078007800FC0FFFCFFFC0E327EB112>108 D<0180FE001FC0003F83078060F000FF8C03C1
1194807800FF9001E2003C000FA001E4003C0007A000F4001E0007C000F8001E0007C000F8001E0007
11958000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F000
11961E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E000780
119700F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E
119800078000F0001E00078000F0001E00078000F0001E000FC001F8003F00FFFC1FFF83FFF0FFFC1F
1199FF83FFF0341F7E9E38>I<0180FE00003F83078000FF8C03C000FF9001E0000FA001E00007A000
1200F00007C000F00007C000F000078000F000078000F000078000F000078000F000078000F0000780
120100F000078000F000078000F000078000F000078000F000078000F000078000F000078000F00007
12028000F000078000F000078000F000078000F000078000F000078000F000078000F0000FC001F800
1203FFFC1FFF80FFFC1FFF80211F7E9E25>I<001FC00000F0780001C01C00070007000F0007801E00
120403C01C0001C03C0001E03C0001E0780000F0780000F0780000F0F80000F8F80000F8F80000F8F8
12050000F8F80000F8F80000F8F80000F8F80000F8780000F07C0001F03C0001E03C0001E01E0003C0
12061E0003C00F00078007800F0001C01C0000F07800001FC0001D1F7E9E21>I<0183E03F8C18FF90
12077CFF907C0FA07C07C03807C00007C00007C0000780000780000780000780000780000780000780
1208000780000780000780000780000780000780000780000780000780000780000780000780000FC0
120900FFFE00FFFE00161F7E9E19>114 D<00400000400000400000400000400000C00000C00000C0
12100001C00001C00003C00007C0000FC0001FFFE0FFFFE003C00003C00003C00003C00003C00003C0
12110003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C01003C01003C0
12121003C01003C01003C01003C01003C01001C02001E02000E0400078C0001F00142C7FAB19>116
1213D<01800030003F8007F000FF801FF000FF801FF0000F8001F000078000F000078000F000078000
1214F000078000F000078000F000078000F000078000F000078000F000078000F000078000F0000780
121500F000078000F000078000F000078000F000078000F000078000F000078000F000078000F00007
12168001F000078001F000078001F000038002F00003C004F00001C008F800007030FF80001FC0FF80
1217211F7E9E25>I E end
1218%%EndProlog
1219%%BeginSetup
1220%%Feature: *Resolution 300
1221TeXDict begin @a4 /a4 where {pop a4} if
1222%%EndSetup
1223%%Page: 1 1
1224bop 149 342 a Fq(Reference)22 b(Man)n(ual)e(of)i(the)g(Programming)e
1225(Language)h(Lua)683 468 y Fp(Rob)q(erto)c(Ierusalimsc)o(h)o(y)618
1226526 y(Luiz)f(Henrique)e(de)j(Figueiredo)678 584 y(W)l(aldemar)e(Celes)g
1227(Filho)725 664 y Fo(T)m(eCGraf)e(|)g(PUC-Rio)616 722 y(rob)q(erto,)i(lhf,)d
1228(celes@icad.puc-rio.br)778 823 y Fp(Ma)o(y)k(27,)h(1994)830
1229991 y Fn(Abstract)164 1067 y Fo(Lua)j(is)g(an)g(em)o(b)q(edded)g(programming)
1230c(language)k(designed)g(to)g(b)q(e)h(used)g(as)f(a)g(con\014guration)102
12311117 y(language)13 b(for)h(an)o(y)f(program)f(that)j(needs)g(one.)j(This)c
1232(do)q(cumen)o(t)g(describ)q(es)i(the)f(Lua)e(programming)102
12331166 y(language)c(and)g(the)h(API)g(that)g(allo)o(ws)e(in)o(teraction)i(b)q
1234(et)o(w)o(een)h(Lua)e(programs)f(and)i(its)f(host)h(C)g(program.)102
12351216 y(It)k(also)f(presen)o(ts)j(some)d(examples)g(of)g(using)h(the)g(main)e
1236(features)j(of)e(the)i(system.)869 1471 y Fn(Sum\023)-24 b(ario)102
12371538 y Fo(Lua)9 b(\023)-20 b(e)11 b(uma)d(linguagem)g(de)j(extens~)-21
1238b(ao)11 b(pro)r(jetada)f(para)h(ser)g(usada)f(como)f(linguagem)f(de)j
1239(con\014gura\030)-18 b(c~)d(ao)102 1588 y(em)19 b(qualquer)i(programa)d(que)j
1240(precise)h(de)f(uma.)37 b(Este)21 b(do)q(cumen)o(to)f(descrev)o(e)j(a)d
1241(linguagem)e(de)102 1638 y(programa\030)-18 b(c~)d(ao)14 b(Lua)h(e)h(a)g(In)o
1242(terface)h(de)f(Programa\030)-18 b(c~)d(ao)14 b(que)i(p)q(ermite)g(a)f(in)o
1243(tera\030)-18 b(c~)d(ao)16 b(en)o(tre)h(programas)102 1688
1244y(Lua)d(e)h(o)f(programa)e(C)i(hosp)q(edeiro.)20 b(O)15 b(do)q(cumen)o(to)e
1245(tam)o(b)o(\023)-20 b(em)12 b(apresen)o(ta)k(alguns)d(exemplos)h(de)h(uso)102
12461737 y(das)f(principais)f(caracter)-5 b(\023)-16 b(\020sticas)16
1247b(do)d(sistema.)910 2976 y Fm(1)p eop
1248%%Page: 2 2
1249bop -12 160 a Fl(1)69 b(In)n(tro)r(duction)-12 261 y Fm(Lua)16
1250b(is)h(an)f(em)o(b)q(edded)h(programming)e(language)h(designed)i(to)d(supp)q
1251(ort)h(general)g(pro)q(cedural)h(program-)-12 318 y(ming)k(features)f(with)g
1252(data)g(description)h(facilities.)37 b(It)20 b(is)h(supp)q(osed)g(to)f(b)q(e)
1253h(used)f(as)g(a)g(con\014guration)-12 374 y(language)g(for)f(an)o(y)g
1254(program)f(that)g(needs)j(one.)32 b(Lua)20 b(w)o(as)e(designed)j(b)o(y)f(R.)f
1255(Ierusalimsc)o(h)o(y)l(,)i(L.)f(H.)f(de)-12 430 y(Figueiredo)d(and)g(W.)e
1256(Celes,)i(and)f(implemen)o(ted)i(b)o(y)e(W.)g(Celes.)59 487
1257y(Lua)j(is)g(implemen)o(ted)h(as)e(a)h(library)l(,)h(written)e(in)i(C.)e
1258(Being)h(an)g(em)o(b)q(edded)h(language,)f(Lua)g(has)f(no)-12
1259543 y(notion)j(of)f(a)g(\\main")g(program:)28 b(it)19 b(only)h(w)o(orks)f
1260Fk(emb)n(e)n(dde)n(d)g Fm(in)h(a)f(host)g(clien)o(t,)j(called)f(the)e
1261Fk(emb)n(e)n(dding)-12 600 y Fm(program.)g(This)c(host)g(program)e(can)i(in)o
1262(v)o(ok)o(e)g(functions)h(to)e(execute)h(a)g(piece)h(of)e(co)q(de)i(in)f
1263(Lua,)g(can)g(write)-12 656 y(and)i(read)g(Lua)h(v)m(ariables,)g(and)f(can)g
1264(register)g(C)g(functions)h(to)e(b)q(e)i(called)g(b)o(y)f(Lua)h(co)q(de.)25
1265b(Through)17 b(the)-12 713 y(use)d(of)g(C)f(functions,)i(Lua)f(can)g(b)q(e)h
1266(augmen)o(ted)e(to)g(cop)q(e)i(with)f(rather)f(di\013eren)o(t)h(domains,)g
1267(th)o(us)g(creating)-12 769 y(customized)i(programming)f(languages)g(sharing)
1268h(a)f(syn)o(tactical)g(framew)o(ork.)59 826 y(Lua)k(is)g(free)g(distribution)
1269h(soft)o(w)o(are,)e(and)h(pro)o(vided)g(as)g(usual)g(with)g(no)g(guaran)o
1270(tees.)30 b(The)19 b(imple-)-12 882 y(men)o(tation)c(describ)q(ed)i(in)f
1271(this)g(man)o(ual)f(is)h(a)o(v)m(ailable)h(b)o(y)e(anon)o(ymous)g(ftp)g(from)
127260 976 y Fj(ftp.icad.puc-rio.br:/pub)o(/lua/lua)o(_1.0.ta)o(r.Z)-12
12731119 y Fl(2)69 b(En)n(vironmen)n(t)21 b(and)i(Mo)r(dules)-12
12741221 y Fm(All)15 b(statemen)o(ts)d(in)j(Lua)e(are)h(executed)g(in)g(a)f
1275Fk(glob)n(al)h(envir)n(onment)t Fm(.)k(This)d(en)o(vironmen)o(t,)e(whic)o(h)i
1276(k)o(eeps)e(all)-12 1277 y(global)19 b(v)m(ariables)g(and)f(functions,)g(is)h
1277(initialized)i(at)c(the)h(b)q(eginning)i(of)d(the)h(em)o(b)q(edding)h
1278(program)e(and)-12 1334 y(p)q(ersists)f(un)o(til)g(its)g(end.)59
12791390 y(The)i(global)g(en)o(vironmen)o(t)g(can)g(b)q(e)g(manipulated)i(b)o(y)d
1280(Lua)h(co)q(de)h(or)e(b)o(y)h(the)f(em)o(b)q(edding)j(program,)-12
12811446 y(whic)o(h)c(can)g(read)f(and)g(write)g(global)h(v)m(ariables)h(using)f
1282(functions)g(in)g(the)f(library)h(that)e(implemen)o(ts)j(Lua.)59
12831503 y(Global)22 b(v)m(ariables)g(do)f(not)g(need)h(declaration.)39
1284b(An)o(y)22 b(v)m(ariable)g(is)g(assumed)g(to)e(b)q(e)i(global)g(unless)-12
12851559 y(explicitly)17 b(declared)f(lo)q(cal)g(\(see)e(lo)q(cal)h
1286(declarations,)g(Section)h(4.4.5\).)h(Before)e(the)f(\014rst)g(assignmen)o
1287(t,)g(the)-12 1616 y(v)m(alue)j(of)d(a)h(global)h(v)m(ariable)h(is)e
1288Fi(nil)p Fm(.)59 1672 y(The)g(unit)h(of)f(execution)h(of)f(Lua)h(is)f(called)
1289i(a)e Fk(mo)n(dule)s Fm(.)20 b(The)c(syn)o(tax)e(for)h(mo)q(dules)h(is:)1563
12901656 y Fh(1)72 1744 y Fk(mo)n(dule)50 b Fg(!)g(f)p Fk(statement)32
1291b Fg(j)16 b Fk(function)s Fg(g)-1 1816 y Fm(A)10 b(mo)q(dule)i(ma)o(y)e(con)o
1292(tain)h(statemen)o(ts)e(and/or)h(function)i(de\014nitions,)g(and)f(ma)o(y)f
1293(b)q(e)h(in)h(a)e(\014le)i(or)e(in)h(a)f(string)-12 1873 y(inside)16
1294b(the)f(host)f(program.)k(When)d(a)f(mo)q(dule)i(is)f(executed,)g(\014rst)f
1295(all)h(its)g(functions)g(and)f(statemen)o(ts)g(are)-12 1929
1296y(compiled,)g(and)f(the)f(functions)h(added)g(to)f(the)g(global)h(en)o
1297(vironmen)o(t;)g(then)g(the)f(statemen)o(ts)f(are)h(executed)-12
12981986 y(in)k(sequen)o(tial)g(order.)k(All)d(mo)q(di\014cations)f(a)f(mo)q
1299(dule)h(e\013ects)f(on)g(the)g(global)h(en)o(vironmen)o(t)f(p)q(ersist)h
1300(after)-12 2042 y(its)g(end.)k(Those)15 b(include)j(mo)q(di\014cations)e(to)f
1301(global)g(v)m(ariables)i(and)e(de\014nitions)i(of)e(new)g(functions)1736
13022026 y Fh(2)1757 2042 y Fm(.)-12 2185 y Fl(3)69 b(T)n(yp)r(es)-12
13032287 y Fm(Lua)16 b(is)h(a)e(dynamically)j(t)o(yp)q(ed)e(language.)22
1304b(V)l(ariables)17 b(do)f(not)f(ha)o(v)o(e)g(t)o(yp)q(es;)h(only)g(v)m(alues)h
1305(do.)22 b(All)17 b(v)m(alues)-12 2343 y(carry)e(their)h(o)o(wn)e(t)o(yp)q(e.)
130620 b(Therefore,)15 b(there)g(are)g(no)g(t)o(yp)q(e)g(de\014nitions)i(in)f
1307(the)g(language.)59 2400 y(There)f(are)g(sev)o(en)g(basic)g(t)o(yp)q(es)g(in)
1308h(Lua:)k Fk(nil)p Fm(,)14 b Fk(numb)n(er)p Fm(,)g Fk(string)p
1309Fm(,)g Fk(function)p Fm(,)g Fk(Cfunction)p Fm(,)g Fk(user)n(data)p
1310Fm(,)h(and)-12 2456 y Fk(table)p Fm(.)25 b Fk(Nil)16 b Fm(is)h(the)g(t)o(yp)q
1311(e)g(of)g(the)g(v)m(alue)h Fi(nil)p Fm(,)g(whose)f(main)g(prop)q(ert)o(y)g
1312(is)g(to)f(b)q(e)i(di\013eren)o(t)f(from)f(an)o(y)h(other)-12
13132513 y(v)m(alue.)k Fk(Numb)n(er)15 b Fm(represen)o(ts)h(real)f(\(\015oating)g
1314(p)q(oin)o(t\))g(n)o(um)o(b)q(ers,)g(while)i Fk(string)d Fm(has)i(the)f
1315(usual)h(meaning.)59 2569 y(F)l(unctions)f(are)e(considered)j(\014rst-class)e
1316(v)m(alues)i(in)f(Lua.)k(This)c(means)f(that)g(functions)h(can)f(b)q(e)h
1317(stored)-12 2626 y(in)h(v)m(ariables,)g(passed)f(as)f(argumen)o(ts)g(to)h
1318(other)f(functions)i(and)f(returned)g(as)g(results.)20 b(When)15
1319b(a)f(function)-12 2682 y(in)19 b(Lua)g(is)f(de\014ned,)i(its)f(b)q(o)q(dy)f
1320(is)h(compiled)h(and)e(stored)g(in)h(a)f(global)h(v)m(ariable)g(with)g(the)f
1321(giv)o(en)h(name.)p -12 2722 747 2 v 40 2749 a Ff(1)57 2764
1322y Fe(As)12 b(usual)i(in)g(extended)f(BNF,)f Fd(f)p Fc(a)s Fd(g)g
1323Fe(means)h(0)g(or)f(more)h Fc(a)s Fe('s,)e([)p Fc(a)s Fe(])g(means)i(an)g
1324(optional)h Fc(a)e Fe(and)h Fd(f)p Fc(a)s Fd(g)1500 2749 y
1325Ff(+)1538 2764 y Fe(means)g(one)g(or)f(more)-12 2810 y Fc(a)s
1326Fe('s.)40 2840 y Ff(2)57 2856 y Fe(Actually)m(,)i(a)f(function)i
1327(de\014nition)h(is)d(an)g(assignmen)o(t)i(to)e(a)g(global)i(v)n(ariable;)g
1328(see)e(Section)i(3.)910 2976 y Fm(2)p eop
1329%%Page: 3 3
1330bop -12 160 a Fm(Lua)16 b(can)f(call)i(\(and)e(manipulate\))h(functions)h
1331(written)e(in)h(Lua)g(and)g(functions)g(written)f(in)h(C;)f(the)h(latter)-12
1332216 y(ha)o(v)o(e)f(t)o(yp)q(e)g Fk(Cfunction)s Fm(.)59 273
1333y(The)h(t)o(yp)q(e)g Fk(user)n(data)h Fm(is)f(pro)o(vided)h(to)e(allo)o(w)i
1334(arbitrary)e(C)h(p)q(oin)o(ters)g(to)g(b)q(e)h(stored)e(in)i(Lua)f(v)m
1335(ariables.)-12 329 y(It)h(corresp)q(onds)g(to)f Fj(void*)g
1336Fm(and)g(has)h(no)g(v)m(alid)h(op)q(erations)f(in)g(Lua,)g(b)q(esides)h
1337(assignmen)o(t)f(and)g(equalit)o(y)-12 385 y(test.)59 442 y(The)c(t)o(yp)q(e)
1338h Fk(table)f Fm(implemen)o(ts)h(asso)q(ciativ)o(e)g(arra)o(ys,)e(that)h(is,)g
1339(arra)o(ys)f(that)h(can)g(b)q(e)h(indexed)h(b)q(oth)f(with)-12
1340498 y(n)o(um)o(b)q(ers)19 b(and)f(with)h(strings.)29 b(Therefore,)19
1341b(this)g(t)o(yp)q(e)f(ma)o(y)g(b)q(e)h(used)g(not)f(only)h(to)f(represen)o(t)
1342g(ordinary)-12 555 y(arra)o(ys,)h(but)h(also)f(sym)o(b)q(ol)h(tables,)g
1343(sets,)g(records,)g(etc.)33 b(T)l(o)19 b(represen)o(t)h(a)f(record,)h(Lua)g
1344(uses)f(the)h(\014eld)-12 611 y(name)13 b(as)g(an)g(index.)21
1345b(The)13 b(language)g(supp)q(orts)g(this)h(represen)o(tation)f(b)o(y)g(pro)o
1346(viding)h Fj(a.name)f Fm(as)f(syn)o(tactic)-12 668 y(sugar)j(for)f
1347Fj(a["name"])p Fm(.)59 724 y(It)i(is)g(imp)q(ortan)o(t)f(to)g(notice)i(that)e
1348(tables)h(are)f(ob)s(jects,)g(and)h(not)f(v)m(alues.)23 b(V)l(ariables)17
1349b(cannot)e(con)o(tain)-12 781 y(tables,)e(only)h(references)f(to)f(them.)19
1350b(Assignmen)o(t,)13 b(parameter)f(passing)i(and)e(returns)h(alw)o(a)o(ys)f
1351(manipulate)-12 837 y(references)18 b(to)f(tables,)h(and)f(do)h(not)f(imply)h
1352(an)o(y)f(kind)i(of)e(cop)o(y)l(.)26 b(Moreo)o(v)o(er,)16 b(tables)i(m)o(ust)
1353e(b)q(e)j(explicitly)-12 894 y(created)c(b)q(efore)h(used;)f(see)h(Section)g
1354(4.5.7.)-12 1037 y Fl(4)69 b(The)23 b(Language)-12 1138 y Fm(This)16
1355b(section)g(describ)q(es)h(the)e(lexis,)h(syn)o(tax)e(and)i(seman)o(tics)f
1356(of)g(Lua.)-12 1260 y Fb(4.1)56 b(Lexical)17 b(Con)n(v)n(en)n(tions)-12
13571346 y Fm(Lua)c(is)g(a)f(case)g(sensitiv)o(e)i(language.)19
1358b(Iden)o(ti\014ers)14 b(can)e(b)q(e)h(an)o(y)f(string)h(of)f(letters,)g
1359(digits,)i(and)e(underscores,)-12 1402 y(not)h(b)q(eginning)h(with)f(a)g
1360(digit.)20 b(The)13 b(follo)o(wing)g(w)o(ords)f(are)h(reserv)o(ed,)g(and)g
1361(cannot)f(b)q(e)h(used)h(as)e(iden)o(ti\014ers:)203 1496 y
1362Fj(and)143 b(do)190 b(else)143 b(elseif)95 b(end)203 1552 y(function)23
1363b(if)190 b(local)119 b(nil)167 b(not)203 1609 y(or)g(repeat)94
1364b(return)h(until)119 b(then)95 b(while)59 1703 y Fm(The)15
1365b(follo)o(wing)h(strings)f(denote)h(other)e(tok)o(ens:)203
13661797 y Fj(~=)47 b(<=)h(>=)f(<)72 b(>)f(=)h(..)47 b(+)72 b(-)f(*)g(/)h(\045)
1367203 1853 y(\()f(\))h({)f(})h([)f(])h(@)f(;)h(,)f(.)59 1947
1368y Fm(Literal)17 b(strings)f(can)h(b)q(e)g(delimited)h(b)o(y)f(matc)o(hing)f
1369(single)i(or)d(double)j(quotes,)e(and)g(can)h(con)o(tain)f(the)-12
13702003 y(C-lik)o(e)f(escap)q(e)g(sequences)g Fj('\\n')p Fm(,)e
1371Fj('\\t')h Fm(and)g Fj('\\r')p Fm(.)19 b(Commen)o(ts)13 b(start)g(an)o
1372(ywhere)h(outside)g(a)g(string)g(with)-12 2060 y(a)h(double)i(h)o(yphen)f(\()
1373p Fj(--)p Fm(\))e(and)h(run)h(un)o(til)g(the)f(end)h(of)f(the)g(line.)59
13742116 y(Numerical)e(constan)o(ts)e(ma)o(y)g(b)q(e)h(written)g(with)g(an)f
1375(optional)h(decimal)i(part,)d(and)h(an)g(optional)g(decimal)-12
13762173 y(exp)q(onen)o(t.)21 b(Examples)15 b(of)g(v)m(alid)i(n)o(umerical)f
1377(constan)o(ts)f(are:)155 2266 y Fj(4)119 b(4.)g(.4)g(4.57e-3)g(.3e12)-12
13782388 y Fb(4.2)56 b(Co)r(ercion)-12 2474 y Fm(Lua)17 b(pro)o(vides)g(some)g
1379(automatic)f(con)o(v)o(ersions.)24 b(An)o(y)17 b(arithmetic)g(op)q(eration)g
1380(applied)i(to)d(a)g(string)h(tries)-12 2530 y(to)g(con)o(v)o(ert)g(that)g
1381(string)g(to)g(a)g(n)o(um)o(b)q(er,)h(follo)o(wing)h(the)e(usual)h(rules.)28
1382b(More)17 b(sp)q(eci\014cally)l(,)k(the)c(string)h(is)-12 2587
1383y(con)o(v)o(erted)c(to)f(a)h(n)o(um)o(b)q(er)g(using)h(the)f(standard)g
1384Fj(strtod)f Fm(C)h(function.)20 b(Con)o(v)o(ersely)l(,)14 b(whenev)o(er)g(a)g
1385(n)o(um)o(b)q(er)-12 2643 y(is)22 b(used)h(when)f(a)g(string)f(is)i(exp)q
1386(ected,)h(that)d(n)o(um)o(b)q(er)h(is)h(con)o(v)o(erted)e(to)g(a)h(string,)h
1387(according)f(to)f(the)-12 2700 y(follo)o(wing)e(rule:)28 b(if)19
1388b(the)g(n)o(um)o(b)q(er)f(is)h(an)g(in)o(teger,)g(it)g(is)g(written)g
1389(without)f(exp)q(onen)o(t)h(or)f(decimal)i(p)q(oin)o(t;)-12
13902756 y(otherwise,)e(it)g(is)g(formatted)e(follo)o(wing)i(the)f(\\)p
1391Fj(\045g)p Fm(")g(con)o(v)o(ersion)g(sp)q(eci\014cation)j(of)d(the)g
1392(standard)g Fj(printf)-12 2813 y Fm(C)e(function.)910 2976
1393y(3)p eop
1394%%Page: 4 4
1395bop -12 160 a Fb(4.3)56 b(Adjustmen)n(t)-12 245 y Fm(F)l(unctions)16
1396b(in)h(Lua)e(can)h(return)f(man)o(y)g(v)m(alues.)22 b(Because)16
1397b(there)f(are)h(no)f(t)o(yp)q(e)g(declarations,)h(the)g(system)-12
1398302 y(do)q(es)h(not)e(kno)o(w)h(ho)o(w)f(man)o(y)h(v)m(alues)h(a)f(function)g
1399(will)i(return.)k(Therefore,)16 b(sometimes,)g(a)g(list)h(of)e(v)m(alues)-12
1400358 y(m)o(ust)f(b)q(e)g Fk(adjuste)n(d)5 b Fm(,)14 b(at)f(run)h(time,)h(to)e
1401(a)h(giv)o(en)g(length.)20 b(If)14 b(there)g(are)g(more)g(v)m(alues)h(than)e
1402(are)h(needed,)h(the)-12 415 y(last)h(v)m(alues)i(are)e(thro)o(wn)f(a)o(w)o
1403(a)o(y)l(.)21 b(If)c(there)f(are)g(more)g(needs)h(than)f(v)m(alues,)h(the)f
1404(list)h(is)g(extended)g(with)g(as)-12 471 y(man)o(y)e Fi(nil)p
1405Fm('s)h(as)f(needed.)21 b(Adjustmen)o(t)15 b(also)g(o)q(ccurs)g(in)h(other)f
1406(con)o(texts,)f(suc)o(h)i(as)f(m)o(ultiple)i(assignmen)o(t.)-12
1407593 y Fb(4.4)56 b(Statemen)n(ts)-12 679 y Fm(Lua)18 b(supp)q(orts)f(an)g
1408(almost)f(con)o(v)o(en)o(tional)i(set)e(of)h(statemen)o(ts.)24
1409b(The)18 b(con)o(v)o(en)o(tional)f(commands)g(include)-12 735
1410y(assignmen)o(t,)d(con)o(trol)h(structures)f(and)h(pro)q(cedure)g(calls.)21
1411b(Non-con)o(v)o(en)o(tional)15 b(commands)g(include)i(table)-12
1412792 y(constructors,)d(explained)j(in)f(Section)h(4.5.7,)c(and)i(lo)q(cal)h(v)
1413m(ariable)h(declarations.)-12 912 y Fi(4.4.1)52 b(Blo)q(c)o(ks)-12
1414998 y Fm(A)13 b(blo)q(c)o(k)g(is)g(a)f(list)i(of)e(statemen)o(ts,)g(executed)
1415h(sequen)o(tially)l(.)21 b(An)o(y)13 b(statemen)o(t)e(can)i(b)q(e)g
1416(optionally)h(follo)o(w)o(ed)-12 1054 y(b)o(y)h(a)g(semicolon.)72
14171122 y Fk(blo)n(ck)49 b Fg(!)h(f)p Fk(stat)16 b(sc)s Fg(g)f
1418Fm([)p Fk(r)n(et)h(sc)s Fm(])128 1179 y Fk(sc)49 b Fg(!)h Fm([';'])2
14191247 y(F)l(or)13 b(syn)o(tactic)g(reasons,)h(a)f(return)h(statemen)o(t)e(can)
1420i(only)g(b)q(e)g(written)g(as)f(the)h(last)g(statemen)o(t)e(of)i(a)f(blo)q(c)
1421o(k.)-12 1303 y(This)j(restriction)g(also)f(a)o(v)o(oids)g(some)g(\\statemen)
1422o(t)e(not)i(reac)o(hed")g(errors.)-12 1423 y Fi(4.4.2)52 b(Assignmen)n(t)-12
14231509 y Fm(The)17 b(language)g(allo)o(ws)g(m)o(ultiple)i(assignmen)o(t.)24
1424b(Therefore,)17 b(the)g(syn)o(tax)f(de\014nes)i(a)e(list)i(of)e(v)m(ariables)
1425i(on)-12 1566 y(the)13 b(left)g(side,)g(and)g(a)f(list)i(of)e(expressions)h
1426(on)g(the)f(righ)o(t)h(side.)20 b(Both)12 b(lists)h(ha)o(v)o(e)f(their)h
1427(elemen)o(ts)h(separated)-12 1622 y(b)o(y)h(commas.)146 1690
1428y Fk(stat)49 b Fg(!)i Fk(varlist1)16 b Fm('=')g Fk(explist1)72
14291747 y(varlist1)49 b Fg(!)i Fk(var)16 b Fg(f)p Fm(',')f Fk(var)5
1430b Fg(g)2 1815 y Fm(This)14 b(statemen)o(t)f(\014rst)h(ev)m(aluates)g(all)h(v)
1431m(alues)g(on)f(the)g(righ)o(t)g(side)g(and)h(ev)o(en)o(tual)f(indices)i(on)e
1432(the)f(left)i(side,)-12 1872 y(and)h(then)f(mak)o(es)g(the)g(assignmen)o(ts.)
143320 b(Therefore,)14 b(it)i(can)f(b)q(e)h(used)g(to)e(exc)o(hange)i(t)o(w)o(o)e
1434(v)m(alues,)i(as)e(in)60 1965 y Fj(x,)23 b(y)h(=)g(y,)f(x)-12
14352059 y Fm(Before)18 b(the)f(assignmen)o(t,)h(the)g(list)g(of)f(v)m(alues)i
1436(is)f Fk(adjuste)n(d)g Fm(to)f(the)h(length)g(of)f(the)h(list)g(of)f(v)m
1437(ariables)i(\(see)-12 2116 y(Section)d(4.3\).)59 2172 y(A)f(single)i(name)e
1438(can)g(denote)h(a)e(global)i(or)f(a)g(lo)q(cal)h(v)m(ariable.)72
14392240 y Fk(var)50 b Fg(!)g Fk(name)72 2297 y(var)g Fg(!)g Fk(var)17
1440b Fm('[')e Fk(exp1)i Fm(']')31 b Fg(j)16 b Fk(var)g Fm('.')k
1441Fk(name)4 2365 y Fm(Brac)o(k)o(ets)c(are)g(used)h(to)f(index)h(a)f(table.)24
1442b(In)17 b(this)g(case,)f Fj(var)g Fm(m)o(ust)g(result)h(in)g(a)f(table)h(v)m
1443(alue;)g(otherwise,)-12 2421 y(there)e(is)h(an)f(execution)i(error.)i(The)c
1444(syn)o(tax)g Fj(var.NAME)f Fm(is)h(just)g(syn)o(tactic)g(sugar)g(for)g
1445Fj(var["NAME"])p Fm(.)-12 2542 y Fi(4.4.3)52 b(Con)o(trol)17
1446b(Structures)-12 2627 y Fm(The)e(condition)h(expression)f(of)f(a)h(con)o
1447(trol)f(structure)g(can)h(return)g(an)o(y)f(v)m(alue.)21 b(All)16
1448b(v)m(alues)f(di\013eren)o(t)g(from)-12 2684 y Fi(nil)i Fm(are)e(considered)i
1449(true,)f(while)h Fi(nil)f Fm(is)h(considered)g(false.)k Fj(If)p
1450Fm(s,)15 b Fj(while)p Fm(s)g(and)h Fj(repeat)p Fm(s)f(ha)o(v)o(e)g(the)h
1451(usual)-12 2740 y(meaning.)910 2976 y(4)p eop
1452%%Page: 5 5
1453bop 100 158 a Fk(stat)50 b Fg(!)g Fi(while)17 b Fk(exp1)g Fi(do)f
1454Fk(blo)n(ck)g Fi(end)100 214 y Fk(stat)50 b Fg(!)g Fi(rep)q(eat)17
1455b Fk(blo)n(ck)e Fi(un)o(til)i Fk(exp1)100 271 y(stat)50 b Fg(!)g
1456Fi(if)17 b Fk(exp1)f Fi(then)h Fk(blo)n(ck)e Fg(f)p Fk(elseif)9
1457b Fg(g)16 b Fm([)p Fi(else)g Fk(blo)n(ck)5 b Fm(])15 b Fi(end)72
1458327 y Fk(elseif)49 b Fg(!)h Fi(elseif)17 b Fk(exp1)f Fi(then)h
1459Fk(blo)n(ck)59 420 y Fm(A)g Fj(return)g Fm(is)h(used)h(to)e(return)g(v)m
1460(alues)i(from)e(a)g(function.)28 b(Because)18 b(a)g(function)g(ma)o(y)f
1461(return)h(more)-12 477 y(than)d(one)h(v)m(alue,)g(the)f(syn)o(tax)f(for)h(a)g
1462(return)g(statemen)o(t)f(is:)72 549 y Fk(r)n(et)49 b Fg(!)i
1463Fi(return)15 b Fk(explist)-12 741 y Fi(4.4.4)52 b(Expressions)16
1464b(as)i(Statemen)o(ts)-12 827 y Fm(All)c(expressions)e(with)h(p)q(ossible)h
1465(side-e\013ects)e(can)h(b)q(e)f(executed)h(as)f(statemen)o(ts.)18
1466b(These)12 b(include)i(function)-12 883 y(calls)i(and)g(table)f
1467(constructors:)72 943 y Fk(stat)50 b Fg(!)g Fk(functionc)n(al)r(l)72
1468999 y(stat)g Fg(!)g Fk(table)n(c)n(onstructor)1 1067 y Fm(Ev)o(en)o(tual)14
1469b(returned)f(v)m(alues)i(are)d(thro)o(wn)h(a)o(w)o(a)o(y)l(.)18
1470b(F)l(unction)c(calls)g(are)f(explained)i(in)f(Section)g(4.5.8,)e(while)-12
14711124 y(constructors)j(are)f(the)i(sub)s(ject)f(of)g(Section)h(4.5.7.)-12
14721244 y Fi(4.4.5)52 b(Lo)q(cal)20 b(Declarations)-12 1330 y
1473Fm(Lo)q(cal)h(v)m(ariables)g(can)e(b)q(e)h(declared)h(an)o(ywhere)f(inside)h
1474(a)e(blo)q(c)o(k.)34 b(Their)20 b(scop)q(e)g(b)q(egins)h(after)e(the)h(dec-)
1475-12 1386 y(laration)h(and)g(lasts)g(un)o(til)h(the)f(blo)q(c)o(k)h(end.)38
1476b(The)21 b(declaration)g(ma)o(y)g(include)i(an)e(initial)i(assignmen)o(t:)122
14771502 y Fk(stat)50 b Fg(!)g Fi(lo)q(cal)18 b Fk(de)n(clist)e
1478Fm([)p Fk(init)t Fm(])72 1558 y Fk(de)n(clist)49 b Fg(!)h Fk(name)16
1479b Fg(f)p Fm(',')f Fk(name)s Fg(g)125 1615 y Fk(init)50 b Fg(!)g
1480Fm('=')16 b Fk(explist1)0 1683 y Fm(If)c(there)f(is)h(an)g(initial)i
1481(assignmen)o(t,)d(it)h(has)g(the)f(same)h(seman)o(tics)f(of)h(a)f(m)o
1482(ultiple)i(assignmen)o(t.)19 b(Otherwise,)-12 1740 y(all)d(v)m(ariables)h
1483(are)e(initialized)j(with)e Fi(nil)p Fm(.)-12 1861 y Fb(4.5)56
1484b(Expressions)-12 1947 y Fi(4.5.1)c(Simple)16 b(Expressions)-12
14852033 y Fm(Simple)h(expressions)f(are:)72 2101 y Fk(exp)50 b
1486Fg(!)g Fm('\(')15 b Fk(exp)i Fm('\)')72 2157 y Fk(exp)50 b
1487Fg(!)g Fi(nil)72 2214 y Fk(exp)g Fg(!)g Fm('n)o(um)o(b)q(er')72
14882270 y Fk(exp)g Fg(!)g Fm('literal')72 2327 y Fk(exp)g Fg(!)g
1489Fk(var)4 2398 y Fm(Num)o(b)q(ers)16 b(\(n)o(umerical)g(constan)o(ts\))e(and)i
1490(string)g(literals)g(are)g(explained)h(in)g(Section)f(4.1.)k(V)l(ariables)d
1491(are)-12 2454 y(explained)g(in)g(Section)f(4.4.2.)-12 2574
1492y Fi(4.5.2)52 b(Arithmetic)16 b(Op)q(erators)-12 2660 y Fm(Lua)f(supp)q(orts)
1493f(the)g(usual)g(arithmetic)h(op)q(erators,)e(with)h(the)g(usual)h(meaning.)20
1494b(These)14 b(op)q(erators)g(are)f(the)-12 2716 y(binary)k Fj(+)p
1495Fm(,)e Fj(-)p Fm(,)h Fj(*)g Fm(and)g Fj(/)p Fm(,)f(and)h(the)h(unary)e
1496Fj(+)h Fm(and)g Fj(-)p Fm(.)22 b(The)16 b(op)q(erands)h(m)o(ust)e(b)q(e)i(n)o
1497(um)o(b)q(ers,)f(or)f(strings)h(that)-12 2773 y(can)g(b)q(e)f(con)o(v)o
1498(erted)g(to)g(n)o(um)o(b)q(ers,)g(according)h(to)e(the)h(rules)h(giv)o(en)g
1499(in)g(Section)g(4.2.)910 2976 y(5)p eop
1500%%Page: 6 6
1501bop -12 160 a Fi(4.5.3)52 b(Relational)20 b(Op)q(erators)-12
1502245 y Fm(Lua)c(o\013ers)e(the)h(follo)o(wing)h(relational)g(op)q(erators:)155
1503339 y Fj(<)72 b(>)f(<=)48 b(>=)f(~=)g(=)-12 433 y Fm(All)17
1504b(return)e Fi(nil)h Fm(as)f(false)g(and)h(1)f(as)f(true.)59
1505490 y(Equalit)o(y)19 b(\014rst)f(compares)g(the)g(t)o(yp)q(es)h(of)f(its)h
1506(op)q(erands.)30 b(If)18 b(they)h(are)f(di\013eren)o(t,)h(the)g(result)g(is)g
1507Fi(nil)p Fm(.)-12 546 y(Otherwise,)h(their)e(v)m(alues)i(are)d(compared.)29
1508b(Num)o(b)q(ers)19 b(and)f(strings)g(are)g(compared)g(in)h(the)g(usual)f(w)o
1509(a)o(y)l(.)-12 602 y(T)l(ables,)c(Cfunctions,)g(and)g(functions)g(are)f
1510(compared)g(b)o(y)h(reference,)g(that)e(is,)i(t)o(w)o(o)e(tables)i(are)f
1511(considered)-12 659 y(equal)j(only)g(if)g(they)f(are)g(the)g(same)g(table.)20
1512b(The)c(op)q(erator)e Fj(~=)h Fm(is)h(exactly)f(the)g(negation)h(of)f
1513(equalit)o(y)g(\()p Fj(=)p Fm(\).)59 715 y(The)f(other)f(op)q(erators)f(can)i
1514(only)g(b)q(e)g(applied)i(to)d(strings)g(and)h(n)o(um)o(b)q(ers.)20
1515b(If)14 b(one)f(of)g(the)h(argumen)o(ts)f(is)-12 772 y(a)g(string,)h(the)f
1516(other)g(is)h(con)o(v)o(erted)f(to)g(a)g(string,)g(and)h(their)g(v)m(alues)g
1517(are)f(compared)h(using)g(lexicographical)-12 828 y(order.)20
1518b(Otherwise,)15 b(b)q(oth)h(are)f(n)o(um)o(b)q(ers)g(and)h(are)e(compared)i
1519(as)e(suc)o(h.)-12 948 y Fi(4.5.4)52 b(Logical)20 b(Op)q(erators)-12
15201034 y Fm(All)g(logical)g(op)q(erators,)f(lik)o(e)h(con)o(trol)e(structures,)
1521h(consider)h Fi(nil)g Fm(as)e(false)i(and)f(an)o(ything)g(else)g(as)g(true.)
1522-12 1091 y(Lik)o(e)d(relational)g(op)q(erators,)e(they)i(return)f
1523Fi(nil)h Fm(as)f(false)g(and)h(1)f(as)f(true.)20 b(The)c(logical)g(op)q
1524(erators)e(are:)298 1184 y Fj(and)72 b(or)f(not)-12 1278 y
1525Fm(The)18 b(op)q(erators)f Fj(and)g Fm(and)h Fj(or)g Fm(use)g(short-cut)f(ev)
1526m(aluation,)j(that)d(is,)h(the)g(second)h(op)q(erand)f(is)g(ev)m(aluated)-12
15271335 y(only)e(if)g(necessary)l(.)-12 1455 y Fi(4.5.5)52 b(Concatenation)-12
15281541 y Fm(Lua)15 b(o\013ers)f(a)g(string)g(concatenation)h(op)q(erator,)e
1529(denoted)i(b)o(y)g(\\)p Fj(..)p Fm(".)k(The)14 b(op)q(erands)h(m)o(ust)f(b)q
1530(e)h(strings)g(or)-12 1597 y(n)o(um)o(b)q(ers,)g(whic)o(h)h(are)f(con)o(v)o
1531(erted)g(to)g(strings)g(according)g(to)g(the)g(rules)h(in)g(Section)g(4.2.)
1532-12 1717 y Fi(4.5.6)52 b(Precedence)-12 1803 y Fm(Op)q(erator)15
1533b(precedence)i(follo)o(ws)e(the)h(table)f(b)q(elo)o(w,)h(from)e(the)h(lo)o(w)
1534o(er)g(to)g(the)g(higher)h(priorit)o(y:)298 1897 y Fj(and)72
1535b(or)298 1953 y(<)g(>)f(<=)48 b(>=)f(~=)h(=)298 2010 y(..)298
15362066 y(+)72 b(-)298 2122 y(*)g(/)298 2179 y(not)48 b(+)23 b(\(unary\))47
1537b(-)24 b(\(unary\))-12 2273 y Fm(All)17 b(binary)e(op)q(erators)g(are)g(left)
1538g(asso)q(ciativ)o(e.)-12 2393 y Fi(4.5.7)52 b(T)l(able)18 b(Constructors)-12
15392479 y Fm(T)l(able)13 b(constructors)e(are)h(expressions)h(that)e(create)h
1540(tables.)19 b(T)l(able)13 b(constructors)e(are)h(o\013ered)f(in)i(di\013eren)
1541o(t)-12 2535 y(\015a)o(v)o(ors.)19 b(The)c(simplest)i(one)e(is:)72
15422607 y Fk(table)n(c)n(onstructor)49 b Fg(!)h Fm('@')16 b('\(')f([)p
1543Fk(exp1)6 b Fm(])17 b('\)')5 2679 y(Suc)o(h)h(an)f(expression)h(results)f(in)
1544h(a)f(new)g(empt)o(y)g(table.)26 b(An)18 b(optional)f(dimension)i(ma)o(y)e(b)
1545q(e)g(giv)o(en)h(as)f(a)-12 2736 y(hin)o(t)g(to)f(the)h(initial)h(table)f
1546(size.)25 b(Indep)q(enden)o(tly)19 b(of)d(the)g(initial)j(dimension,)f(all)g
1547(arra)o(ys)d(in)i(Lua)g(stretc)o(h)-12 2792 y(dynamically)g(as)e(needed.)59
15482849 y(T)l(o)g(construct)g(a)f(table)i(and)f(initialize)k(some)c(\014elds,)h
1549(the)f(follo)o(wing)h(syn)o(tax)e(is)i(a)o(v)m(ailable:)910
15502976 y(6)p eop
1551%%Page: 7 7
1552bop 72 160 a Fk(table)n(c)n(onstructor)49 b Fg(!)h Fm('@')16
1553b([)p Fk(name)s Fm(])g Fk(\014eld)r(list)8 232 y Fm(Suc)o(h)k(an)g
1554(expression)g(creates)g(a)f(new)h(table,)h(whic)o(h)g(will)g(b)q(e)f(its)g
1555(\014nal)h(v)m(alue,)h(initialize)g(some)e(of)f(its)-12 288
1556y(\014elds)i(according)g(to)e Fj(fieldlist)g Fm(\(see)h(b)q(elo)o(w\),)h
1557(and,)g(if)f Fj(name)g Fm(is)g(giv)o(en,)h(calls)g(a)f(function)h(with)f
1558(that)-12 345 y(name)14 b(passing)f(the)h(table)g(as)f(parameter.)18
1559b(This)c(function)g(can)g(b)q(e)g(used)g(to)f(c)o(hec)o(k)h(\014eld)g(v)m
1560(alues,)h(to)e(create)-12 401 y(default)j(\014elds,)g(or)f(for)f(an)o(y)h
1561(other)g(side-e\013ect.)110 469 y Fk(\014eld)r(list)48 b Fg(!)j
1562Fm(')p Fg(f)p Fm(')15 b([)p Fk(\016eld)r(list1)6 b Fm(])15
1563b(')p Fg(g)p Fm(')72 526 y Fk(\016eld)r(list1)49 b Fg(!)i Fk(\016eld)16
1564b Fg(f)p Fm(',')e Fk(\016eld)5 b Fg(g)157 582 y Fk(\016eld)49
1565b Fg(!)i Fk(name)16 b Fm('=')g Fk(exp)3 650 y Fm(This)g(\014eld)h(list)f
1566(initializes)i(named)d(\014elds)i(in)f(a)f(table.)20 b(As)15
1567b(an)g(example:)60 730 y Fj(a)24 b(=)f(@f{x)h(=)f(1,)h(y)g(=)f(3})-12
1568809 y Fm(is)16 b(equiv)m(alen)o(t)h(to:)60 888 y Fj(temp)23
1569b(=)h(@\(2\))60 945 y(temp.x)f(=)h(1)60 1001 y(temp.y)f(=)h(3)60
15701058 y(f\(temp\))60 1114 y(a)g(=)f(temp)59 1193 y Fm(In)16
1571b(order)f(to)f(initialize)k(a)d(list,)h(one)f(can)h(use)f(the)g(follo)o(wing)
1572h(syn)o(tax:)107 1261 y Fk(\014eld)r(list)48 b Fg(!)j Fm('[')15
1573b([)p Fk(l\014eld)r(list1)6 b Fm(])14 b(']')72 1318 y Fk(l\014eld)r(list1)48
1574b Fg(!)j Fk(exp)16 b Fg(f)p Fm(',')f Fk(exp)s Fg(g)3 1386 y
1575Fm(As)h(an)f(example:)60 1465 y Fj(a)24 b(=)f(@["v1",)g("vv"])-12
15761545 y Fm(is)16 b(equiv)m(alen)o(t)h(to:)60 1624 y Fj(temp)23
1577b(=)h(@\(2\))60 1680 y(temp[1])f(=)g("v1")60 1737 y(temp[2])g(=)g("v2")60
15781793 y(a)h(=)f(temp)59 1872 y Fm(As)15 b(particular)h(cases,)f(the)g(follo)o
1579(wing)h(t)o(w)o(o)e(expressions)i(are)e(completely)j(equiv)m(alen)o(t:)84
15801952 y Fj(@f{)23 b(})215 b(@f[)23 b(])-12 2069 y Fi(4.5.8)52
1581b(F)l(unction)18 b(Calls)-12 2155 y Fm(A)d(function)h(call)h(has)e(the)g
1582(follo)o(wing)h(syn)o(tax:)72 2223 y Fk(functionc)n(al)r(l)49
1583b Fg(!)h Fk(var)16 b Fm('\(')g([)p Fk(explist1)6 b Fm(])15
1584b('\)')154 2279 y Fk(explist1)50 b Fg(!)g(f)p Fk(exp1)16 b
1585Fm(',')p Fg(g)f Fk(exp)5 2350 y Fm(Here,)i Fj(var)g Fm(can)g(b)q(e)h(an)o(y)e
1586(v)m(ariable)j(\(global,)e(lo)q(cal,)h(indexed,)h(etc\))e(whose)g(v)m(alue)h
1587(has)f(t)o(yp)q(e)g Fk(function)j Fm(or)-12 2407 y Fk(Cfunction)s
1588Fm(.)g(All)c(argumen)o(t)e(expressions)i(are)f(ev)m(aluated)h(b)q(efore)f
1589(the)g(call,)h(from)f(left)g(to)f(righ)o(t;)h(then)g(the)-12
15902463 y(list)k(of)f(argumen)o(ts)f(is)h(adjusted)g(to)g(the)g(length)g(of)g
1591(the)g(list)h(of)e(parameters)g(\(see)h(Section)h(4.3\);)f(\014nally)-12
15922520 y(this)e(list)g(is)g(assigned)f(to)g(the)g(parameters.)59
15932576 y(Because)20 b(a)g(function)g(can)g(return)g(an)o(y)g(n)o(um)o(b)q(er)g
1594(of)f(results)h(\(see)g(Section)h(4.4.3\),)e(the)h(n)o(um)o(b)q(er)g(of)-12
15952632 y(results)11 b(m)o(ust)f(b)q(e)h(adjusted)f(b)q(efore)h(used.)19
1596b(If)10 b(the)h(function)g(is)g(called)h(as)e(an)g(statemen)o(t)f(\(see)h
1597(Section)i(4.4.4\),)-12 2689 y(its)19 b(return)g(list)g(is)h(adjusted)f(to)f
1598(0.)30 b(If)19 b(the)g(function)g(is)h(called)g(in)g(a)e(place)i(that)e
1599(needs)i(a)e(single)i(v)m(alue)-12 2745 y(\(syn)o(tactically)13
1600b(denoted)f(b)o(y)g(the)g(non-terminal)h Fj(exp1)p Fm(\),)f(its)g(return)g
1601(list)h(is)f(adjusted)g(to)g(1.)18 b(If)12 b(the)g(function)-12
16022802 y(is)i(called)h(in)g(a)e(place)i(that)d(can)i(hold)h(man)o(y)e(v)m
1603(alues)h(\(syn)o(tactically)h(denoted)f(b)o(y)f(the)h(non-terminal)g
1604Fj(exp)p Fm(\),)-12 2858 y(no)h(adjustmen)o(t)g(is)h(done.)910
16052976 y(7)p eop
1606%%Page: 8 8
1607bop -12 160 a Fb(4.6)56 b(F)-5 b(unction)19 b(De\014nitions)-12
1608245 y Fm(F)l(unctions)c(in)g(Lua)g(can)g(b)q(e)g(de\014ned)g(an)o(ywhere)g
1609(in)g(the)f(global)h(lev)o(el)h(of)e(a)g(mo)q(dule;)h(functions)g(cannot)g(b)
1610q(e)-12 302 y(de\014ned)i(inside)g(other)e(functions.)20 b(The)c(syn)o(tax)e
1611(for)h(function)h(de\014nition)h(is:)72 374 y Fk(function)49
1612b Fg(!)i Fi(function)17 b Fk(name)f Fm('\(')f([)p Fk(p)n(arlist1)6
1613b Fm(])16 b('\)')f Fk(blo)n(ck)h Fi(end)59 503 y Fm(When)d(Lua)g(\014nds)h(a)
1614f(function)g(de\014nition,)i(its)e(b)q(o)q(dy)h(is)g(compiled)g(to)f(in)o
1615(termediate)g(co)q(de)h(and)f(stored,)-12 559 y(with)j(t)o(yp)q(e)f
1616Fk(function)p Fm(,)f(in)o(to)i(the)f(global)h(v)m(ariable)g
1617Fj(name)p Fm(.)59 615 y(P)o(arameters)e(act)g(as)h(lo)q(cal)h(v)m(ariables,)h
1618(initialized)h(with)e(the)f(argumen)o(t)f(v)m(alues.)72 688
1619y Fk(p)n(arlist1)49 b Fg(!)i Fk('name')16 b Fg(f)p Fm(',')f
1620Fk(name)s Fg(g)59 816 y Fm(Results)h(are)e(returned)h(using)h(the)e
1621Fj(return)g Fm(statemen)o(t)g(\(see)h(Section)g(4.4.3\).)j(If)d(the)g(con)o
1622(trol)f(reac)o(hes)-12 873 y(the)h(end)h(of)f(a)g(function)h(without)f(a)g
1623(return)g(instruction,)h(the)f(function)h(returns)f(with)h(no)f(results.)-12
16241016 y Fl(5)69 b(The)23 b(Application)e(Program)h(In)n(terface)-12
16251117 y Fm(This)e(section)f(describ)q(es)h(the)f(API)g(for)f(Lua,)i(that)e
1626(is,)i(the)f(set)f(of)g(C)h(functions)g(a)o(v)m(ailable)i(to)d(the)h(host)-12
16271174 y(program)13 b(to)g(comm)o(unicate)h(with)g(the)f(library)l(.)21
1628b(The)14 b(API)g(functions)g(can)g(b)q(e)g(classi\014ed)h(in)g(the)f(follo)o
1629(wing)-12 1230 y(categories:)44 1324 y(1.)22 b(executing)16
1630b(Lua)g(co)q(de;)44 1418 y(2.)22 b(con)o(v)o(erting)15 b(v)m(alues)h(b)q(et)o
1631(w)o(een)g(C)f(and)g(Lua;)44 1512 y(3.)22 b(manipulating)17
1632b(\(reading)e(and)g(writing\))h(Lua)f(ob)s(jects;)44 1605 y(4.)22
1633b(calling)17 b(Lua)e(functions;)44 1699 y(5.)22 b(C)15 b(functions)h(to)e(b)q
1634(e)i(called)h(b)o(y)e(Lua;)44 1793 y(6.)22 b(error)14 b(handling.)-12
16351887 y(All)h(API)f(functions)g(are)f(declared)h(in)g(the)g(\014le)g
1636Fj(lua.h)p Fm(.)19 b(Unless)14 b(stated)f(otherwise,)g(API)h(functions)g
1637(return)-12 1943 y(an)h(error)g(co)q(de:)20 b(0)15 b(in)h(case)f(of)g
1638(success,)h(non)f(0)g(in)h(case)f(of)g(errors.)-12 2065 y Fb(5.1)56
1639b(Executing)17 b(Lua)i(Co)r(de)-12 2151 y Fm(A)d(host)g(program)e(can)i
1640(execute)h(Lua)f(programs)f(written)h(in)h(a)e(\014le)i(or)f(in)h(a)e
1641(string,)h(using)h(the)f(follo)o(wing)-12 2207 y(functions:)-12
16422301 y Fj(int)286 b(lua_dofile)357 b(\(char)23 b(*filename\);)-12
16432358 y(int)286 b(lua_dostring)309 b(\(char)23 b(*string\);)-12
16442479 y Fb(5.2)56 b(Con)n(v)n(erting)19 b(V)-5 b(alues)19 b(b)r(et)n(w)n(een)f
1645(C)h(and)g(Lua)-12 2565 y Fm(Because)24 b(Lua)g(has)g(no)g(static)f(t)o(yp)q
1646(e)h(system,)h(all)f(v)m(alues)h(passed)f(b)q(et)o(w)o(een)g(Lua)g(and)g(C)f
1647(ha)o(v)o(e)g(t)o(yp)q(e)-12 2622 y Fj(lua_Object)p Fm(,)12
1648b(whic)o(h)j(w)o(orks)e(lik)o(e)i(an)e(abstract)g(t)o(yp)q(e)h(in)h(C)e(that)
1649g(can)h(hold)h(an)o(y)e(Lua)h(v)m(alue.)21 b Fj(lua_Object)-12
16502678 y Fm(is)16 b(declared)g(as:)-12 2772 y Fj(typedef)23 b(struct)g(Object)g
1651(*lua_Object;)910 2976 y Fm(8)p eop
1652%%Page: 9 9
1653bop -12 160 a Fm(where)16 b Fj(Object)e Fm(is)i(not)e(declared)j(in)f
1654Fj(lua.h)p Fm(.)59 216 y(Lua)j(has)g(garbage)f(collection.)34
1655b(Therefore,)19 b(there)g(is)h(no)f(guaran)o(tee)f(that)g(a)h
1656Fj(lua_Object)f Fm(will)j(b)q(e)-12 273 y(v)m(alid)f(after)e(another)g
1657(execution)h(of)f(Lua)h(co)q(de.)30 b(A)19 b(go)q(o)q(d)f(programming)g
1658(practice)h(is)g(to)e(con)o(v)o(ert)h(suc)o(h)-12 329 y(ob)s(jects)d(to)f(C)h
1659(v)m(alues)i(as)d(so)q(on)h(as)g(they)h(are)e(a)o(v)m(ailable,)j(and)e(nev)o
1660(er)h(store)e(them)h(in)h(global)g(v)m(ariables.)59 385 y(T)l(o)f(c)o(hec)o
1661(k)g(the)g(t)o(yp)q(e)h(of)e(a)h Fj(lua_Object)p Fm(,)f(the)h(follo)o(wing)h
1662(functions)g(are)f(a)o(v)m(ailable:)-12 479 y Fj(int)286 b(lua_isnil)381
1663b(\(lua_Object)22 b(object\);)-12 536 y(int)286 b(lua_isnumber)309
1664b(\(lua_Object)22 b(object\);)-12 592 y(int)286 b(lua_isstring)309
1665b(\(lua_Object)22 b(object\);)-12 649 y(int)286 b(lua_istable)333
1666b(\(lua_Object)22 b(object\);)-12 705 y(int)286 b(lua_iscfunction)237
1667b(\(lua_Object)22 b(object\);)-12 762 y(int)286 b(lua_isuserdata)261
1668b(\(lua_Object)22 b(object\);)-12 855 y Fm(All)17 b(return)e(1)g(if)g(the)h
1669(ob)s(ject)e(has)h(the)h(giv)o(en)f(t)o(yp)q(e,)g(0)g(otherwise.)59
1670912 y(T)l(o)g(translate)f(a)h(v)m(alue)i(from)d(t)o(yp)q(e)h
1671Fj(lua_Object)f Fm(to)h(a)g(sp)q(eci\014c)i(C)e(t)o(yp)q(e,)g(the)g
1672(programmer)f(can)h(use:)-12 1006 y Fj(float)238 b(lua_getnumber)285
1673b(\(lua_Object)22 b(object\);)-12 1062 y(char)238 b(*lua_getstring)285
1674b(\(lua_Object)22 b(object\);)-12 1119 y(char)238 b(*lua_copystring)261
1675b(\(lua_Object)22 b(object\);)-12 1175 y(lua_CFunction)46 b(lua_getcfunction)
1676213 b(\(lua_Object)22 b(object\);)-12 1231 y(void)238 b(*lua_getuserdata)f
1677(\(lua_Object)22 b(object\);)-12 1325 y(lua_getnumber)16 b
1678Fm(con)o(v)o(erts)h(a)h Fj(lua_Object)e Fm(to)h(a)h(\015oat.)27
1679b(This)18 b Fj(lua_Object)f Fm(m)o(ust)g(b)q(e)i(a)e(n)o(um)o(b)q(er)h(or)g
1680(a)-12 1382 y(string)d(con)o(v)o(ertible)i(to)d(n)o(um)o(b)q(er)i(\(see)f
1681(Section)h(4.2\);)d(otherwise,)i(the)h(function)g(returns)f(0.)59
16821438 y Fj(lua_getstring)f Fm(con)o(v)o(erts)h(a)h Fj(lua_Object)e
1683Fm(to)i(a)g(string)f(\()p Fj(char)23 b(*)p Fm(\).)f(This)17
1684b Fj(lua_Object)d Fm(m)o(ust)i(b)q(e)h(a)-12 1495 y(string)h(or)g(a)g(n)o(um)
1685o(b)q(er;)i(otherwise,)f(the)f(function)i(returns)e(0)g(\(the)g(n)o(ull)i(p)q
1686(oin)o(ter\).)29 b(This)19 b(function)g(do)q(es)-12 1551 y(not)14
1687b(create)g(a)g(new)g(string,)g(but)g(returns)g(a)g(p)q(oin)o(ter)h(to)e(a)h
1688(string)g(inside)i(the)e(Lua)h(en)o(vironmen)o(t.)20 b(Because)-12
16891608 y(Lua)c(has)f(garbage)f(collection,)j(there)f(is)f(no)h(guaran)o(tee)e
1690(that)h(suc)o(h)g(p)q(oin)o(ter)h(will)h(b)q(e)f(v)m(alid)h(after)e(another)
1691-12 1664 y(execution)20 b(of)f(Lua)g(co)q(de.)31 b(The)19 b(function)h
1692Fj(lua_copystring)d Fm(b)q(eha)o(v)o(es)i(exactly)g(lik)o(e)h
1693Fj(lua_getstring)p Fm(,)-12 1720 y(but)c(returns)f(a)f(fresh)i(cop)o(y)f(of)g
1694(the)g(string.)59 1777 y Fj(lua_getcfunction)g Fm(con)o(v)o(erts)i(a)g
1695Fj(lua_Object)g Fm(to)f(a)i(C)f(function.)28 b(This)18 b Fj(lua_Object)f
1696Fm(m)o(ust)g(ha)o(v)o(e)-12 1833 y(t)o(yp)q(e)d Fk(Cfunction)s
1697Fm(;)g(otherwise,)g(the)g(function)h(returns)f(0)g(\(the)g(n)o(ull)h(p)q(oin)
1698o(ter\).)20 b(The)14 b(t)o(yp)q(e)g Fj(lua_CFunction)-12 1890
1699y Fm(is)i(explained)h(in)f(Section)g(5.5.)59 1946 y Fj(lua_getuserdata)k
1700Fm(con)o(v)o(erts)h(a)h Fj(lua_Object)e Fm(to)i Fj(void*)p
1701Fm(.)40 b(This)22 b Fj(lua_Object)f Fm(m)o(ust)h(ha)o(v)o(e)f(t)o(yp)q(e)-12
17022003 y Fk(user)n(data)s Fm(;)16 b(otherwise,)f(the)g(function)h(returns)f(0)g
1703(\(the)g(n)o(ull)i(p)q(oin)o(ter\).)59 2059 y(The)d(rev)o(erse)g(pro)q(cess,)
1704g(that)f(is,)h(the)g(con)o(v)o(ersion)g(from)g(a)f(sp)q(eci\014c)j(C)e(t)o
1705(yp)q(e)g(to)f(the)h(t)o(yp)q(e)g Fj(lua_Object)p Fm(,)-12
17062116 y(is)i(done)f(b)o(y)h(using)g(the)f(follo)o(wing)h(functions:)-12
17072209 y Fj(int)286 b(lua_pushnumber)261 b(\(float)23 b(n\);)-12
17082266 y(int)286 b(lua_pushstring)261 b(\(char)23 b(*s\);)-12
17092322 y(int)286 b(lua_pushcfunction)189 b(\(lua_CFunction)22
1710b(f\);)-12 2379 y(int)286 b(lua_pushuserdata)213 b(\(void)23
1711b(*u\);)-12 2473 y Fm(All)16 b(of)d(them)h(receiv)o(e)h(a)f(C)g(v)m(alue,)h
1712(con)o(v)o(ert)f(it)g(to)g(a)f Fj(lua_Object)p Fm(,)g(and)h(lea)o(v)o(e)h
1713(their)f(results)h(on)f(the)g(top)g(of)-12 2529 y(the)h(Lua)f(stac)o(k,)g
1714(where)g(it)h(can)g(b)q(e)g(assigned)g(to)e(a)h(v)m(ariable,)i(passed)f(as)f
1715(paramen)o(ter)f(to)h(a)g(Lua)h(function,)-12 2586 y(etc)i(\(see)f(b)q(elo)o
1716(w\).)24 b(T)l(o)16 b(complete)h(the)f(set,)g(the)h(v)m(alue)g
1717Fi(nil)h Fm(or)e(a)g Fj(lua_Object)f Fm(can)h(also)h(b)q(e)g(pushed)g(on)o
1718(to)-12 2642 y(the)e(stac)o(k,)g(with:)-12 2736 y Fj(int)286
1719b(lua_pushnil)333 b(\(void\);)-12 2792 y(int)286 b(lua_pushobject)261
1720b(\(lua_Object)22 b(object\);)910 2976 y Fm(9)p eop
1721%%Page: 10 10
1722bop -12 160 a Fb(5.3)56 b(Manipulating)18 b(Lua)h(Ob)s(jects)-12
1723245 y Fm(T)l(o)c(read)g(the)h(v)m(alue)g(of)f(an)o(y)g(global)g(Lua)h(v)m
1724(ariable,)g(one)f(can)h(use)f(the)h(function:)-12 338 y Fj(lua_Object)118
1725b(lua_getglobal)285 b(\(char)23 b(*varname\);)-12 430 y Fm(T)l(o)15
1726b(store)g(a)f(v)m(alue)j(previously)f(pushed)h(on)o(to)d(the)h(stac)o(k)g(in)
1727h(a)f(global)g(v)m(ariable,)i(there)e(is)h(the)f(function:)-12
1728523 y Fj(int)286 b(lua_storeglobal)237 b(\(char)23 b(*varname\);)59
1729615 y Fm(T)l(ables)16 b(can)f(also)g(b)q(e)h(manipulated)h(via)e(the)g(API.)h
1730(Giv)o(en)f(a)g(table,)g(the)h(functions)-12 708 y Fj(lua_Object)118
1731b(lua_getindexed)261 b(\(lua_Object)22 b(table,)h(float)g(index\);)-12
1732764 y(lua_Object)118 b(lua_getfield)309 b(\(lua_Object)22 b(table,)h(char)g
1733(*field\);)-12 857 y Fm(return)c(the)f(con)o(ten)o(ts)g(of)g(an)h(index.)31
1734b(The)19 b(\014rst)f(one)h(is)g(used)g(for)f(n)o(umeric)h(indices,)i(while)f
1735(the)f(second)-12 913 y(can)d(b)q(e)h(used)f(for)g(an)o(y)f(string)h(index.)
173624 b(As)15 b(in)i(Lua,)f(if)h(the)f(index)h(is)f(not)g(presen)o(t)g(in)h(the)
1737f(table,)g(then)g(the)-12 970 y(returned)g Fj(lua_Object)e
1738Fm(has)h(v)m(alue)h Fi(nil)p Fm(.)59 1026 y(T)l(o)h(store)f(a)h(v)m(alue,)h
1739(previously)h(pushed)f(on)o(to)e(the)i(stac)o(k,)e(in)i(a)f(p)q(osition)h(of)
1740f(a)g(table,)g(the)h(follo)o(wing)-12 1083 y(functions)e(are)f(a)o(v)m
1741(ailable:)-12 1175 y Fj(int)286 b(lua_storeindexed)213 b(\(lua_Object)22
1742b(object,)h(float)g(index\);)-12 1232 y(int)286 b(lua_storefield)261
1743b(\(lua_Object)22 b(object,)h(char)g(*field\);)-12 1324 y Fm(Again,)c(the)f
1744(\014rst)g(one)g(is)g(used)h(for)e(n)o(umeric)i(indices,)i(while)e(the)f
1745(second)h(can)f(b)q(e)h(used)f(for)g(an)o(y)f(string)-12 1381
1746y(index.)-12 1502 y Fb(5.4)56 b(Calling)18 b(Lua)h(F)-5 b(unctions)-12
17471588 y Fm(F)l(unctions)12 b(de\014ned)h(in)f(Lua)g(b)o(y)f(a)h(mo)q(dule)g
1748(executed)g(with)g Fj(dofile)f Fm(or)g Fj(dostring)f Fm(can)h(b)q(e)i(called)
1749g(from)d(the)-12 1644 y(host)16 b(program.)23 b(This)17 b(is)g(done)g(using)g
1750(the)f(follo)o(wing)i(proto)q(col:)k(\014rst,)16 b(the)g(argumen)o(ts)g(to)g
1751(the)g(function)-12 1701 y(are)k(pushed)i(on)o(to)d(the)i(Lua)g(stac)o(k)e
1752(\(see)i(Section)g(5.2\),)f(in)i(direct)f(order,)g(i.e.,)g(the)g(\014rst)f
1753(argumen)o(t)g(is)-12 1757 y(pushed)c(\014rst.)k(Then,)15 b(the)h(function)g
1754(is)f(called)i(using:)-12 1850 y Fj(int)286 b(lua_call)405
1755b(\(char)23 b(*functionname,)f(int)h(nparam\);)-12 1942 y Fm(where)17
1756b(the)f(second)h(argumen)o(t)f(\()p Fj(nparam)p Fm(\))f(is)h(the)h(n)o(um)o
1757(b)q(er)g(of)f(v)m(alues)h(pushed)g(on)o(to)f(the)g(stac)o(k.)23
1758b(Finally)l(,)-12 1999 y(the)c(returned)g(v)m(alues)h(\(a)e(Lua)g(function)i
1759(ma)o(y)e(return)g(man)o(y)g(v)m(alues\))i(are)e(p)q(opp)q(ed)i(from)e(the)h
1760(stac)o(k)e(in)-12 2055 y(rev)o(erse)e(order,)g(i.e.,)g(the)g(last)g(result)h
1761(is)f(p)q(opp)q(ed)i(\014rst.)i(P)o(opping)d(is)g(done)f(with)h(the)f
1762(function)-12 2148 y Fj(lua_Object)118 b(lua_pop)429 b(\(void\);)-12
17632240 y Fm(When)16 b(there)f(are)g(no)g(more)g(results)g(to)g(b)q(e)h(p)q(opp)
1764q(ed,)g(this)g(function)g(returns)f(0.)59 2297 y(An)g(example)h(of)f(C)g(co)q
1765(de)h(calling)h(a)e(Lua)g(function)h(is)g(sho)o(wn)f(in)h(7.5.)-12
17662418 y Fb(5.5)56 b(C)19 b(F)-5 b(unctions)-12 2504 y Fm(T)l(o)15
1767b(register)g(a)g(C)g(function)h(to)f(Lua,)g(there)g(is)h(the)f(follo)o(wing)h
1768(macro:)-12 2596 y Fj(#define)23 b(lua_register\(n,f\))165
1769b(\(lua_pushcfunction\(f\),)21 b(lua_storeglobal\(n\)\))-12
17702653 y(/*)j(char)f(*n;)214 b(*/)-12 2709 y(/*)24 b(lua_CFunction)e(f;)h(*/)
1771-12 2802 y Fm(whic)o(h)d(receiv)o(es)f(the)g(name)g(the)g(function)g(will)i
1772(ha)o(v)o(e)d(in)h(Lua,)h(and)f(a)f(p)q(oin)o(ter)i(to)e(the)g(function.)32
1773b(This)-12 2858 y(p)q(oin)o(ter)16 b(m)o(ust)f(ha)o(v)o(e)f(t)o(yp)q(e)i
1774Fj(lua_CFunction)p Fm(,)d(whic)o(h)j(is)f(de\014ned)i(as)899
17752976 y(10)p eop
1776%%Page: 11 11
1777bop -12 160 a Fj(typedef)23 b(void)g(\(*lua_CFunction\))f(\(void\);)-12
1778253 y Fm(that)15 b(is,)g(a)g(p)q(oin)o(ter)h(to)e(a)h(function)h(with)g(no)f
1779(parameters)f(and)h(no)h(results.)59 310 y(In)j(order)f(to)g(comm)o(unicate)g
1780(prop)q(erly)i(with)e(Lua,)i(a)e(C)g(function)h(m)o(ust)f(follo)o(w)h(a)f
1781(proto)q(col,)g(whic)o(h)-12 366 y(de\014nes)e(the)g(w)o(a)o(y)e(parameters)g
1782(and)i(results)f(are)g(passed.)59 423 y(T)l(o)g(access)g(its)g(argumen)o(ts,)
1783f(a)h(C)g(function)h(calls:)-12 517 y Fj(lua_Object)118 b(lua_getparam)309
1784b(\(int)23 b(number\);)-12 610 y(number)17 b Fm(starts)g(with)h(1)g(to)f(get)
1785g(the)h(\014rst)g(argumen)o(t.)27 b(When)18 b(called)i(with)e(a)f(n)o(um)o(b)
1786q(er)i(larger)e(than)h(the)-12 667 y(actual)11 b(n)o(um)o(b)q(er)h(of)e
1787(argumen)o(ts,)h(this)h(function)f(returns)g(0.)18 b(In)12
1788b(this)g(w)o(a)o(y)l(,)e(it)i(is)f(p)q(ossible)i(to)d(write)i(functions)-12
1789723 y(that)j(w)o(ork)f(with)h(a)g(v)m(ariable)i(n)o(um)o(b)q(er)e(of)g
1790(parameters.)59 780 y(T)l(o)i(return)h(v)m(alues,)i(a)d(C)h(function)h(just)f
1791(pushes)g(them)g(on)o(to)f(the)i(stac)o(k,)e(in)i(direct)g(order;)f(see)h
1792(Sec-)-12 836 y(tion)d(5.2.)j(Lik)o(e)d(a)f(Lua)g(function,)h(a)f(C)g
1793(function)h(called)g(b)o(y)g(Lua)f(can)g(also)h(return)f(man)o(y)f(results.)
179459 893 y(Section)i(7.4)e(presen)o(ts)h(an)g(example)h(of)f(a)g(Cfunction.)-12
17951014 y Fb(5.6)56 b(Error)18 b(Handling)-12 1100 y Fm(Whenev)o(er)d(an)g
1796(error)e(o)q(ccurs)i(during)h(Lua)f(compilation)g(or)f(execution,)i(an)e
1797(error)g(routine)h(is)g(called,)h(and)-12 1157 y(the)f(corresp)q(onding)i
1798Fj(lua_dofile)c Fm(or)i Fj(lua_dostring)f Fm(is)h(terminated)h(returning)g
1799(an)f(error)f(condition.)59 1213 y(The)20 b(only)h(argumen)o(t)e(to)h(the)g
1800(error)g(routine)g(is)h(a)f(string)g(describing)i(the)e(error)g(and)g(some)g
1801(extra)-12 1270 y(informations,)14 b(lik)o(e)h(curren)o(t)e(line)i(\(when)f
1802(the)g(error)f(is)h(at)f(compilation\))h(or)f(curren)o(t)h(function)g(\(when)
1803g(the)-12 1326 y(error)19 b(is)g(at)g(execution\).)33 b(The)19
1804b(standard)g(error)f(routine)i(only)g(prin)o(ts)f(this)h(message)e(in)i(the)g
1805(standard)-12 1383 y(error)15 b(output.)k(If)d(needed,)g(it)f(is)h(p)q
1806(ossible)h(to)e(set)g(another)f(error)h(routine,)g(using)h(the)f(function:)
1807-12 1476 y Fj(void)262 b(lua_errorfunction)189 b(\(void)23
1808b(\(*fn\))g(\(char)g(*s\)\);)-12 1570 y Fm(whose)15 b(argumen)o(t)g(is)g(the)
1809h(address)f(of)g(the)g(new)g(error)g(function.)-12 1713 y Fl(6)69
1810b(Prede\014ned)23 b(F)-6 b(unctions)23 b(and)g(Libraries)-12
18111815 y Fm(The)18 b(set)f(of)g(prede\014ned)i(functions)g(in)f(Lua)g(is)g
1812(small)g(but)g(p)q(o)o(w)o(erful.)27 b(Most)16 b(of)h(them)h(pro)o(vide)g
1813(features)-12 1871 y(that)c(allo)o(ws)g(some)g(degree)h(of)f(re\015exivit)o
1814(y)h(in)g(the)g(language.)20 b(Suc)o(h)15 b(features)f(cannot)g(b)q(e)h(sim)o
1815(ulated)g(with)-12 1928 y(the)g(rest)g(of)g(the)g(Language)g(nor)g(with)h
1816(the)f(standard)g(API.)59 1984 y(The)21 b(libraries,)i(on)d(the)h(other)f
1817(hand,)i(pro)o(vide)g(useful)f(routines)g(that)f(are)h(implemen)o(ted)h
1818(directly)-12 2041 y(through)13 b(the)f(standard)h(API.)f(Therefore,)h(they)g
1819(are)f(not)g(necessary)h(to)f(the)h(language,)g(and)g(are)f(pro)o(vided)-12
18202097 y(as)j(separated)g(C)g(mo)q(dules.)21 b(Curren)o(tly)15
1821b(there)g(are)g(three)h(libraries:)56 2191 y Fg(\017)23 b Fm(string)15
1822b(manipulation;)56 2285 y Fg(\017)23 b Fm(mathematical)15 b(functions)h
1823(\(sin,)f(cos,)g(etc\);)56 2379 y Fg(\017)23 b Fm(input)16
1824b(and)f(output;)-12 2500 y Fb(6.1)56 b(Prede\014ned)18 b(F)-5
1825b(unctions)-12 2586 y Fj(dofile)23 b(\(filename\))-12 2672
1826y Fm(This)e(function)g(receiv)o(es)g(a)f(\014le)h(name,)g(op)q(ens)f(it)h
1827(and)f(executes)h(its)f(con)o(ten)o(ts)g(as)f(a)h(Lua)g(mo)q(dule.)36
1828b(It)-12 2728 y(returns)15 b(1)g(if)h(there)f(are)g(no)g(errors,)f
1829Fi(nil)i Fm(otherwise.)899 2976 y(11)p eop
1830%%Page: 12 12
1831bop -12 160 a Fj(dostring)23 b(\(string\))-12 245 y Fm(This)17
1832b(function)f(executes)h(a)e(giv)o(en)i(string)e(as)h(a)f(Lua)i(mo)q(dule.)23
1833b(It)16 b(returns)f(1)h(if)g(there)g(are)g(no)f(errors,)g Fi(nil)-12
1834302 y Fm(otherwise.)-12 422 y Fj(next)24 b(\(table,)e(index\))-12
1835508 y Fm(This)16 b(function)h(allo)o(ws)e(a)g(program)g(to)g(en)o(umerate)g
1836(all)h(\014elds)h(of)e(a)g(table.)21 b(Its)16 b(\014rst)f(argumen)o(t)g(is)h
1837(a)f(table)-12 564 y(and)i(its)g(second)g(argumen)o(t)f(is)h(an)g(index)g(in)
1838h(this)f(table;)g(this)g(index)h(can)f(b)q(e)g(a)g(n)o(um)o(b)q(er)g(or)f(a)g
1839(string.)24 b(It)-12 621 y(returns)15 b(the)f(next)h(index)h(of)e(the)g
1840(table)h(and)g(the)g(v)m(alue)h(asso)q(ciated)e(with)h(the)g(index.)21
1841b(When)15 b(called)h(with)-12 677 y Fi(nil)g Fm(as)e(its)g(second)h(argumen)o
1842(t,)f(the)g(function)i(returns)e(the)h(\014rst)f(index)i(of)e(the)g(table)h
1843(\(and)f(its)h(asso)q(ciated)-12 734 y(v)m(alue\).)21 b(When)16
1844b(called)g(with)g(the)f(last)g(index,)h(or)f(with)h Fi(nil)g
1845Fm(in)g(an)f(empt)o(y)g(table,)g(it)h(returns)f Fi(nil)p Fm(.)59
1846790 y(In)h(Lua)h(there)f(is)g(no)g(declaration)h(of)e(\014elds;)i(seman)o
1847(tically)l(,)h(there)e(is)g(no)g(di\013erence)h(b)q(et)o(w)o(een)f(a)g
1848(\014eld)-12 846 y(not)i(presen)o(t)f(in)i(a)f(table)g(or)f(a)h(\014eld)h
1849(with)f(v)m(alue)h Fi(nil)p Fm(.)29 b(Therefore,)18 b(the)f(function)i(only)f
1850(considers)h(\014elds)-12 903 y(with)d(non)f(nil)i(v)m(alues.)k(The)16
1851b(order)f(the)g(indices)j(are)d(en)o(umerated)g(are)g(not)g(sp)q(eci\014ed,)i
1852Fk(even)f(for)g(numeric)-12 959 y(indic)n(es)p Fm(.)59 1016
1853y(See)g(Section)g(7.1)e(for)g(an)i(example)g(of)e(the)i(use)f(of)g(this)h
1854(function.)-12 1136 y Fj(nextvar)23 b(\(name\))-12 1222 y Fm(This)14
1855b(function)g(is)g(similar)g(to)e(the)i(function)g Fj(next)p
1856Fm(,)e(but)i(it)f(iterates)g(o)o(v)o(er)f(the)i(global)f(v)m(ariables.)21
1857b(Its)13 b(single)-12 1278 y(argumen)o(t)18 b(is)i(the)f(name)g(of)g(a)f
1858(global)i(v)m(ariable,)h(or)d Fi(nil)i Fm(to)f(get)f(a)h(\014rst)f(name.)32
1859b(Similarly)21 b(to)d Fj(next)p Fm(,)h(it)-12 1335 y(returns)e(the)f(name)h
1860(of)f(another)g(v)m(ariable)i(and)f(its)g(v)m(alue,)h(or)e
1861Fi(nil)h Fm(if)h(there)e(are)h(no)f(more)g(v)m(ariables.)26
1862b(See)-12 1391 y(Section)16 b(7.1)f(for)f(an)h(example)h(of)f(the)g(use)h(of)
1863f(this)g(function.)-12 1511 y Fj(print)23 b(\(e1,)h(e2,)f(...\))-12
18641597 y Fm(This)13 b(function)g(receiv)o(es)g(an)o(y)f(n)o(um)o(b)q(er)g(of)g
1865(argumen)o(ts,)g(and)g(prin)o(ts)g(their)h(v)m(alues)h(in)f(a)e(reasonable)i
1866(format.)-12 1653 y(Eac)o(h)h(v)m(alue)i(is)e(prin)o(ted)h(in)g(a)f(new)h
1867(line.)21 b(This)15 b(function)g(is)f(not)g(in)o(tended)i(for)e(formatted)f
1868(output,)g(but)i(as)-12 1710 y(a)g(quic)o(k)h(w)o(a)o(y)e(to)h(sho)o(w)g(a)g
1869(v)m(alue,)h(for)f(instance)h(for)e(error)h(messages)g(or)f(debugging.)22
1870b(See)15 b(Section)i(6.4)d(for)-12 1766 y(functions)i(for)f(formatted)f
1871(output.)-12 1886 y Fj(tonumber)23 b(\(e\))-12 1972 y Fm(This)18
1872b(function)g(receiv)o(es)f(one)g(argumen)o(t,)g(and)g(tries)g(to)f(con)o(v)o
1873(ert)h(it)g(to)f(a)h(n)o(um)o(b)q(er.)25 b(If)18 b(the)f(argumen)o(t)f(is)-12
18742029 y(already)e(a)f(n)o(um)o(b)q(er)h(or)f(a)g(string)g(con)o(v)o(ertible)h
1875(to)f(a)g(n)o(um)o(b)q(er)h(\(see)f(Section)i(4.2\),)d(it)h(returns)h(that)e
1876(n)o(um)o(b)q(er;)-12 2085 y(otherwise,)j(it)h(returns)f Fi(nil)p
1877Fm(.)-12 2205 y Fj(type)24 b(\(v\))-12 2291 y Fm(This)16 b(function)g(allo)o
1878(ws)f(Lua)h(to)e(test)h(the)g(t)o(yp)q(e)g(of)g(a)f(v)m(alue.)21
1879b(It)16 b(receiv)o(es)g(one)f(argumen)o(t,)f(and)h(returns)g(its)-12
18802347 y(t)o(yp)q(e,)g(co)q(ded)h(as)f(a)g(string.)20 b(The)15
1881b(p)q(ossible)i(results)f(of)e(this)i(function)g(are:)56 2441
1882y Fg(\017)23 b Fj('nil')56 2535 y Fg(\017)g Fj('number')56
18832629 y Fg(\017)g Fj('string')56 2723 y Fg(\017)g Fj('table')56
18842817 y Fg(\017)g Fj('cfunction')899 2976 y Fm(12)p eop
1885%%Page: 13 13
1886bop 56 160 a Fg(\017)23 b Fj('function')56 253 y Fg(\017)g
1887Fj('userdata')-12 375 y Fb(6.2)56 b(String)18 b(Manipulation)-12
1888461 y Fm(This)e(library)f(pro)o(vides)h(generic)g(functions)f(for)f(string)h
1889(manipulation,)h(suc)o(h)g(as)e(\014nding)i(and)f(extracting)-12
1890517 y(substrings.)20 b(When)14 b(indexing)h(a)e(string,)g(the)h(\014rst)f(c)o
1891(haracter)f(has)i(p)q(osition)g(1.)19 b(See)14 b(Section)g(7.2)f(for)g(some)
1892-12 574 y(examples)j(on)f(string)g(manipulation)i(in)f(Lua.)-12
1893694 y Fj(strfind)23 b(\(str,)g(substr\))-12 780 y Fm(Receiv)o(es)15
1894b(t)o(w)o(o)d(string)i(argumen)o(ts,)e(and)i(returns)f(a)g(n)o(um)o(b)q(er.)
189520 b(This)14 b(n)o(um)o(b)q(er)g(indicates)h(the)e(\014rst)g(p)q(osition)-12
1896836 y(where)20 b(the)f(second)h(argumen)o(t)e(app)q(ears)i(in)g(the)f
1897(\014rst)g(argumen)o(t.)31 b(If)19 b(the)h(second)g(argumen)o(t)e(is)i(not)f
1898(a)-12 893 y(substring)d(of)f(the)g(\014rst)g(one,)g(then)g
1899Fj(strfind)f Fm(returns)h Fi(nil)p Fm(.)-12 1013 y Fj(strlen)23
1900b(\(s\))-12 1099 y Fm(Receiv)o(es)17 b(a)e(string)g(and)g(returns)g(its)h
1901(length.)-12 1219 y Fj(strsub)23 b(\(s,)h(i,)f(j\))-12 1304
1902y Fm(Returns)13 b(another)f(string,)h(whic)o(h)g(is)g(a)f(substring)h(of)f
1903Fj(s)p Fm(,)h(starting)f(at)g Fj(i)g Fm(and)h(runing)g(un)o(til)h
1904Fj(j)p Fm(.)k(If)13 b Fj(j)g Fm(is)g(absen)o(t)-12 1361 y(or)18
1905b(is)g Fi(nil)p Fm(,)i(it)e(is)g(assumed)h(to)e(b)q(e)i(equal)g(to)e(the)h
1906(length)h(of)e Fj(s)p Fm(.)29 b(P)o(articularly)l(,)19 b(the)f(call)h
1907Fj(strsub\(s,1,j\))-12 1417 y Fm(returns)c(a)g(pre\014x)h(of)f
1908Fj(s)g Fm(with)g(length)h Fj(j)p Fm(,)f(while)h(the)g(call)g
1909Fj(strsub\(s,i\))e Fm(returns)h(a)g(su\014x)g(of)g Fj(s)p Fm(.)-12
19101537 y Fj(strlower)23 b(\(s\))-12 1623 y Fm(Receiv)o(es)16
1911b(a)d(string)i(and)f(returns)g(a)f(cop)o(y)h(of)g(that)f(string)h(with)h(all)
1912g(upp)q(er)g(case)f(letters)g(c)o(hanged)g(to)g(lo)o(w)o(er)-12
19131680 y(case.)20 b(All)d(other)d(c)o(haracters)h(are)g(left)g(unc)o(hanged.)
1914-12 1800 y Fj(strupper)23 b(\(s\))-12 1886 y Fm(Receiv)o(es)16
1915b(a)d(string)i(and)f(returns)g(a)f(cop)o(y)h(of)g(that)f(string)h(with)h(all)
1916g(lo)o(w)o(er)e(case)h(letters)h(c)o(hanged)f(to)f(upp)q(er)-12
19171942 y(case.)20 b(All)d(other)d(c)o(haracters)h(are)g(left)g(unc)o(hanged.)
1918-12 2064 y Fb(6.3)56 b(Mathematical)16 b(F)-5 b(unctions)-12
19192149 y Fm(This)17 b(library)g(is)f(an)g(in)o(terface)h(to)e(some)h(functions)
1920g(of)g(the)g(standard)g(C)g(math)f(library)l(.)24 b(It)16 b(pro)o(vides)g
1921(the)-12 2206 y(follo)o(wing)g(functions:)-12 2300 y Fj(abs)48
1922b(acos)23 b(asin)g(atan)g(ceil)h(cos)f(floor)g(max)h(min)-12
19232356 y(mod)48 b(pow)f(sin)g(sqrt)23 b(tan)59 2450 y Fm(The)f(functions)h
1924Fj(floor)p Fm(,)f Fj(sqrt)p Fm(,)h Fj(pow)p Fm(,)f Fj(ceil)p
1925Fm(,)h Fj(sin)p Fm(,)g Fj(cos)p Fm(,)g Fj(tan)p Fm(,)f Fj(asin)p
1926Fm(,)h Fj(acos)p Fm(,)g(and)f Fj(atan)f Fm(are)h(only)-12 2506
1927y(in)o(terfaces)h(to)f(the)h(homon)o(ymous)f(functions)i(in)f(the)g(C)g
1928(library)l(,)i(with)e(the)g(di\013erence)h(that,)g(in)f(the)-12
19292563 y(trigonometric)15 b(functions,)h(all)g(angles)g(are)e(expressed)i(in)g
1930(degrees.)59 2619 y(The)d(function)g Fj(max)g Fm(returns)f(the)h(maxim)o(um)g
1931(v)m(alue)h(in)f(a)g(list)g(of)g(n)o(umeric)g(argumen)o(ts.)19
1932b(Similarly)l(,)c Fj(min)-12 2676 y Fm(computes)g(the)h(minim)o(um.)21
1933b(Both)15 b(can)g(b)q(e)h(used)g(with)f(an)g(unlimited)j(n)o(um)o(b)q(er)d
1934(of)g(argumen)o(ts.)59 2732 y(The)g(function)h Fj(mod)f Fm(is)h(equiv)m(alen)
1935o(t)h(to)d(the)h Fj(\045)g Fm(op)q(erator)g(in)h(C.)899 2976
1936y(13)p eop
1937%%Page: 14 14
1938bop -12 160 a Fb(6.4)56 b(I/O)18 b(F)-5 b(acilities)-12 245
1939y Fm(All)16 b(I/O)g(op)q(erations)f(in)h(Lua)f(are)g(done)g(o)o(v)o(er)f(t)o
1940(w)o(o)g Fk(curr)n(ent)h Fm(\014les,)g(one)h(for)e(reading)i(and)f(one)g(for)
1941f(writing.)-12 302 y(Initially)l(,)k(the)d(curren)o(t)g(input)h(\014le)h(is)e
1942Fj(stdin)p Fm(,)f(and)i(the)f(curren)o(t)g(output)g(\014le)h(is)g
1943Fj(stdout)p Fm(.)59 358 y(Unless)g(otherwised)g(stated,)e(all)i(I/O)g
1944(functions)g(return)f(1)g(on)g(success)h(and)f Fi(nil)h Fm(on)f(failure.)-12
1945477 y Fj(readfrom)23 b(\(filename\))-12 563 y Fm(This)17 b(function)g(op)q
1946(ens)g(a)f(\014le)h(named)g Fj(filename)e Fm(and)i(sets)f(it)g(as)g(the)g
1947Fk(curr)n(ent)h Fm(input)g(\014le.)24 b(When)17 b(called)-12
1948620 y(without)e(parameters,)f(this)i(function)g(restores)e
1949Fj(stdin)h Fm(as)g(the)g(curren)o(t)g(input)h(\014le.)-12 739
1950y Fj(writeto)23 b(\(filename\))-12 825 y Fm(This)16 b(function)g(op)q(ens)g
1951(a)f(\014le)h(named)f Fj(filename)f Fm(and)i(sets)e(it)i(as)f(the)g
1952Fk(curr)n(ent)g Fm(output)g(\014le.)21 b(Notice)15 b(that,)-12
1953881 y(if)21 b(the)g(\014le)g(already)g(exists,)h(it)f(is)g(completely)h
1954(erased)e(with)h(this)g(op)q(eration.)36 b(When)21 b(called)h(without)-12
1955938 y(parameters,)14 b(this)i(function)g(restores)e Fj(stdout)h
1956Fm(as)f(the)i(curren)o(t)f(output)g(\014le.)-12 1057 y Fj(appendto)23
1957b(\(filename\))-12 1143 y Fm(This)18 b(function)g(op)q(ens)f(a)g(\014le)h
1958(named)f Fj(filename)f Fm(and)h(sets)g(it)g(as)g(the)g Fk(curr)n(ent)g
1959Fm(output)f(\014le.)27 b(Unlik)o(e)18 b(the)-12 1199 y Fj(writeto)d
1960Fm(op)q(eration,)h(this)g(function)g(do)q(es)g(not)g(erase)f(an)o(y)h
1961(previous)g(con)o(ten)o(t)f(of)g(the)h(\014le.)23 b(When)16
1962b(called)-12 1255 y(without)j(parameters,)g(this)h(function)g(restores)f
1963Fj(stdout)f Fm(as)h(the)g(curren)o(t)g(output)h(\014le.)33
1964b(This)19 b(function)-12 1312 y(returns)c(2)g(if)h(the)f(\014le)h(already)g
1965(exists,)f(1)g(if)g(it)h(creates)f(a)g(new)g(\014le,)h(and)f
1966Fi(nil)i Fm(on)e(failure.)-12 1431 y Fj(read)24 b(\([format]\))-12
19671517 y Fm(This)12 b(function)g(returns)e(a)h(v)m(alue)h(read)f(from)f(the)h
1968(curren)o(t)g(input.)20 b(An)11 b(optional)g(string)g(argumen)o(t)f(sp)q
1969(eci\014es)-12 1573 y(the)15 b(w)o(a)o(y)g(the)g(input)h(is)g(in)o
1970(terpreted.)59 1630 y(Without)j(a)g(format)e(argumen)o(t,)i
1971Fj(read)g Fm(\014rst)g(skips)h(blanks,)g(tabs)f(and)g(newlines.)34
1972b(Then)20 b(it)f(c)o(hec)o(ks)-12 1686 y(whether)g(the)h(curren)o(t)e(c)o
1973(haracter)h(is)g Fj(")g Fm(or)g Fj(')p Fm(.)31 b(If)19 b(so,)g(it)h(reads)f
1974(a)f(string)h(up)h(to)e(the)h(ending)i(quotation)-12 1743 y(mark,)14
1975b(and)h(returns)f(this)h(string,)g(without)f(the)h(quotation)f(marks.)19
1976b(Otherwise)d(it)f(reads)f(up)h(to)g(a)f(blank,)-12 1799 y(tab)h(or)g
1977(newline.)59 1856 y(The)g(format)f(string)h(can)h(ha)o(v)o(e)e(the)i(follo)o
1978(wing)g(format:)60 1945 y Fj(?[n])-12 2033 y Fm(where)g Fj(?)f
1979Fm(can)g(b)q(e:)-12 2122 y Fi('s')h(or)h('S')22 b Fm(to)15
1980b(read)g(a)g(string;)-12 2214 y Fi('f)5 b(')17 b(or)g('F')k
1981Fm(to)15 b(read)g(a)g(real)g(n)o(um)o(b)q(er;)-12 2306 y Fi('i')i(or)g('I')22
1982b Fm(to)14 b(read)i(an)f(in)o(teger.)-12 2395 y(The)g(optional)g
1983Fj(n)f Fm(is)h(a)g(n)o(um)o(b)q(er)f(whic)o(h)i(sp)q(eci\014es)g(ho)o(w)e
1984(man)o(y)g(c)o(haracters)g(m)o(ust)g(b)q(e)h(read)g(to)f(comp)q(ose)g(the)-12
19852451 y(input)i(v)m(alue.)-12 2571 y Fj(write)23 b(\(value,)g([format]\))-12
19862656 y Fm(This)16 b(function)g(writes)f(the)h(v)m(alue)g(of)f(its)g(\014rst)g
1987(argumen)o(t)g(to)f(the)i(curren)o(t)f(output.)k(An)d(optional)g(second)-12
19882713 y(argumen)o(t)g(sp)q(eci\014es)j(the)e(format)e(to)i(b)q(e)g(used.)26
1989b(This)17 b(format)e(is)j(giv)o(en)f(as)g(a)f(string,)h(comp)q(osed)g(of)g
1990(four)-12 2769 y(parts.)i(The)d(\014rst)f(part)f(is)i(the)f(only)h(not)f
1991(optional,)g(and)h(m)o(ust)e(b)q(e)i(one)f(of)g(the)g(follo)o(wing)h(c)o
1992(haracters:)-12 2858 y Fi('s')g(or)h('S')22 b Fm(to)15 b(write)g(strings;)899
19932976 y(14)p eop
1994%%Page: 15 15
1995bop -12 160 a Fi('f)5 b(')17 b(or)g('F')k Fm(to)15 b(write)g(\015oats;)-12
1996253 y Fi('i')i(or)g('I')22 b Fm(to)14 b(write)i(in)o(tegers.)-12
1997347 y(These)g(c)o(haracters)e(can)i(b)q(e)f(follo)o(w)o(ed)h(b)o(y)60
1998441 y Fj([?][m][.n])-12 535 y Fm(where:)-12 629 y Fj(?)23 b
1999Fm(indicates)16 b(justi\014cation)g(inside)h(the)f(\014eld.)130
2000723 y(')p Fj(<)p Fm(')22 b(righ)o(t)15 b(justi\014cation;)130
2001796 y(')p Fj(>)p Fm(')22 b(left)15 b(justi\014cation;)130 869
2002y(')p Fj(|)p Fm(')22 b(cen)o(ter)15 b(justi\014cation.)-12
2003962 y Fj(m)23 b Fm(Indicates)16 b(the)f(\014eld)i(size)f(in)g(c)o(haracters.)
2004-12 1056 y Fj(.n)23 b Fm(F)l(or)16 b(reals,)i(indicates)g(the)f(n)o(um)o(b)q
2005(er)h(of)e(digital)j(places.)26 b(F)l(or)16 b(in)o(tegers,)i(it)f(is)h(the)f
2006(minim)o(um)h(n)o(um)o(b)q(er)102 1113 y(of)d(digits.)20 b(This)c(option)f
2007(has)h(no)f(meaning)g(for)g(strings.)59 1207 y(When)e(called)i(without)e(a)g
2008(format)f(string,)h(this)h(function)g(writes)f(n)o(um)o(b)q(ers)g(using)h
2009(the)f Fj(\045g)g Fm(format)f(and)-12 1263 y(strings)j(with)h
2010Fj(\045s)p Fm(.)-12 1406 y Fl(7)69 b(Some)21 b(Examples)-12
20111508 y Fm(This)f(section)h(giv)o(es)e(examples)i(sho)o(wing)e(some)h
2012(features)f(of)g(Lua.)34 b(It)19 b(do)q(es)h(not)g(in)o(tend)g(to)f(co)o(v)o
2013(er)g(the)-12 1564 y(whole)d(language,)f(but)g(only)h(to)f(illustrate)h(some)
2014f(in)o(teresting)h(uses)f(of)g(the)g(system.)-12 1686 y Fb(7.1)56
2015b(The)18 b(F)-5 b(unctions)19 b Fa(next)e Fb(and)j Fa(nextvar)-12
20161772 y Fm(This)c(example)g(sho)o(ws)f(ho)o(w)f(to)h(use)g(the)h(function)g
2017Fj(next)e Fm(to)h(iterate)g(o)o(v)o(er)f(the)i(\014elds)g(of)f(a)g(table.)-12
20181865 y Fj(function)23 b(f)h(\(t\))357 b(--)24 b(t)g(is)f(a)h(table)36
20191922 y(local)f(i,)h(v)f(=)h(next\(t,)f(nil\))47 b(--)24 b(i)g(is)f(an)h
2020(index)f(of)g(t,)h(v)g(=)g(t[i])36 1978 y(while)f(i)h(do)84
20212035 y(--)f(do)h(something)e(with)i(i)f(and)h(v)84 2091 y(i,)f(v)h(=)g
2022(next\(t,)f(i\))190 b(--)24 b(get)f(next)h(index)36 2148 y(end)-12
20232204 y(end)59 2298 y Fm(The)13 b(next)g(example)h(prin)o(ts)f(the)g(names)g
2024(of)f(all)i(global)g(v)m(ariables)g(in)g(the)f(system)g(with)g(non)g(nil)i(v)
2025m(alues:)-12 2392 y Fj(function)23 b(printGlobalVariables)e(\(\))36
20262448 y(local)i(i,)h(v)f(=)h(nextvar\(nil\))36 2505 y(while)f(i)h(do)84
20272561 y(print\(i\))84 2618 y(i,)f(v)h(=)g(nextvar\(i\))36 2674
2028y(end)-12 2731 y(end)899 2976 y Fm(15)p eop
2029%%Page: 16 16
2030bop -12 160 a Fb(7.2)56 b(String)18 b(Manipulation)-12 245
2031y Fm(The)e(\014rst)e(example)i(is)g(a)f(function)h(to)f(trim)g(extra)f
2032(blanks)i(at)f(the)g(b)q(eginning)i(and)f(end)g(of)e(a)h(string.)-12
2033339 y Fj(function)23 b(trim\(s\))36 396 y(local)g(i)h(=)g(1)36
2034452 y(while)f(strsub\(s,i,i\))f(=)i(')g(')f(do)84 509 y(i)g(=)h(i+1)36
2035565 y(end)36 622 y(local)f(l)h(=)g(strlen\(s\))36 678 y(while)f
2036(strsub\(s,l,l\))f(=)i(')g(')f(do)84 734 y(l)g(=)h(l-1)36 791
2037y(end)36 847 y(return)f(strsub\(s,i,l\))-12 904 y(end)59 998
2038y Fm(The)15 b(second)h(example)g(sho)o(ws)e(a)h(function)h(that)f(eliminates)
2039i(all)f(blanks)g(of)f(a)f(string.)899 2976 y(16)p eop
2040%%Page: 17 17
2041bop -12 160 a Fj(function)23 b(remove_blanks)f(\(s\))36 216
2042y(local)h(b)h(=)g(strfind\(s,)e(')i('\))36 273 y(while)f(b)h(do)84
2043329 y(s)f(=)h(strsub\(s,)f(1,)g(b-1\))h(..)f(strsub\(s,)g(b+1\))84
2044385 y(b)g(=)h(strfind\(s,)f(')g('\))36 442 y(end)36 498 y(return)g(s)-12
2045555 y(end)-12 677 y Fb(7.3)56 b(P)n(ersistence)-12 762 y Fm(Because)19
2046b(of)f(its)h(re\015exiv)o(e)g(facilities,)i(p)q(ersistence)e(in)g(Lua)g(can)g
2047(b)q(e)f(ac)o(hiev)o(ed)i(with)e(Lua.)30 b(This)19 b(section)-12
2048819 y(sho)o(ws)c(some)h(w)o(a)o(ys)e(to)i(store)f(and)h(retriev)o(e)f(v)m
2049(alues)i(in)g(Lua,)f(using)g(a)g(text)f(\014le)i(written)f(in)g(the)g
2050(language)-12 875 y(itself)g(as)f(the)g(storage)f(media.)59
2051932 y(T)l(o)h(store)f(a)h(single)i(v)m(alue)f(with)g(a)e(name,)h(the)h(follo)
2052o(wing)f(co)q(de)h(is)g(enough:)-12 1026 y Fj(function)23 b(store)g(\(name,)g
2053(value\))36 1082 y(write\('\\n')f(..)i(name)f(..)h('='\))36
20541138 y(write_value\(value\))-12 1195 y(end)-12 1301 y(function)f(write_value)
2055f(\(value\))36 1358 y(local)h(t)h(=)g(type\(value\))131 1414
2056y(if)g(t)g(=)f('nil')95 b(then)23 b(write\('nil'\))36 1471
2057y(elseif)g(t)h(=)f('number')g(then)g(write\(value\))36 1527
2058y(elseif)g(t)h(=)f('string')g(then)g(write\('"')g(..)h(value)f(..)g('"'\))36
20591583 y(end)-12 1640 y(end)-12 1746 y Fm(In)16 b(order)f(to)g(restore)f(this)i
2060(v)m(alue,)g(a)f Fj(lua_dofile)e Fm(su\016ces.)59 1803 y(Storing)k(tables)g
2061(is)g(a)g(little)h(more)f(complex.)25 b(Assuming)18 b(that)e(the)h(table)h
2062(is)f(a)g(tree,)f(and)h(all)h(indices)-12 1859 y(are)e(iden)o(ti\014ers)i
2063(\(that)d(is,)h(the)h(tables)f(are)g(b)q(eing)i(used)e(as)g(records\),)g(its)
2064g(v)m(alue)i(can)e(b)q(e)h(written)f(directly)-12 1916 y(with)g(table)f
2065(constructors.)k(First,)c(the)g(function)h Fj(write_value)e
2066Fm(is)i(c)o(hanged)f(to)-12 2009 y Fj(function)23 b(write_value)f(\(value\))
206736 2066 y(local)h(t)h(=)g(type\(value\))131 2122 y(if)g(t)g(=)f('nil')95
2068b(then)23 b(write\('nil'\))36 2179 y(elseif)g(t)h(=)f('number')g(then)g
2069(write\(value\))36 2235 y(elseif)g(t)h(=)f('string')g(then)g(write\('"')g(..)
2070h(value)f(..)g('"'\))36 2292 y(elseif)g(t)h(=)f('table')47
2071b(then)23 b(write_record\(value\))36 2348 y(end)-12 2405 y(end)-12
20722498 y Fm(The)16 b(function)g Fj(write_record)d Fm(is:)899
20732976 y(17)p eop
2074%%Page: 18 18
2075bop -12 160 a Fj(function)23 b(write_record\(t\))36 216 y(local)g(i,)h(v)f(=)
2076h(next\(t,)f(nil\))36 273 y(write\('@{'\))46 b(--)24 b(starts)f(constructor)
207736 329 y(while)g(i)h(do)84 385 y(store\(i,)e(v\))84 442 y(i,)h(v)h(=)g
2078(next\(t,)f(i\))84 498 y(if)g(i)h(then)f(write\(',)g('\))h(end)36
2079555 y(end)36 611 y(write\('}'\))46 b(--)24 b(closes)f(constructor)-12
2080668 y(end)-12 789 y Fb(7.4)56 b(A)19 b(Cfunction)-12 875 y
2081Fm(A)c(Cfunction)h(to)f(compute)g(the)g(maxim)o(um)h(of)e(a)h(v)m(ariable)i
2082(n)o(um)o(b)q(er)e(of)g(argumen)o(ts)f(ma)o(y)h(b)q(e)h(written)f(as:)-12
2083969 y Fj(void)24 b(math_max)e(\(void\))-12 1026 y({)12 1082
2084y(int)i(i=1;)71 b(/*)23 b(number)g(of)h(arguments)e(*/)12 1138
2085y(double)h(d,)h(dmax;)12 1195 y(lua_Object)f(o;)12 1251 y(/*)h(the)f
2086(function)g(must)g(get)h(at)f(least)g(one)h(argument)f(*/)12
20871308 y(if)h(\(\(o)f(=)h(lua_getparam\(i++\)\))d(==)j(0\))12
20881364 y({)g(lua_error)e(\("too)i(few)f(arguments)g(to)g(function)g(`max'"\);)g
2089(return;)g(})12 1421 y(/*)h(and)f(this)g(argument)g(must)g(be)h(a)g(number)f
2090(*/)12 1477 y(if)h(\(!lua_isnumber\(o\)\))12 1534 y({)g(lua_error)e
2091(\("incorrect)h(arguments)f(to)i(function)f(`max'"\);)g(return;)f(})12
20921590 y(dmax)h(=)h(lua_getnumber)e(\(o\);)12 1647 y(/*)i(loops)f(until)g
2093(there)g(is)h(no)f(more)h(arguments)e(*/)12 1703 y(while)h(\(\(o)h(=)f
2094(lua_getparam\(i++\)\))f(!=)h(0\))12 1759 y({)36 1816 y(if)h
2095(\(!lua_isnumber\(o\)\))36 1872 y({)g(lua_error)e(\("incorrect)h(arguments)f
2096(to)i(function)f(`max'"\);)f(return;)h(})36 1929 y(d)h(=)f(lua_getnumber)f
2097(\(o\);)36 1985 y(if)i(\(d)f(>)h(dmax\))f(dmax)g(=)h(d;)12
20982042 y(})12 2098 y(/*)g(push)f(the)g(result)g(to)h(be)g(returned)e(*/)12
20992155 y(lua_pushnumber)g(\(dmax\);)-12 2211 y(})59 2305 y Fm(After)15
2100b(registered)g(with)-12 2399 y Fj(lua_register)22 b(\("max",)71
2101b(math_max\);)-12 2493 y Fm(this)16 b(function)g(is)g(a)o(v)m(ailable)g(in)g
2102(Lua,)g(as)e(follo)o(ws:)-12 2586 y Fj(i)24 b(=)g(max\(4,)f(5,)g(10,)h(-34\))
210347 b(--)23 b(i)h(receives)f(10)-12 2708 y Fb(7.5)56 b(Calling)18
2104b(Lua)h(F)-5 b(unctions)-12 2794 y Fm(This)15 b(example)g(illustrates)g(ho)o
2105(w)f(a)g(C)g(function)h(can)f(call)i(the)e(Lua)g(function)h
2106Fj(remove_blanks)e Fm(presen)o(ted)-12 2850 y(in)j(Section)g(7.2.)899
21072976 y(18)p eop
2108%%Page: 19 19
2109bop -12 160 a Fj(void)24 b(remove_blanks)e(\(char)h(*s\))-12
2110216 y({)36 273 y(lua_pushstring\(s\);)45 b(/*)24 b(prepare)f(parameter)f(*/)
211136 329 y(lua_call\("remove_blanks",)e(1\);)48 b(/*)23 b(call)h(Lua)f
2112(function)g(with)g(1)h(parameter)e(*/)36 385 y(strcpy\(s,)h
2113(lua_getstring\(lua_pop\(\))o(\)\);)45 b(/*)23 b(copy)h(result)f(back)g(to)h
2114('s')f(*/)-12 442 y(})-12 585 y Fl(Ac)n(kno)n(wledgme)o(n)n(ts)-12
2115687 y Fm(The)17 b(authors)f(w)o(ould)i(lik)o(e)g(to)e(thank)h(CENPES/PETR)o
2116(OBR)1099 675 y(\023)1093 687 y(AS)g(whic)o(h,)h(join)o(tly)f(with)h(T)l
2117(eCGraf,)e(used)-12 743 y(extensiv)o(ely)g(early)f(v)o(ersions)f(of)g(this)h
2118(system)f(and)h(ga)o(v)o(e)f(v)m(aluable)i(commen)o(ts.)j(The)c(authors)e(w)o
2119(ould)i(also)-12 799 y(lik)o(e)i(to)d(thank)h(Carlos)g(Henrique)h(Levy)l(,)g
2120(who)f(found)h(the)f(name)g(of)g(the)g(game.)899 2976 y(19)p
2121eop
2122%%Trailer
2123end
2124userdict /end-hook known{end-hook}if
2125%%EOF
domake+6−0
@@ -0,0 +1,6 @@
1#!/bin/sh
2
3LUA=`pwd`
4export LUA
5
6make $*
fixed/iolib.c+0−402
@@ -1,402 +0,0 @@
1/*
2** iolib.c
3** Input/output library to LUA
4**
5** Waldemar Celes Filho
6** TeCGraf - PUC-Rio
7** 19 May 93
8*/
9
10#include <stdlib.h>
11#include <string.h>
12#include <stdio.h>
13#include <ctype.h>
14#ifdef __GNUC__
15#include <floatingpoint.h>
16#endif
17
18#include "lua.h"
19
20static FILE *in=NULL, *out=NULL;
21
22/*
23** Open a file to read.
24** LUA interface:
25** status = readfrom (filename)
26** where:
27** status = 1 -> success
28** status = 0 -> error
29*/
30static void io_readfrom (void)
31{
32 lua_Object o = lua_getparam (1);
33 if (o == NULL) /* restore standart input */
34 {
35 if (in != stdin)
36 {
37 fclose (in);
38 in = stdin;
39 }
40 lua_pushnumber (1);
41 }
42 else
43 {
44 if (!lua_isstring (o))
45 {
46 lua_error ("incorrect argument to function 'readfrom`");
47 lua_pushnumber (0);
48 }
49 else
50 {
51 FILE *fp = fopen (lua_getstring(o),"r");
52 if (fp == NULL)
53 {
54 lua_pushnumber (0);
55 }
56 else
57 {
58 if (in != stdin) fclose (in);
59 in = fp;
60 lua_pushnumber (1);
61 }
62 }
63 }
64}
65
66
67/*
68** Open a file to write.
69** LUA interface:
70** status = writeto (filename)
71** where:
72** status = 1 -> success
73** status = 0 -> error
74*/
75static void io_writeto (void)
76{
77 lua_Object o = lua_getparam (1);
78 if (o == NULL) /* restore standart output */
79 {
80 if (out != stdout)
81 {
82 fclose (out);
83 out = stdout;
84 }
85 lua_pushnumber (1);
86 }
87 else
88 {
89 if (!lua_isstring (o))
90 {
91 lua_error ("incorrect argument to function 'writeto`");
92 lua_pushnumber (0);
93 }
94 else
95 {
96 FILE *fp = fopen (lua_getstring(o),"w");
97 if (fp == NULL)
98 {
99 lua_pushnumber (0);
100 }
101 else
102 {
103 if (out != stdout) fclose (out);
104 out = fp;
105 lua_pushnumber (1);
106 }
107 }
108 }
109}
110
111
112/*
113** Read a variable. On error put nil on stack.
114** LUA interface:
115** variable = read ([format])
116**
117** O formato pode ter um dos seguintes especificadores:
118**
119** s ou S -> para string
120** f ou F, g ou G, e ou E -> para reais
121** i ou I -> para inteiros
122**
123** Estes especificadores podem vir seguidos de numero que representa
124** o numero de campos a serem lidos.
125*/
126static void io_read (void)
127{
128 lua_Object o = lua_getparam (1);
129 if (o == NULL) /* free format */
130 {
131 int c;
132 char s[256];
133 while (isspace(c=fgetc(in)))
134 ;
135 if (c == '\"')
136 {
137 if (fscanf (in, "%[^\"]\"", s) != 1)
138 {
139 lua_pushnil ();
140 return;
141 }
142 }
143 else if (c == '\'')
144 {
145 if (fscanf (in, "%[^\']\'", s) != 1)
146 {
147 lua_pushnil ();
148 return;
149 }
150 }
151 else
152 {
153 char *ptr;
154 double d;
155 ungetc (c, in);
156 if (fscanf (in, "%s", s) != 1)
157 {
158 lua_pushnil ();
159 return;
160 }
161 d = strtod (s, &ptr);
162 if (!(*ptr))
163 {
164 lua_pushnumber (d);
165 return;
166 }
167 }
168 lua_pushstring (s);
169 return;
170 }
171 else /* formatted */
172 {
173 char *e = lua_getstring(o);
174 char t;
175 int m=0;
176 while (isspace(*e)) e++;
177 t = *e++;
178 while (isdigit(*e))
179 m = m*10 + (*e++ - '0');
180
181 if (m > 0)
182 {
183 char f[80];
184 char s[256];
185 sprintf (f, "%%%ds", m);
186 fscanf (in, f, s);
187 switch (tolower(t))
188 {
189 case 'i':
190 {
191 long int l;
192 sscanf (s, "%ld", &l);
193 lua_pushnumber(l);
194 }
195 break;
196 case 'f': case 'g': case 'e':
197 {
198 float f;
199 sscanf (s, "%f", &f);
200 lua_pushnumber(f);
201 }
202 break;
203 default:
204 lua_pushstring(s);
205 break;
206 }
207 }
208 else
209 {
210 switch (tolower(t))
211 {
212 case 'i':
213 {
214 long int l;
215 fscanf (in, "%ld", &l);
216 lua_pushnumber(l);
217 }
218 break;
219 case 'f': case 'g': case 'e':
220 {
221 float f;
222 fscanf (in, "%f", &f);
223 lua_pushnumber(f);
224 }
225 break;
226 default:
227 {
228 char s[256];
229 fscanf (in, "%s", s);
230 lua_pushstring(s);
231 }
232 break;
233 }
234 }
235 }
236}
237
238
239/*
240** Write a variable. On error put 0 on stack, otherwise put 1.
241** LUA interface:
242** status = write (variable [,format])
243**
244** O formato pode ter um dos seguintes especificadores:
245**
246** s ou S -> para string
247** f ou F, g ou G, e ou E -> para reais
248** i ou I -> para inteiros
249**
250** Estes especificadores podem vir seguidos de:
251**
252** [?][m][.n]
253**
254** onde:
255** ? -> indica justificacao
256** < = esquerda
257** | = centro
258** > = direita (default)
259** m -> numero maximo de campos (se exceder estoura)
260** n -> indica precisao para
261** reais -> numero de casas decimais
262** inteiros -> numero minimo de digitos
263** string -> nao se aplica
264*/
265static char *buildformat (char *e, lua_Object o)
266{
267 static char buffer[512];
268 static char f[80];
269 char *string = &buffer[255];
270 char t, j='r';
271 int m=0, n=0, l;
272 while (isspace(*e)) e++;
273 t = *e++;
274 if (*e == '<' || *e == '|' || *e == '>') j = *e++;
275 while (isdigit(*e))
276 m = m*10 + (*e++ - '0');
277 e++; /* skip point */
278 while (isdigit(*e))
279 n = n*10 + (*e++ - '0');
280
281 sprintf(f,"%%");
282 if (j == '<' || j == '|') sprintf(strchr(f,0),"-");
283 if (m != 0) sprintf(strchr(f,0),"%d", m);
284 if (n != 0) sprintf(strchr(f,0),".%d", n);
285 sprintf(strchr(f,0), "%c", t);
286 switch (tolower(t))
287 {
288 case 'i': t = 'i';
289 sprintf (string, f, (long int)lua_getnumber(o));
290 break;
291 case 'f': case 'g': case 'e': t = 'f';
292 sprintf (string, f, (float)lua_getnumber(o));
293 break;
294 case 's': t = 's';
295 sprintf (string, f, lua_getstring(o));
296 break;
297 default: return "";
298 }
299 l = strlen(string);
300 if (m!=0 && l>m)
301 {
302 int i;
303 for (i=0; i<m; i++)
304 string[i] = '*';
305 string[i] = 0;
306 }
307 else if (m!=0 && j=='|')
308 {
309 int i=l-1;
310 while (isspace(string[i])) i--;
311 string -= (m-i) / 2;
312 i=0;
313 while (string[i]==0) string[i++] = ' ';
314 string[l] = 0;
315 }
316 return string;
317}
318static void io_write (void)
319{
320 lua_Object o1 = lua_getparam (1);
321 lua_Object o2 = lua_getparam (2);
322 if (o1 == NULL) /* new line */
323 {
324 fprintf (out, "\n");
325 lua_pushnumber(1);
326 }
327 else if (o2 == NULL) /* free format */
328 {
329 int status=0;
330 if (lua_isnumber(o1))
331 status = fprintf (out, "%g", lua_getnumber(o1));
332 else if (lua_isstring(o1))
333 status = fprintf (out, "%s", lua_getstring(o1));
334 lua_pushnumber(status);
335 }
336 else /* formated */
337 {
338 if (!lua_isstring(o2))
339 {
340 lua_error ("incorrect format to function `write'");
341 lua_pushnumber(0);
342 return;
343 }
344 lua_pushnumber(fprintf (out, "%s", buildformat(lua_getstring(o2),o1)));
345 }
346}
347
348/*
349** Execute a executable program using "sustem".
350** On error put 0 on stack, otherwise put 1.
351*/
352void io_execute (void)
353{
354 lua_Object o = lua_getparam (1);
355 if (o == NULL || !lua_isstring (o))
356 {
357 lua_error ("incorrect argument to function 'execute`");
358 lua_pushnumber (0);
359 }
360 else
361 {
362 system(lua_getstring(o));
363 lua_pushnumber (1);
364 }
365 return;
366}
367
368/*
369** Remove a file.
370** On error put 0 on stack, otherwise put 1.
371*/
372void io_remove (void)
373{
374 lua_Object o = lua_getparam (1);
375 if (o == NULL || !lua_isstring (o))
376 {
377 lua_error ("incorrect argument to function 'execute`");
378 lua_pushnumber (0);
379 }
380 else
381 {
382 if (remove(lua_getstring(o)) == 0)
383 lua_pushnumber (1);
384 else
385 lua_pushnumber (0);
386 }
387 return;
388}
389
390/*
391** Open io library
392*/
393void iolib_open (void)
394{
395 in=stdin; out=stdout;
396 lua_register ("readfrom", io_readfrom);
397 lua_register ("writeto", io_writeto);
398 lua_register ("read", io_read);
399 lua_register ("write", io_write);
400 lua_register ("execute", io_execute);
401 lua_register ("remove", io_remove);
402}
fixed/lex_yy.c+0−923
@@ -1,923 +0,0 @@
1# include "stdio.h"
2# define U(x) x
3# define NLSTATE yyprevious=YYNEWLINE
4# define BEGIN yybgin = yysvec + 1 +
5# define INITIAL 0
6# define YYLERR yysvec
7# define YYSTATE (yyestate-yysvec-1)
8# define YYOPTIM 1
9# define YYLMAX BUFSIZ
10# define output(c) putc(c,yyout)
11# define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
12# define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;}
13# define yymore() (yymorfg=1)
14# define ECHO fprintf(yyout, "%s",yytext)
15# define REJECT { nstr = yyreject(); goto yyfussy;}
16int yyleng; extern char yytext[];
17int yymorfg;
18extern char *yysptr, yysbuf[];
19int yytchar;
20FILE *yyin = {NULL}, *yyout = {NULL};
21extern int yylineno;
22struct yysvf {
23 struct yywork *yystoff;
24 struct yysvf *yyother;
25 int *yystops;};
26struct yysvf *yyestate;
27extern struct yysvf yysvec[], *yybgin;
28#include <stdlib.h>
29#include <string.h>
30
31#include "opcode.h"
32#include "hash.h"
33#include "inout.h"
34#include "table.h"
35#include "y_tab.h"
36
37#undef input
38#undef unput
39
40static Input input;
41static Unput unput;
42
43void lua_setinput (Input fn)
44{
45 input = fn;
46}
47
48void lua_setunput (Unput fn)
49{
50 unput = fn;
51}
52
53char *lua_lasttext (void)
54{
55 return yytext;
56}
57
58# define YYNEWLINE 10
59yylex(){
60int nstr; extern int yyprevious;
61while((nstr = yylook()) >= 0)
62yyfussy: switch(nstr){
63case 0:
64if(yywrap()) return(0); break;
65case 1:
66 ;
67break;
68case 2:
69 {yylval.vInt = 1; return DEBUG;}
70break;
71case 3:
72 {yylval.vInt = 0; return DEBUG;}
73break;
74case 4:
75 lua_linenumber++;
76break;
77case 5:
78 ;
79break;
80case 6:
81 return LOCAL;
82break;
83case 7:
84 return IF;
85break;
86case 8:
87 return THEN;
88break;
89case 9:
90 return ELSE;
91break;
92case 10:
93 return ELSEIF;
94break;
95case 11:
96 return WHILE;
97break;
98case 12:
99 return DO;
100break;
101case 13:
102 return REPEAT;
103break;
104case 14:
105 return UNTIL;
106break;
107case 15:
108 {
109 yylval.vWord = lua_nfile-1;
110 return FUNCTION;
111 }
112break;
113case 16:
114 return END;
115break;
116case 17:
117 return RETURN;
118break;
119case 18:
120 return LOCAL;
121break;
122case 19:
123 return NIL;
124break;
125case 20:
126 return AND;
127break;
128case 21:
129 return OR;
130break;
131case 22:
132 return NOT;
133break;
134case 23:
135 return NE;
136break;
137case 24:
138 return LE;
139break;
140case 25:
141 return GE;
142break;
143case 26:
144 return CONC;
145break;
146case 27:
147 case 28:
148 {
149 yylval.vWord = lua_findenclosedconstant (yytext);
150 return STRING;
151 }
152break;
153case 29:
154case 30:
155case 31:
156case 32:
157{
158 yylval.vFloat = atof(yytext);
159 return NUMBER;
160 }
161break;
162case 33:
163 {
164 yylval.vWord = lua_findsymbol (yytext);
165 return NAME;
166 }
167break;
168case 34:
169 return *yytext;
170break;
171case -1:
172break;
173default:
174fprintf(yyout,"bad switch yylook %d",nstr);
175} return(0); }
176/* end of yylex */
177int yyvstop[] = {
1780,
179
1801,
1810,
182
1831,
1840,
185
18634,
1870,
188
1891,
19034,
1910,
192
1934,
1940,
195
19634,
1970,
198
19934,
2000,
201
20234,
2030,
204
20534,
2060,
207
20829,
20934,
2100,
211
21234,
2130,
214
21534,
2160,
217
21833,
21934,
2200,
221
22233,
22334,
2240,
225
22633,
22734,
2280,
229
23033,
23134,
2320,
233
23433,
23534,
2360,
237
23833,
23934,
2400,
241
24233,
24334,
2440,
245
24633,
24734,
2480,
249
25033,
25134,
2520,
253
25433,
25534,
2560,
257
25833,
25934,
2600,
261
26233,
26334,
2640,
265
26633,
26734,
2680,
269
27034,
2710,
272
27334,
2740,
275
2761,
2770,
278
27927,
2800,
281
28228,
2830,
284
2855,
2860,
287
28826,
2890,
290
29130,
2920,
293
29429,
2950,
296
29729,
2980,
299
30024,
3010,
302
30325,
3040,
305
30633,
3070,
308
30933,
3100,
311
31212,
31333,
3140,
315
31633,
3170,
318
31933,
3200,
321
32233,
3230,
324
3257,
32633,
3270,
328
32933,
3300,
331
33233,
3330,
334
33533,
3360,
337
33821,
33933,
3400,
341
34233,
3430,
344
34533,
3460,
347
34833,
3490,
350
35133,
3520,
353
35423,
3550,
356
35729,
35830,
3590,
360
36131,
3620,
363
36420,
36533,
3660,
367
36833,
3690,
370
37116,
37233,
3730,
374
37533,
3760,
377
37833,
3790,
380
38119,
38233,
3830,
384
38522,
38633,
3870,
388
38933,
3900,
391
39233,
3930,
394
39533,
3960,
397
39833,
3990,
400
40133,
4020,
403
40432,
4050,
406
4079,
40833,
4090,
410
41133,
4120,
413
41433,
4150,
416
41733,
4180,
419
42033,
4210,
422
4238,
42433,
4250,
426
42733,
4280,
429
43033,
4310,
432
43331,
43432,
4350,
436
43733,
4380,
439
44033,
4410,
442
4436,
44418,
44533,
4460,
447
44833,
4490,
450
45133,
4520,
453
45414,
45533,
4560,
457
45811,
45933,
4600,
461
46210,
46333,
4640,
465
46633,
4670,
468
46913,
47033,
4710,
472
47317,
47433,
4750,
476
4772,
4780,
479
48033,
4810,
482
48315,
48433,
4850,
486
4873,
4880,
4890};
490# define YYTYPE char
491struct yywork { YYTYPE verify, advance; } yycrank[] = {
4920,0, 0,0, 1,3, 0,0,
4930,0, 0,0, 0,0, 0,0,
4940,0, 0,0, 1,4, 1,5,
4956,29, 4,28, 0,0, 0,0,
4960,0, 0,0, 7,31, 0,0,
4976,29, 6,29, 0,0, 0,0,
4980,0, 0,0, 7,31, 7,31,
4990,0, 0,0, 0,0, 0,0,
5000,0, 0,0, 0,0, 1,6,
5014,28, 0,0, 0,0, 0,0,
5021,7, 0,0, 0,0, 0,0,
5031,3, 6,30, 1,8, 1,9,
5040,0, 1,10, 6,29, 7,31,
5058,33, 0,0, 6,29, 0,0,
5067,32, 0,0, 0,0, 6,29,
5077,31, 1,11, 0,0, 1,12,
5082,27, 7,31, 1,13, 11,39,
50912,40, 1,13, 26,56, 0,0,
5100,0, 2,8, 2,9, 0,0,
5116,29, 0,0, 0,0, 6,29,
5120,0, 0,0, 7,31, 0,0,
5130,0, 7,31, 0,0, 0,0,
5142,11, 0,0, 2,12, 0,0,
5150,0, 0,0, 0,0, 0,0,
5160,0, 0,0, 1,14, 0,0,
5170,0, 1,15, 1,16, 1,17,
5180,0, 22,52, 1,18, 18,47,
51923,53, 1,19, 42,63, 1,20,
5201,21, 25,55, 14,42, 1,22,
52115,43, 1,23, 1,24, 16,44,
5221,25, 16,45, 17,46, 19,48,
52321,51, 2,14, 20,49, 1,26,
5242,15, 2,16, 2,17, 24,54,
52520,50, 2,18, 44,64, 45,65,
5262,19, 46,66, 2,20, 2,21,
52727,57, 48,67, 2,22, 49,68,
5282,23, 2,24, 50,69, 2,25,
52952,70, 53,72, 27,58, 54,73,
53052,71, 9,34, 2,26, 9,35,
5319,35, 9,35, 9,35, 9,35,
5329,35, 9,35, 9,35, 9,35,
5339,35, 10,36, 55,74, 10,37,
53410,37, 10,37, 10,37, 10,37,
53510,37, 10,37, 10,37, 10,37,
53610,37, 57,75, 58,76, 64,80,
53766,81, 67,82, 70,83, 71,84,
53872,85, 73,86, 74,87, 10,38,
53910,38, 38,61, 10,38, 38,61,
54075,88, 76,89, 38,62, 38,62,
54138,62, 38,62, 38,62, 38,62,
54238,62, 38,62, 38,62, 38,62,
54380,92, 81,93, 13,41, 13,41,
54413,41, 13,41, 13,41, 13,41,
54513,41, 13,41, 13,41, 13,41,
54682,94, 83,95, 84,96, 10,38,
54710,38, 86,97, 10,38, 13,41,
54813,41, 13,41, 13,41, 13,41,
54913,41, 13,41, 13,41, 13,41,
55013,41, 13,41, 13,41, 13,41,
55113,41, 13,41, 13,41, 13,41,
55213,41, 13,41, 13,41, 13,41,
55313,41, 13,41, 13,41, 13,41,
55413,41, 87,98, 88,99, 60,79,
55560,79, 13,41, 60,79, 13,41,
55613,41, 13,41, 13,41, 13,41,
55713,41, 13,41, 13,41, 13,41,
55813,41, 13,41, 13,41, 13,41,
55913,41, 13,41, 13,41, 13,41,
56013,41, 13,41, 13,41, 13,41,
56113,41, 13,41, 13,41, 13,41,
56213,41, 33,33, 89,100, 60,79,
56360,79, 92,101, 60,79, 93,102,
56495,103, 33,33, 33,0, 96,104,
56599,105, 100,106, 102,107, 106,108,
566107,109, 35,35, 35,35, 35,35,
56735,35, 35,35, 35,35, 35,35,
56835,35, 35,35, 35,35, 108,110,
5690,0, 0,0, 0,0, 0,0,
5700,0, 0,0, 33,33, 0,0,
5710,0, 35,59, 35,59, 33,33,
57235,59, 0,0, 0,0, 33,33,
5730,0, 0,0, 0,0, 0,0,
57433,33, 0,0, 0,0, 0,0,
5750,0, 36,60, 36,60, 36,60,
57636,60, 36,60, 36,60, 36,60,
57736,60, 36,60, 36,60, 0,0,
5780,0, 33,33, 0,0, 0,0,
57933,33, 35,59, 35,59, 0,0,
58035,59, 36,38, 36,38, 59,77,
58136,38, 59,77, 0,0, 0,0,
58259,78, 59,78, 59,78, 59,78,
58359,78, 59,78, 59,78, 59,78,
58459,78, 59,78, 61,62, 61,62,
58561,62, 61,62, 61,62, 61,62,
58661,62, 61,62, 61,62, 61,62,
5870,0, 0,0, 0,0, 0,0,
5880,0, 36,38, 36,38, 0,0,
58936,38, 77,78, 77,78, 77,78,
59077,78, 77,78, 77,78, 77,78,
59177,78, 77,78, 77,78, 79,90,
5920,0, 79,90, 0,0, 0,0,
59379,91, 79,91, 79,91, 79,91,
59479,91, 79,91, 79,91, 79,91,
59579,91, 79,91, 90,91, 90,91,
59690,91, 90,91, 90,91, 90,91,
59790,91, 90,91, 90,91, 90,91,
5980,0};
599struct yysvf yysvec[] = {
6000, 0, 0,
601yycrank+-1, 0, yyvstop+1,
602yycrank+-28, yysvec+1, yyvstop+3,
603yycrank+0, 0, yyvstop+5,
604yycrank+4, 0, yyvstop+7,
605yycrank+0, 0, yyvstop+10,
606yycrank+-11, 0, yyvstop+12,
607yycrank+-17, 0, yyvstop+14,
608yycrank+7, 0, yyvstop+16,
609yycrank+107, 0, yyvstop+18,
610yycrank+119, 0, yyvstop+20,
611yycrank+6, 0, yyvstop+23,
612yycrank+7, 0, yyvstop+25,
613yycrank+158, 0, yyvstop+27,
614yycrank+4, yysvec+13, yyvstop+30,
615yycrank+5, yysvec+13, yyvstop+33,
616yycrank+11, yysvec+13, yyvstop+36,
617yycrank+5, yysvec+13, yyvstop+39,
618yycrank+5, yysvec+13, yyvstop+42,
619yycrank+12, yysvec+13, yyvstop+45,
620yycrank+21, yysvec+13, yyvstop+48,
621yycrank+10, yysvec+13, yyvstop+51,
622yycrank+4, yysvec+13, yyvstop+54,
623yycrank+4, yysvec+13, yyvstop+57,
624yycrank+21, yysvec+13, yyvstop+60,
625yycrank+9, yysvec+13, yyvstop+63,
626yycrank+9, 0, yyvstop+66,
627yycrank+40, 0, yyvstop+68,
628yycrank+0, yysvec+4, yyvstop+70,
629yycrank+0, yysvec+6, 0,
630yycrank+0, 0, yyvstop+72,
631yycrank+0, yysvec+7, 0,
632yycrank+0, 0, yyvstop+74,
633yycrank+-280, 0, yyvstop+76,
634yycrank+0, 0, yyvstop+78,
635yycrank+249, 0, yyvstop+80,
636yycrank+285, 0, yyvstop+82,
637yycrank+0, yysvec+10, yyvstop+84,
638yycrank+146, 0, 0,
639yycrank+0, 0, yyvstop+86,
640yycrank+0, 0, yyvstop+88,
641yycrank+0, yysvec+13, yyvstop+90,
642yycrank+10, yysvec+13, yyvstop+92,
643yycrank+0, yysvec+13, yyvstop+94,
644yycrank+19, yysvec+13, yyvstop+97,
645yycrank+35, yysvec+13, yyvstop+99,
646yycrank+27, yysvec+13, yyvstop+101,
647yycrank+0, yysvec+13, yyvstop+103,
648yycrank+42, yysvec+13, yyvstop+106,
649yycrank+35, yysvec+13, yyvstop+108,
650yycrank+30, yysvec+13, yyvstop+110,
651yycrank+0, yysvec+13, yyvstop+112,
652yycrank+36, yysvec+13, yyvstop+115,
653yycrank+48, yysvec+13, yyvstop+117,
654yycrank+35, yysvec+13, yyvstop+119,
655yycrank+61, yysvec+13, yyvstop+121,
656yycrank+0, 0, yyvstop+123,
657yycrank+76, 0, 0,
658yycrank+67, 0, 0,
659yycrank+312, 0, 0,
660yycrank+183, yysvec+36, yyvstop+125,
661yycrank+322, 0, 0,
662yycrank+0, yysvec+61, yyvstop+128,
663yycrank+0, yysvec+13, yyvstop+130,
664yycrank+78, yysvec+13, yyvstop+133,
665yycrank+0, yysvec+13, yyvstop+135,
666yycrank+81, yysvec+13, yyvstop+138,
667yycrank+84, yysvec+13, yyvstop+140,
668yycrank+0, yysvec+13, yyvstop+142,
669yycrank+0, yysvec+13, yyvstop+145,
670yycrank+81, yysvec+13, yyvstop+148,
671yycrank+66, yysvec+13, yyvstop+150,
672yycrank+74, yysvec+13, yyvstop+152,
673yycrank+80, yysvec+13, yyvstop+154,
674yycrank+78, yysvec+13, yyvstop+156,
675yycrank+94, 0, 0,
676yycrank+93, 0, 0,
677yycrank+341, 0, 0,
678yycrank+0, yysvec+77, yyvstop+158,
679yycrank+356, 0, 0,
680yycrank+99, yysvec+13, yyvstop+160,
681yycrank+89, yysvec+13, yyvstop+163,
682yycrank+108, yysvec+13, yyvstop+165,
683yycrank+120, yysvec+13, yyvstop+167,
684yycrank+104, yysvec+13, yyvstop+169,
685yycrank+0, yysvec+13, yyvstop+171,
686yycrank+113, yysvec+13, yyvstop+174,
687yycrank+148, yysvec+13, yyvstop+176,
688yycrank+133, 0, 0,
689yycrank+181, 0, 0,
690yycrank+366, 0, 0,
691yycrank+0, yysvec+90, yyvstop+178,
692yycrank+183, yysvec+13, yyvstop+181,
693yycrank+182, yysvec+13, yyvstop+183,
694yycrank+0, yysvec+13, yyvstop+185,
695yycrank+172, yysvec+13, yyvstop+189,
696yycrank+181, yysvec+13, yyvstop+191,
697yycrank+0, yysvec+13, yyvstop+193,
698yycrank+0, yysvec+13, yyvstop+196,
699yycrank+189, 0, 0,
700yycrank+195, 0, 0,
701yycrank+0, yysvec+13, yyvstop+199,
702yycrank+183, yysvec+13, yyvstop+202,
703yycrank+0, yysvec+13, yyvstop+204,
704yycrank+0, yysvec+13, yyvstop+207,
705yycrank+0, 0, yyvstop+210,
706yycrank+178, 0, 0,
707yycrank+186, yysvec+13, yyvstop+212,
708yycrank+204, 0, 0,
709yycrank+0, yysvec+13, yyvstop+214,
710yycrank+0, 0, yyvstop+217,
7110, 0, 0};
712struct yywork *yytop = yycrank+423;
713struct yysvf *yybgin = yysvec+1;
714char yymatch[] = {
71500 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
71601 ,011 ,012 ,01 ,01 ,01 ,01 ,01 ,
71701 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
71801 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
719011 ,01 ,'"' ,01 ,01 ,01 ,01 ,047 ,
72001 ,01 ,01 ,'+' ,01 ,'+' ,01 ,01 ,
721'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,
722'0' ,'0' ,01 ,01 ,01 ,01 ,01 ,01 ,
72301 ,'A' ,'A' ,'A' ,'D' ,'D' ,'A' ,'D' ,
724'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
725'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
726'A' ,'A' ,'A' ,01 ,01 ,01 ,01 ,'A' ,
72701 ,'A' ,'A' ,'A' ,'D' ,'D' ,'A' ,'D' ,
728'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
729'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
730'A' ,'A' ,'A' ,01 ,01 ,01 ,01 ,01 ,
7310};
732char yyextra[] = {
7330,0,0,0,0,0,0,0,
7340,0,0,0,0,0,0,0,
7350,0,0,0,0,0,0,0,
7360,0,0,0,0,0,0,0,
7370,0,0,0,0,0,0,0,
7380};
739#ifndef lint
740static char ncform_sccsid[] = "@(#)ncform 1.6 88/02/08 SMI"; /* from S5R2 1.2 */
741#endif
742
743int yylineno =1;
744# define YYU(x) x
745# define NLSTATE yyprevious=YYNEWLINE
746char yytext[YYLMAX];
747struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp;
748char yysbuf[YYLMAX];
749char *yysptr = yysbuf;
750int *yyfnd;
751extern struct yysvf *yyestate;
752int yyprevious = YYNEWLINE;
753yylook(){
754 register struct yysvf *yystate, **lsp;
755 register struct yywork *yyt;
756 struct yysvf *yyz;
757 int yych, yyfirst;
758 struct yywork *yyr;
759# ifdef LEXDEBUG
760 int debug;
761# endif
762 char *yylastch;
763 /* start off machines */
764# ifdef LEXDEBUG
765 debug = 0;
766# endif
767 yyfirst=1;
768 if (!yymorfg)
769 yylastch = yytext;
770 else {
771 yymorfg=0;
772 yylastch = yytext+yyleng;
773 }
774 for(;;){
775 lsp = yylstate;
776 yyestate = yystate = yybgin;
777 if (yyprevious==YYNEWLINE) yystate++;
778 for (;;){
779# ifdef LEXDEBUG
780 if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1);
781# endif
782 yyt = yystate->yystoff;
783 if(yyt == yycrank && !yyfirst){ /* may not be any transitions */
784 yyz = yystate->yyother;
785 if(yyz == 0)break;
786 if(yyz->yystoff == yycrank)break;
787 }
788 *yylastch++ = yych = input();
789 yyfirst=0;
790 tryagain:
791# ifdef LEXDEBUG
792 if(debug){
793 fprintf(yyout,"char ");
794 allprint(yych);
795 putchar('\n');
796 }
797# endif
798 yyr = yyt;
799 if ( (int)yyt > (int)yycrank){
800 yyt = yyr + yych;
801 if (yyt <= yytop && yyt->verify+yysvec == yystate){
802 if(yyt->advance+yysvec == YYLERR) /* error transitions */
803 {unput(*--yylastch);break;}
804 *lsp++ = yystate = yyt->advance+yysvec;
805 goto contin;
806 }
807 }
808# ifdef YYOPTIM
809 else if((int)yyt < (int)yycrank) { /* r < yycrank */
810 yyt = yyr = yycrank+(yycrank-yyt);
811# ifdef LEXDEBUG
812 if(debug)fprintf(yyout,"compressed state\n");
813# endif
814 yyt = yyt + yych;
815 if(yyt <= yytop && yyt->verify+yysvec == yystate){
816 if(yyt->advance+yysvec == YYLERR) /* error transitions */
817 {unput(*--yylastch);break;}
818 *lsp++ = yystate = yyt->advance+yysvec;
819 goto contin;
820 }
821 yyt = yyr + YYU(yymatch[yych]);
822# ifdef LEXDEBUG
823 if(debug){
824 fprintf(yyout,"try fall back character ");
825 allprint(YYU(yymatch[yych]));
826 putchar('\n');
827 }
828# endif
829 if(yyt <= yytop && yyt->verify+yysvec == yystate){
830 if(yyt->advance+yysvec == YYLERR) /* error transition */
831 {unput(*--yylastch);break;}
832 *lsp++ = yystate = yyt->advance+yysvec;
833 goto contin;
834 }
835 }
836 if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){
837# ifdef LEXDEBUG
838 if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1);
839# endif
840 goto tryagain;
841 }
842# endif
843 else
844 {unput(*--yylastch);break;}
845 contin:
846# ifdef LEXDEBUG
847 if(debug){
848 fprintf(yyout,"state %d char ",yystate-yysvec-1);
849 allprint(yych);
850 putchar('\n');
851 }
852# endif
853 ;
854 }
855# ifdef LEXDEBUG
856 if(debug){
857 fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1);
858 allprint(yych);
859 putchar('\n');
860 }
861# endif
862 while (lsp-- > yylstate){
863 *yylastch-- = 0;
864 if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){
865 yyolsp = lsp;
866 if(yyextra[*yyfnd]){ /* must backup */
867 while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){
868 lsp--;
869 unput(*yylastch--);
870 }
871 }
872 yyprevious = YYU(*yylastch);
873 yylsp = lsp;
874 yyleng = yylastch-yytext+1;
875 yytext[yyleng] = 0;
876# ifdef LEXDEBUG
877 if(debug){
878 fprintf(yyout,"\nmatch ");
879 sprint(yytext);
880 fprintf(yyout," action %d\n",*yyfnd);
881 }
882# endif
883 return(*yyfnd++);
884 }
885 unput(*yylastch);
886 }
887 if (yytext[0] == 0 /* && feof(yyin) */)
888 {
889 yysptr=yysbuf;
890 return(0);
891 }
892 yyprevious = yytext[0] = input();
893 if (yyprevious>0)
894 output(yyprevious);
895 yylastch=yytext;
896# ifdef LEXDEBUG
897 if(debug)putchar('\n');
898# endif
899 }
900 }
901yyback(p, m)
902 int *p;
903{
904if (p==0) return(0);
905while (*p)
906 {
907 if (*p++ == m)
908 return(1);
909 }
910return(0);
911}
912 /* the following are only used in the lex library */
913yyinput(){
914 return(input());
915 }
916yyoutput(c)
917 int c; {
918 output(c);
919 }
920yyunput(c)
921 int c; {
922 unput(c);
923 }
fixed/lua.c+0−55
@@ -1,55 +0,0 @@
1/*
2** lua.c
3** Linguagem para Usuarios de Aplicacao
4** TeCGraf - PUC-Rio
5** 28 Apr 93
6*/
7
8#include <stdio.h>
9
10#include "lua.h"
11#include "lualib.h"
12
13
14void test (void)
15{
16 lua_pushobject(lua_getparam(1));
17 lua_call ("c", 1);
18}
19
20
21static void callfunc (void)
22{
23 lua_Object obj = lua_getparam (1);
24 if (lua_isstring(obj)) lua_call(lua_getstring(obj),0);
25}
26
27static void execstr (void)
28{
29 lua_Object obj = lua_getparam (1);
30 if (lua_isstring(obj)) lua_dostring(lua_getstring(obj));
31}
32
33int main (int argc, char *argv[])
34{
35 int i;
36 if (argc < 2)
37 {
38 puts ("usage: lua filename [functionnames]");
39 return;
40 }
41 lua_register ("callfunc", callfunc);
42 lua_register ("execstr", execstr);
43 lua_register ("test", test);
44 iolib_open ();
45 strlib_open ();
46 mathlib_open ();
47 lua_dofile (argv[1]);
48 for (i=2; i<argc; i++)
49 {
50 lua_call (argv[i],0);
51 }
52 return 0;
53}
54
55
floatingpoint.h+0−1
@@ -1 +0,0 @@
1/* empty file to please silly code in iolib.c and opcode.c */
globals.lua+0−5
@@ -1,5 +0,0 @@
1k,v=nextvar(k)
2while k do
3 print(k)
4 k,v=nextvar(k)
5end
include/lua.hrenamed from lua.h+1−1
@@ -2,7 +2,7 @@ · 1 unmodified line
2** LUA - Linguagem para Usuarios de Aplicacao2** LUA - Linguagem para Usuarios de Aplicacao
3** Grupo de Tecnologia em Computacao Grafica3** Grupo de Tecnologia em Computacao Grafica
4** TeCGraf - PUC-Rio4** TeCGraf - PUC-Rio
5** 19 May 935** $Id: lua.h,v 1.1 1993/12/17 18:41:19 celes Exp $
6*/6*/
7 7
8 8
include/lualib.hrenamed from lualib.h+3−2
@@ -1,8 +1,8 @@
1/*1/*
2** Libraries to use in LUA programs2** Libraries to be used in LUA programs
3** Grupo de Tecnologia em Computacao Grafica3** Grupo de Tecnologia em Computacao Grafica
4** TeCGraf - PUC-Rio4** TeCGraf - PUC-Rio
5** 19 May 935** $Id: lualib.h,v 1.1 1993/12/17 19:01:46 celes Exp $
6*/6*/
7 7
8#ifndef lualib_h8#ifndef lualib_h
@@ -13,3 +13,4 @@ void strlib_open (void); · 4 unmodified lines
13void mathlib_open (void);13void mathlib_open (void);
14 14
15#endif15#endif
16
include/mm.h+0−0

Empty file added.

lex_yy.c+0−923
@@ -1,923 +0,0 @@
1# include "stdio.h"
2# define U(x) x
3# define NLSTATE yyprevious=YYNEWLINE
4# define BEGIN yybgin = yysvec + 1 +
5# define INITIAL 0
6# define YYLERR yysvec
7# define YYSTATE (yyestate-yysvec-1)
8# define YYOPTIM 1
9# define YYLMAX BUFSIZ
10# define output(c) putc(c,yyout)
11# define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
12# define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;}
13# define yymore() (yymorfg=1)
14# define ECHO fprintf(yyout, "%s",yytext)
15# define REJECT { nstr = yyreject(); goto yyfussy;}
16int yyleng; extern char yytext[];
17int yymorfg;
18extern char *yysptr, yysbuf[];
19int yytchar;
20FILE *yyin = {stdin}, *yyout = {stdout};
21extern int yylineno;
22struct yysvf {
23 struct yywork *yystoff;
24 struct yysvf *yyother;
25 int *yystops;};
26struct yysvf *yyestate;
27extern struct yysvf yysvec[], *yybgin;
28#include <stdlib.h>
29#include <string.h>
30
31#include "opcode.h"
32#include "hash.h"
33#include "inout.h"
34#include "table.h"
35#include "y_tab.h"
36
37#undef input
38#undef unput
39
40static Input input;
41static Unput unput;
42
43void lua_setinput (Input fn)
44{
45 input = fn;
46}
47
48void lua_setunput (Unput fn)
49{
50 unput = fn;
51}
52
53char *lua_lasttext (void)
54{
55 return yytext;
56}
57
58# define YYNEWLINE 10
59yylex(){
60int nstr; extern int yyprevious;
61while((nstr = yylook()) >= 0)
62yyfussy: switch(nstr){
63case 0:
64if(yywrap()) return(0); break;
65case 1:
66 ;
67break;
68case 2:
69 {yylval.vInt = 1; return DEBUG;}
70break;
71case 3:
72 {yylval.vInt = 0; return DEBUG;}
73break;
74case 4:
75 lua_linenumber++;
76break;
77case 5:
78 ;
79break;
80case 6:
81 return LOCAL;
82break;
83case 7:
84 return IF;
85break;
86case 8:
87 return THEN;
88break;
89case 9:
90 return ELSE;
91break;
92case 10:
93 return ELSEIF;
94break;
95case 11:
96 return WHILE;
97break;
98case 12:
99 return DO;
100break;
101case 13:
102 return REPEAT;
103break;
104case 14:
105 return UNTIL;
106break;
107case 15:
108 {
109 yylval.vWord = lua_nfile-1;
110 return FUNCTION;
111 }
112break;
113case 16:
114 return END;
115break;
116case 17:
117 return RETURN;
118break;
119case 18:
120 return LOCAL;
121break;
122case 19:
123 return NIL;
124break;
125case 20:
126 return AND;
127break;
128case 21:
129 return OR;
130break;
131case 22:
132 return NOT;
133break;
134case 23:
135 return NE;
136break;
137case 24:
138 return LE;
139break;
140case 25:
141 return GE;
142break;
143case 26:
144 return CONC;
145break;
146case 27:
147 case 28:
148 {
149 yylval.vWord = lua_findenclosedconstant (yytext);
150 return STRING;
151 }
152break;
153case 29:
154case 30:
155case 31:
156case 32:
157{
158 yylval.vFloat = atof(yytext);
159 return NUMBER;
160 }
161break;
162case 33:
163 {
164 yylval.vWord = lua_findsymbol (yytext);
165 return NAME;
166 }
167break;
168case 34:
169 return *yytext;
170break;
171case -1:
172break;
173default:
174fprintf(yyout,"bad switch yylook %d",nstr);
175} return(0); }
176/* end of yylex */
177int yyvstop[] = {
1780,
179
1801,
1810,
182
1831,
1840,
185
18634,
1870,
188
1891,
19034,
1910,
192
1934,
1940,
195
19634,
1970,
198
19934,
2000,
201
20234,
2030,
204
20534,
2060,
207
20829,
20934,
2100,
211
21234,
2130,
214
21534,
2160,
217
21833,
21934,
2200,
221
22233,
22334,
2240,
225
22633,
22734,
2280,
229
23033,
23134,
2320,
233
23433,
23534,
2360,
237
23833,
23934,
2400,
241
24233,
24334,
2440,
245
24633,
24734,
2480,
249
25033,
25134,
2520,
253
25433,
25534,
2560,
257
25833,
25934,
2600,
261
26233,
26334,
2640,
265
26633,
26734,
2680,
269
27034,
2710,
272
27334,
2740,
275
2761,
2770,
278
27927,
2800,
281
28228,
2830,
284
2855,
2860,
287
28826,
2890,
290
29130,
2920,
293
29429,
2950,
296
29729,
2980,
299
30024,
3010,
302
30325,
3040,
305
30633,
3070,
308
30933,
3100,
311
31212,
31333,
3140,
315
31633,
3170,
318
31933,
3200,
321
32233,
3230,
324
3257,
32633,
3270,
328
32933,
3300,
331
33233,
3330,
334
33533,
3360,
337
33821,
33933,
3400,
341
34233,
3430,
344
34533,
3460,
347
34833,
3490,
350
35133,
3520,
353
35423,
3550,
356
35729,
35830,
3590,
360
36131,
3620,
363
36420,
36533,
3660,
367
36833,
3690,
370
37116,
37233,
3730,
374
37533,
3760,
377
37833,
3790,
380
38119,
38233,
3830,
384
38522,
38633,
3870,
388
38933,
3900,
391
39233,
3930,
394
39533,
3960,
397
39833,
3990,
400
40133,
4020,
403
40432,
4050,
406
4079,
40833,
4090,
410
41133,
4120,
413
41433,
4150,
416
41733,
4180,
419
42033,
4210,
422
4238,
42433,
4250,
426
42733,
4280,
429
43033,
4310,
432
43331,
43432,
4350,
436
43733,
4380,
439
44033,
4410,
442
4436,
44418,
44533,
4460,
447
44833,
4490,
450
45133,
4520,
453
45414,
45533,
4560,
457
45811,
45933,
4600,
461
46210,
46333,
4640,
465
46633,
4670,
468
46913,
47033,
4710,
472
47317,
47433,
4750,
476
4772,
4780,
479
48033,
4810,
482
48315,
48433,
4850,
486
4873,
4880,
4890};
490# define YYTYPE char
491struct yywork { YYTYPE verify, advance; } yycrank[] = {
4920,0, 0,0, 1,3, 0,0,
4930,0, 0,0, 0,0, 0,0,
4940,0, 0,0, 1,4, 1,5,
4956,29, 4,28, 0,0, 0,0,
4960,0, 0,0, 7,31, 0,0,
4976,29, 6,29, 0,0, 0,0,
4980,0, 0,0, 7,31, 7,31,
4990,0, 0,0, 0,0, 0,0,
5000,0, 0,0, 0,0, 1,6,
5014,28, 0,0, 0,0, 0,0,
5021,7, 0,0, 0,0, 0,0,
5031,3, 6,30, 1,8, 1,9,
5040,0, 1,10, 6,29, 7,31,
5058,33, 0,0, 6,29, 0,0,
5067,32, 0,0, 0,0, 6,29,
5077,31, 1,11, 0,0, 1,12,
5082,27, 7,31, 1,13, 11,39,
50912,40, 1,13, 26,56, 0,0,
5100,0, 2,8, 2,9, 0,0,
5116,29, 0,0, 0,0, 6,29,
5120,0, 0,0, 7,31, 0,0,
5130,0, 7,31, 0,0, 0,0,
5142,11, 0,0, 2,12, 0,0,
5150,0, 0,0, 0,0, 0,0,
5160,0, 0,0, 1,14, 0,0,
5170,0, 1,15, 1,16, 1,17,
5180,0, 22,52, 1,18, 18,47,
51923,53, 1,19, 42,63, 1,20,
5201,21, 25,55, 14,42, 1,22,
52115,43, 1,23, 1,24, 16,44,
5221,25, 16,45, 17,46, 19,48,
52321,51, 2,14, 20,49, 1,26,
5242,15, 2,16, 2,17, 24,54,
52520,50, 2,18, 44,64, 45,65,
5262,19, 46,66, 2,20, 2,21,
52727,57, 48,67, 2,22, 49,68,
5282,23, 2,24, 50,69, 2,25,
52952,70, 53,72, 27,58, 54,73,
53052,71, 9,34, 2,26, 9,35,
5319,35, 9,35, 9,35, 9,35,
5329,35, 9,35, 9,35, 9,35,
5339,35, 10,36, 55,74, 10,37,
53410,37, 10,37, 10,37, 10,37,
53510,37, 10,37, 10,37, 10,37,
53610,37, 57,75, 58,76, 64,80,
53766,81, 67,82, 70,83, 71,84,
53872,85, 73,86, 74,87, 10,38,
53910,38, 38,61, 10,38, 38,61,
54075,88, 76,89, 38,62, 38,62,
54138,62, 38,62, 38,62, 38,62,
54238,62, 38,62, 38,62, 38,62,
54380,92, 81,93, 13,41, 13,41,
54413,41, 13,41, 13,41, 13,41,
54513,41, 13,41, 13,41, 13,41,
54682,94, 83,95, 84,96, 10,38,
54710,38, 86,97, 10,38, 13,41,
54813,41, 13,41, 13,41, 13,41,
54913,41, 13,41, 13,41, 13,41,
55013,41, 13,41, 13,41, 13,41,
55113,41, 13,41, 13,41, 13,41,
55213,41, 13,41, 13,41, 13,41,
55313,41, 13,41, 13,41, 13,41,
55413,41, 87,98, 88,99, 60,79,
55560,79, 13,41, 60,79, 13,41,
55613,41, 13,41, 13,41, 13,41,
55713,41, 13,41, 13,41, 13,41,
55813,41, 13,41, 13,41, 13,41,
55913,41, 13,41, 13,41, 13,41,
56013,41, 13,41, 13,41, 13,41,
56113,41, 13,41, 13,41, 13,41,
56213,41, 33,33, 89,100, 60,79,
56360,79, 92,101, 60,79, 93,102,
56495,103, 33,33, 33,0, 96,104,
56599,105, 100,106, 102,107, 106,108,
566107,109, 35,35, 35,35, 35,35,
56735,35, 35,35, 35,35, 35,35,
56835,35, 35,35, 35,35, 108,110,
5690,0, 0,0, 0,0, 0,0,
5700,0, 0,0, 33,33, 0,0,
5710,0, 35,59, 35,59, 33,33,
57235,59, 0,0, 0,0, 33,33,
5730,0, 0,0, 0,0, 0,0,
57433,33, 0,0, 0,0, 0,0,
5750,0, 36,60, 36,60, 36,60,
57636,60, 36,60, 36,60, 36,60,
57736,60, 36,60, 36,60, 0,0,
5780,0, 33,33, 0,0, 0,0,
57933,33, 35,59, 35,59, 0,0,
58035,59, 36,38, 36,38, 59,77,
58136,38, 59,77, 0,0, 0,0,
58259,78, 59,78, 59,78, 59,78,
58359,78, 59,78, 59,78, 59,78,
58459,78, 59,78, 61,62, 61,62,
58561,62, 61,62, 61,62, 61,62,
58661,62, 61,62, 61,62, 61,62,
5870,0, 0,0, 0,0, 0,0,
5880,0, 36,38, 36,38, 0,0,
58936,38, 77,78, 77,78, 77,78,
59077,78, 77,78, 77,78, 77,78,
59177,78, 77,78, 77,78, 79,90,
5920,0, 79,90, 0,0, 0,0,
59379,91, 79,91, 79,91, 79,91,
59479,91, 79,91, 79,91, 79,91,
59579,91, 79,91, 90,91, 90,91,
59690,91, 90,91, 90,91, 90,91,
59790,91, 90,91, 90,91, 90,91,
5980,0};
599struct yysvf yysvec[] = {
6000, 0, 0,
601yycrank+-1, 0, yyvstop+1,
602yycrank+-28, yysvec+1, yyvstop+3,
603yycrank+0, 0, yyvstop+5,
604yycrank+4, 0, yyvstop+7,
605yycrank+0, 0, yyvstop+10,
606yycrank+-11, 0, yyvstop+12,
607yycrank+-17, 0, yyvstop+14,
608yycrank+7, 0, yyvstop+16,
609yycrank+107, 0, yyvstop+18,
610yycrank+119, 0, yyvstop+20,
611yycrank+6, 0, yyvstop+23,
612yycrank+7, 0, yyvstop+25,
613yycrank+158, 0, yyvstop+27,
614yycrank+4, yysvec+13, yyvstop+30,
615yycrank+5, yysvec+13, yyvstop+33,
616yycrank+11, yysvec+13, yyvstop+36,
617yycrank+5, yysvec+13, yyvstop+39,
618yycrank+5, yysvec+13, yyvstop+42,
619yycrank+12, yysvec+13, yyvstop+45,
620yycrank+21, yysvec+13, yyvstop+48,
621yycrank+10, yysvec+13, yyvstop+51,
622yycrank+4, yysvec+13, yyvstop+54,
623yycrank+4, yysvec+13, yyvstop+57,
624yycrank+21, yysvec+13, yyvstop+60,
625yycrank+9, yysvec+13, yyvstop+63,
626yycrank+9, 0, yyvstop+66,
627yycrank+40, 0, yyvstop+68,
628yycrank+0, yysvec+4, yyvstop+70,
629yycrank+0, yysvec+6, 0,
630yycrank+0, 0, yyvstop+72,
631yycrank+0, yysvec+7, 0,
632yycrank+0, 0, yyvstop+74,
633yycrank+-280, 0, yyvstop+76,
634yycrank+0, 0, yyvstop+78,
635yycrank+249, 0, yyvstop+80,
636yycrank+285, 0, yyvstop+82,
637yycrank+0, yysvec+10, yyvstop+84,
638yycrank+146, 0, 0,
639yycrank+0, 0, yyvstop+86,
640yycrank+0, 0, yyvstop+88,
641yycrank+0, yysvec+13, yyvstop+90,
642yycrank+10, yysvec+13, yyvstop+92,
643yycrank+0, yysvec+13, yyvstop+94,
644yycrank+19, yysvec+13, yyvstop+97,
645yycrank+35, yysvec+13, yyvstop+99,
646yycrank+27, yysvec+13, yyvstop+101,
647yycrank+0, yysvec+13, yyvstop+103,
648yycrank+42, yysvec+13, yyvstop+106,
649yycrank+35, yysvec+13, yyvstop+108,
650yycrank+30, yysvec+13, yyvstop+110,
651yycrank+0, yysvec+13, yyvstop+112,
652yycrank+36, yysvec+13, yyvstop+115,
653yycrank+48, yysvec+13, yyvstop+117,
654yycrank+35, yysvec+13, yyvstop+119,
655yycrank+61, yysvec+13, yyvstop+121,
656yycrank+0, 0, yyvstop+123,
657yycrank+76, 0, 0,
658yycrank+67, 0, 0,
659yycrank+312, 0, 0,
660yycrank+183, yysvec+36, yyvstop+125,
661yycrank+322, 0, 0,
662yycrank+0, yysvec+61, yyvstop+128,
663yycrank+0, yysvec+13, yyvstop+130,
664yycrank+78, yysvec+13, yyvstop+133,
665yycrank+0, yysvec+13, yyvstop+135,
666yycrank+81, yysvec+13, yyvstop+138,
667yycrank+84, yysvec+13, yyvstop+140,
668yycrank+0, yysvec+13, yyvstop+142,
669yycrank+0, yysvec+13, yyvstop+145,
670yycrank+81, yysvec+13, yyvstop+148,
671yycrank+66, yysvec+13, yyvstop+150,
672yycrank+74, yysvec+13, yyvstop+152,
673yycrank+80, yysvec+13, yyvstop+154,
674yycrank+78, yysvec+13, yyvstop+156,
675yycrank+94, 0, 0,
676yycrank+93, 0, 0,
677yycrank+341, 0, 0,
678yycrank+0, yysvec+77, yyvstop+158,
679yycrank+356, 0, 0,
680yycrank+99, yysvec+13, yyvstop+160,
681yycrank+89, yysvec+13, yyvstop+163,
682yycrank+108, yysvec+13, yyvstop+165,
683yycrank+120, yysvec+13, yyvstop+167,
684yycrank+104, yysvec+13, yyvstop+169,
685yycrank+0, yysvec+13, yyvstop+171,
686yycrank+113, yysvec+13, yyvstop+174,
687yycrank+148, yysvec+13, yyvstop+176,
688yycrank+133, 0, 0,
689yycrank+181, 0, 0,
690yycrank+366, 0, 0,
691yycrank+0, yysvec+90, yyvstop+178,
692yycrank+183, yysvec+13, yyvstop+181,
693yycrank+182, yysvec+13, yyvstop+183,
694yycrank+0, yysvec+13, yyvstop+185,
695yycrank+172, yysvec+13, yyvstop+189,
696yycrank+181, yysvec+13, yyvstop+191,
697yycrank+0, yysvec+13, yyvstop+193,
698yycrank+0, yysvec+13, yyvstop+196,
699yycrank+189, 0, 0,
700yycrank+195, 0, 0,
701yycrank+0, yysvec+13, yyvstop+199,
702yycrank+183, yysvec+13, yyvstop+202,
703yycrank+0, yysvec+13, yyvstop+204,
704yycrank+0, yysvec+13, yyvstop+207,
705yycrank+0, 0, yyvstop+210,
706yycrank+178, 0, 0,
707yycrank+186, yysvec+13, yyvstop+212,
708yycrank+204, 0, 0,
709yycrank+0, yysvec+13, yyvstop+214,
710yycrank+0, 0, yyvstop+217,
7110, 0, 0};
712struct yywork *yytop = yycrank+423;
713struct yysvf *yybgin = yysvec+1;
714char yymatch[] = {
71500 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
71601 ,011 ,012 ,01 ,01 ,01 ,01 ,01 ,
71701 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
71801 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
719011 ,01 ,'"' ,01 ,01 ,01 ,01 ,047 ,
72001 ,01 ,01 ,'+' ,01 ,'+' ,01 ,01 ,
721'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,
722'0' ,'0' ,01 ,01 ,01 ,01 ,01 ,01 ,
72301 ,'A' ,'A' ,'A' ,'D' ,'D' ,'A' ,'D' ,
724'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
725'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
726'A' ,'A' ,'A' ,01 ,01 ,01 ,01 ,'A' ,
72701 ,'A' ,'A' ,'A' ,'D' ,'D' ,'A' ,'D' ,
728'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
729'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
730'A' ,'A' ,'A' ,01 ,01 ,01 ,01 ,01 ,
7310};
732char yyextra[] = {
7330,0,0,0,0,0,0,0,
7340,0,0,0,0,0,0,0,
7350,0,0,0,0,0,0,0,
7360,0,0,0,0,0,0,0,
7370,0,0,0,0,0,0,0,
7380};
739#ifndef lint
740static char ncform_sccsid[] = "@(#)ncform 1.6 88/02/08 SMI"; /* from S5R2 1.2 */
741#endif
742
743int yylineno =1;
744# define YYU(x) x
745# define NLSTATE yyprevious=YYNEWLINE
746char yytext[YYLMAX];
747struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp;
748char yysbuf[YYLMAX];
749char *yysptr = yysbuf;
750int *yyfnd;
751extern struct yysvf *yyestate;
752int yyprevious = YYNEWLINE;
753yylook(){
754 register struct yysvf *yystate, **lsp;
755 register struct yywork *yyt;
756 struct yysvf *yyz;
757 int yych, yyfirst;
758 struct yywork *yyr;
759# ifdef LEXDEBUG
760 int debug;
761# endif
762 char *yylastch;
763 /* start off machines */
764# ifdef LEXDEBUG
765 debug = 0;
766# endif
767 yyfirst=1;
768 if (!yymorfg)
769 yylastch = yytext;
770 else {
771 yymorfg=0;
772 yylastch = yytext+yyleng;
773 }
774 for(;;){
775 lsp = yylstate;
776 yyestate = yystate = yybgin;
777 if (yyprevious==YYNEWLINE) yystate++;
778 for (;;){
779# ifdef LEXDEBUG
780 if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1);
781# endif
782 yyt = yystate->yystoff;
783 if(yyt == yycrank && !yyfirst){ /* may not be any transitions */
784 yyz = yystate->yyother;
785 if(yyz == 0)break;
786 if(yyz->yystoff == yycrank)break;
787 }
788 *yylastch++ = yych = input();
789 yyfirst=0;
790 tryagain:
791# ifdef LEXDEBUG
792 if(debug){
793 fprintf(yyout,"char ");
794 allprint(yych);
795 putchar('\n');
796 }
797# endif
798 yyr = yyt;
799 if ( (int)yyt > (int)yycrank){
800 yyt = yyr + yych;
801 if (yyt <= yytop && yyt->verify+yysvec == yystate){
802 if(yyt->advance+yysvec == YYLERR) /* error transitions */
803 {unput(*--yylastch);break;}
804 *lsp++ = yystate = yyt->advance+yysvec;
805 goto contin;
806 }
807 }
808# ifdef YYOPTIM
809 else if((int)yyt < (int)yycrank) { /* r < yycrank */
810 yyt = yyr = yycrank+(yycrank-yyt);
811# ifdef LEXDEBUG
812 if(debug)fprintf(yyout,"compressed state\n");
813# endif
814 yyt = yyt + yych;
815 if(yyt <= yytop && yyt->verify+yysvec == yystate){
816 if(yyt->advance+yysvec == YYLERR) /* error transitions */
817 {unput(*--yylastch);break;}
818 *lsp++ = yystate = yyt->advance+yysvec;
819 goto contin;
820 }
821 yyt = yyr + YYU(yymatch[yych]);
822# ifdef LEXDEBUG
823 if(debug){
824 fprintf(yyout,"try fall back character ");
825 allprint(YYU(yymatch[yych]));
826 putchar('\n');
827 }
828# endif
829 if(yyt <= yytop && yyt->verify+yysvec == yystate){
830 if(yyt->advance+yysvec == YYLERR) /* error transition */
831 {unput(*--yylastch);break;}
832 *lsp++ = yystate = yyt->advance+yysvec;
833 goto contin;
834 }
835 }
836 if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){
837# ifdef LEXDEBUG
838 if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1);
839# endif
840 goto tryagain;
841 }
842# endif
843 else
844 {unput(*--yylastch);break;}
845 contin:
846# ifdef LEXDEBUG
847 if(debug){
848 fprintf(yyout,"state %d char ",yystate-yysvec-1);
849 allprint(yych);
850 putchar('\n');
851 }
852# endif
853 ;
854 }
855# ifdef LEXDEBUG
856 if(debug){
857 fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1);
858 allprint(yych);
859 putchar('\n');
860 }
861# endif
862 while (lsp-- > yylstate){
863 *yylastch-- = 0;
864 if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){
865 yyolsp = lsp;
866 if(yyextra[*yyfnd]){ /* must backup */
867 while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){
868 lsp--;
869 unput(*yylastch--);
870 }
871 }
872 yyprevious = YYU(*yylastch);
873 yylsp = lsp;
874 yyleng = yylastch-yytext+1;
875 yytext[yyleng] = 0;
876# ifdef LEXDEBUG
877 if(debug){
878 fprintf(yyout,"\nmatch ");
879 sprint(yytext);
880 fprintf(yyout," action %d\n",*yyfnd);
881 }
882# endif
883 return(*yyfnd++);
884 }
885 unput(*yylastch);
886 }
887 if (yytext[0] == 0 /* && feof(yyin) */)
888 {
889 yysptr=yysbuf;
890 return(0);
891 }
892 yyprevious = yytext[0] = input();
893 if (yyprevious>0)
894 output(yyprevious);
895 yylastch=yytext;
896# ifdef LEXDEBUG
897 if(debug)putchar('\n');
898# endif
899 }
900 }
901yyback(p, m)
902 int *p;
903{
904if (p==0) return(0);
905while (*p)
906 {
907 if (*p++ == m)
908 return(1);
909 }
910return(0);
911}
912 /* the following are only used in the lex library */
913yyinput(){
914 return(input());
915 }
916yyoutput(c)
917 int c; {
918 output(c);
919 }
920yyunput(c)
921 int c; {
922 unput(c);
923 }
lua.c+0−54
@@ -1,54 +0,0 @@
1/*
2** lua.c
3** Linguagem para Usuarios de Aplicacao
4** TeCGraf - PUC-Rio
5** 28 Apr 93
6*/
7
8#include <stdio.h>
9
10#include "lua.h"
11#include "lualib.h"
12
13
14void test (void)
15{
16 lua_pushobject(lua_getparam(1));
17 lua_call ("c", 1);
18}
19
20
21static void callfunc (void)
22{
23 lua_Object obj = lua_getparam (1);
24 if (lua_isstring(obj)) lua_call(lua_getstring(obj),0);
25}
26
27static void execstr (void)
28{
29 lua_Object obj = lua_getparam (1);
30 if (lua_isstring(obj)) lua_dostring(lua_getstring(obj));
31}
32
33void main (int argc, char *argv[])
34{
35 int i;
36 if (argc < 2)
37 {
38 puts ("usage: lua filename [functionnames]");
39 return;
40 }
41 lua_register ("callfunc", callfunc);
42 lua_register ("execstr", execstr);
43 lua_register ("test", test);
44 iolib_open ();
45 strlib_open ();
46 mathlib_open ();
47 lua_dofile (argv[1]);
48 for (i=2; i<argc; i++)
49 {
50 lua_call (argv[i],0);
51 }
52}
53
54
src/Makefile+24−0
@@ -0,0 +1,24 @@
1# makefile for lua
2
3LIB= $(LUA)/lib
4INC= $(LUA)/include
5
6CC= gcc
7CFLAGS= -g -Wall -O2 -I$(INC) $(DEFS)
8DEFS= -DMAXCODE=64000 -DMAXCONSTANT=1024 -DMAXSYMBOL=1024 -DMAXARRAY=1024
9
10OBJS= hash.o inout.o lex.o opcode.o table.o y.tab.o
11SLIB= $(LIB)/liblua.a
12DLIB= $(LIB)/liblua.so.1.1
13
14libs: $(SLIB) $(DLIB)
15
16$(SLIB): $(OBJS)
17 ar ruvl $@ $(OBJS)
18 ranlib $(SLIB)
19
20$(DLIB): $(OBJS)
21 ld -o $@ $(OBJS)
22
23clean:
24 rm -f $(OBJS) $(SLIB) $(DLIB)
src/hash.crenamed from hash.c+117−29
@@ -2,13 +2,15 @@ · 1 unmodified line
2** hash.c2** hash.c
3** hash manager for lua3** hash manager for lua
4** Luiz Henrique de Figueiredo - 17 Aug 904** Luiz Henrique de Figueiredo - 17 Aug 90
5** Modified by Waldemar Celes Filho
6** 12 May 93
7*/5*/
8 6
7char *rcs_hash="$Id: hash.c,v 2.1 1994/04/20 22:07:57 celes Exp $";
8
9#include <string.h>9#include <string.h>
10#include <stdlib.h>10#include <stdlib.h>
11 11
12#include "mm.h"
13
12#include "opcode.h"14#include "opcode.h"
13#include "hash.h"15#include "hash.h"
14#include "inout.h"16#include "inout.h"
@@ -24,10 +26,23 @@ · 9 unmodified lines
24#define nhash(t) ((t)->nhash)26#define nhash(t) ((t)->nhash)
25#define nodelist(t) ((t)->list)27#define nodelist(t) ((t)->list)
26#define list(t,i) ((t)->list[i])28#define list(t,i) ((t)->list[i])
29#define markarray(t) ((t)->mark)
27#define ref_tag(n) (tag(&(n)->ref))30#define ref_tag(n) (tag(&(n)->ref))
28#define ref_nvalue(n) (nvalue(&(n)->ref))31#define ref_nvalue(n) (nvalue(&(n)->ref))
29#define ref_svalue(n) (svalue(&(n)->ref))32#define ref_svalue(n) (svalue(&(n)->ref))
30 33
34#ifndef ARRAYBLOCK
35#define ARRAYBLOCK 50
36#endif
37
38typedef struct ArrayList
39{
40 Hash *array;
41 struct ArrayList *next;
42} ArrayList;
43
44static ArrayList *listhead = NULL;
45
31static int head (Hash *t, Object *ref) /* hash function */46static int head (Hash *t, Object *ref) /* hash function */
32{47{
33 if (tag(ref) == T_NUMBER) return (((int)nvalue(ref))%nhash(t));48 if (tag(ref) == T_NUMBER) return (((int)nvalue(ref))%nhash(t));
@@ -89,7 +104,7 @@ static void freelist (Node *n) · 55 unmodified lines
89/*104/*
90** Create a new hash. Return the hash pointer or NULL on error.105** Create a new hash. Return the hash pointer or NULL on error.
91*/106*/
92Hash *lua_hashcreate (unsigned int nhash)107static Hash *hashcreate (unsigned int nhash)
93{108{
94 Hash *t = new (Hash);109 Hash *t = new (Hash);
95 if (t == NULL)110 if (t == NULL)
@@ -111,7 +126,7 @@ Hash *lua_hashcreate (unsigned int nhash) · 15 unmodified lines
111/*126/*
112** Delete a hash127** Delete a hash
113*/128*/
114void lua_hashdelete (Hash *h)129static void hashdelete (Hash *h)
115{130{
116 int i;131 int i;
117 for (i=0; i<nhash(h); i++)132 for (i=0; i<nhash(h); i++)
@@ -120,6 +135,86 @@ void lua_hashdelete (Hash *h) · 2 unmodified lines
120 free(h);135 free(h);
121}136}
122 137
138
139/*
140** Mark a hash and check its elements
141*/
142void lua_hashmark (Hash *h)
143{
144 if (markarray(h) == 0)
145 {
146 int i;
147 markarray(h) = 1;
148 for (i=0; i<nhash(h); i++)
149 {
150 Node *n;
151 for (n = list(h,i); n != NULL; n = n->next)
152 {
153 lua_markobject(&n->ref);
154 lua_markobject(&n->val);
155 }
156 }
157 }
158}
159
160/*
161** Garbage collection to arrays
162** Delete all unmarked arrays.
163*/
164void lua_hashcollector (void)
165{
166 ArrayList *curr = listhead, *prev = NULL;
167 while (curr != NULL)
168 {
169 ArrayList *next = curr->next;
170 if (markarray(curr->array) != 1)
171 {
172 if (prev == NULL) listhead = next;
173 else prev->next = next;
174 hashdelete(curr->array);
175 free(curr);
176 }
177 else
178 {
179 markarray(curr->array) = 0;
180 prev = curr;
181 }
182 curr = next;
183 }
184}
185
186
187/*
188** Create a new array
189** This function insert the new array at array list. It also
190** execute garbage collection if the number of array created
191** exceed a pre-defined range.
192*/
193Hash *lua_createarray (int nhash)
194{
195 ArrayList *new = new(ArrayList);
196 if (new == NULL)
197 {
198 lua_error ("not enough memory");
199 return NULL;
200 }
201 new->array = hashcreate(nhash);
202 if (new->array == NULL)
203 {
204 lua_error ("not enough memory");
205 return NULL;
206 }
207
208 if (lua_nentity == lua_block)
209 lua_pack();
210
211 lua_nentity++;
212 new->next = listhead;
213 listhead = new;
214 return new->array;
215}
216
217
123/*218/*
124** If the hash node is present, return its pointer, otherwise create a new219** If the hash node is present, return its pointer, otherwise create a new
125** node for the given reference and also return its pointer.220** node for the given reference and also return its pointer.
@@ -149,26 +244,6 @@ Object *lua_hashdefine (Hash *t, Object *ref) · 23 unmodified lines
149 return (&n->val);244 return (&n->val);
150}245}
151 246
152/*
153** Mark a hash and check its elements
154*/
155void lua_hashmark (Hash *h)
156{
157 int i;
158
159 markarray(h) = 1;
160
161 for (i=0; i<nhash(h); i++)
162 {
163 Node *n;
164 for (n = list(h,i); n != NULL; n = n->next)
165 {
166 lua_markobject (&n->ref);
167 lua_markobject (&n->val);
168 }
169 }
170}
171
172 247
173/*248/*
174** Internal function to manipulate arrays. 249** Internal function to manipulate arrays.
@@ -176,7 +251,6 @@ void lua_hashmark (Hash *h) · 1 unmodified line
176** in the hash.251** in the hash.
177** This function pushs the element value and its reference to the stack.252** This function pushs the element value and its reference to the stack.
178*/253*/
179#include "lua.h"
180static void firstnode (Hash *a, int h)254static void firstnode (Hash *a, int h)
181{255{
182 if (h < nhash(a))256 if (h < nhash(a))
@@ -184,11 +258,25 @@ static void firstnode (Hash *a, int h) · 1 unmodified line
184 int i;258 int i;
185 for (i=h; i<nhash(a); i++)259 for (i=h; i<nhash(a); i++)
186 {260 {
187 if (list(a,i) != NULL && tag(&list(a,i)->val) != T_NIL)261 if (list(a,i) != NULL)
188 {262 {
189 lua_pushobject (&list(a,i)->ref);263 if (tag(&list(a,i)->val) != T_NIL)
190 lua_pushobject (&list(a,i)->val);264 {
191 return;265 lua_pushobject (&list(a,i)->ref);
266 lua_pushobject (&list(a,i)->val);
267 return;
268 }
269 else
270 {
271 Node *next = list(a,i)->next;
272 while (next != NULL && tag(&next->val) == T_NIL) next = next->next;
273 if (next != NULL)
274 {
275 lua_pushobject (&next->ref);
276 lua_pushobject (&next->val);
277 return;
278 }
279 }
192 }280 }
193 }281 }
194 }282 }
src/hash.hrenamed from hash.h+4−7
@@ -2,8 +2,7 @@ · 1 unmodified line
2** hash.h2** hash.h
3** hash manager for lua3** hash manager for lua
4** Luiz Henrique de Figueiredo - 17 Aug 904** Luiz Henrique de Figueiredo - 17 Aug 90
5** Modified by Waldemar Celes Filho5** $Id: hash.h,v 2.1 1994/04/20 22:07:57 celes Exp $
6** 26 Apr 93
7*/6*/
8 7
9#ifndef hash_h8#ifndef hash_h
@@ -23,13 +22,11 @@ typedef struct Hash · 13 unmodified lines
23 Node **list;22 Node **list;
24} Hash;23} Hash;
25 24
26#define markarray(t) ((t)->mark)
27 25
28Hash *lua_hashcreate (unsigned int nhash);26Hash *lua_createarray (int nhash);
29void lua_hashdelete (Hash *h);27void lua_hashmark (Hash *h);
28void lua_hashcollector (void);
30Object *lua_hashdefine (Hash *t, Object *ref);29Object *lua_hashdefine (Hash *t, Object *ref);
31void lua_hashmark (Hash *h);
32
33void lua_next (void);30void lua_next (void);
34 31
35#endif32#endif
src/inout.crenamed from inout.c+11−22
@@ -2,12 +2,10 @@ · 1 unmodified line
2** inout.c2** inout.c
3** Provide function to realise the input/output function and debugger 3** Provide function to realise the input/output function and debugger
4** facilities.4** facilities.
5**
6** Waldemar Celes Filho
7** TeCGraf - PUC-Rio
8** 11 May 93
9*/5*/
10 6
7char *rcs_inout="$Id: inout.c,v 1.2 1993/12/22 21:15:16 roberto Exp $";
8
11#include <stdio.h>9#include <stdio.h>
12#include <string.h>10#include <string.h>
13 11
@@ -49,14 +47,6 @@ static int fileinput (void) · 35 unmodified lines
49 return (c == EOF ? 0 : c);47 return (c == EOF ? 0 : c);
50}48}
51 49
52/*
53** Function to unget the next character from to input file
54*/
55static void fileunput (int c)
56{
57 ungetc (c, fp);
58}
59
60/*50/*
61** Function to get the next character from the input string51** Function to get the next character from the input string
62*/52*/
@@ -66,14 +56,6 @@ static int stringinput (void) · 3 unmodified lines
66 return (*(st-1));56 return (*(st-1));
67}57}
68 58
69/*
70** Function to unget the next character from to input string
71*/
72static void stringunput (int c)
73{
74 st--;
75}
76
77/*59/*
78** Function to open a file to be input unit. 60** Function to open a file to be input unit.
79** Return 0 on success or 1 on error.61** Return 0 on success or 1 on error.
@@ -82,7 +64,6 @@ int lua_openfile (char *fn) · 2 unmodified lines
82{64{
83 lua_linenumber = 1;65 lua_linenumber = 1;
84 lua_setinput (fileinput);66 lua_setinput (fileinput);
85 lua_setunput (fileunput);
86 fp = fopen (fn, "r");67 fp = fopen (fn, "r");
87 if (fp == NULL) return 1;68 if (fp == NULL) return 1;
88 if (lua_addfile (fn)) return 1;69 if (lua_addfile (fn)) return 1;
@@ -96,6 +77,7 @@ void lua_closefile (void) · 7 unmodified lines
96{77{
97 if (fp != NULL)78 if (fp != NULL)
98 {79 {
80 lua_delfile();
99 fclose (fp);81 fclose (fp);
100 fp = NULL;82 fp = NULL;
101 }83 }
@@ -108,7 +90,6 @@ int lua_openstring (char *s) · 6 unmodified lines
108{90{
109 lua_linenumber = 1;91 lua_linenumber = 1;
110 lua_setinput (stringinput);92 lua_setinput (stringinput);
111 lua_setunput (stringunput);
112 st = s;93 st = s;
113 {94 {
114 char sn[64];95 char sn[64];
@@ -118,6 +99,14 @@ int lua_openstring (char *s) · 3 unmodified lines
118 return 0;99 return 0;
119}100}
120 101
102/*
103** Function to close an opened string
104*/
105void lua_closestring (void)
106{
107 lua_delfile();
108}
109
121/*110/*
122** Call user function to handle error messages, if registred. Or report error111** Call user function to handle error messages, if registred. Or report error
123** using standard function (fprintf).112** using standard function (fprintf).
src/inout.hrenamed from inout.h+2−5
@@ -1,9 +1,5 @@
1/*1/*
2** inout.h2** $Id: inout.h,v 1.1 1993/12/17 18:41:19 celes Exp $
3**
4** Waldemar Celes Filho
5** TeCGraf - PUC-Rio
6** 11 May 93
7*/3*/
8 4
9 5
@@ -17,6 +13,7 @@ extern int lua_debugline; · 7 unmodified lines
17int lua_openfile (char *fn);13int lua_openfile (char *fn);
18void lua_closefile (void);14void lua_closefile (void);
19int lua_openstring (char *s);15int lua_openstring (char *s);
16void lua_closestring (void);
20int lua_pushfunction (int file, int function);17int lua_pushfunction (int file, int function);
21void lua_popfunction (void);18void lua_popfunction (void);
22void lua_reportbug (char *s);19void lua_reportbug (char *s);
src/lex.c+238−0
@@ -0,0 +1,238 @@
1char *rcs_lex = "$Id: lex.c,v 2.1 1994/04/15 19:00:28 celes Exp $";
2/*$Log: lex.c,v $
3 * Revision 2.1 1994/04/15 19:00:28 celes
4 * Retirar chamada da funcao lua_findsymbol associada a cada
5 * token NAME. A decisao de chamar lua_findsymbol ou lua_findconstant
6 * fica a cargo do modulo "lua.stx".
7 *
8 * Revision 1.3 1993/12/28 16:42:29 roberto
9 * "include"s de string.h e stdlib.h para evitar warnings
10 *
11 * Revision 1.2 1993/12/22 21:39:15 celes
12 * Tratamento do token $debug e $nodebug
13 *
14 * Revision 1.1 1993/12/22 21:15:16 roberto
15 * Initial revision
16 **/
17
18#include <ctype.h>
19#include <math.h>
20#include <stdlib.h>
21#include <string.h>
22
23#include "opcode.h"
24#include "hash.h"
25#include "inout.h"
26#include "table.h"
27#include "y.tab.h"
28
29#define next() { current = input(); }
30#define save(x) { *yytextLast++ = (x); }
31#define save_and_next() { save(current); next(); }
32
33static int current;
34static char yytext[256];
35static char *yytextLast;
36
37static Input input;
38
39void lua_setinput (Input fn)
40{
41 current = ' ';
42 input = fn;
43}
44
45char *lua_lasttext (void)
46{
47 *yytextLast = 0;
48 return yytext;
49}
50
51
52static struct
53 {
54 char *name;
55 int token;
56 } reserved [] = {
57 {"and", AND},
58 {"do", DO},
59 {"else", ELSE},
60 {"elseif", ELSEIF},
61 {"end", END},
62 {"function", FUNCTION},
63 {"if", IF},
64 {"local", LOCAL},
65 {"nil", NIL},
66 {"not", NOT},
67 {"or", OR},
68 {"repeat", REPEAT},
69 {"return", RETURN},
70 {"then", THEN},
71 {"until", UNTIL},
72 {"while", WHILE} };
73
74#define RESERVEDSIZE (sizeof(reserved)/sizeof(reserved[0]))
75
76
77int findReserved (char *name)
78{
79 int l = 0;
80 int h = RESERVEDSIZE - 1;
81 while (l <= h)
82 {
83 int m = (l+h)/2;
84 int comp = strcmp(name, reserved[m].name);
85 if (comp < 0)
86 h = m-1;
87 else if (comp == 0)
88 return reserved[m].token;
89 else
90 l = m+1;
91 }
92 return 0;
93}
94
95
96int yylex ()
97{
98 while (1)
99 {
100 yytextLast = yytext;
101 switch (current)
102 {
103 case '\n': lua_linenumber++;
104 case ' ':
105 case '\t':
106 next();
107 continue;
108
109 case '$':
110 next();
111 while (isalnum(current) || current == '_')
112 save_and_next();
113 *yytextLast = 0;
114 if (strcmp(yytext, "debug") == 0)
115 {
116 yylval.vInt = 1;
117 return DEBUG;
118 }
119 else if (strcmp(yytext, "nodebug") == 0)
120 {
121 yylval.vInt = 0;
122 return DEBUG;
123 }
124 return WRONGTOKEN;
125
126 case '-':
127 save_and_next();
128 if (current != '-') return '-';
129 do { next(); } while (current != '\n' && current != 0);
130 continue;
131
132 case '<':
133 save_and_next();
134 if (current != '=') return '<';
135 else { save_and_next(); return LE; }
136
137 case '>':
138 save_and_next();
139 if (current != '=') return '>';
140 else { save_and_next(); return GE; }
141
142 case '~':
143 save_and_next();
144 if (current != '=') return '~';
145 else { save_and_next(); return NE; }
146
147 case '"':
148 case '\'':
149 {
150 int del = current;
151 next(); /* skip the delimiter */
152 while (current != del)
153 {
154 switch (current)
155 {
156 case 0:
157 case '\n':
158 return WRONGTOKEN;
159 case '\\':
160 next(); /* do not save the '\' */
161 switch (current)
162 {
163 case 'n': save('\n'); next(); break;
164 case 't': save('\t'); next(); break;
165 case 'r': save('\r'); next(); break;
166 default : save('\\'); break;
167 }
168 break;
169 default:
170 save_and_next();
171 }
172 }
173 next(); /* skip the delimiter */
174 *yytextLast = 0;
175 yylval.vWord = lua_findconstant (yytext);
176 return STRING;
177 }
178
179 case 'a': case 'b': case 'c': case 'd': case 'e':
180 case 'f': case 'g': case 'h': case 'i': case 'j':
181 case 'k': case 'l': case 'm': case 'n': case 'o':
182 case 'p': case 'q': case 'r': case 's': case 't':
183 case 'u': case 'v': case 'w': case 'x': case 'y':
184 case 'z':
185 case 'A': case 'B': case 'C': case 'D': case 'E':
186 case 'F': case 'G': case 'H': case 'I': case 'J':
187 case 'K': case 'L': case 'M': case 'N': case 'O':
188 case 'P': case 'Q': case 'R': case 'S': case 'T':
189 case 'U': case 'V': case 'W': case 'X': case 'Y':
190 case 'Z':
191 case '_':
192 {
193 int res;
194 do { save_and_next(); } while (isalnum(current) || current == '_');
195 *yytextLast = 0;
196 res = findReserved(yytext);
197 if (res) return res;
198 yylval.pChar = yytext;
199 return NAME;
200 }
201
202 case '.':
203 save_and_next();
204 if (current == '.')
205 {
206 save_and_next();
207 return CONC;
208 }
209 else if (!isdigit(current)) return '.';
210 /* current is a digit: goes through to number */
211 goto fraction;
212
213 case '0': case '1': case '2': case '3': case '4':
214 case '5': case '6': case '7': case '8': case '9':
215
216 do { save_and_next(); } while (isdigit(current));
217 if (current == '.') save_and_next();
218fraction: while (isdigit(current)) save_and_next();
219 if (current == 'e' || current == 'E')
220 {
221 save_and_next();
222 if (current == '+' || current == '-') save_and_next();
223 if (!isdigit(current)) return WRONGTOKEN;
224 do { save_and_next(); } while (isdigit(current));
225 }
226 *yytextLast = 0;
227 yylval.vFloat = atof(yytext);
228 return NUMBER;
229
230 default: /* also end of file */
231 {
232 save_and_next();
233 return *yytext;
234 }
235 }
236 }
237}
238
src/opcode.crenamed from opcode.c+159−71
@@ -1,15 +1,18 @@
1/*1/*
2** opcode.c2** opcode.c
3** TecCGraf - PUC-Rio3** TecCGraf - PUC-Rio
4** 26 Apr 93
5*/4*/
6 5
6char *rcs_opcode="$Id: opcode.c,v 2.1 1994/04/20 22:07:57 celes Exp $";
7
7#include <stdio.h>8#include <stdio.h>
8#include <stdlib.h>9#include <stdlib.h>
9#include <string.h>10#include <string.h>
10#ifdef __GNUC__11
11#include <floatingpoint.h>12/* stdlib.h does not have this in SunOS */
12#endif13extern double strtod(const char *, char **);
14
15#include "mm.h"
13 16
14#include "opcode.h"17#include "opcode.h"
15#include "hash.h"18#include "hash.h"
@@ -137,12 +140,13 @@ static int lua_tostring (Object *obj) · 121 unmodified lines
137*/140*/
138int lua_execute (Byte *pc)141int lua_execute (Byte *pc)
139{142{
143 Object *oldbase = base;
144 base = top;
140 while (1)145 while (1)
141 {146 {
142 switch ((OpCode)*pc++)147 OpCode opcode;
148 switch (opcode = (OpCode)*pc++)
143 {149 {
144 case NOP: break;
145
146 case PUSHNIL: tag(top++) = T_NIL; break;150 case PUSHNIL: tag(top++) = T_NIL; break;
147 151
148 case PUSH0: tag(top) = T_NUMBER; nvalue(top++) = 0; break;152 case PUSH0: tag(top) = T_NUMBER; nvalue(top++) = 0; break;
@@ -152,35 +156,42 @@ int lua_execute (Byte *pc) · 3 unmodified lines
152 case PUSHBYTE: tag(top) = T_NUMBER; nvalue(top++) = *pc++; break;156 case PUSHBYTE: tag(top) = T_NUMBER; nvalue(top++) = *pc++; break;
153 157
154 case PUSHWORD: 158 case PUSHWORD:
155 tag(top) = T_NUMBER; nvalue(top++) = *((Word *)(pc)); pc += sizeof(Word);159 {
160 CodeWord code;
161 get_word(code,pc);
162 tag(top) = T_NUMBER; nvalue(top++) = code.w;
163 }
156 break;164 break;
157 165
158 case PUSHFLOAT:166 case PUSHFLOAT:
159 tag(top) = T_NUMBER; nvalue(top++) = *((float *)(pc)); pc += sizeof(float);167 {
168 CodeFloat code;
169 get_float(code,pc);
170 tag(top) = T_NUMBER; nvalue(top++) = code.f;
171 }
160 break;172 break;
173
161 case PUSHSTRING:174 case PUSHSTRING:
162 {175 {
163 int w = *((Word *)(pc));176 CodeWord code;
164 pc += sizeof(Word);177 get_word(code,pc);
165 tag(top) = T_STRING; svalue(top++) = lua_constant[w];178 tag(top) = T_STRING; svalue(top++) = lua_constant[code.w];
166 }179 }
167 break;180 break;
168 181
169 case PUSHLOCAL0: *top++ = *(base + 0); break;182 case PUSHLOCAL0: case PUSHLOCAL1: case PUSHLOCAL2:
170 case PUSHLOCAL1: *top++ = *(base + 1); break;183 case PUSHLOCAL3: case PUSHLOCAL4: case PUSHLOCAL5:
171 case PUSHLOCAL2: *top++ = *(base + 2); break;184 case PUSHLOCAL6: case PUSHLOCAL7: case PUSHLOCAL8:
172 case PUSHLOCAL3: *top++ = *(base + 3); break;185 case PUSHLOCAL9: *top++ = *(base + (int)(opcode-PUSHLOCAL0)); break;
173 case PUSHLOCAL4: *top++ = *(base + 4); break;
174 case PUSHLOCAL5: *top++ = *(base + 5); break;
175 case PUSHLOCAL6: *top++ = *(base + 6); break;
176 case PUSHLOCAL7: *top++ = *(base + 7); break;
177 case PUSHLOCAL8: *top++ = *(base + 8); break;
178 case PUSHLOCAL9: *top++ = *(base + 9); break;
179 186
180 case PUSHLOCAL: *top++ = *(base + (*pc++)); break;187 case PUSHLOCAL: *top++ = *(base + (*pc++)); break;
181 188
182 case PUSHGLOBAL: 189 case PUSHGLOBAL:
183 *top++ = s_object(*((Word *)(pc))); pc += sizeof(Word);190 {
191 CodeWord code;
192 get_word(code,pc);
193 *top++ = s_object(code.w);
194 }
184 break;195 break;
185 196
186 case PUSHINDEXED:197 case PUSHINDEXED:
@@ -201,21 +212,19 @@ int lua_execute (Byte *pc) · 14 unmodified lines
201 212
202 case PUSHOBJECT: *top = *(top-3); top++; break;213 case PUSHOBJECT: *top = *(top-3); top++; break;
203 214
204 case STORELOCAL0: *(base + 0) = *(--top); break;215 case STORELOCAL0: case STORELOCAL1: case STORELOCAL2:
205 case STORELOCAL1: *(base + 1) = *(--top); break;216 case STORELOCAL3: case STORELOCAL4: case STORELOCAL5:
206 case STORELOCAL2: *(base + 2) = *(--top); break;217 case STORELOCAL6: case STORELOCAL7: case STORELOCAL8:
207 case STORELOCAL3: *(base + 3) = *(--top); break;218 case STORELOCAL9: *(base + (int)(opcode-STORELOCAL0)) = *(--top); break;
208 case STORELOCAL4: *(base + 4) = *(--top); break;
209 case STORELOCAL5: *(base + 5) = *(--top); break;
210 case STORELOCAL6: *(base + 6) = *(--top); break;
211 case STORELOCAL7: *(base + 7) = *(--top); break;
212 case STORELOCAL8: *(base + 8) = *(--top); break;
213 case STORELOCAL9: *(base + 9) = *(--top); break;
214 219
215 case STORELOCAL: *(base + (*pc++)) = *(--top); break;220 case STORELOCAL: *(base + (*pc++)) = *(--top); break;
216 221
217 case STOREGLOBAL:222 case STOREGLOBAL:
218 s_object(*((Word *)(pc))) = *(--top); pc += sizeof(Word);223 {
224 CodeWord code;
225 get_word(code,pc);
226 s_object(code.w) = *(--top);
227 }
219 break;228 break;
220 229
221 case STOREINDEXED0:230 case STOREINDEXED0:
@@ -245,31 +254,63 @@ int lua_execute (Byte *pc) · 23 unmodified lines
245 if (h == NULL) return 1;254 if (h == NULL) return 1;
246 *h = *(top-1);255 *h = *(top-1);
247 }256 }
248 --top;257 top--;
249 }258 }
250 break;259 break;
251 260
252 case STOREFIELD:261 case STORELIST0:
253 if (tag(top-3) != T_ARRAY)262 case STORELIST:
263 {
264 int m, n;
265 Object *arr;
266 if (opcode == STORELIST0) m = 0;
267 else m = *(pc++) * FIELDS_PER_FLUSH;
268 n = *(pc++);
269 arr = top-n-1;
270 if (tag(arr) != T_ARRAY)
254 {271 {
255 lua_error ("internal error - table expected");272 lua_reportbug ("internal error - table expected");
256 return 1;273 return 1;
257 }274 }
258 *(lua_hashdefine (avalue(top-3), top-2)) = *(top-1);275 while (n)
259 top -= 2;276 {
277 tag(top) = T_NUMBER; nvalue(top) = n+m;
278 *(lua_hashdefine (avalue(arr), top)) = *(top-1);
279 top--;
280 n--;
281 }
282 }
260 break;283 break;
261 284
262 case ADJUST:285 case STORERECORD:
263 {286 {
264 Object *newtop = base + *(pc++);287 int n = *(pc++);
265 if (top != newtop)288 Object *arr = top-n-1;
289 if (tag(arr) != T_ARRAY)
290 {
291 lua_reportbug ("internal error - table expected");
292 return 1;
293 }
294 while (n)
266 {295 {
267 while (top < newtop) tag(top++) = T_NIL;296 CodeWord code;
268 top = newtop;297 get_word(code,pc);
298 tag(top) = T_STRING; svalue(top) = lua_constant[code.w];
299 *(lua_hashdefine (avalue(arr), top)) = *(top-1);
300 top--;
301 n--;
269 }302 }
270 }303 }
271 break;304 break;
272 305
306 case ADJUST:
307 {
308 Object *newtop = base + *(pc++);
309 while (top < newtop) tag(top++) = T_NIL;
310 top = newtop; /* top could be bigger than newtop */
311 }
312 break;
313
273 case CREATEARRAY:314 case CREATEARRAY:
274 if (tag(top-1) == T_NIL) 315 if (tag(top-1) == T_NIL)
275 nvalue(top-1) = 101;316 nvalue(top-1) = 101;
@@ -278,7 +319,7 @@ int lua_execute (Byte *pc) · 2 unmodified lines
278 if (tonumber(top-1)) return 1;319 if (tonumber(top-1)) return 1;
279 if (nvalue(top-1) <= 0) nvalue(top-1) = 101;320 if (nvalue(top-1) <= 0) nvalue(top-1) = 101;
280 }321 }
281 avalue(top-1) = lua_createarray(lua_hashcreate(nvalue(top-1)));322 avalue(top-1) = lua_createarray(nvalue(top-1));
282 if (avalue(top-1) == NULL)323 if (avalue(top-1) == NULL)
283 return 1;324 return 1;
284 tag(top-1) = T_ARRAY;325 tag(top-1) = T_ARRAY;
@@ -412,39 +453,51 @@ int lua_execute (Byte *pc) · 127 unmodified lines
412 453
413 case ONTJMP:454 case ONTJMP:
414 {455 {
415 int n = *((Word *)(pc));456 CodeWord code;
416 pc += sizeof(Word);457 get_word(code,pc);
417 if (tag(top-1) != T_NIL) pc += n;458 if (tag(top-1) != T_NIL) pc += code.w;
418 }459 }
419 break;460 break;
420 461
421 case ONFJMP: 462 case ONFJMP:
422 {463 {
423 int n = *((Word *)(pc));464 CodeWord code;
424 pc += sizeof(Word);465 get_word(code,pc);
425 if (tag(top-1) == T_NIL) pc += n;466 if (tag(top-1) == T_NIL) pc += code.w;
426 }467 }
427 break;468 break;
428 469
429 case JMP: pc += *((Word *)(pc)) + sizeof(Word); break;470 case JMP:
471 {
472 CodeWord code;
473 get_word(code,pc);
474 pc += code.w;
475 }
476 break;
430 477
431 case UPJMP: pc -= *((Word *)(pc)) - sizeof(Word); break; 478 case UPJMP:
479 {
480 CodeWord code;
481 get_word(code,pc);
482 pc -= code.w;
483 }
484 break;
432 485
433 case IFFJMP:486 case IFFJMP:
434 {487 {
435 int n = *((Word *)(pc));488 CodeWord code;
436 pc += sizeof(Word);489 get_word(code,pc);
437 top--;490 top--;
438 if (tag(top) == T_NIL) pc += n;491 if (tag(top) == T_NIL) pc += code.w;
439 }492 }
440 break;493 break;
441 494
442 case IFFUPJMP:495 case IFFUPJMP:
443 {496 {
444 int n = *((Word *)(pc));497 CodeWord code;
445 pc += sizeof(Word);498 get_word(code,pc);
446 top--;499 top--;
447 if (tag(top) == T_NIL) pc -= n;500 if (tag(top) == T_NIL) pc -= code.w;
448 }501 }
449 break;502 break;
450 503
@@ -516,23 +569,25 @@ int lua_execute (Byte *pc) · 65 unmodified lines
516 break;569 break;
517 570
518 case HALT:571 case HALT:
572 base = oldbase;
519 return 0; /* success */573 return 0; /* success */
520 574
521 case SETFUNCTION:575 case SETFUNCTION:
522 {576 {
523 int file, func;577 CodeWord file, func;
524 file = *((Word *)(pc));578 get_word(file,pc);
525 pc += sizeof(Word);579 get_word(func,pc);
526 func = *((Word *)(pc));580 if (lua_pushfunction (file.w, func.w))
527 pc += sizeof(Word);
528 if (lua_pushfunction (file, func))
529 return 1;581 return 1;
530 }582 }
531 break;583 break;
532 584
533 case SETLINE:585 case SETLINE:
534 lua_debugline = *((Word *)(pc));586 {
535 pc += sizeof(Word);587 CodeWord code;
588 get_word(code,pc);
589 lua_debugline = code.w;
590 }
536 break;591 break;
537 592
538 case RESET:593 case RESET:
@@ -548,13 +603,13 @@ int lua_execute (Byte *pc) · 9 unmodified lines
548 603
549 604
550/*605/*
551** Mark all strings and arrays used by any object stored at stack.606** Traverse all objects on stack
552*/607*/
553void lua_markstack (void)608void lua_travstack (void (*fn)(Object *))
554{609{
555 Object *o;610 Object *o;
556 for (o = top-1; o >= stack; o--)611 for (o = top-1; o >= stack; o--)
557 lua_markobject (o);612 fn (o);
558}613}
559 614
560/*615/*
@@ -577,6 +632,7 @@ int lua_dostring (char *string) · 16 unmodified lines
577{632{
578 if (lua_openstring (string)) return 1;633 if (lua_openstring (string)) return 1;
579 if (lua_parse ()) return 1;634 if (lua_parse ()) return 1;
635 lua_closestring();
580 return 0;636 return 0;
581}637}
582 638
@@ -612,6 +668,7 @@ Object *lua_getparam (int number) · 29 unmodified lines
612*/668*/
613real lua_getnumber (Object *object)669real lua_getnumber (Object *object)
614{670{
671 if (object == NULL || tag(object) == T_NIL) return 0.0;
615 if (tonumber (object)) return 0.0;672 if (tonumber (object)) return 0.0;
616 else return (nvalue(object));673 else return (nvalue(object));
617}674}
@@ -621,6 +678,7 @@ real lua_getnumber (Object *object) · 3 unmodified lines
621*/678*/
622char *lua_getstring (Object *object)679char *lua_getstring (Object *object)
623{680{
681 if (object == NULL || tag(object) == T_NIL) return NULL;
624 if (tostring (object)) return NULL;682 if (tostring (object)) return NULL;
625 else return (svalue(object));683 else return (svalue(object));
626}684}
@@ -630,6 +688,7 @@ char *lua_getstring (Object *object) · 3 unmodified lines
630*/688*/
631char *lua_copystring (Object *object)689char *lua_copystring (Object *object)
632{690{
691 if (object == NULL || tag(object) == T_NIL) return NULL;
633 if (tostring (object)) return NULL;692 if (tostring (object)) return NULL;
634 else return (strdup(svalue(object)));693 else return (strdup(svalue(object)));
635}694}
@@ -639,6 +698,7 @@ char *lua_copystring (Object *object) · 3 unmodified lines
639*/698*/
640lua_CFunction lua_getcfunction (Object *object)699lua_CFunction lua_getcfunction (Object *object)
641{700{
701 if (object == NULL) return NULL;
642 if (tag(object) != T_CFUNCTION) return NULL;702 if (tag(object) != T_CFUNCTION) return NULL;
643 else return (fvalue(object));703 else return (fvalue(object));
644}704}
@@ -648,6 +708,7 @@ lua_CFunction lua_getcfunction (Object *object) · 3 unmodified lines
648*/708*/
649void *lua_getuserdata (Object *object)709void *lua_getuserdata (Object *object)
650{710{
711 if (object == NULL) return NULL;
651 if (tag(object) != T_USERDATA) return NULL;712 if (tag(object) != T_USERDATA) return NULL;
652 else return (uvalue(object));713 else return (uvalue(object));
653}714}
@@ -658,6 +719,7 @@ void *lua_getuserdata (Object *object) · 4 unmodified lines
658*/719*/
659Object *lua_getfield (Object *object, char *field)720Object *lua_getfield (Object *object, char *field)
660{721{
722 if (object == NULL) return NULL;
661 if (tag(object) != T_ARRAY)723 if (tag(object) != T_ARRAY)
662 return NULL;724 return NULL;
663 else725 else
@@ -675,6 +737,7 @@ Object *lua_getfield (Object *object, char *field) · 11 unmodified lines
675*/737*/
676Object *lua_getindexed (Object *object, float index)738Object *lua_getindexed (Object *object, float index)
677{739{
740 if (object == NULL) return NULL;
678 if (tag(object) != T_ARRAY)741 if (tag(object) != T_ARRAY)
679 return NULL;742 return NULL;
680 else743 else
@@ -931,3 +994,28 @@ void lua_print (void) · 250 unmodified lines
931 }994 }
932}995}
933 996
997/*
998** Internal function: do a file
999*/
1000void lua_internaldofile (void)
1001{
1002 lua_Object obj = lua_getparam (1);
1003 if (lua_isstring(obj) && !lua_dofile(lua_getstring(obj)))
1004 lua_pushnumber(1);
1005 else
1006 lua_pushnil();
1007}
1008
1009/*
1010** Internal function: do a string
1011*/
1012void lua_internaldostring (void)
1013{
1014 lua_Object obj = lua_getparam (1);
1015 if (lua_isstring(obj) && !lua_dostring(lua_getstring(obj)))
1016 lua_pushnumber(1);
1017 else
1018 lua_pushnil();
1019}
1020
1021
src/opcode.hrenamed from opcode.h+28−8
@@ -1,7 +1,6 @@
1/*1/*
2** opcode.h
3** TeCGraf - PUC-Rio2** TeCGraf - PUC-Rio
4** 16 Apr 923** $Id: opcode.h,v 2.1 1994/04/20 22:07:57 celes Exp $
5*/4*/
6 5
7#ifndef opcode_h6#ifndef opcode_h
@@ -15,13 +14,26 @@ · 7 unmodified lines
15#define real float14#define real float
16#endif15#endif
17 16
17#define FIELDS_PER_FLUSH 40
18
18typedef unsigned char Byte;19typedef unsigned char Byte;
19 20
20typedef unsigned short Word;21typedef unsigned short Word;
21 22
23typedef union
24{
25 struct {char c1; char c2;} m;
26 Word w;
27} CodeWord;
28
29typedef union
30{
31 struct {char c1; char c2; char c3; char c4;} m;
32 float f;
33} CodeFloat;
34
22typedef enum 35typedef enum
23{ 36{
24 NOP,
25 PUSHNIL,37 PUSHNIL,
26 PUSH0, PUSH1, PUSH2,38 PUSH0, PUSH1, PUSH2,
27 PUSHBYTE,39 PUSHBYTE,
@@ -41,7 +53,9 @@ typedef enum · 13 unmodified lines
41 STOREGLOBAL,53 STOREGLOBAL,
42 STOREINDEXED0,54 STOREINDEXED0,
43 STOREINDEXED,55 STOREINDEXED,
44 STOREFIELD,56 STORELIST0,
57 STORELIST,
58 STORERECORD,
45 ADJUST,59 ADJUST,
46 CREATEARRAY,60 CREATEARRAY,
47 EQOP,61 EQOP,
@@ -83,7 +97,6 @@ typedef enum · 35 unmodified lines
83 97
84typedef void (*Cfunction) (void);98typedef void (*Cfunction) (void);
85typedef int (*Input) (void);99typedef int (*Input) (void);
86typedef void (*Unput) (int );
87 100
88typedef union101typedef union
89{102{
@@ -127,18 +140,25 @@ typedef struct · 37 unmodified lines
127#define s_fvalue(i) (fvalue(&s_object(i)))140#define s_fvalue(i) (fvalue(&s_object(i)))
128#define s_uvalue(i) (uvalue(&s_object(i)))141#define s_uvalue(i) (uvalue(&s_object(i)))
129 142
143#define get_word(code,pc) {code.m.c1 = *pc++; code.m.c2 = *pc++;}
144#define get_float(code,pc) {code.m.c1 = *pc++; code.m.c2 = *pc++;\
145 code.m.c3 = *pc++; code.m.c4 = *pc++;}
146
147
130 148
131/* Exported functions */149/* Exported functions */
132int lua_execute (Byte *pc);150int lua_execute (Byte *pc);
133void lua_markstack (void);151void lua_markstack (void);
134char *lua_strdup (char *l);152char *lua_strdup (char *l);
135 153
136void lua_setinput (Input fn); /* from "lua.lex" module */154void lua_setinput (Input fn); /* from "lex.c" module */
137void lua_setunput (Unput fn); /* from "lua.lex" module */155char *lua_lasttext (void); /* from "lex.c" module */
138char *lua_lasttext (void); /* from "lua.lex" module */
139int lua_parse (void); /* from "lua.stx" module */156int lua_parse (void); /* from "lua.stx" module */
140void lua_type (void);157void lua_type (void);
141void lua_obj2number (void);158void lua_obj2number (void);
142void lua_print (void);159void lua_print (void);
160void lua_internaldofile (void);
161void lua_internaldostring (void);
162void lua_travstack (void (*fn)(Object *));
143 163
144#endif164#endif
src/table.crenamed from table.c+128−142
@@ -1,20 +1,22 @@
1/*1/*
2** table.c2** table.c
3** Module to control static tables3** Module to control static tables
4** TeCGraf - PUC-Rio
5** 11 May 93
6*/4*/
7 5
6char *rcs_table="$Id: table.c,v 2.1 1994/04/20 22:07:57 celes Exp $";
7
8#include <stdlib.h>8#include <stdlib.h>
9#include <string.h>9#include <string.h>
10 10
11#include "mm.h"
12
11#include "opcode.h"13#include "opcode.h"
12#include "hash.h"14#include "hash.h"
13#include "inout.h"15#include "inout.h"
14#include "table.h"16#include "table.h"
15#include "lua.h"17#include "lua.h"
16 18
17#define streq(s1,s2) (strcmp(s1,s2)==0)19#define streq(s1,s2) (s1[0]==s2[0]&&strcmp(s1+1,s2+1)==0)
18 20
19#ifndef MAXSYMBOL21#ifndef MAXSYMBOL
20#define MAXSYMBOL 51222#define MAXSYMBOL 512
@@ -24,20 +26,47 @@ static Symbol tablebuffer[MAXSYMBOL] = { · 3 unmodified lines
24 {"tonumber",{T_CFUNCTION,{lua_obj2number}}},26 {"tonumber",{T_CFUNCTION,{lua_obj2number}}},
25 {"next",{T_CFUNCTION,{lua_next}}},27 {"next",{T_CFUNCTION,{lua_next}}},
26 {"nextvar",{T_CFUNCTION,{lua_nextvar}}},28 {"nextvar",{T_CFUNCTION,{lua_nextvar}}},
27 {"print",{T_CFUNCTION,{lua_print}}}29 {"print",{T_CFUNCTION,{lua_print}}},
30 {"dofile",{T_CFUNCTION,{lua_internaldofile}}},
31 {"dostring",{T_CFUNCTION,{lua_internaldostring}}}
28 };32 };
29Symbol *lua_table=tablebuffer;33Symbol *lua_table=tablebuffer;
30Word lua_ntable=5;34Word lua_ntable=7;
35
36struct List
37{
38 Symbol *s;
39 struct List *next;
40};
41
42static struct List o6={ tablebuffer+6, 0};
43static struct List o5={ tablebuffer+5, &o6 };
44static struct List o4={ tablebuffer+4, &o5 };
45static struct List o3={ tablebuffer+3, &o4 };
46static struct List o2={ tablebuffer+2, &o3 };
47static struct List o1={ tablebuffer+1, &o2 };
48static struct List o0={ tablebuffer+0, &o1 };
49static struct List *searchlist=&o0;
31 50
32#ifndef MAXCONSTANT51#ifndef MAXCONSTANT
33#define MAXCONSTANT 25652#define MAXCONSTANT 256
34#endif53#endif
35static char *constantbuffer[MAXCONSTANT] = {"mark","nil","number",54/* pre-defined constants need garbage collection extra byte */
36 "string","table",55static char tm[] = " mark";
37 "function","cfunction"56static char ti[] = " nil";
57static char tn[] = " number";
58static char ts[] = " string";
59static char tt[] = " table";
60static char tf[] = " function";
61static char tc[] = " cfunction";
62static char tu[] = " userdata";
63static char *constantbuffer[MAXCONSTANT] = {tm+1, ti+1,
64 tn+1, ts+1,
65 tt+1, tf+1,
66 tc+1, tu+1
38 };67 };
39char **lua_constant = constantbuffer;68char **lua_constant = constantbuffer;
40Word lua_nconstant=T_CFUNCTION+1;69Word lua_nconstant=T_USERDATA+1;
41 70
42#ifndef MAXSTRING71#ifndef MAXSTRING
43#define MAXSTRING 51272#define MAXSTRING 512
@@ -46,18 +75,19 @@ static char *stringbuffer[MAXSTRING]; · 2 unmodified lines
46char **lua_string = stringbuffer;75char **lua_string = stringbuffer;
47Word lua_nstring=0;76Word lua_nstring=0;
48 77
49#ifndef MAXARRAY
50#define MAXARRAY 512
51#endif
52static Hash *arraybuffer[MAXARRAY];
53Hash **lua_array = arraybuffer;
54Word lua_narray=0;
55
56#define MAXFILE 2078#define MAXFILE 20
57char *lua_file[MAXFILE];79char *lua_file[MAXFILE];
58int lua_nfile;80int lua_nfile;
59 81
60 82
83#define markstring(s) (*((s)-1))
84
85
86/* Variables to controll garbage collection */
87Word lua_block=10; /* to check when garbage collector will be called */
88Word lua_nentity; /* counter of new entities (strings and arrays) */
89
90
61/*91/*
62** Given a name, search it at symbol table and return its index. If not92** Given a name, search it at symbol table and return its index. If not
63** found, allocate at end of table, checking oveflow and return its index.93** found, allocate at end of table, checking oveflow and return its index.
@@ -65,10 +95,19 @@ int lua_nfile; · 1 unmodified line
65*/95*/
66int lua_findsymbol (char *s)96int lua_findsymbol (char *s)
67{97{
68 int i;98 struct List *l, *p;
69 for (i=0; i<lua_ntable; i++)99 for (p=NULL, l=searchlist; l!=NULL; p=l, l=l->next)
70 if (streq(s,s_name(i)))100 if (streq(s,l->s->name))
71 return i;101 {
102 if (p!=NULL)
103 {
104 p->next = l->next;
105 l->next = searchlist;
106 searchlist = l;
107 }
108 return (l->s-lua_table);
109 }
110
72 if (lua_ntable >= MAXSYMBOL-1)111 if (lua_ntable >= MAXSYMBOL-1)
73 {112 {
74 lua_error ("symbol table overflow");113 lua_error ("symbol table overflow");
@@ -80,60 +119,13 @@ int lua_findsymbol (char *s) · 5 unmodified lines
80 lua_error ("not enough memory");119 lua_error ("not enough memory");
81 return -1;120 return -1;
82 }121 }
83 s_tag(lua_ntable++) = T_NIL;122 s_tag(lua_ntable) = T_NIL;
84 123 p = malloc(sizeof(*p));
85 return (lua_ntable-1);124 p->s = lua_table+lua_ntable;
86}125 p->next = searchlist;
87 126 searchlist = p;
88/*
89** Given a constant string, eliminate its delimeters (" or '), search it at
90** constant table and return its index. If not found, allocate at end of
91** the table, checking oveflow and return its index.
92**
93** For each allocation, the function allocate a extra char to be used to
94** mark used string (it's necessary to deal with constant and string
95** uniformily). The function store at the table the second position allocated,
96** that represents the beginning of the real string. On error, return -1.
97**
98*/
99int lua_findenclosedconstant (char *s)
100{
101 int i, j, l=strlen(s);
102 char *c = calloc (l, sizeof(char)); /* make a copy */
103
104 c++; /* create mark space */
105 127
106 /* introduce scape characters */ 128 return lua_ntable++;
107 for (i=1,j=0; i<l-1; i++)
108 {
109 if (s[i] == '\\')
110 {
111 switch (s[++i])
112 {
113 case 'n': c[j++] = '\n'; break;
114 case 't': c[j++] = '\t'; break;
115 case 'r': c[j++] = '\r'; break;
116 default : c[j++] = '\\'; c[j++] = c[i]; break;
117 }
118 }
119 else
120 c[j++] = s[i];
121 }
122 c[j++] = 0;
123
124 for (i=0; i<lua_nconstant; i++)
125 if (streq(c,lua_constant[i]))
126 {
127 free (c-1);
128 return i;
129 }
130 if (lua_nconstant >= MAXCONSTANT-1)
131 {
132 lua_error ("lua: constant string table overflow");
133 return -1;
134 }
135 lua_constant[lua_nconstant++] = c;
136 return (lua_nconstant-1);
137}129}
138 130
139/*131/*
@@ -167,66 +159,65 @@ int lua_findconstant (char *s) · 27 unmodified lines
167}159}
168 160
169 161
162/*
163** Traverse symbol table objects
164*/
165void lua_travsymbol (void (*fn)(Object *))
166{
167 int i;
168 for (i=0; i<lua_ntable; i++)
169 fn(&s_object(i));
170}
171
172
170/*173/*
171** Mark an object if it is a string or a unmarked array.174** Mark an object if it is a string or a unmarked array.
172*/175*/
173void lua_markobject (Object *o)176void lua_markobject (Object *o)
174{177{
175 if (tag(o) == T_STRING)178 if (tag(o) == T_STRING)
176 lua_markstring (svalue(o)) = 1;179 markstring (svalue(o)) = 1;
177 else if (tag(o) == T_ARRAY && markarray(avalue(o)) == 0)180 else if (tag(o) == T_ARRAY)
178 lua_hashmark (avalue(o));181 lua_hashmark (avalue(o));
179}182}
180 183
184
181/*185/*
182** Mark all strings and arrays used by any object stored at symbol table.186** Garbage collection.
187** Delete all unused strings and arrays.
183*/188*/
184static void lua_marktable (void)189void lua_pack (void)
185{190{
186 int i;191 /* mark stack strings */
187 for (i=0; i<lua_ntable; i++)192 lua_travstack(lua_markobject);
188 lua_markobject (&s_object(i));193
194 /* mark symbol table strings */
195 lua_travsymbol(lua_markobject);
196
197 lua_stringcollector();
198 lua_hashcollector();
199
200 lua_nentity = 0; /* reset counter */
189} 201}
190 202
191/*203/*
192** Simulate a garbage colection. When string table or array table overflows,204** Garbage collection to atrings.
193** this function check if all allocated strings and arrays are in use. If205** Delete all unmarked strings
194** there are unused ones, pack (compress) the tables.
195*/206*/
196static void lua_pack (void)207void lua_stringcollector (void)
197{208{
198 lua_markstack ();209 int i, j;
199 lua_marktable ();210 for (i=j=0; i<lua_nstring; i++)
200 211 if (markstring(lua_string[i]) == 1)
201 { /* pack string */212 {
202 int i, j;213 lua_string[j++] = lua_string[i];
203 for (i=j=0; i<lua_nstring; i++)214 markstring(lua_string[i]) = 0;
204 if (lua_markstring(lua_string[i]) == 1)215 }
205 {216 else
206 lua_string[j++] = lua_string[i];217 {
207 lua_markstring(lua_string[i]) = 0;218 free (lua_string[i]-1);
208 }219 }
209 else220 lua_nstring = j;
210 {
211 free (lua_string[i]-1);
212 }
213 lua_nstring = j;
214 }
215
216 { /* pack array */
217 int i, j;
218 for (i=j=0; i<lua_narray; i++)
219 if (markarray(lua_array[i]) == 1)
220 {
221 lua_array[j++] = lua_array[i];
222 markarray(lua_array[i]) = 0;
223 }
224 else
225 {
226 lua_hashdelete (lua_array[i]);
227 }
228 lua_narray = j;
229 }
230}221}
231 222
232/*223/*
@@ -236,9 +227,17 @@ static void lua_pack (void) · 3 unmodified lines
236*/227*/
237char *lua_createstring (char *s)228char *lua_createstring (char *s)
238{229{
230 int i;
239 if (s == NULL) return NULL;231 if (s == NULL) return NULL;
240 232
241 if (lua_nstring >= MAXSTRING-1)233 for (i=0; i<lua_nstring; i++)
234 if (streq(s,lua_string[i]))
235 {
236 free(s-1);
237 return lua_string[i];
238 }
239
240 if (lua_nentity == lua_block || lua_nstring >= MAXSTRING-1)
242 {241 {
243 lua_pack ();242 lua_pack ();
244 if (lua_nstring >= MAXSTRING-1)243 if (lua_nstring >= MAXSTRING-1)
@@ -248,32 +247,10 @@ char *lua_createstring (char *s) · 3 unmodified lines
248 }247 }
249 } 248 }
250 lua_string[lua_nstring++] = s;249 lua_string[lua_nstring++] = s;
250 lua_nentity++;
251 return s;251 return s;
252}252}
253 253
254/*
255** Allocate a new array, already created, at array table. The function puts
256** it at the end of the table, checking overflow, and returns its own pointer,
257** or NULL on error.
258*/
259void *lua_createarray (void *a)
260{
261 if (a == NULL) return NULL;
262
263 if (lua_narray >= MAXARRAY-1)
264 {
265 lua_pack ();
266 if (lua_narray >= MAXARRAY-1)
267 {
268 lua_error ("indexed table overflow");
269 return NULL;
270 }
271 }
272 lua_array[lua_narray++] = a;
273 return a;
274}
275
276
277/*254/*
278** Add a file name at file table, checking overflow. This function also set255** Add a file name at file table, checking overflow. This function also set
279** the external variable "lua_filename" with the function filename set.256** the external variable "lua_filename" with the function filename set.
@@ -294,6 +271,15 @@ int lua_addfile (char *fn) · 14 unmodified lines
294 return 0;271 return 0;
295}272}
296 273
274/*
275** Delete a file from file stack
276*/
277int lua_delfile (void)
278{
279 lua_nfile--;
280 return 1;
281}
282
297/*283/*
298** Return the last file name set.284** Return the last file name set.
299*/285*/
@@ -332,9 +318,9 @@ void lua_nextvar (void) · 32 unmodified lines
332 return;318 return;
333 }319 }
334 index++;320 index++;
335 while (index < lua_ntable-1 && tag(&s_object(index)) == T_NIL) index++;321 while (index < lua_ntable && tag(&s_object(index)) == T_NIL) index++;
336 322
337 if (index == lua_ntable-1)323 if (index == lua_ntable)
338 {324 {
339 lua_pushnil();325 lua_pushnil();
340 lua_pushnil();326 lua_pushnil();
src/table.h+42−0
@@ -0,0 +1,42 @@
1/*
2** Module to control static tables
3** TeCGraf - PUC-Rio
4** $Id: table.h,v 2.1 1994/04/20 22:07:57 celes Exp $
5*/
6
7#ifndef table_h
8#define table_h
9
10extern Symbol *lua_table;
11extern Word lua_ntable;
12
13extern char **lua_constant;
14extern Word lua_nconstant;
15
16extern char **lua_string;
17extern Word lua_nstring;
18
19extern Hash **lua_array;
20extern Word lua_narray;
21
22extern char *lua_file[];
23extern int lua_nfile;
24
25extern Word lua_block;
26extern Word lua_nentity;
27
28
29
30int lua_findsymbol (char *s);
31int lua_findconstant (char *s);
32void lua_travsymbol (void (*fn)(Object *));
33void lua_markobject (Object *o);
34void lua_pack (void);
35void lua_stringcollector (void);
36char *lua_createstring (char *s);
37int lua_addfile (char *fn);
38int lua_delfile (void);
39char *lua_filename (void);
40void lua_nextvar (void);
41
42#endif
src/y.tab.crenamed from y_tab.c+707−535
@@ -1,71 +1,125 @@
1
1# line 2 "lua.stx"2# line 2 "lua.stx"
2 3
4char *rcs_luastx = "$Id: lua.stx,v 2.4 1994/04/20 16:22:21 celes Exp $";
5
3#include <stdio.h>6#include <stdio.h>
4#include <stdlib.h>7#include <stdlib.h>
5#include <string.h>8#include <string.h>
6 9
10#include "mm.h"
11
7#include "opcode.h"12#include "opcode.h"
8#include "hash.h"13#include "hash.h"
9#include "inout.h"14#include "inout.h"
10#include "table.h"15#include "table.h"
11#include "lua.h"16#include "lua.h"
12 17
13#ifndef ALIGNMENT18#define LISTING 0
14#define ALIGNMENT (sizeof(void *))
15#endif
16 19
17#ifndef MAXCODE20#ifndef GAPCODE
18#define MAXCODE 102421#define GAPCODE 50
19#endif22#endif
20static long buffer[MAXCODE];23static Word maxcode;
21static Byte *code = (Byte *)buffer;24static Word maxmain;
22static long mainbuffer[MAXCODE];25static Word maxcurr ;
23static Byte *maincode = (Byte *)mainbuffer;26static Byte *code = NULL;
27static Byte *initcode;
24static Byte *basepc;28static Byte *basepc;
25static Byte *pc;29static Word maincode;
30static Word pc;
26 31
27#define MAXVAR 3232#define MAXVAR 32
28static long varbuffer[MAXVAR];33static long varbuffer[MAXVAR]; /* variables in an assignment list;
29static Byte nvarbuffer=0; /* number of variables at a list */34 it's long to store negative Word values */
35static int nvarbuffer=0; /* number of variables at a list */
36
37static Word localvar[STACKGAP]; /* store local variable names */
38static int nlocalvar=0; /* number of local variables */
30 39
31static Word localvar[STACKGAP];40#define MAXFIELDS FIELDS_PER_FLUSH*2
32static Byte nlocalvar=0; /* number of local variables */41static Word fields[MAXFIELDS]; /* fieldnames to be flushed */
42static int nfields=0;
33static int ntemp; /* number of temporary var into stack */43static int ntemp; /* number of temporary var into stack */
34static int err; /* flag to indicate error */44static int err; /* flag to indicate error */
35 45
36/* Internal functions */46/* Internal functions */
37#define align(n) align_n(sizeof(n))
38 47
39static void code_byte (Byte c)48static void code_byte (Byte c)
40{49{
41 if (pc-basepc>MAXCODE-1)50 if (pc>maxcurr-2) /* 1 byte free to code HALT of main code */
42 {51 {
43 lua_error ("code buffer overflow");52 maxcurr += GAPCODE;
44 err = 1;53 basepc = (Byte *)realloc(basepc, maxcurr*sizeof(Byte));
54 if (basepc == NULL)
55 {
56 lua_error ("not enough memory");
57 err = 1;
58 }
45 }59 }
46 *pc++ = c;60 basepc[pc++] = c;
47}61}
48 62
49static void code_word (Word n)63static void code_word (Word n)
50{64{
51 if (pc-basepc>MAXCODE-sizeof(Word))65 CodeWord code;
52 {66 code.w = n;
53 lua_error ("code buffer overflow");67 code_byte(code.m.c1);
54 err = 1;68 code_byte(code.m.c2);
55 }
56 *((Word *)pc) = n;
57 pc += sizeof(Word);
58}69}
59 70
60static void code_float (float n)71static void code_float (float n)
61{72{
62 if (pc-basepc>MAXCODE-sizeof(float))73 CodeFloat code;
63 {74 code.f = n;
64 lua_error ("code buffer overflow");75 code_byte(code.m.c1);
65 err = 1;76 code_byte(code.m.c2);
66 }77 code_byte(code.m.c3);
67 *((float *)pc) = n;78 code_byte(code.m.c4);
68 pc += sizeof(float);79}
80
81static void code_word_at (Byte *p, Word n)
82{
83 CodeWord code;
84 code.w = n;
85 *p++ = code.m.c1;
86 *p++ = code.m.c2;
87}
88
89static void push_field (Word name)
90{
91 if (nfields < STACKGAP-1)
92 fields[nfields++] = name;
93 else
94 {
95 lua_error ("too many fields in a constructor");
96 err = 1;
97 }
98}
99
100static void flush_record (int n)
101{
102 int i;
103 if (n == 0) return;
104 code_byte(STORERECORD);
105 code_byte(n);
106 for (i=0; i<n; i++)
107 code_word(fields[--nfields]);
108 ntemp -= n;
109}
110
111static void flush_list (int m, int n)
112{
113 if (n == 0) return;
114 if (m == 0)
115 code_byte(STORELIST0);
116 else
117 {
118 code_byte(STORELIST);
119 code_byte(m);
120 }
121 code_byte(n);
122 ntemp-=n;
69}123}
70 124
71static void incr_ntemp (void)125static void incr_ntemp (void)
@@ -79,10 +133,10 @@ static void incr_ntemp (void) · 7 unmodified lines
79 }133 }
80}134}
81 135
82static void incr_nlocalvar (void)136static void add_nlocalvar (int n)
83{137{
84 if (ntemp+nlocalvar+MAXVAR+1 < STACKGAP)138 if (ntemp+nlocalvar+MAXVAR+n < STACKGAP)
85 nlocalvar++;139 nlocalvar += n;
86 else140 else
87 {141 {
88 lua_error ("too many local variables or expression too complicate");142 lua_error ("too many local variables or expression too complicate");
@@ -101,16 +155,9 @@ static void incr_nvarbuffer (void) · 12 unmodified lines
101 }155 }
102}156}
103 157
104static void align_n (unsigned size)
105{
106 if (size > ALIGNMENT) size = ALIGNMENT;
107 while (((pc+1-code)%size) != 0) /* +1 to include BYTECODE */
108 code_byte (NOP);
109}
110
111static void code_number (float f)158static void code_number (float f)
112{ int i = f;159{ Word i = (Word)f;
113 if (f == i) /* f has an integer value */160 if (f == (float)i) /* f has an (short) integer value */
114 {161 {
115 if (i <= 2) code_byte(PUSH0 + i);162 if (i <= 2) code_byte(PUSH0 + i);
116 else if (i <= 255)163 else if (i <= 255)
@@ -120,14 +167,12 @@ static void code_number (float f) · 3 unmodified lines
120 }167 }
121 else168 else
122 {169 {
123 align(Word);
124 code_byte(PUSHWORD);170 code_byte(PUSHWORD);
125 code_word(i);171 code_word(i);
126 }172 }
127 }173 }
128 else174 else
129 {175 {
130 align(float);
131 code_byte(PUSHFLOAT);176 code_byte(PUSHFLOAT);
132 code_float(f);177 code_float(f);
133 }178 }
@@ -135,33 +180,34 @@ static void code_number (float f) · 1 unmodified line
135}180}
136 181
137 182
138# line 140 "lua.stx"183# line 184 "lua.stx"
139typedef union 184typedef union
140{185{
141 int vInt;186 int vInt;
142 long vLong;187 long vLong;
143 float vFloat;188 float vFloat;
189 char *pChar;
144 Word vWord;190 Word vWord;
145 Byte *pByte;191 Byte *pByte;
146} YYSTYPE;192} YYSTYPE;
147# define NIL 257193# define WRONGTOKEN 257
148# define IF 258194# define NIL 258
149# define THEN 259195# define IF 259
150# define ELSE 260196# define THEN 260
151# define ELSEIF 261197# define ELSE 261
152# define WHILE 262198# define ELSEIF 262
153# define DO 263199# define WHILE 263
154# define REPEAT 264200# define DO 264
155# define UNTIL 265201# define REPEAT 265
156# define END 266202# define UNTIL 266
157# define RETURN 267203# define END 267
158# define LOCAL 268204# define RETURN 268
159# define NUMBER 269205# define LOCAL 269
160# define FUNCTION 270206# define NUMBER 270
161# define NAME 271207# define FUNCTION 271
162# define STRING 272208# define STRING 272
163# define DEBUG 273209# define NAME 273
164# define NOT 274210# define DEBUG 274
165# define AND 275211# define AND 275
166# define OR 276212# define OR 276
167# define NE 277213# define NE 277
@@ -169,6 +215,7 @@ typedef union · 1 unmodified line
169# define GE 279215# define GE 279
170# define CONC 280216# define CONC 280
171# define UNARY 281217# define UNARY 281
218# define NOT 282
172#define yyclearin yychar = -1219#define yyclearin yychar = -1
173#define yyerrok yyerrflag = 0220#define yyerrok yyerrflag = 0
174extern int yychar;221extern int yychar;
@@ -179,7 +226,7 @@ extern int yyerrflag; · 4 unmodified lines
179YYSTYPE yylval, yyval;226YYSTYPE yylval, yyval;
180# define YYERRCODE 256227# define YYERRCODE 256
181 228
182# line 530 "lua.stx"229# line 622 "lua.stx"
183 230
184 231
185/*232/*
@@ -202,7 +249,6 @@ static void lua_pushvar (long number) · 16 unmodified lines
202{ 249{
203 if (number > 0) /* global var */250 if (number > 0) /* global var */
204 {251 {
205 align(Word);
206 code_byte(PUSHGLOBAL);252 code_byte(PUSHGLOBAL);
207 code_word(number-1);253 code_word(number-1);
208 incr_ntemp();254 incr_ntemp();
@@ -235,7 +281,6 @@ static void lua_codestore (int i) · 26 unmodified lines
235{281{
236 if (varbuffer[i] > 0) /* global var */282 if (varbuffer[i] > 0) /* global var */
237 {283 {
238 align(Word);
239 code_byte(STOREGLOBAL);284 code_byte(STOREGLOBAL);
240 code_word(varbuffer[i]-1);285 code_word(varbuffer[i]-1);
241 }286 }
@@ -288,27 +333,37 @@ int yywrap (void) · 46 unmodified lines
288*/333*/
289int lua_parse (void)334int lua_parse (void)
290{335{
291 Byte *initcode = maincode;336 Byte *init = initcode = (Byte *) calloc(GAPCODE, sizeof(Byte));
337 maincode = 0;
338 maxmain = GAPCODE;
339 if (init == NULL)
340 {
341 lua_error("not enough memory");
342 return 1;
343 }
292 err = 0;344 err = 0;
293 if (yyparse () || (err==1)) return 1;345 if (yyparse () || (err==1)) return 1;
294 *maincode++ = HALT;346 initcode[maincode++] = HALT;
295 if (lua_execute (initcode)) return 1;347 init = initcode;
296 maincode = initcode;348#if LISTING
349 PrintCode(init,init+maincode);
350#endif
351 if (lua_execute (init)) return 1;
352 free(init);
297 return 0;353 return 0;
298}354}
299 355
300 356
301#if 0357#if LISTING
302 358
303static void PrintCode (void)359static void PrintCode (Byte *code, Byte *end)
304{360{
305 Byte *p = code;361 Byte *p = code;
306 printf ("\n\nCODE\n");362 printf ("\n\nCODE\n");
307 while (p != pc)363 while (p != end)
308 {364 {
309 switch ((OpCode)*p)365 switch ((OpCode)*p)
310 {366 {
311 case NOP: printf ("%d NOP\n", (p++)-code); break;
312 case PUSHNIL: printf ("%d PUSHNIL\n", (p++)-code); break;367 case PUSHNIL: printf ("%d PUSHNIL\n", (p++)-code); break;
313 case PUSH0: case PUSH1: case PUSH2:368 case PUSH0: case PUSH1: case PUSH2:
314 printf ("%d PUSH%c\n", p-code, *p-PUSH0+'0');369 printf ("%d PUSH%c\n", p-code, *p-PUSH0+'0');
@@ -319,16 +374,31 @@ static void PrintCode (void) · 4 unmodified lines
319 p++;374 p++;
320 break;375 break;
321 case PUSHWORD:376 case PUSHWORD:
322 printf ("%d PUSHWORD %d\n", p-code, *((Word *)(p+1)));377 {
323 p += 1 + sizeof(Word);378 CodeWord c;
379 int n = p-code;
380 p++;
381 get_word(c,p);
382 printf ("%d PUSHWORD %d\n", n, c.w);
383 }
324 break;384 break;
325 case PUSHFLOAT:385 case PUSHFLOAT:
326 printf ("%d PUSHFLOAT %f\n", p-code, *((float *)(p+1)));386 {
327 p += 1 + sizeof(float);387 CodeFloat c;
388 int n = p-code;
389 p++;
390 get_float(c,p);
391 printf ("%d PUSHFLOAT %f\n", n, c.f);
392 }
328 break;393 break;
329 case PUSHSTRING:394 case PUSHSTRING:
330 printf ("%d PUSHSTRING %d\n", p-code, *((Word *)(p+1)));395 {
331 p += 1 + sizeof(Word);396 CodeWord c;
397 int n = p-code;
398 p++;
399 get_word(c,p);
400 printf ("%d PUSHSTRING %d\n", n, c.w);
401 }
332 break;402 break;
333 case PUSHLOCAL0: case PUSHLOCAL1: case PUSHLOCAL2: case PUSHLOCAL3:403 case PUSHLOCAL0: case PUSHLOCAL1: case PUSHLOCAL2: case PUSHLOCAL3:
334 case PUSHLOCAL4: case PUSHLOCAL5: case PUSHLOCAL6: case PUSHLOCAL7:404 case PUSHLOCAL4: case PUSHLOCAL5: case PUSHLOCAL6: case PUSHLOCAL7:
@@ -340,8 +410,13 @@ static void PrintCode (void) · 5 unmodified lines
340 p++;410 p++;
341 break;411 break;
342 case PUSHGLOBAL:412 case PUSHGLOBAL:
343 printf ("%d PUSHGLOBAL %d\n", p-code, *((Word *)(p+1)));413 {
344 p += 1 + sizeof(Word);414 CodeWord c;
415 int n = p-code;
416 p++;
417 get_word(c,p);
418 printf ("%d PUSHGLOBAL %d\n", n, c.w);
419 }
345 break;420 break;
346 case PUSHINDEXED: printf ("%d PUSHINDEXED\n", (p++)-code); break;421 case PUSHINDEXED: printf ("%d PUSHINDEXED\n", (p++)-code); break;
347 case PUSHMARK: printf ("%d PUSHMARK\n", (p++)-code); break;422 case PUSHMARK: printf ("%d PUSHMARK\n", (p++)-code); break;
@@ -353,18 +428,34 @@ static void PrintCode (void) · 5 unmodified lines
353 p++;428 p++;
354 break;429 break;
355 case STORELOCAL:430 case STORELOCAL:
356 printf ("%d STORELOCAK %d\n", p-code, *(++p));431 printf ("%d STORELOCAL %d\n", p-code, *(++p));
357 p++;432 p++;
358 break;433 break;
359 case STOREGLOBAL:434 case STOREGLOBAL:
360 printf ("%d STOREGLOBAL %d\n", p-code, *((Word *)(p+1)));435 {
361 p += 1 + sizeof(Word);436 CodeWord c;
437 int n = p-code;
438 p++;
439 get_word(c,p);
440 printf ("%d STOREGLOBAL %d\n", n, c.w);
441 }
362 break;442 break;
363 case STOREINDEXED0: printf ("%d STOREINDEXED0\n", (p++)-code); break;443 case STOREINDEXED0: printf ("%d STOREINDEXED0\n", (p++)-code); break;
364 case STOREINDEXED: printf ("%d STOREINDEXED %d\n", p-code, *(++p));444 case STOREINDEXED: printf ("%d STOREINDEXED %d\n", p-code, *(++p));
365 p++;445 p++;
366 break;446 break;
367 case STOREFIELD: printf ("%d STOREFIELD\n", (p++)-code); break;447 case STORELIST0:
448 printf("%d STORELIST0 %d\n", p-code, *(++p));
449 p++;
450 break;
451 case STORELIST:
452 printf("%d STORELIST %d %d\n", p-code, *(p+1), *(p+2));
453 p+=3;
454 break;
455 case STORERECORD:
456 printf("%d STORERECORD %d\n", p-code, *(++p));
457 p += *p*sizeof(Word) + 1;
458 break;
368 case ADJUST:459 case ADJUST:
369 printf ("%d ADJUST %d\n", p-code, *(++p));460 printf ("%d ADJUST %d\n", p-code, *(++p));
370 p++;461 p++;
@@ -381,28 +472,58 @@ static void PrintCode (void) · 10 unmodified lines
381 case MINUSOP: printf ("%d MINUSOP\n", (p++)-code); break;472 case MINUSOP: printf ("%d MINUSOP\n", (p++)-code); break;
382 case NOTOP: printf ("%d NOTOP\n", (p++)-code); break;473 case NOTOP: printf ("%d NOTOP\n", (p++)-code); break;
383 case ONTJMP: 474 case ONTJMP:
384 printf ("%d ONTJMP %d\n", p-code, *((Word *)(p+1)));475 {
385 p += sizeof(Word) + 1;476 CodeWord c;
477 int n = p-code;
478 p++;
479 get_word(c,p);
480 printf ("%d ONTJMP %d\n", n, c.w);
481 }
386 break;482 break;
387 case ONFJMP: 483 case ONFJMP:
388 printf ("%d ONFJMP %d\n", p-code, *((Word *)(p+1)));484 {
389 p += sizeof(Word) + 1;485 CodeWord c;
486 int n = p-code;
487 p++;
488 get_word(c,p);
489 printf ("%d ONFJMP %d\n", n, c.w);
490 }
390 break;491 break;
391 case JMP: 492 case JMP:
392 printf ("%d JMP %d\n", p-code, *((Word *)(p+1)));493 {
393 p += sizeof(Word) + 1;494 CodeWord c;
495 int n = p-code;
496 p++;
497 get_word(c,p);
498 printf ("%d JMP %d\n", n, c.w);
499 }
394 break;500 break;
395 case UPJMP:501 case UPJMP:
396 printf ("%d UPJMP %d\n", p-code, *((Word *)(p+1)));502 {
397 p += sizeof(Word) + 1;503 CodeWord c;
504 int n = p-code;
505 p++;
506 get_word(c,p);
507 printf ("%d UPJMP %d\n", n, c.w);
508 }
398 break;509 break;
399 case IFFJMP:510 case IFFJMP:
400 printf ("%d IFFJMP %d\n", p-code, *((Word *)(p+1)));511 {
401 p += sizeof(Word) + 1;512 CodeWord c;
513 int n = p-code;
514 p++;
515 get_word(c,p);
516 printf ("%d IFFJMP %d\n", n, c.w);
517 }
402 break;518 break;
403 case IFFUPJMP:519 case IFFUPJMP:
404 printf ("%d IFFUPJMP %d\n", p-code, *((Word *)(p+1)));520 {
405 p += sizeof(Word) + 1;521 CodeWord c;
522 int n = p-code;
523 p++;
524 get_word(c,p);
525 printf ("%d IFFUPJMP %d\n", n, c.w);
526 }
406 break;527 break;
407 case POP: printf ("%d POP\n", (p++)-code); break;528 case POP: printf ("%d POP\n", (p++)-code); break;
408 case CALLFUNC: printf ("%d CALLFUNC\n", (p++)-code); break;529 case CALLFUNC: printf ("%d CALLFUNC\n", (p++)-code); break;
@@ -410,7 +531,29 @@ static void PrintCode (void) · 1 unmodified line
410 printf ("%d RETCODE %d\n", p-code, *(++p));531 printf ("%d RETCODE %d\n", p-code, *(++p));
411 p++;532 p++;
412 break;533 break;
413 default: printf ("%d Cannot happen\n", (p++)-code); break;534 case HALT: printf ("%d HALT\n", (p++)-code); break;
535 case SETFUNCTION:
536 {
537 CodeWord c1, c2;
538 int n = p-code;
539 p++;
540 get_word(c1,p);
541 get_word(c2,p);
542 printf ("%d SETFUNCTION %d %d\n", n, c1.w, c2.w);
543 }
544 break;
545 case SETLINE:
546 {
547 CodeWord c;
548 int n = p-code;
549 p++;
550 get_word(c,p);
551 printf ("%d SETLINE %d\n", n, c.w);
552 }
553 break;
554
555 case RESET: printf ("%d RESET\n", (p++)-code); break;
556 default: printf ("%d Cannot happen: code %d\n", (p++)-code, *(p-1)); break;
414 }557 }
415 }558 }
416}559}
@@ -420,194 +563,195 @@ int yyexca[] ={ · 3 unmodified lines
420-1, 1,563-1, 1,
421 0, -1,564 0, -1,
422 -2, 2,565 -2, 2,
423-1, 19,566-1, 20,
424 40, 65,567 40, 67,
425 91, 95,568 91, 94,
426 46, 97,569 46, 96,
427 -2, 92,570 -2, 91,
428-1, 29,571-1, 32,
429 40, 65,572 40, 67,
430 91, 95,573 91, 94,
431 46, 97,574 46, 96,
432 -2, 51,575 -2, 51,
433-1, 70,576-1, 73,
434 275, 33,577 275, 34,
435 276, 33,578 276, 34,
436 61, 33,579 61, 34,
437 277, 33,580 277, 34,
438 62, 33,581 62, 34,
439 60, 33,582 60, 34,
440 278, 33,583 278, 34,
441 279, 33,584 279, 34,
442 280, 33,585 280, 34,
443 43, 33,586 43, 34,
444 45, 33,587 45, 34,
445 42, 33,588 42, 34,
446 47, 33,589 47, 34,
447 -2, 68,
448-1, 71,
449 91, 95,
450 46, 97,
451 -2, 93,
452-1, 102,
453 260, 27,
454 261, 27,
455 265, 27,
456 266, 27,
457 267, 27,
458 -2, 11,
459-1, 117,
460 93, 85,
461 -2, 87,
462-1, 122,
463 267, 30,
464 -2, 29,
465-1, 145,
466 275, 33,
467 276, 33,
468 61, 33,
469 277, 33,
470 62, 33,
471 60, 33,
472 278, 33,
473 279, 33,
474 280, 33,
475 43, 33,
476 45, 33,
477 42, 33,
478 47, 33,
479 -2, 70,590 -2, 70,
591-1, 74,
592 91, 94,
593 46, 96,
594 -2, 92,
595-1, 105,
596 261, 28,
597 262, 28,
598 266, 28,
599 267, 28,
600 268, 28,
601 -2, 11,
602-1, 125,
603 268, 31,
604 -2, 30,
605-1, 146,
606 275, 34,
607 276, 34,
608 61, 34,
609 277, 34,
610 62, 34,
611 60, 34,
612 278, 34,
613 279, 34,
614 280, 34,
615 43, 34,
616 45, 34,
617 42, 34,
618 47, 34,
619 -2, 72,
480 };620 };
481# define YYNPROD 105621# define YYNPROD 103
482# define YYLAST 318622# define YYLAST 364
483int yyact[]={623int yyact[]={
484 624
485 54, 52, 136, 53, 13, 55, 54, 52, 14, 53,625 58, 56, 22, 57, 132, 59, 58, 56, 137, 57,
486 15, 55, 5, 166, 18, 6, 129, 21, 47, 46,626 110, 59, 58, 56, 107, 57, 85, 59, 51, 50,
487 48, 107, 104, 97, 47, 46, 48, 54, 52, 80,627 52, 82, 23, 43, 51, 50, 52, 58, 56, 9,
488 53, 21, 55, 54, 52, 40, 53, 9, 55, 54,628 57, 157, 59, 58, 56, 165, 57, 5, 59, 162,
489 52, 158, 53, 160, 55, 47, 46, 48, 159, 101,629 6, 161, 104, 154, 155, 51, 50, 52, 64, 153,
490 81, 47, 46, 48, 10, 54, 52, 126, 53, 67,630 70, 51, 50, 52, 26, 58, 56, 127, 57, 10,
491 55, 54, 52, 60, 53, 155, 55, 148, 149, 135,631 59, 111, 25, 78, 27, 58, 56, 28, 57, 29,
492 147, 108, 150, 47, 46, 48, 73, 23, 75, 47,632 59, 131, 147, 51, 50, 52, 7, 65, 66, 115,
493 46, 48, 7, 25, 38, 153, 26, 164, 27, 117,633 150, 112, 63, 51, 50, 52, 68, 69, 31, 159,
494 61, 62, 74, 11, 76, 54, 24, 127, 65, 66,634 11, 79, 58, 76, 128, 73, 41, 59, 151, 87,
495 55, 37, 154, 151, 103, 111, 72, 28, 93, 94,635 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
496 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,636 77, 114, 148, 40, 58, 56, 102, 57, 106, 59,
497 92, 116, 59, 77, 54, 52, 118, 53, 99, 55,637 117, 32, 72, 121, 116, 100, 80, 109, 67, 48,
498 110, 95, 64, 44, 70, 109, 29, 33, 105, 106,638 20, 36, 73, 30, 45, 73, 44, 118, 149, 84,
499 42, 112, 41, 165, 139, 19, 17, 152, 79, 123,639 17, 126, 18, 46, 21, 47, 120, 119, 101, 145,
500 43, 119, 20, 114, 113, 98, 63, 144, 143, 122,640 144, 125, 71, 123, 75, 39, 38, 12, 8, 108,
501 68, 39, 36, 130, 35, 120, 12, 8, 102, 125,641 105, 136, 83, 74, 135, 24, 4, 3, 139, 140,
502 128, 141, 78, 69, 70, 71, 142, 131, 132, 140,642 2, 81, 134, 141, 133, 130, 129, 42, 113, 16,
503 22, 124, 4, 3, 2, 121, 96, 138, 146, 137,643 1, 146, 124, 0, 143, 0, 0, 152, 0, 0,
504 134, 157, 133, 115, 16, 1, 0, 0, 0, 0,644 0, 86, 0, 0, 0, 0, 0, 13, 0, 0,
505 0, 0, 0, 156, 0, 0, 0, 0, 161, 0,645 160, 14, 0, 15, 164, 163, 0, 19, 167, 0,
506 0, 0, 0, 162, 0, 0, 0, 168, 0, 172,646 0, 23, 73, 0, 0, 0, 0, 0, 168, 166,
507 145, 163, 171, 0, 174, 0, 0, 0, 169, 156,647 158, 171, 173, 0, 0, 0, 169, 0, 0, 0,
508 167, 170, 173, 57, 58, 49, 50, 51, 56, 57,648 0, 0, 0, 61, 62, 53, 54, 55, 60, 61,
509 58, 49, 50, 51, 56, 175, 0, 0, 100, 0,649 62, 53, 54, 55, 60, 0, 0, 0, 0, 103,
510 45, 0, 0, 0, 0, 70, 0, 0, 0, 0,650 60, 49, 0, 98, 99, 0, 0, 0, 0, 0,
511 57, 58, 49, 50, 51, 56, 57, 58, 49, 50,651 61, 62, 53, 54, 55, 60, 61, 62, 53, 54,
512 51, 56, 0, 0, 0, 0, 0, 56, 0, 0,652 55, 60, 0, 0, 0, 0, 0, 0, 0, 0,
513 0, 0, 0, 0, 0, 0, 0, 0, 57, 58,653 0, 0, 35, 0, 0, 0, 0, 0, 61, 62,
514 49, 50, 51, 56, 0, 0, 49, 50, 51, 56,654 53, 54, 55, 60, 33, 122, 34, 23, 0, 0,
515 32, 0, 0, 0, 0, 0, 0, 0, 0, 0,655 53, 54, 55, 60, 0, 0, 37, 0, 0, 0,
516 0, 0, 30, 0, 21, 31, 0, 34 };656 138, 0, 0, 0, 0, 142, 0, 0, 0, 0,
657 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
658 0, 0, 0, 156, 0, 0, 0, 0, 0, 0,
659 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
660 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
661 170, 0, 0, 172 };
517int yypact[]={662int yypact[]={
518 663
519 -1000, -258, -1000, -1000, -1000, -234, -1000, 34, -254, -1000,664 -1000, -234, -1000, -1000, -1000, -244, -1000, 31, -62, -1000,
520 -1000, -1000, -1000, 43, -1000, -1000, 40, -1000, -236, -1000,665 -1000, -1000, -1000, 24, -1000, -1000, 52, -1000, -1000, -250,
521 -1000, -1000, 93, -9, -1000, 43, 43, 43, 92, -1000,666 -1000, -1000, -1000, -1000, 89, -9, -1000, 24, 24, 24,
522 -1000, -1000, -1000, -1000, 43, 43, -1000, 43, -240, 62,667 -1000, 88, -1000, -1000, -1000, -1000, -1000, 24, 24, -1000,
523 31, -13, 48, 83, -242, -1000, 43, 43, 43, 43,668 24, -251, 49, -1000, -28, 45, 86, -252, -257, -1000,
524 43, 43, 43, 43, 43, 43, 43, -1000, -1000, 90,669 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
525 13, -1000, -1000, -248, 43, 19, -15, -216, -1000, 60,670 24, -1000, -1000, 84, 13, -1000, -1000, 24, -1000, -15,
526 -1000, -1000, -249, -1000, -1000, 43, -250, 43, 89, 61,671 -224, -1000, 74, -1000, -1000, -1000, -259, 24, 24, -263,
527 -1000, -1000, -3, -3, -3, -3, -3, -3, 53, 53,672 24, -12, -1000, 83, 76, -1000, -1000, -30, -30, -30,
528 -1000, -1000, 82, -1000, -1000, -1000, -2, -1000, 85, 13,673 -30, -30, -30, 50, 50, -1000, -1000, 72, -1000, -1000,
529 -1000, 43, -1000, -1000, 31, 43, -36, -1000, 56, 60,674 -1000, 82, 13, -1000, 24, -1000, -1000, -1000, 74, -36,
530 -1000, -255, -1000, 43, 43, -1000, -269, -1000, -1000, -1000,675 -1000, 53, 74, -1000, -269, 24, -1000, -265, -1000, 24,
531 13, 34, -1000, 43, -1000, 13, -1000, -1000, -1000, -1000,676 24, -1000, -1000, 13, 31, -1000, 24, -1000, -1000, -53,
532 -193, 19, 19, -53, 59, -1000, -1000, -8, 58, 43,677 68, -1000, -1000, -13, 54, 13, -1000, -1000, -218, 23,
533 -1000, -1000, -1000, -1000, -226, -1000, -218, -223, -1000, 43,678 23, -1000, -1000, -1000, -1000, -237, -1000, -1000, -269, 28,
534 -1000, -269, 26, -1000, -1000, -1000, 13, -253, 43, -1000,679 -1000, 24, -226, -228, -1000, 24, -232, 24, -1000, 24,
535 -1000, -1000, -42, -1000, 43, 43, -1000, 34, -1000, 13,680 13, -1000, -1000, -1000, -42, -1000, 31, 13, -1000, -1000,
536 -1000, -1000, -1000, -1000, -193, -1000 };681 -1000, -1000, -218, -1000 };
537int yypgo[]={682int yypgo[]={
538 683
539 0, 195, 50, 96, 71, 135, 194, 193, 192, 190,684 0, 180, 191, 54, 61, 81, 179, 133, 178, 177,
540 189, 187, 136, 186, 184, 82, 54, 183, 182, 180,685 176, 175, 174, 172, 121, 171, 170, 76, 59, 167,
541 172, 170, 59, 168, 167, 166, 63, 70, 164, 162,686 166, 165, 162, 161, 50, 160, 158, 157, 48, 49,
542 137, 161, 160, 159, 158, 157, 156, 155, 154, 153,687 156, 155, 131, 154, 152, 151, 150, 149, 148, 147,
543 152, 150, 149, 148, 69, 147, 144, 65, 143, 142,688 146, 145, 144, 143, 141, 139, 71, 138, 136, 134 };
544 140, 76, 138 };
545int yyr1[]={689int yyr1[]={
546 690
547 0, 1, 14, 1, 1, 1, 19, 21, 17, 23,691 0, 1, 16, 1, 1, 1, 21, 23, 19, 25,
548 23, 24, 15, 16, 16, 25, 28, 25, 29, 25,692 25, 26, 17, 18, 18, 27, 30, 27, 31, 27,
549 25, 25, 25, 27, 27, 27, 32, 33, 22, 34,693 27, 27, 27, 27, 29, 29, 29, 34, 35, 24,
550 35, 34, 2, 26, 3, 3, 3, 3, 3, 3,694 36, 37, 36, 2, 28, 3, 3, 3, 3, 3,
551 3, 3, 3, 3, 3, 3, 3, 3, 36, 3,695 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
552 3, 3, 3, 3, 3, 3, 3, 38, 3, 39,696 3, 3, 3, 3, 3, 3, 3, 39, 3, 40,
553 3, 37, 37, 41, 30, 40, 4, 4, 5, 42,697 3, 41, 7, 38, 38, 43, 32, 42, 4, 4,
554 5, 20, 20, 43, 43, 13, 13, 7, 7, 8,698 5, 44, 5, 22, 22, 45, 45, 15, 15, 8,
555 8, 9, 9, 45, 44, 10, 10, 46, 11, 48,699 8, 10, 10, 11, 11, 47, 46, 12, 12, 13,
556 11, 47, 6, 6, 12, 49, 12, 50, 12, 31,700 13, 6, 6, 14, 48, 14, 49, 14, 9, 9,
557 31, 51, 52, 51, 18 };701 33, 33, 20 };
558int yyr2[]={702int yyr2[]={
559 703
560 0, 0, 1, 9, 4, 4, 1, 1, 19, 0,704 0, 0, 1, 9, 4, 4, 1, 1, 19, 0,
561 6, 1, 4, 0, 2, 17, 1, 17, 1, 13,705 6, 1, 4, 0, 2, 17, 1, 17, 1, 13,
562 7, 3, 4, 0, 4, 15, 1, 1, 9, 0,706 7, 3, 3, 7, 0, 4, 15, 1, 1, 9,
563 1, 9, 1, 3, 7, 7, 7, 7, 7, 7,707 0, 1, 9, 1, 3, 7, 7, 7, 7, 7,
564 7, 7, 7, 7, 7, 7, 5, 5, 1, 9,708 7, 7, 7, 7, 7, 7, 7, 5, 5, 3,
565 9, 3, 3, 3, 3, 3, 5, 1, 11, 1,709 9, 3, 3, 3, 3, 3, 5, 1, 11, 1,
566 11, 1, 2, 1, 11, 3, 1, 3, 3, 1,710 11, 1, 9, 1, 2, 1, 11, 3, 1, 3,
567 9, 0, 2, 3, 7, 1, 3, 7, 7, 1,711 3, 1, 9, 0, 2, 3, 7, 1, 3, 7,
568 3, 3, 7, 1, 9, 1, 3, 1, 5, 1,712 7, 1, 3, 3, 7, 1, 9, 1, 3, 3,
569 9, 3, 3, 7, 3, 1, 11, 1, 9, 5,713 7, 3, 7, 3, 1, 11, 1, 9, 3, 7,
570 9, 1, 1, 6, 3 };714 0, 4, 3 };
571int yychk[]={715int yychk[]={
572 716
573 -1000, -1, -14, -17, -18, 270, 273, -15, -24, 271,717 -1000, -1, -16, -19, -20, 271, 274, -17, -26, 273,
574 -16, 59, -25, 258, 262, 264, -6, -30, 268, -12,718 -18, 59, -27, 259, 263, 265, -6, -32, -7, 269,
575 -40, 271, -19, -26, -3, 40, 43, 45, 64, -12,719 -14, -42, 64, 273, -21, -28, -3, 40, 43, 45,
576 269, 272, 257, -30, 274, -28, -29, 61, 44, -31,720 -7, 64, -14, 270, 272, 258, -32, 282, -30, -31,
577 271, -49, -50, -41, 40, 259, 61, 60, 62, 277,721 61, 44, -9, 273, -48, -49, -43, -41, 40, 260,
578 278, 279, 43, 45, 42, 47, 280, 275, 276, -3,722 61, 60, 62, 277, 278, 279, 43, 45, 42, 47,
579 -26, -26, -26, -36, 40, -26, -26, -22, -32, -5,723 280, 275, 276, -3, -28, -28, -28, 40, -28, -28,
580 -3, -12, 44, -51, 61, 91, 46, 40, -20, -43,724 -24, -34, -5, -3, -14, -33, 44, 61, 91, 46,
581 271, -2, -26, -26, -26, -26, -26, -26, -26, -26,725 40, -15, 273, -22, -45, 273, -2, -28, -28, -28,
582 -26, -26, -26, -2, -2, 41, -13, 271, -37, -26,726 -28, -28, -28, -28, -28, -28, -28, -28, -2, -2,
583 263, 265, -23, 44, 271, -52, -26, 271, -4, -5,727 41, -38, -28, 264, 266, -25, 44, 273, -5, -28,
584 41, 44, -22, -38, -39, -7, 123, 91, 41, -2,728 273, -4, -5, -8, 123, 91, 41, 44, -24, -39,
585 -26, -15, -33, -42, -51, -26, 93, 41, -21, 271,729 -40, 41, -2, -28, -17, -35, -44, 93, 41, -10,
586 -2, -26, -26, -8, -9, -44, 271, -10, -11, -46,730 -11, -46, 273, -12, -13, -28, -23, 273, -2, -28,
587 -22, -2, -16, -34, -35, -3, -22, -27, 260, 261,731 -28, -24, -2, -18, -36, -37, -3, 125, 44, -47,
588 125, 44, -45, 93, 44, -47, -26, -2, 267, 266,732 93, 44, -24, -29, 261, 262, -2, 268, -46, 61,
589 266, -22, -26, -44, 61, -48, 266, -4, 259, -26,733 -28, 267, 267, -24, -28, 267, -4, -28, 260, -18,
590 -47, -16, -2, -22, -2, -27 };734 -2, -24, -2, -29 };
591int yydef[]={735int yydef[]={
592 736
593 1, -2, 11, 4, 5, 0, 104, 13, 0, 6,737 1, -2, 11, 4, 5, 0, 102, 13, 0, 6,
594 3, 14, 12, 0, 16, 18, 0, 21, 0, -2,738 3, 14, 12, 0, 16, 18, 0, 21, 22, 0,
595 63, 94, 0, 0, 33, 0, 0, 0, 48, -2,739 -2, 65, 61, 93, 0, 0, 34, 0, 0, 0,
596 52, 53, 54, 55, 0, 0, 26, 0, 0, 22,740 49, 61, -2, 52, 53, 54, 55, 0, 0, 27,
597 101, 0, 0, 0, 71, 32, 0, 0, 0, 0,741 0, 0, 100, 98, 0, 0, 0, 77, 73, 33,
598 0, 0, 0, 0, 0, 0, 0, 32, 32, 33,742 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
599 0, 46, 47, 75, 61, 56, 0, 0, 9, 20,743 0, 33, 33, 34, 0, 47, 48, 63, 56, 0,
600 -2, -2, 0, 99, 102, 0, 0, 66, 0, 72,744 0, 9, 20, -2, -2, 23, 0, 0, 0, 0,
601 73, 26, 35, 36, 37, 38, 39, 40, 41, 42,745 68, 0, 78, 0, 74, 75, 27, 36, 37, 38,
602 43, 44, 45, 57, 59, 34, 0, 76, 0, 62,746 39, 40, 41, 42, 43, 44, 45, 46, 57, 59,
603 32, 0, -2, 69, 101, 0, 0, 98, 0, 67,747 35, 0, 64, 33, 0, -2, 71, 99, 101, 0,
604 7, 0, 32, 0, 0, 49, 79, -2, 50, 26,748 97, 0, 69, 62, 81, 87, 7, 0, 33, 0,
605 32, 13, -2, 0, 100, 103, 96, 64, 26, 74,749 0, 50, 27, 33, 13, -2, 0, 95, 66, 0,
606 23, 58, 60, 0, 80, 81, 83, 0, 86, 0,750 82, 83, 85, 0, 88, 89, 27, 76, 24, 58,
607 32, 19, 10, 28, 0, -2, 0, 0, 26, 0,751 60, 33, 19, 10, 29, 0, -2, 79, 0, 0,
608 77, 0, 0, 78, 89, 88, 91, 0, 66, 8,752 80, 0, 0, 0, 27, 0, 0, 68, 84, 0,
609 15, 24, 0, 82, 0, 0, 17, 13, 32, 84,753 90, 8, 15, 25, 0, 17, 13, 86, 33, 32,
610 90, 31, 26, 32, 23, 25 };754 27, 33, 24, 26 };
611typedef struct { char *t_name; int t_val; } yytoktype;755typedef struct { char *t_name; int t_val; } yytoktype;
612#ifndef YYDEBUG756#ifndef YYDEBUG
613# define YYDEBUG 0 /* don't allow debugging */757# define YYDEBUG 0 /* don't allow debugging */
@@ -617,24 +761,24 @@ typedef struct { char *t_name; int t_val; } yytoktype; · 3 unmodified lines
617 761
618yytoktype yytoks[] =762yytoktype yytoks[] =
619{763{
620 "NIL", 257,764 "WRONGTOKEN", 257,
621 "IF", 258,765 "NIL", 258,
622 "THEN", 259,766 "IF", 259,
623 "ELSE", 260,767 "THEN", 260,
624 "ELSEIF", 261,768 "ELSE", 261,
625 "WHILE", 262,769 "ELSEIF", 262,
626 "DO", 263,770 "WHILE", 263,
627 "REPEAT", 264,771 "DO", 264,
628 "UNTIL", 265,772 "REPEAT", 265,
629 "END", 266,773 "UNTIL", 266,
630 "RETURN", 267,774 "END", 267,
631 "LOCAL", 268,775 "RETURN", 268,
632 "NUMBER", 269,776 "LOCAL", 269,
633 "FUNCTION", 270,777 "NUMBER", 270,
634 "NAME", 271,778 "FUNCTION", 271,
635 "STRING", 272,779 "STRING", 272,
636 "DEBUG", 273,780 "NAME", 273,
637 "NOT", 274,781 "DEBUG", 274,
638 "AND", 275,782 "AND", 275,
639 "OR", 276,783 "OR", 276,
640 "=", 61,784 "=", 61,
@@ -648,8 +792,8 @@ yytoktype yytoks[] = · 7 unmodified lines
648 "-", 45,792 "-", 45,
649 "*", 42,793 "*", 42,
650 "/", 47,794 "/", 47,
651 "%", 37,
652 "UNARY", 281,795 "UNARY", 281,
796 "NOT", 282,
653 "-unknown-", -1 /* ends search */797 "-unknown-", -1 /* ends search */
654};798};
655 799
@@ -677,7 +821,8 @@ char * yyreds[] = · 21 unmodified lines
677 "stat1 : REPEAT block UNTIL expr1 PrepJump",821 "stat1 : REPEAT block UNTIL expr1 PrepJump",
678 "stat1 : varlist1 '=' exprlist1",822 "stat1 : varlist1 '=' exprlist1",
679 "stat1 : functioncall",823 "stat1 : functioncall",
680 "stat1 : LOCAL declist",824 "stat1 : typeconstructor",
825 "stat1 : LOCAL localdeclist decinit",
681 "elsepart : /* empty */",826 "elsepart : /* empty */",
682 "elsepart : ELSE block",827 "elsepart : ELSE block",
683 "elsepart : ELSEIF expr1 THEN PrepJump block PrepJump elsepart",828 "elsepart : ELSEIF expr1 THEN PrepJump block PrepJump elsepart",
@@ -703,8 +848,7 @@ char * yyreds[] = · 19 unmodified lines
703 "expr : expr1 CONC expr1",848 "expr : expr1 CONC expr1",
704 "expr : '+' expr1",849 "expr : '+' expr1",
705 "expr : '-' expr1",850 "expr : '-' expr1",
706 "expr : '@'",851 "expr : typeconstructor",
707 "expr : '@' objectname fieldlist",
708 "expr : '@' '(' dimension ')'",852 "expr : '@' '(' dimension ')'",
709 "expr : var",853 "expr : var",
710 "expr : NUMBER",854 "expr : NUMBER",
@@ -716,6 +860,8 @@ char * yyreds[] = · 5 unmodified lines
716 "expr : expr1 AND PrepJump expr1",860 "expr : expr1 AND PrepJump expr1",
717 "expr : expr1 OR PrepJump",861 "expr : expr1 OR PrepJump",
718 "expr : expr1 OR PrepJump expr1",862 "expr : expr1 OR PrepJump expr1",
863 "typeconstructor : '@'",
864 "typeconstructor : '@' objectname fieldlist",
719 "dimension : /* empty */",865 "dimension : /* empty */",
720 "dimension : expr1",866 "dimension : expr1",
721 "functioncall : functionvalue",867 "functioncall : functionvalue",
@@ -742,11 +888,8 @@ char * yyreds[] = · 20 unmodified lines
742 "ffield : NAME '=' expr1",888 "ffield : NAME '=' expr1",
743 "lfieldlist : /* empty */",889 "lfieldlist : /* empty */",
744 "lfieldlist : lfieldlist1",890 "lfieldlist : lfieldlist1",
745 "lfieldlist1 : /* empty */",891 "lfieldlist1 : expr1",
746 "lfieldlist1 : lfield",892 "lfieldlist1 : lfieldlist1 ',' expr1",
747 "lfieldlist1 : lfieldlist1 ','",
748 "lfieldlist1 : lfieldlist1 ',' lfield",
749 "lfield : expr1",
750 "varlist1 : var",893 "varlist1 : var",
751 "varlist1 : varlist1 ',' var",894 "varlist1 : varlist1 ',' var",
752 "var : NAME",895 "var : NAME",
@@ -754,11 +897,10 @@ char * yyreds[] = · 1 unmodified line
754 "var : var '[' expr1 ']'",897 "var : var '[' expr1 ']'",
755 "var : var",898 "var : var",
756 "var : var '.' NAME",899 "var : var '.' NAME",
757 "declist : NAME init",900 "localdeclist : NAME",
758 "declist : declist ',' NAME init",901 "localdeclist : localdeclist ',' NAME",
759 "init : /* empty */",902 "decinit : /* empty */",
760 "init : '='",903 "decinit : '=' exprlist1",
761 "init : '=' expr1",
762 "setdebug : DEBUG",904 "setdebug : DEBUG",
763};905};
764#endif /* YYDEBUG */906#endif /* YYDEBUG */
@@ -1203,87 +1345,113 @@ yyparse() · 438 unmodified lines
1203 {1345 {
1204 1346
1205case 2:1347case 2:
1206# line 179 "lua.stx"1348# line 227 "lua.stx"
1207{pc=basepc=maincode; nlocalvar=0;} break;1349{
1350 pc=maincode; basepc=initcode; maxcurr=maxmain;
1351 nlocalvar=0;
1352 } break;
1208case 3:1353case 3:
1209# line 179 "lua.stx"1354# line 232 "lua.stx"
1210{maincode=pc;} break;1355{
1356 maincode=pc; initcode=basepc; maxmain=maxcurr;
1357 } break;
1211case 6:1358case 6:
1212# line 184 "lua.stx"1359# line 240 "lua.stx"
1213{pc=basepc=code; nlocalvar=0;} break;1360{
1361 if (code == NULL) /* first function */
1362 {
1363 code = (Byte *) calloc(GAPCODE, sizeof(Byte));
1364 if (code == NULL)
1365 {
1366 lua_error("not enough memory");
1367 err = 1;
1368 }
1369 maxcode = GAPCODE;
1370 }
1371 pc=0; basepc=code; maxcurr=maxcode;
1372 nlocalvar=0;
1373 yyval.vWord = lua_findsymbol(yypvt[-0].pChar);
1374 } break;
1214case 7:1375case 7:
1215# line 185 "lua.stx"1376# line 256 "lua.stx"
1216{1377{
1217 if (lua_debug)1378 if (lua_debug)
1218 {1379 {
1219 align(Word);
1220 code_byte(SETFUNCTION); 1380 code_byte(SETFUNCTION);
1221 code_word(yypvt[-5].vWord);1381 code_word(lua_nfile-1);
1222 code_word(yypvt[-4].vWord);1382 code_word(yypvt[-3].vWord);
1223 }1383 }
1224 lua_codeadjust (0);1384 lua_codeadjust (0);
1225 } break;1385 } break;
1226case 8:1386case 8:
1227# line 197 "lua.stx"1387# line 267 "lua.stx"
1228{ 1388{
1229 if (lua_debug) code_byte(RESET); 1389 if (lua_debug) code_byte(RESET);
1230 code_byte(RETCODE); code_byte(nlocalvar);1390 code_byte(RETCODE); code_byte(nlocalvar);
1231 s_tag(yypvt[-7].vWord) = T_FUNCTION;1391 s_tag(yypvt[-6].vWord) = T_FUNCTION;
1232 s_bvalue(yypvt[-7].vWord) = calloc (pc-code, sizeof(Byte));1392 s_bvalue(yypvt[-6].vWord) = calloc (pc, sizeof(Byte));
1233 memcpy (s_bvalue(yypvt[-7].vWord), code, (pc-code)*sizeof(Byte));1393 if (s_bvalue(yypvt[-6].vWord) == NULL)
1394 {
1395 lua_error("not enough memory");
1396 err = 1;
1397 }
1398 memcpy (s_bvalue(yypvt[-6].vWord), basepc, pc*sizeof(Byte));
1399 code = basepc; maxcode=maxcurr;
1400#if LISTING
1401PrintCode(code,code+pc);
1402#endif
1234 } break;1403 } break;
1235case 11:1404case 11:
1236# line 210 "lua.stx"1405# line 289 "lua.stx"
1237{1406{
1238 ntemp = 0; 1407 ntemp = 0;
1239 if (lua_debug)1408 if (lua_debug)
1240 {1409 {
1241 align(Word); code_byte(SETLINE); code_word(lua_linenumber);1410 code_byte(SETLINE); code_word(lua_linenumber);
1242 }1411 }
1243 } break;1412 } break;
1244case 15:1413case 15:
1245# line 223 "lua.stx"1414# line 302 "lua.stx"
1246{1415{
1247 {1416 {
1248 Byte *elseinit = yypvt[-2].pByte + sizeof(Word)+1;1417 Word elseinit = yypvt[-2].vWord+sizeof(Word)+1;
1249 if (pc - elseinit == 0) /* no else */1418 if (pc - elseinit == 0) /* no else */
1250 {1419 {
1251 pc -= sizeof(Word)+1;1420 pc -= sizeof(Word)+1;
1252 /* if (*(pc-1) == NOP) --pc; */
1253 elseinit = pc;1421 elseinit = pc;
1254 }1422 }
1255 else1423 else
1256 {1424 {
1257 *(yypvt[-2].pByte) = JMP;1425 basepc[yypvt[-2].vWord] = JMP;
1258 *((Word *)(yypvt[-2].pByte+1)) = pc - elseinit;1426 code_word_at(basepc+yypvt[-2].vWord+1, pc - elseinit);
1259 }1427 }
1260 *(yypvt[-4].pByte) = IFFJMP;1428 basepc[yypvt[-4].vWord] = IFFJMP;
1261 *((Word *)(yypvt[-4].pByte+1)) = elseinit - (yypvt[-4].pByte + sizeof(Word)+1);1429 code_word_at(basepc+yypvt[-4].vWord+1,elseinit-(yypvt[-4].vWord+sizeof(Word)+1));
1262 }1430 }
1263 } break;1431 } break;
1264case 16:1432case 16:
1265# line 242 "lua.stx"1433# line 320 "lua.stx"
1266{yyval.pByte = pc;} break;1434{yyval.vWord=pc;} break;
1267case 17:1435case 17:
1268# line 244 "lua.stx"1436# line 322 "lua.stx"
1269{1437{
1270 *(yypvt[-3].pByte) = IFFJMP;1438 basepc[yypvt[-3].vWord] = IFFJMP;
1271 *((Word *)(yypvt[-3].pByte+1)) = pc - (yypvt[-3].pByte + sizeof(Word)+1);1439 code_word_at(basepc+yypvt[-3].vWord+1, pc - (yypvt[-3].vWord + sizeof(Word)+1));
1272 1440
1273 *(yypvt[-1].pByte) = UPJMP;1441 basepc[yypvt[-1].vWord] = UPJMP;
1274 *((Word *)(yypvt[-1].pByte+1)) = pc - yypvt[-6].pByte;1442 code_word_at(basepc+yypvt[-1].vWord+1, pc - (yypvt[-6].vWord));
1275 } break;1443 } break;
1276case 18:1444case 18:
1277# line 252 "lua.stx"1445# line 330 "lua.stx"
1278{yyval.pByte = pc;} break;1446{yyval.vWord=pc;} break;
1279case 19:1447case 19:
1280# line 254 "lua.stx"1448# line 332 "lua.stx"
1281{1449{
1282 *(yypvt[-0].pByte) = IFFUPJMP;1450 basepc[yypvt[-0].vWord] = IFFUPJMP;
1283 *((Word *)(yypvt[-0].pByte+1)) = pc - yypvt[-4].pByte;1451 code_word_at(basepc+yypvt[-0].vWord+1, pc - (yypvt[-4].vWord));
1284 } break;1452 } break;
1285case 20:1453case 20:
1286# line 261 "lua.stx"1454# line 339 "lua.stx"
1287{1455{
1288 {1456 {
1289 int i;1457 int i;
@@ -1296,36 +1464,41 @@ case 20: · 6 unmodified lines
1296 }1464 }
1297 } break;1465 } break;
1298case 21:1466case 21:
1299# line 272 "lua.stx"1467# line 350 "lua.stx"
1300{ lua_codeadjust (0); } break;1468{ lua_codeadjust (0); } break;
1301case 25:1469case 22:
1302# line 279 "lua.stx"1470# line 351 "lua.stx"
1471{ lua_codeadjust (0); } break;
1472case 23:
1473# line 352 "lua.stx"
1474{ add_nlocalvar(yypvt[-1].vInt); lua_codeadjust (0); } break;
1475case 26:
1476# line 358 "lua.stx"
1303{1477{
1304 {1478 {
1305 Byte *elseinit = yypvt[-1].pByte + sizeof(Word)+1;1479 Word elseinit = yypvt[-1].vWord+sizeof(Word)+1;
1306 if (pc - elseinit == 0) /* no else */1480 if (pc - elseinit == 0) /* no else */
1307 {1481 {
1308 pc -= sizeof(Word)+1;1482 pc -= sizeof(Word)+1;
1309 /* if (*(pc-1) == NOP) --pc; */
1310 elseinit = pc;1483 elseinit = pc;
1311 }1484 }
1312 else1485 else
1313 {1486 {
1314 *(yypvt[-1].pByte) = JMP;1487 basepc[yypvt[-1].vWord] = JMP;
1315 *((Word *)(yypvt[-1].pByte+1)) = pc - elseinit;1488 code_word_at(basepc+yypvt[-1].vWord+1, pc - elseinit);
1316 }1489 }
1317 *(yypvt[-3].pByte) = IFFJMP;1490 basepc[yypvt[-3].vWord] = IFFJMP;
1318 *((Word *)(yypvt[-3].pByte+1)) = elseinit - (yypvt[-3].pByte + sizeof(Word)+1);1491 code_word_at(basepc+yypvt[-3].vWord+1, elseinit - (yypvt[-3].vWord + sizeof(Word)+1));
1319 } 1492 }
1320 } break;1493 } break;
1321case 26:
1322# line 299 "lua.stx"
1323{yyval.vInt = nlocalvar;} break;
1324case 27:1494case 27:
1325# line 299 "lua.stx"1495# line 377 "lua.stx"
1326{ntemp = 0;} break;1496{yyval.vInt = nlocalvar;} break;
1327case 28:1497case 28:
1328# line 300 "lua.stx"1498# line 377 "lua.stx"
1499{ntemp = 0;} break;
1500case 29:
1501# line 378 "lua.stx"
1329{1502{
1330 if (nlocalvar != yypvt[-3].vInt)1503 if (nlocalvar != yypvt[-3].vInt)
1331 {1504 {
@@ -1333,306 +1506,305 @@ case 28: · 1 unmodified line
1333 lua_codeadjust (0);1506 lua_codeadjust (0);
1334 }1507 }
1335 } break;1508 } break;
1336case 30:
1337# line 310 "lua.stx"
1338{ if (lua_debug){align(Word);code_byte(SETLINE);code_word(lua_linenumber);}} break;
1339case 31:1509case 31:
1340# line 312 "lua.stx"1510# line 388 "lua.stx"
1511{ if (lua_debug){code_byte(SETLINE);code_word(lua_linenumber);}} break;
1512case 32:
1513# line 390 "lua.stx"
1341{ 1514{
1342 if (lua_debug) code_byte(RESET); 1515 if (lua_debug) code_byte(RESET);
1343 code_byte(RETCODE); code_byte(nlocalvar);1516 code_byte(RETCODE); code_byte(nlocalvar);
1344 } break;1517 } break;
1345case 32:1518case 33:
1346# line 319 "lua.stx"1519# line 397 "lua.stx"
1347{ 1520{
1348 align(Word); 1521 yyval.vWord = pc;
1349 yyval.pByte = pc;
1350 code_byte(0); /* open space */1522 code_byte(0); /* open space */
1351 code_word (0);1523 code_word (0);
1352 } break;1524 } break;
1353case 33:
1354# line 326 "lua.stx"
1355{ if (yypvt[-0].vInt == 0) {lua_codeadjust (ntemp+1); incr_ntemp();}} break;
1356case 34:1525case 34:
1357# line 329 "lua.stx"1526# line 403 "lua.stx"
1358{ yyval.vInt = yypvt[-1].vInt; } break;1527{ if (yypvt[-0].vInt == 0) {lua_codeadjust (ntemp+1); incr_ntemp();}} break;
1359case 35:1528case 35:
1360# line 330 "lua.stx"1529# line 406 "lua.stx"
1361{ code_byte(EQOP); yyval.vInt = 1; ntemp--;} break;1530{ yyval.vInt = yypvt[-1].vInt; } break;
1362case 36:1531case 36:
1363# line 331 "lua.stx"1532# line 407 "lua.stx"
1364{ code_byte(LTOP); yyval.vInt = 1; ntemp--;} break;1533{ code_byte(EQOP); yyval.vInt = 1; ntemp--;} break;
1365case 37:1534case 37:
1366# line 332 "lua.stx"1535# line 408 "lua.stx"
1367{ code_byte(LEOP); code_byte(NOTOP); yyval.vInt = 1; ntemp--;} break;1536{ code_byte(LTOP); yyval.vInt = 1; ntemp--;} break;
1368case 38:1537case 38:
1369# line 333 "lua.stx"1538# line 409 "lua.stx"
1370{ code_byte(EQOP); code_byte(NOTOP); yyval.vInt = 1; ntemp--;} break;1539{ code_byte(LEOP); code_byte(NOTOP); yyval.vInt = 1; ntemp--;} break;
1371case 39:1540case 39:
1372# line 334 "lua.stx"1541# line 410 "lua.stx"
1373{ code_byte(LEOP); yyval.vInt = 1; ntemp--;} break;1542{ code_byte(EQOP); code_byte(NOTOP); yyval.vInt = 1; ntemp--;} break;
1374case 40:1543case 40:
1375# line 335 "lua.stx"1544# line 411 "lua.stx"
1376{ code_byte(LTOP); code_byte(NOTOP); yyval.vInt = 1; ntemp--;} break;1545{ code_byte(LEOP); yyval.vInt = 1; ntemp--;} break;
1377case 41:1546case 41:
1378# line 336 "lua.stx"1547# line 412 "lua.stx"
1379{ code_byte(ADDOP); yyval.vInt = 1; ntemp--;} break;1548{ code_byte(LTOP); code_byte(NOTOP); yyval.vInt = 1; ntemp--;} break;
1380case 42:1549case 42:
1381# line 337 "lua.stx"1550# line 413 "lua.stx"
1382{ code_byte(SUBOP); yyval.vInt = 1; ntemp--;} break;1551{ code_byte(ADDOP); yyval.vInt = 1; ntemp--;} break;
1383case 43:1552case 43:
1384# line 338 "lua.stx"1553# line 414 "lua.stx"
1385{ code_byte(MULTOP); yyval.vInt = 1; ntemp--;} break;1554{ code_byte(SUBOP); yyval.vInt = 1; ntemp--;} break;
1386case 44:1555case 44:
1387# line 339 "lua.stx"1556# line 415 "lua.stx"
1388{ code_byte(DIVOP); yyval.vInt = 1; ntemp--;} break;1557{ code_byte(MULTOP); yyval.vInt = 1; ntemp--;} break;
1389case 45:1558case 45:
1390# line 340 "lua.stx"1559# line 416 "lua.stx"
1391{ code_byte(CONCOP); yyval.vInt = 1; ntemp--;} break;1560{ code_byte(DIVOP); yyval.vInt = 1; ntemp--;} break;
1392case 46:1561case 46:
1393# line 341 "lua.stx"1562# line 417 "lua.stx"
1394{ yyval.vInt = 1; } break;1563{ code_byte(CONCOP); yyval.vInt = 1; ntemp--;} break;
1395case 47:1564case 47:
1396# line 342 "lua.stx"1565# line 418 "lua.stx"
1397{ code_byte(MINUSOP); yyval.vInt = 1;} break;1566{ yyval.vInt = 1; } break;
1398case 48:1567case 48:
1399# line 344 "lua.stx"1568# line 419 "lua.stx"
1400{1569{ code_byte(MINUSOP); yyval.vInt = 1;} break;
1401 code_byte(PUSHBYTE);
1402 yyval.pByte = pc; code_byte(0);
1403 incr_ntemp();
1404 code_byte(CREATEARRAY);
1405 } break;
1406case 49:1570case 49:
1407# line 351 "lua.stx"1571# line 420 "lua.stx"
1408{1572{ yyval.vInt = yypvt[-0].vInt; } break;
1409 *(yypvt[-2].pByte) = yypvt[-0].vInt;
1410 if (yypvt[-1].vLong < 0) /* there is no function to be called */
1411 {
1412 yyval.vInt = 1;
1413 }
1414 else
1415 {
1416 lua_pushvar (yypvt[-1].vLong+1);
1417 code_byte(PUSHMARK);
1418 incr_ntemp();
1419 code_byte(PUSHOBJECT);
1420 incr_ntemp();
1421 code_byte(CALLFUNC);
1422 ntemp -= 4;
1423 yyval.vInt = 0;
1424 if (lua_debug)
1425 {
1426 align(Word); code_byte(SETLINE); code_word(lua_linenumber);
1427 }
1428 }
1429 } break;
1430case 50:1573case 50:
1431# line 374 "lua.stx"1574# line 422 "lua.stx"
1432{ 1575{
1433 code_byte(CREATEARRAY);1576 code_byte(CREATEARRAY);
1434 yyval.vInt = 1;1577 yyval.vInt = 1;
1435 } break;1578 } break;
1436case 51:1579case 51:
1437# line 378 "lua.stx"1580# line 426 "lua.stx"
1438{ lua_pushvar (yypvt[-0].vLong); yyval.vInt = 1;} break;1581{ lua_pushvar (yypvt[-0].vLong); yyval.vInt = 1;} break;
1439case 52:1582case 52:
1440# line 379 "lua.stx"1583# line 427 "lua.stx"
1441{ code_number(yypvt[-0].vFloat); yyval.vInt = 1; } break;1584{ code_number(yypvt[-0].vFloat); yyval.vInt = 1; } break;
1442case 53:1585case 53:
1443# line 381 "lua.stx"1586# line 429 "lua.stx"
1444{1587{
1445 align(Word);
1446 code_byte(PUSHSTRING);1588 code_byte(PUSHSTRING);
1447 code_word(yypvt[-0].vWord);1589 code_word(yypvt[-0].vWord);
1448 yyval.vInt = 1;1590 yyval.vInt = 1;
1449 incr_ntemp();1591 incr_ntemp();
1450 } break;1592 } break;
1451case 54:1593case 54:
1452# line 388 "lua.stx"1594# line 435 "lua.stx"
1453{code_byte(PUSHNIL); yyval.vInt = 1; incr_ntemp();} break;1595{code_byte(PUSHNIL); yyval.vInt = 1; incr_ntemp();} break;
1454case 55:1596case 55:
1455# line 390 "lua.stx"1597# line 437 "lua.stx"
1456{1598{
1457 yyval.vInt = 0;1599 yyval.vInt = 0;
1458 if (lua_debug)1600 if (lua_debug)
1459 {1601 {
1460 align(Word); code_byte(SETLINE); code_word(lua_linenumber);1602 code_byte(SETLINE); code_word(lua_linenumber);
1461 }1603 }
1462 } break;1604 } break;
1463case 56:1605case 56:
1464# line 397 "lua.stx"1606# line 444 "lua.stx"
1465{ code_byte(NOTOP); yyval.vInt = 1;} break;1607{ code_byte(NOTOP); yyval.vInt = 1;} break;
1466case 57:1608case 57:
1467# line 398 "lua.stx"1609# line 445 "lua.stx"
1468{code_byte(POP); ntemp--;} break;1610{code_byte(POP); ntemp--;} break;
1469case 58:1611case 58:
1470# line 399 "lua.stx"1612# line 446 "lua.stx"
1471{ 1613{
1472 *(yypvt[-2].pByte) = ONFJMP;1614 basepc[yypvt[-2].vWord] = ONFJMP;
1473 *((Word *)(yypvt[-2].pByte+1)) = pc - (yypvt[-2].pByte + sizeof(Word)+1);1615 code_word_at(basepc+yypvt[-2].vWord+1, pc - (yypvt[-2].vWord + sizeof(Word)+1));
1474 yyval.vInt = 1;1616 yyval.vInt = 1;
1475 } break;1617 } break;
1476case 59:1618case 59:
1477# line 404 "lua.stx"1619# line 451 "lua.stx"
1478{code_byte(POP); ntemp--;} break;1620{code_byte(POP); ntemp--;} break;
1479case 60:1621case 60:
1480# line 405 "lua.stx"1622# line 452 "lua.stx"
1481{ 1623{
1482 *(yypvt[-2].pByte) = ONTJMP;1624 basepc[yypvt[-2].vWord] = ONTJMP;
1483 *((Word *)(yypvt[-2].pByte+1)) = pc - (yypvt[-2].pByte + sizeof(Word)+1);1625 code_word_at(basepc+yypvt[-2].vWord+1, pc - (yypvt[-2].vWord + sizeof(Word)+1));
1484 yyval.vInt = 1;1626 yyval.vInt = 1;
1485 } break;1627 } break;
1486case 61:1628case 61:
1487# line 412 "lua.stx"1629# line 460 "lua.stx"
1488{ code_byte(PUSHNIL); incr_ntemp();} break;1630{
1631 code_byte(PUSHBYTE);
1632 yyval.vWord = pc; code_byte(0);
1633 incr_ntemp();
1634 code_byte(CREATEARRAY);
1635 } break;
1636case 62:
1637# line 467 "lua.stx"
1638{
1639 basepc[yypvt[-2].vWord] = yypvt[-0].vInt;
1640 if (yypvt[-1].vLong < 0) /* there is no function to be called */
1641 {
1642 yyval.vInt = 1;
1643 }
1644 else
1645 {
1646 lua_pushvar (yypvt[-1].vLong+1);
1647 code_byte(PUSHMARK);
1648 incr_ntemp();
1649 code_byte(PUSHOBJECT);
1650 incr_ntemp();
1651 code_byte(CALLFUNC);
1652 ntemp -= 4;
1653 yyval.vInt = 0;
1654 if (lua_debug)
1655 {
1656 code_byte(SETLINE); code_word(lua_linenumber);
1657 }
1658 }
1659 } break;
1489case 63:1660case 63:
1490# line 416 "lua.stx"1661# line 491 "lua.stx"
1662{ code_byte(PUSHNIL); incr_ntemp();} break;
1663case 65:
1664# line 495 "lua.stx"
1491{code_byte(PUSHMARK); yyval.vInt = ntemp; incr_ntemp();} break;1665{code_byte(PUSHMARK); yyval.vInt = ntemp; incr_ntemp();} break;
1492case 64:1666case 66:
1493# line 417 "lua.stx"1667# line 496 "lua.stx"
1494{ code_byte(CALLFUNC); ntemp = yypvt[-3].vInt-1;} break;1668{ code_byte(CALLFUNC); ntemp = yypvt[-3].vInt-1;} break;
1495case 65:1669case 67:
1496# line 419 "lua.stx"1670# line 498 "lua.stx"
1497{lua_pushvar (yypvt[-0].vLong); } break;1671{lua_pushvar (yypvt[-0].vLong); } break;
1498case 66:1672case 68:
1499# line 422 "lua.stx"1673# line 501 "lua.stx"
1500{ yyval.vInt = 1; } break;1674{ yyval.vInt = 1; } break;
1501case 67:1675case 69:
1502# line 423 "lua.stx"1676# line 502 "lua.stx"
1503{ yyval.vInt = yypvt[-0].vInt; } break;1677{ yyval.vInt = yypvt[-0].vInt; } break;
1504case 68:1678case 70:
1505# line 426 "lua.stx"1679# line 505 "lua.stx"
1506{ yyval.vInt = yypvt[-0].vInt; } break;1680{ yyval.vInt = yypvt[-0].vInt; } break;
1507case 69:1681case 71:
1508# line 427 "lua.stx"1682# line 506 "lua.stx"
1509{if (!yypvt[-1].vInt){lua_codeadjust (ntemp+1); incr_ntemp();}} break;1683{if (!yypvt[-1].vInt){lua_codeadjust (ntemp+1); incr_ntemp();}} break;
1510case 70:1684case 72:
1511# line 428 "lua.stx"1685# line 507 "lua.stx"
1512{yyval.vInt = yypvt[-0].vInt;} break;1686{yyval.vInt = yypvt[-0].vInt;} break;
1513case 73:
1514# line 435 "lua.stx"
1515{localvar[nlocalvar]=yypvt[-0].vWord; incr_nlocalvar();} break;
1516case 74:
1517# line 436 "lua.stx"
1518{localvar[nlocalvar]=yypvt[-0].vWord; incr_nlocalvar();} break;
1519case 75:1687case 75:
1520# line 439 "lua.stx"1688# line 515 "lua.stx"
1521{yyval.vLong=-1;} break;1689{
1690 localvar[nlocalvar]=lua_findsymbol(yypvt[-0].pChar);
1691 add_nlocalvar(1);
1692 } break;
1522case 76:1693case 76:
1523# line 440 "lua.stx"1694# line 520 "lua.stx"
1524{yyval.vLong=yypvt[-0].vWord;} break;1695{
1696 localvar[nlocalvar]=lua_findsymbol(yypvt[-0].pChar);
1697 add_nlocalvar(1);
1698 } break;
1525case 77:1699case 77:
1526# line 443 "lua.stx"1700# line 526 "lua.stx"
1527{ yyval.vInt = yypvt[-1].vInt; } break;1701{yyval.vLong=-1;} break;
1528case 78:1702case 78:
1529# line 444 "lua.stx"1703# line 527 "lua.stx"
1530{ yyval.vInt = yypvt[-1].vInt; } break;1704{yyval.vLong=lua_findsymbol(yypvt[-0].pChar);} break;
1531case 79:1705case 79:
1532# line 447 "lua.stx"1706# line 531 "lua.stx"
1533{ yyval.vInt = 0; } break;1707{
1708 flush_record(yypvt[-1].vInt%FIELDS_PER_FLUSH);
1709 yyval.vInt = yypvt[-1].vInt;
1710 } break;
1534case 80:1711case 80:
1535# line 448 "lua.stx"1712# line 536 "lua.stx"
1536{ yyval.vInt = yypvt[-0].vInt; } break;1713{
1714 flush_list(yypvt[-1].vInt/FIELDS_PER_FLUSH, yypvt[-1].vInt%FIELDS_PER_FLUSH);
1715 yyval.vInt = yypvt[-1].vInt;
1716 } break;
1537case 81:1717case 81:
1538# line 451 "lua.stx"1718# line 542 "lua.stx"
1539{yyval.vInt=1;} break;1719{ yyval.vInt = 0; } break;
1540case 82:1720case 82:
1541# line 452 "lua.stx"1721# line 543 "lua.stx"
1542{yyval.vInt=yypvt[-2].vInt+1;} break;1722{ yyval.vInt = yypvt[-0].vInt; } break;
1543case 83:1723case 83:
1544# line 456 "lua.stx"1724# line 546 "lua.stx"
1545{1725{yyval.vInt=1;} break;
1546 align(Word);
1547 code_byte(PUSHSTRING);
1548 code_word(lua_findconstant (s_name(yypvt[-0].vWord)));
1549 incr_ntemp();
1550 } break;
1551case 84:1726case 84:
1552# line 463 "lua.stx"1727# line 548 "lua.stx"
1553{1728{
1554 code_byte(STOREFIELD);1729 yyval.vInt=yypvt[-2].vInt+1;
1555 ntemp-=2;1730 if (yyval.vInt%FIELDS_PER_FLUSH == 0) flush_record(FIELDS_PER_FLUSH);
1556 } break;1731 } break;
1557case 85:1732case 85:
1558# line 469 "lua.stx"1733# line 554 "lua.stx"
1559{ yyval.vInt = 0; } break;1734{yyval.vWord = lua_findconstant(yypvt[-0].pChar);} break;
1560case 86:1735case 86:
1561# line 470 "lua.stx"1736# line 555 "lua.stx"
1562{ yyval.vInt = yypvt[-0].vInt; } break;1737{
1738 push_field(yypvt[-2].vWord);
1739 } break;
1563case 87:1740case 87:
1564# line 473 "lua.stx"1741# line 560 "lua.stx"
1565{ code_number(1); } break;1742{ yyval.vInt = 0; } break;
1566case 88:1743case 88:
1567# line 473 "lua.stx"1744# line 561 "lua.stx"
1568{yyval.vInt=1;} break;1745{ yyval.vInt = yypvt[-0].vInt; } break;
1569case 89:1746case 89:
1570# line 474 "lua.stx"1747# line 564 "lua.stx"
1571{ code_number(yypvt[-1].vInt+1); } break;1748{yyval.vInt=1;} break;
1572case 90:1749case 90:
1573# line 475 "lua.stx"1750# line 566 "lua.stx"
1574{yyval.vInt=yypvt[-3].vInt+1;} break;
1575case 91:
1576# line 479 "lua.stx"
1577{1751{
1578 code_byte(STOREFIELD);1752 yyval.vInt=yypvt[-2].vInt+1;
1579 ntemp-=2;1753 if (yyval.vInt%FIELDS_PER_FLUSH == 0)
1580 } break;1754 flush_list(yyval.vInt/FIELDS_PER_FLUSH - 1, FIELDS_PER_FLUSH);
1581case 92:1755 } break;
1582# line 486 "lua.stx"1756case 91:
1757# line 574 "lua.stx"
1583{1758{
1584 nvarbuffer = 0; 1759 nvarbuffer = 0;
1585 varbuffer[nvarbuffer] = yypvt[-0].vLong; incr_nvarbuffer();1760 varbuffer[nvarbuffer] = yypvt[-0].vLong; incr_nvarbuffer();
1586 yyval.vInt = (yypvt[-0].vLong == 0) ? 1 : 0;1761 yyval.vInt = (yypvt[-0].vLong == 0) ? 1 : 0;
1587 } break;1762 } break;
1588case 93:1763case 92:
1589# line 492 "lua.stx"1764# line 580 "lua.stx"
1590{ 1765{
1591 varbuffer[nvarbuffer] = yypvt[-0].vLong; incr_nvarbuffer();1766 varbuffer[nvarbuffer] = yypvt[-0].vLong; incr_nvarbuffer();
1592 yyval.vInt = (yypvt[-0].vLong == 0) ? yypvt[-2].vInt + 1 : yypvt[-2].vInt;1767 yyval.vInt = (yypvt[-0].vLong == 0) ? yypvt[-2].vInt + 1 : yypvt[-2].vInt;
1593 } break;1768 } break;
1594case 94:1769case 93:
1595# line 499 "lua.stx"1770# line 587 "lua.stx"
1596{ 1771{
1597 int local = lua_localname (yypvt[-0].vWord);1772 Word s = lua_findsymbol(yypvt[-0].pChar);
1773 int local = lua_localname (s);
1598 if (local == -1) /* global var */1774 if (local == -1) /* global var */
1599 yyval.vLong = yypvt[-0].vWord + 1; /* return positive value */1775 yyval.vLong = s + 1; /* return positive value */
1600 else1776 else
1601 yyval.vLong = -(local+1); /* return negative value */1777 yyval.vLong = -(local+1); /* return negative value */
1602 } break;1778 } break;
1603case 95:1779case 94:
1604# line 507 "lua.stx"1780# line 596 "lua.stx"
1605{lua_pushvar (yypvt[-0].vLong);} break;1781{lua_pushvar (yypvt[-0].vLong);} break;
1606case 96:1782case 95:
1607# line 508 "lua.stx"1783# line 597 "lua.stx"
1608{1784{
1609 yyval.vLong = 0; /* indexed variable */1785 yyval.vLong = 0; /* indexed variable */
1610 } break;1786 } break;
1611case 97:1787case 96:
1612# line 511 "lua.stx"1788# line 600 "lua.stx"
1613{lua_pushvar (yypvt[-0].vLong);} break;1789{lua_pushvar (yypvt[-0].vLong);} break;
1614case 98:1790case 97:
1615# line 512 "lua.stx"1791# line 601 "lua.stx"
1616{1792{
1617 align(Word);
1618 code_byte(PUSHSTRING);1793 code_byte(PUSHSTRING);
1619 code_word(lua_findconstant (s_name(yypvt[-0].vWord))); incr_ntemp();1794 code_word(lua_findconstant(yypvt[-0].pChar)); incr_ntemp();
1620 yyval.vLong = 0; /* indexed variable */1795 yyval.vLong = 0; /* indexed variable */
1621 } break;1796 } break;
1797case 98:
1798# line 608 "lua.stx"
1799{localvar[nlocalvar]=lua_findsymbol(yypvt[-0].pChar); yyval.vInt = 1;} break;
1622case 99:1800case 99:
1623# line 520 "lua.stx"1801# line 610 "lua.stx"
1624{localvar[nlocalvar]=yypvt[-1].vWord; incr_nlocalvar();} break;1802{
1625case 100:1803 localvar[nlocalvar+yypvt[-2].vInt]=lua_findsymbol(yypvt[-0].pChar);
1626# line 521 "lua.stx"1804 yyval.vInt = yypvt[-2].vInt+1;
1627{localvar[nlocalvar]=yypvt[-1].vWord; incr_nlocalvar();} break;1805 } break;
1628case 101:
1629# line 524 "lua.stx"
1630{ code_byte(PUSHNIL); } break;
1631case 102:1806case 102:
1632# line 525 "lua.stx"1807# line 620 "lua.stx"
1633{ntemp = 0;} break;
1634case 104:
1635# line 528 "lua.stx"
1636{lua_debug = yypvt[-0].vInt;} break;1808{lua_debug = yypvt[-0].vInt;} break;
1637 }1809 }
1638 goto yystack; /* reset registers in driver code */1810 goto yystack; /* reset registers in driver code */
src/y.tab.h+37−0
@@ -0,0 +1,37 @@
1
2typedef union
3{
4 int vInt;
5 long vLong;
6 float vFloat;
7 char *pChar;
8 Word vWord;
9 Byte *pByte;
10} YYSTYPE;
11extern YYSTYPE yylval;
12# define WRONGTOKEN 257
13# define NIL 258
14# define IF 259
15# define THEN 260
16# define ELSE 261
17# define ELSEIF 262
18# define WHILE 263
19# define DO 264
20# define REPEAT 265
21# define UNTIL 266
22# define END 267
23# define RETURN 268
24# define LOCAL 269
25# define NUMBER 270
26# define FUNCTION 271
27# define STRING 272
28# define NAME 273
29# define DEBUG 274
30# define AND 275
31# define OR 276
32# define NE 277
33# define LE 278
34# define GE 279
35# define CONC 280
36# define UNARY 281
37# define NOT 282
src/yacc/Makefile+27−0
@@ -0,0 +1,27 @@
1# makefile for lua
2
3LIB= $(LUA)/lib
4INC= $(LUA)/inc
5
6CC= gcc
7CFLAGS= -g -Wall -O2 -I$(INC) $(DEFS)
8DEFS= -DMAXCODE=64000 -DMAXCONSTANT=1024 -DMAXSYMBOL=1024 -DMAXARRAY=1024
9
10OBJS= hash.o inout.o lex.o opcode.o table.o y.tab.o
11SLIB= $(LIB)/lua.a
12DLIB= $(LIB)/liblua.so.1.1
13
14libs: $(SLIB) $(DLIB)
15
16$(SLIB): y.tab.c $(OBJS)
17 ar ruvl $@ $(OBJS)
18 ranlib $(SLIB)
19
20$(DLIB): $(OBJS)
21 ld -o $@ $(OBJS)
22
23y.tab.c: lua.stx exscript
24 yacc -d lua.stx ; ex y.tab.c <exscript
25
26clean:
27 rm -f $(OBJS) $(SLIB) $(DLIB)
src/yacc/exscript+3−0
@@ -0,0 +1,3 @@
11d
2x
3
src/yacc/lua.lex+85−0
@@ -0,0 +1,85 @@
1%{
2
3char *rcs_lualex = "$Id: lua.lex,v 1.1 1993/12/17 18:53:41 celes Exp $";
4
5#include <stdlib.h>
6#include <string.h>
7
8#include "opcode.h"
9#include "hash.h"
10#include "inout.h"
11#include "table.h"
12#include "y.tab.h"
13
14#undef input
15#undef unput
16
17static Input input;
18static Unput unput;
19
20void lua_setinput (Input fn)
21{
22 input = fn;
23}
24
25void lua_setunput (Unput fn)
26{
27 unput = fn;
28}
29
30char *lua_lasttext (void)
31{
32 return yytext;
33}
34
35%}
36
37
38%%
39[ \t]* ;
40^"$debug" {yylval.vInt = 1; return DEBUG;}
41^"$nodebug" {yylval.vInt = 0; return DEBUG;}
42\n lua_linenumber++;
43"--".* ;
44"local" return LOCAL;
45"if" return IF;
46"then" return THEN;
47"else" return ELSE;
48"elseif" return ELSEIF;
49"while" return WHILE;
50"do" return DO;
51"repeat" return REPEAT;
52"until" return UNTIL;
53"function" {
54 yylval.vWord = lua_nfile-1;
55 return FUNCTION;
56 }
57"end" return END;
58"return" return RETURN;
59"local" return LOCAL;
60"nil" return NIL;
61"and" return AND;
62"or" return OR;
63"not" return NOT;
64"~=" return NE;
65"<=" return LE;
66">=" return GE;
67".." return CONC;
68\"[^\"]*\" |
69\'[^\']*\' {
70 yylval.vWord = lua_findenclosedconstant (yytext);
71 return STRING;
72 }
73[0-9]+("."[0-9]*)? |
74([0-9]+)?"."[0-9]+ |
75[0-9]+("."[0-9]*)?[dDeEgG][+-]?[0-9]+ |
76([0-9]+)?"."[0-9]+[dDeEgG][+-]?[0-9]+ {
77 yylval.vFloat = atof(yytext);
78 return NUMBER;
79 }
80[a-zA-Z_][a-zA-Z0-9_]* {
81 yylval.vWord = lua_findsymbol (yytext);
82 return NAME;
83 }
84. return *yytext;
85
src/yacc/lua.stx+953−0
@@ -0,0 +1,953 @@
1%{
2
3char *rcs_luastx = "$Id: lua.stx,v 2.4 1994/04/20 16:22:21 celes Exp $";
4
5#include <stdio.h>
6#include <stdlib.h>
7#include <string.h>
8
9#include "mm.h"
10
11#include "opcode.h"
12#include "hash.h"
13#include "inout.h"
14#include "table.h"
15#include "lua.h"
16
17#define LISTING 0
18
19#ifndef GAPCODE
20#define GAPCODE 50
21#endif
22static Word maxcode;
23static Word maxmain;
24static Word maxcurr ;
25static Byte *code = NULL;
26static Byte *initcode;
27static Byte *basepc;
28static Word maincode;
29static Word pc;
30
31#define MAXVAR 32
32static long varbuffer[MAXVAR]; /* variables in an assignment list;
33 it's long to store negative Word values */
34static int nvarbuffer=0; /* number of variables at a list */
35
36static Word localvar[STACKGAP]; /* store local variable names */
37static int nlocalvar=0; /* number of local variables */
38
39#define MAXFIELDS FIELDS_PER_FLUSH*2
40static Word fields[MAXFIELDS]; /* fieldnames to be flushed */
41static int nfields=0;
42static int ntemp; /* number of temporary var into stack */
43static int err; /* flag to indicate error */
44
45/* Internal functions */
46
47static void code_byte (Byte c)
48{
49 if (pc>maxcurr-2) /* 1 byte free to code HALT of main code */
50 {
51 maxcurr += GAPCODE;
52 basepc = (Byte *)realloc(basepc, maxcurr*sizeof(Byte));
53 if (basepc == NULL)
54 {
55 lua_error ("not enough memory");
56 err = 1;
57 }
58 }
59 basepc[pc++] = c;
60}
61
62static void code_word (Word n)
63{
64 CodeWord code;
65 code.w = n;
66 code_byte(code.m.c1);
67 code_byte(code.m.c2);
68}
69
70static void code_float (float n)
71{
72 CodeFloat code;
73 code.f = n;
74 code_byte(code.m.c1);
75 code_byte(code.m.c2);
76 code_byte(code.m.c3);
77 code_byte(code.m.c4);
78}
79
80static void code_word_at (Byte *p, Word n)
81{
82 CodeWord code;
83 code.w = n;
84 *p++ = code.m.c1;
85 *p++ = code.m.c2;
86}
87
88static void push_field (Word name)
89{
90 if (nfields < STACKGAP-1)
91 fields[nfields++] = name;
92 else
93 {
94 lua_error ("too many fields in a constructor");
95 err = 1;
96 }
97}
98
99static void flush_record (int n)
100{
101 int i;
102 if (n == 0) return;
103 code_byte(STORERECORD);
104 code_byte(n);
105 for (i=0; i<n; i++)
106 code_word(fields[--nfields]);
107 ntemp -= n;
108}
109
110static void flush_list (int m, int n)
111{
112 if (n == 0) return;
113 if (m == 0)
114 code_byte(STORELIST0);
115 else
116 {
117 code_byte(STORELIST);
118 code_byte(m);
119 }
120 code_byte(n);
121 ntemp-=n;
122}
123
124static void incr_ntemp (void)
125{
126 if (ntemp+nlocalvar+MAXVAR+1 < STACKGAP)
127 ntemp++;
128 else
129 {
130 lua_error ("stack overflow");
131 err = 1;
132 }
133}
134
135static void add_nlocalvar (int n)
136{
137 if (ntemp+nlocalvar+MAXVAR+n < STACKGAP)
138 nlocalvar += n;
139 else
140 {
141 lua_error ("too many local variables or expression too complicate");
142 err = 1;
143 }
144}
145
146static void incr_nvarbuffer (void)
147{
148 if (nvarbuffer < MAXVAR-1)
149 nvarbuffer++;
150 else
151 {
152 lua_error ("variable buffer overflow");
153 err = 1;
154 }
155}
156
157static void code_number (float f)
158{ Word i = (Word)f;
159 if (f == (float)i) /* f has an (short) integer value */
160 {
161 if (i <= 2) code_byte(PUSH0 + i);
162 else if (i <= 255)
163 {
164 code_byte(PUSHBYTE);
165 code_byte(i);
166 }
167 else
168 {
169 code_byte(PUSHWORD);
170 code_word(i);
171 }
172 }
173 else
174 {
175 code_byte(PUSHFLOAT);
176 code_float(f);
177 }
178 incr_ntemp();
179}
180
181%}
182
183
184%union
185{
186 int vInt;
187 long vLong;
188 float vFloat;
189 char *pChar;
190 Word vWord;
191 Byte *pByte;
192}
193
194%start functionlist
195
196%token WRONGTOKEN
197%token NIL
198%token IF THEN ELSE ELSEIF WHILE DO REPEAT UNTIL END
199%token RETURN
200%token LOCAL
201%token <vFloat> NUMBER
202%token <vWord> FUNCTION STRING
203%token <pChar> NAME
204%token <vInt> DEBUG
205
206%type <vWord> PrepJump
207%type <vInt> expr, exprlist, exprlist1, varlist1, typeconstructor
208%type <vInt> fieldlist, localdeclist
209%type <vInt> ffieldlist, ffieldlist1
210%type <vInt> lfieldlist, lfieldlist1
211%type <vLong> var, objectname
212
213
214%left AND OR
215%left '=' NE '>' '<' LE GE
216%left CONC
217%left '+' '-'
218%left '*' '/'
219%left UNARY NOT
220
221
222%% /* beginning of rules section */
223
224
225functionlist : /* empty */
226 | functionlist
227 {
228 pc=maincode; basepc=initcode; maxcurr=maxmain;
229 nlocalvar=0;
230 }
231 stat sc
232 {
233 maincode=pc; initcode=basepc; maxmain=maxcurr;
234 }
235 | functionlist function
236 | functionlist setdebug
237 ;
238
239function : FUNCTION NAME
240 {
241 if (code == NULL) /* first function */
242 {
243 code = (Byte *) calloc(GAPCODE, sizeof(Byte));
244 if (code == NULL)
245 {
246 lua_error("not enough memory");
247 err = 1;
248 }
249 maxcode = GAPCODE;
250 }
251 pc=0; basepc=code; maxcurr=maxcode;
252 nlocalvar=0;
253 $<vWord>$ = lua_findsymbol($2);
254 }
255 '(' parlist ')'
256 {
257 if (lua_debug)
258 {
259 code_byte(SETFUNCTION);
260 code_word(lua_nfile-1);
261 code_word($<vWord>3);
262 }
263 lua_codeadjust (0);
264 }
265 block
266 END
267 {
268 if (lua_debug) code_byte(RESET);
269 code_byte(RETCODE); code_byte(nlocalvar);
270 s_tag($<vWord>3) = T_FUNCTION;
271 s_bvalue($<vWord>3) = calloc (pc, sizeof(Byte));
272 if (s_bvalue($<vWord>3) == NULL)
273 {
274 lua_error("not enough memory");
275 err = 1;
276 }
277 memcpy (s_bvalue($<vWord>3), basepc, pc*sizeof(Byte));
278 code = basepc; maxcode=maxcurr;
279#if LISTING
280PrintCode(code,code+pc);
281#endif
282 }
283 ;
284
285statlist : /* empty */
286 | statlist stat sc
287 ;
288
289stat : {
290 ntemp = 0;
291 if (lua_debug)
292 {
293 code_byte(SETLINE); code_word(lua_linenumber);
294 }
295 }
296 stat1
297
298sc : /* empty */ | ';' ;
299
300
301stat1 : IF expr1 THEN PrepJump block PrepJump elsepart END
302 {
303 {
304 Word elseinit = $6+sizeof(Word)+1;
305 if (pc - elseinit == 0) /* no else */
306 {
307 pc -= sizeof(Word)+1;
308 elseinit = pc;
309 }
310 else
311 {
312 basepc[$6] = JMP;
313 code_word_at(basepc+$6+1, pc - elseinit);
314 }
315 basepc[$4] = IFFJMP;
316 code_word_at(basepc+$4+1,elseinit-($4+sizeof(Word)+1));
317 }
318 }
319
320 | WHILE {$<vWord>$=pc;} expr1 DO PrepJump block PrepJump END
321
322 {
323 basepc[$5] = IFFJMP;
324 code_word_at(basepc+$5+1, pc - ($5 + sizeof(Word)+1));
325
326 basepc[$7] = UPJMP;
327 code_word_at(basepc+$7+1, pc - ($<vWord>2));
328 }
329
330 | REPEAT {$<vWord>$=pc;} block UNTIL expr1 PrepJump
331
332 {
333 basepc[$6] = IFFUPJMP;
334 code_word_at(basepc+$6+1, pc - ($<vWord>2));
335 }
336
337
338 | varlist1 '=' exprlist1
339 {
340 {
341 int i;
342 if ($3 == 0 || nvarbuffer != ntemp - $1 * 2)
343 lua_codeadjust ($1 * 2 + nvarbuffer);
344 for (i=nvarbuffer-1; i>=0; i--)
345 lua_codestore (i);
346 if ($1 > 1 || ($1 == 1 && varbuffer[0] != 0))
347 lua_codeadjust (0);
348 }
349 }
350 | functioncall { lua_codeadjust (0); }
351 | typeconstructor { lua_codeadjust (0); }
352 | LOCAL localdeclist decinit { add_nlocalvar($2); lua_codeadjust (0); }
353 ;
354
355elsepart : /* empty */
356 | ELSE block
357 | ELSEIF expr1 THEN PrepJump block PrepJump elsepart
358 {
359 {
360 Word elseinit = $6+sizeof(Word)+1;
361 if (pc - elseinit == 0) /* no else */
362 {
363 pc -= sizeof(Word)+1;
364 elseinit = pc;
365 }
366 else
367 {
368 basepc[$6] = JMP;
369 code_word_at(basepc+$6+1, pc - elseinit);
370 }
371 basepc[$4] = IFFJMP;
372 code_word_at(basepc+$4+1, elseinit - ($4 + sizeof(Word)+1));
373 }
374 }
375 ;
376
377block : {$<vInt>$ = nlocalvar;} statlist {ntemp = 0;} ret
378 {
379 if (nlocalvar != $<vInt>1)
380 {
381 nlocalvar = $<vInt>1;
382 lua_codeadjust (0);
383 }
384 }
385 ;
386
387ret : /* empty */
388 | { if (lua_debug){code_byte(SETLINE);code_word(lua_linenumber);}}
389 RETURN exprlist sc
390 {
391 if (lua_debug) code_byte(RESET);
392 code_byte(RETCODE); code_byte(nlocalvar);
393 }
394 ;
395
396PrepJump : /* empty */
397 {
398 $$ = pc;
399 code_byte(0); /* open space */
400 code_word (0);
401 }
402
403expr1 : expr { if ($1 == 0) {lua_codeadjust (ntemp+1); incr_ntemp();}}
404 ;
405
406expr : '(' expr ')' { $$ = $2; }
407 | expr1 '=' expr1 { code_byte(EQOP); $$ = 1; ntemp--;}
408 | expr1 '<' expr1 { code_byte(LTOP); $$ = 1; ntemp--;}
409 | expr1 '>' expr1 { code_byte(LEOP); code_byte(NOTOP); $$ = 1; ntemp--;}
410 | expr1 NE expr1 { code_byte(EQOP); code_byte(NOTOP); $$ = 1; ntemp--;}
411 | expr1 LE expr1 { code_byte(LEOP); $$ = 1; ntemp--;}
412 | expr1 GE expr1 { code_byte(LTOP); code_byte(NOTOP); $$ = 1; ntemp--;}
413 | expr1 '+' expr1 { code_byte(ADDOP); $$ = 1; ntemp--;}
414 | expr1 '-' expr1 { code_byte(SUBOP); $$ = 1; ntemp--;}
415 | expr1 '*' expr1 { code_byte(MULTOP); $$ = 1; ntemp--;}
416 | expr1 '/' expr1 { code_byte(DIVOP); $$ = 1; ntemp--;}
417 | expr1 CONC expr1 { code_byte(CONCOP); $$ = 1; ntemp--;}
418 | '+' expr1 %prec UNARY { $$ = 1; }
419 | '-' expr1 %prec UNARY { code_byte(MINUSOP); $$ = 1;}
420 | typeconstructor { $$ = $1; }
421 | '@' '(' dimension ')'
422 {
423 code_byte(CREATEARRAY);
424 $$ = 1;
425 }
426 | var { lua_pushvar ($1); $$ = 1;}
427 | NUMBER { code_number($1); $$ = 1; }
428 | STRING
429 {
430 code_byte(PUSHSTRING);
431 code_word($1);
432 $$ = 1;
433 incr_ntemp();
434 }
435 | NIL {code_byte(PUSHNIL); $$ = 1; incr_ntemp();}
436 | functioncall
437 {
438 $$ = 0;
439 if (lua_debug)
440 {
441 code_byte(SETLINE); code_word(lua_linenumber);
442 }
443 }
444 | NOT expr1 { code_byte(NOTOP); $$ = 1;}
445 | expr1 AND PrepJump {code_byte(POP); ntemp--;} expr1
446 {
447 basepc[$3] = ONFJMP;
448 code_word_at(basepc+$3+1, pc - ($3 + sizeof(Word)+1));
449 $$ = 1;
450 }
451 | expr1 OR PrepJump {code_byte(POP); ntemp--;} expr1
452 {
453 basepc[$3] = ONTJMP;
454 code_word_at(basepc+$3+1, pc - ($3 + sizeof(Word)+1));
455 $$ = 1;
456 }
457 ;
458
459typeconstructor: '@'
460 {
461 code_byte(PUSHBYTE);
462 $<vWord>$ = pc; code_byte(0);
463 incr_ntemp();
464 code_byte(CREATEARRAY);
465 }
466 objectname fieldlist
467 {
468 basepc[$<vWord>2] = $4;
469 if ($3 < 0) /* there is no function to be called */
470 {
471 $$ = 1;
472 }
473 else
474 {
475 lua_pushvar ($3+1);
476 code_byte(PUSHMARK);
477 incr_ntemp();
478 code_byte(PUSHOBJECT);
479 incr_ntemp();
480 code_byte(CALLFUNC);
481 ntemp -= 4;
482 $$ = 0;
483 if (lua_debug)
484 {
485 code_byte(SETLINE); code_word(lua_linenumber);
486 }
487 }
488 }
489 ;
490
491dimension : /* empty */ { code_byte(PUSHNIL); incr_ntemp();}
492 | expr1
493 ;
494
495functioncall : functionvalue {code_byte(PUSHMARK); $<vInt>$ = ntemp; incr_ntemp();}
496 '(' exprlist ')' { code_byte(CALLFUNC); ntemp = $<vInt>2-1;}
497
498functionvalue : var {lua_pushvar ($1); }
499 ;
500
501exprlist : /* empty */ { $$ = 1; }
502 | exprlist1 { $$ = $1; }
503 ;
504
505exprlist1 : expr { $$ = $1; }
506 | exprlist1 ',' {if (!$1){lua_codeadjust (ntemp+1); incr_ntemp();}}
507 expr {$$ = $4;}
508 ;
509
510parlist : /* empty */
511 | parlist1
512 ;
513
514parlist1 : NAME
515 {
516 localvar[nlocalvar]=lua_findsymbol($1);
517 add_nlocalvar(1);
518 }
519 | parlist1 ',' NAME
520 {
521 localvar[nlocalvar]=lua_findsymbol($3);
522 add_nlocalvar(1);
523 }
524 ;
525
526objectname : /* empty */ {$$=-1;}
527 | NAME {$$=lua_findsymbol($1);}
528 ;
529
530fieldlist : '{' ffieldlist '}'
531 {
532 flush_record($2%FIELDS_PER_FLUSH);
533 $$ = $2;
534 }
535 | '[' lfieldlist ']'
536 {
537 flush_list($2/FIELDS_PER_FLUSH, $2%FIELDS_PER_FLUSH);
538 $$ = $2;
539 }
540 ;
541
542ffieldlist : /* empty */ { $$ = 0; }
543 | ffieldlist1 { $$ = $1; }
544 ;
545
546ffieldlist1 : ffield {$$=1;}
547 | ffieldlist1 ',' ffield
548 {
549 $$=$1+1;
550 if ($$%FIELDS_PER_FLUSH == 0) flush_record(FIELDS_PER_FLUSH);
551 }
552 ;
553
554ffield : NAME {$<vWord>$ = lua_findconstant($1);} '=' expr1
555 {
556 push_field($<vWord>2);
557 }
558 ;
559
560lfieldlist : /* empty */ { $$ = 0; }
561 | lfieldlist1 { $$ = $1; }
562 ;
563
564lfieldlist1 : expr1 {$$=1;}
565 | lfieldlist1 ',' expr1
566 {
567 $$=$1+1;
568 if ($$%FIELDS_PER_FLUSH == 0)
569 flush_list($$/FIELDS_PER_FLUSH - 1, FIELDS_PER_FLUSH);
570 }
571 ;
572
573varlist1 : var
574 {
575 nvarbuffer = 0;
576 varbuffer[nvarbuffer] = $1; incr_nvarbuffer();
577 $$ = ($1 == 0) ? 1 : 0;
578 }
579 | varlist1 ',' var
580 {
581 varbuffer[nvarbuffer] = $3; incr_nvarbuffer();
582 $$ = ($3 == 0) ? $1 + 1 : $1;
583 }
584 ;
585
586var : NAME
587 {
588 Word s = lua_findsymbol($1);
589 int local = lua_localname (s);
590 if (local == -1) /* global var */
591 $$ = s + 1; /* return positive value */
592 else
593 $$ = -(local+1); /* return negative value */
594 }
595
596 | var {lua_pushvar ($1);} '[' expr1 ']'
597 {
598 $$ = 0; /* indexed variable */
599 }
600 | var {lua_pushvar ($1);} '.' NAME
601 {
602 code_byte(PUSHSTRING);
603 code_word(lua_findconstant($4)); incr_ntemp();
604 $$ = 0; /* indexed variable */
605 }
606 ;
607
608localdeclist : NAME {localvar[nlocalvar]=lua_findsymbol($1); $$ = 1;}
609 | localdeclist ',' NAME
610 {
611 localvar[nlocalvar+$1]=lua_findsymbol($3);
612 $$ = $1+1;
613 }
614 ;
615
616decinit : /* empty */
617 | '=' exprlist1
618 ;
619
620setdebug : DEBUG {lua_debug = $1;}
621
622%%
623
624/*
625** Search a local name and if find return its index. If do not find return -1
626*/
627static int lua_localname (Word n)
628{
629 int i;
630 for (i=nlocalvar-1; i >= 0; i--)
631 if (n == localvar[i]) return i; /* local var */
632 return -1; /* global var */
633}
634
635/*
636** Push a variable given a number. If number is positive, push global variable
637** indexed by (number -1). If negative, push local indexed by ABS(number)-1.
638** Otherwise, if zero, push indexed variable (record).
639*/
640static void lua_pushvar (long number)
641{
642 if (number > 0) /* global var */
643 {
644 code_byte(PUSHGLOBAL);
645 code_word(number-1);
646 incr_ntemp();
647 }
648 else if (number < 0) /* local var */
649 {
650 number = (-number) - 1;
651 if (number < 10) code_byte(PUSHLOCAL0 + number);
652 else
653 {
654 code_byte(PUSHLOCAL);
655 code_byte(number);
656 }
657 incr_ntemp();
658 }
659 else
660 {
661 code_byte(PUSHINDEXED);
662 ntemp--;
663 }
664}
665
666static void lua_codeadjust (int n)
667{
668 code_byte(ADJUST);
669 code_byte(n + nlocalvar);
670}
671
672static void lua_codestore (int i)
673{
674 if (varbuffer[i] > 0) /* global var */
675 {
676 code_byte(STOREGLOBAL);
677 code_word(varbuffer[i]-1);
678 }
679 else if (varbuffer[i] < 0) /* local var */
680 {
681 int number = (-varbuffer[i]) - 1;
682 if (number < 10) code_byte(STORELOCAL0 + number);
683 else
684 {
685 code_byte(STORELOCAL);
686 code_byte(number);
687 }
688 }
689 else /* indexed var */
690 {
691 int j;
692 int upper=0; /* number of indexed variables upper */
693 int param; /* number of itens until indexed expression */
694 for (j=i+1; j <nvarbuffer; j++)
695 if (varbuffer[j] == 0) upper++;
696 param = upper*2 + i;
697 if (param == 0)
698 code_byte(STOREINDEXED0);
699 else
700 {
701 code_byte(STOREINDEXED);
702 code_byte(param);
703 }
704 }
705}
706
707void yyerror (char *s)
708{
709 static char msg[256];
710 sprintf (msg,"%s near \"%s\" at line %d in file \"%s\"",
711 s, lua_lasttext (), lua_linenumber, lua_filename());
712 lua_error (msg);
713 err = 1;
714}
715
716int yywrap (void)
717{
718 return 1;
719}
720
721
722/*
723** Parse LUA code and execute global statement.
724** Return 0 on success or 1 on error.
725*/
726int lua_parse (void)
727{
728 Byte *init = initcode = (Byte *) calloc(GAPCODE, sizeof(Byte));
729 maincode = 0;
730 maxmain = GAPCODE;
731 if (init == NULL)
732 {
733 lua_error("not enough memory");
734 return 1;
735 }
736 err = 0;
737 if (yyparse () || (err==1)) return 1;
738 initcode[maincode++] = HALT;
739 init = initcode;
740#if LISTING
741 PrintCode(init,init+maincode);
742#endif
743 if (lua_execute (init)) return 1;
744 free(init);
745 return 0;
746}
747
748
749#if LISTING
750
751static void PrintCode (Byte *code, Byte *end)
752{
753 Byte *p = code;
754 printf ("\n\nCODE\n");
755 while (p != end)
756 {
757 switch ((OpCode)*p)
758 {
759 case PUSHNIL: printf ("%d PUSHNIL\n", (p++)-code); break;
760 case PUSH0: case PUSH1: case PUSH2:
761 printf ("%d PUSH%c\n", p-code, *p-PUSH0+'0');
762 p++;
763 break;
764 case PUSHBYTE:
765 printf ("%d PUSHBYTE %d\n", p-code, *(++p));
766 p++;
767 break;
768 case PUSHWORD:
769 {
770 CodeWord c;
771 int n = p-code;
772 p++;
773 get_word(c,p);
774 printf ("%d PUSHWORD %d\n", n, c.w);
775 }
776 break;
777 case PUSHFLOAT:
778 {
779 CodeFloat c;
780 int n = p-code;
781 p++;
782 get_float(c,p);
783 printf ("%d PUSHFLOAT %f\n", n, c.f);
784 }
785 break;
786 case PUSHSTRING:
787 {
788 CodeWord c;
789 int n = p-code;
790 p++;
791 get_word(c,p);
792 printf ("%d PUSHSTRING %d\n", n, c.w);
793 }
794 break;
795 case PUSHLOCAL0: case PUSHLOCAL1: case PUSHLOCAL2: case PUSHLOCAL3:
796 case PUSHLOCAL4: case PUSHLOCAL5: case PUSHLOCAL6: case PUSHLOCAL7:
797 case PUSHLOCAL8: case PUSHLOCAL9:
798 printf ("%d PUSHLOCAL%c\n", p-code, *p-PUSHLOCAL0+'0');
799 p++;
800 break;
801 case PUSHLOCAL: printf ("%d PUSHLOCAL %d\n", p-code, *(++p));
802 p++;
803 break;
804 case PUSHGLOBAL:
805 {
806 CodeWord c;
807 int n = p-code;
808 p++;
809 get_word(c,p);
810 printf ("%d PUSHGLOBAL %d\n", n, c.w);
811 }
812 break;
813 case PUSHINDEXED: printf ("%d PUSHINDEXED\n", (p++)-code); break;
814 case PUSHMARK: printf ("%d PUSHMARK\n", (p++)-code); break;
815 case PUSHOBJECT: printf ("%d PUSHOBJECT\n", (p++)-code); break;
816 case STORELOCAL0: case STORELOCAL1: case STORELOCAL2: case STORELOCAL3:
817 case STORELOCAL4: case STORELOCAL5: case STORELOCAL6: case STORELOCAL7:
818 case STORELOCAL8: case STORELOCAL9:
819 printf ("%d STORELOCAL%c\n", p-code, *p-STORELOCAL0+'0');
820 p++;
821 break;
822 case STORELOCAL:
823 printf ("%d STORELOCAL %d\n", p-code, *(++p));
824 p++;
825 break;
826 case STOREGLOBAL:
827 {
828 CodeWord c;
829 int n = p-code;
830 p++;
831 get_word(c,p);
832 printf ("%d STOREGLOBAL %d\n", n, c.w);
833 }
834 break;
835 case STOREINDEXED0: printf ("%d STOREINDEXED0\n", (p++)-code); break;
836 case STOREINDEXED: printf ("%d STOREINDEXED %d\n", p-code, *(++p));
837 p++;
838 break;
839 case STORELIST0:
840 printf("%d STORELIST0 %d\n", p-code, *(++p));
841 p++;
842 break;
843 case STORELIST:
844 printf("%d STORELIST %d %d\n", p-code, *(p+1), *(p+2));
845 p+=3;
846 break;
847 case STORERECORD:
848 printf("%d STORERECORD %d\n", p-code, *(++p));
849 p += *p*sizeof(Word) + 1;
850 break;
851 case ADJUST:
852 printf ("%d ADJUST %d\n", p-code, *(++p));
853 p++;
854 break;
855 case CREATEARRAY: printf ("%d CREATEARRAY\n", (p++)-code); break;
856 case EQOP: printf ("%d EQOP\n", (p++)-code); break;
857 case LTOP: printf ("%d LTOP\n", (p++)-code); break;
858 case LEOP: printf ("%d LEOP\n", (p++)-code); break;
859 case ADDOP: printf ("%d ADDOP\n", (p++)-code); break;
860 case SUBOP: printf ("%d SUBOP\n", (p++)-code); break;
861 case MULTOP: printf ("%d MULTOP\n", (p++)-code); break;
862 case DIVOP: printf ("%d DIVOP\n", (p++)-code); break;
863 case CONCOP: printf ("%d CONCOP\n", (p++)-code); break;
864 case MINUSOP: printf ("%d MINUSOP\n", (p++)-code); break;
865 case NOTOP: printf ("%d NOTOP\n", (p++)-code); break;
866 case ONTJMP:
867 {
868 CodeWord c;
869 int n = p-code;
870 p++;
871 get_word(c,p);
872 printf ("%d ONTJMP %d\n", n, c.w);
873 }
874 break;
875 case ONFJMP:
876 {
877 CodeWord c;
878 int n = p-code;
879 p++;
880 get_word(c,p);
881 printf ("%d ONFJMP %d\n", n, c.w);
882 }
883 break;
884 case JMP:
885 {
886 CodeWord c;
887 int n = p-code;
888 p++;
889 get_word(c,p);
890 printf ("%d JMP %d\n", n, c.w);
891 }
892 break;
893 case UPJMP:
894 {
895 CodeWord c;
896 int n = p-code;
897 p++;
898 get_word(c,p);
899 printf ("%d UPJMP %d\n", n, c.w);
900 }
901 break;
902 case IFFJMP:
903 {
904 CodeWord c;
905 int n = p-code;
906 p++;
907 get_word(c,p);
908 printf ("%d IFFJMP %d\n", n, c.w);
909 }
910 break;
911 case IFFUPJMP:
912 {
913 CodeWord c;
914 int n = p-code;
915 p++;
916 get_word(c,p);
917 printf ("%d IFFUPJMP %d\n", n, c.w);
918 }
919 break;
920 case POP: printf ("%d POP\n", (p++)-code); break;
921 case CALLFUNC: printf ("%d CALLFUNC\n", (p++)-code); break;
922 case RETCODE:
923 printf ("%d RETCODE %d\n", p-code, *(++p));
924 p++;
925 break;
926 case HALT: printf ("%d HALT\n", (p++)-code); break;
927 case SETFUNCTION:
928 {
929 CodeWord c1, c2;
930 int n = p-code;
931 p++;
932 get_word(c1,p);
933 get_word(c2,p);
934 printf ("%d SETFUNCTION %d %d\n", n, c1.w, c2.w);
935 }
936 break;
937 case SETLINE:
938 {
939 CodeWord c;
940 int n = p-code;
941 p++;
942 get_word(c,p);
943 printf ("%d SETLINE %d\n", n, c.w);
944 }
945 break;
946
947 case RESET: printf ("%d RESET\n", (p++)-code); break;
948 default: printf ("%d Cannot happen: code %d\n", (p++)-code, *(p-1)); break;
949 }
950 }
951}
952#endif
953
table.h+0−39
@@ -1,39 +0,0 @@
1/*
2** table.c
3** Module to control static tables
4** TeCGraf - PUC-Rio
5** 11 May 93
6*/
7
8#ifndef table_h
9#define table_h
10
11extern Symbol *lua_table;
12extern Word lua_ntable;
13
14extern char **lua_constant;
15extern Word lua_nconstant;
16
17extern char **lua_string;
18extern Word lua_nstring;
19
20extern Hash **lua_array;
21extern Word lua_narray;
22
23extern char *lua_file[];
24extern int lua_nfile;
25
26#define lua_markstring(s) (*((s)-1))
27
28
29int lua_findsymbol (char *s);
30int lua_findenclosedconstant (char *s);
31int lua_findconstant (char *s);
32void lua_markobject (Object *o);
33char *lua_createstring (char *s);
34void *lua_createarray (void *a);
35int lua_addfile (char *fn);
36char *lua_filename (void);
37void lua_nextvar (void);
38
39#endif
test.lua+0−15
@@ -1,15 +0,0 @@
1$debug
2
3
4function somaP (x1,y1,x2,y2)
5 return x1+x2, y1+y2
6end
7
8function norma (x,y)
9 return x*x+y*y
10end
11
12function retorno_multiplo ()
13 print (norma(somaP(2,3,4,5)))
14end
15
test/array.luarenamed from array.lua+0−0

File renamed without changes.

test/dump+37−0
@@ -0,0 +1,37 @@
1
2
3function savevar (n,v)
4 if v = nil then return end;
5 if type(v) = "number" then print(n.."="..v) return end
6 if type(v) = "string" then print(n.."='"..v.."'") return end
7 if type(v) = "table" then
8 if v.__visited__ ~= nil then
9 print(n .. "=" .. v.__visited__);
10 else
11 print(n.."=@()")
12 v.__visited__ = n;
13 local r,f;
14 r,f = next(v,nil);
15 while r ~= nil do
16 if r ~= "__visited__" then
17 if type(r) = 'string' then
18 savevar(n.."."..r,f)
19 else
20 savevar(n.."["..r.."]",f)
21 end
22 end
23 r,f = next(v,r)
24 end
25 end
26 end
27end
28
29function save ()
30 local n,v = nextvar(nil)
31 while n ~= nil do
32 savevar(n,v);
33 n,v = nextvar(n)
34 end
35end
36
37save()
test/loop.lua+6−0
@@ -0,0 +1,6 @@
1$debug
2i=0
3repeat
4 print(i)
5 i=i+1
6until i>10
test/save.luarenamed from save.lua+0−1
@@ -1,4 +1,3 @@
1$debug
2 1
3 2
4function savevar (n,v)3function savevar (n,v)
test/sort.luarenamed from sort.lua+5−7
@@ -2,9 +2,7 @@ $debug · 1 unmodified line
2 2
3function quicksort(r,s)3function quicksort(r,s)
4 if s<=r then return end -- caso basico da recursao4 if s<=r then return end -- caso basico da recursao
5 local v=x[r]5 local v, i, j = x[r], r, s+1
6 local i=r
7 local j=s+1
8 i=i+1; while x[i]<v do i=i+1 end6 i=i+1; while x[i]<v do i=i+1 end
9 j=j-1; while x[j]>v do j=j-1 end7 j=j-1; while x[j]>v do j=j-1 end
10 x[i],x[j]=x[j],x[i]8 x[i],x[j]=x[j],x[i]
@@ -22,8 +20,7 @@ end · 11 unmodified lines
22function sort(a,n) -- selection sort20function sort(a,n) -- selection sort
23 local i=121 local i=1
24 while i<=n do22 while i<=n do
25 local m=i23 local m, j = i, i+1
26 local j=i+1
27 while j<=n do24 while j<=n do
28 if a[j]<a[m] then m=j end25 if a[j]<a[m] then m=j end
29 j=j+126 j=j+1
@@ -47,10 +44,11 @@ function main() · 17 unmodified lines
47 n=n+1; x[n]="marcelo"44 n=n+1; x[n]="marcelo"
48 n=n+1; x[n]="sedrez"45 n=n+1; x[n]="sedrez"
49 n=n+1; x[n]="z"46 n=n+1; x[n]="z"
50-- quicksort(1,n-1)47 print(x[0]..","..x[1]..","..x[2]..","..x[3]..","..x[4]..","..x[5]..","..x[6]..","..x[7]..","..x[8]..","..x[9]..","..x[10])
48 quicksort(1,n-1)
51 print(x[0]..","..x[1]..","..x[2]..","..x[3]..","..x[4]..","..x[5]..","..x[6]..","..x[7]..","..x[8]..","..x[9]..","..x[10])49 print(x[0]..","..x[1]..","..x[2]..","..x[3]..","..x[4]..","..x[5]..","..x[6]..","..x[7]..","..x[8]..","..x[9]..","..x[10])
52 sort (x, n-1)50 sort (x, n-1)
53 print(x[0]..","..x[1]..","..x[2]..","..x[3]..","..x[4]..","..x[5]..","..x[6]..","..x[7]..","..x[8]..","..x[9]..","..x[10])51 print(x[0]..","..x[1]..","..x[2]..","..x[3]..","..x[4]..","..x[5]..","..x[6]..","..x[7]..","..x[8]..","..x[9]..","..x[10])
54end52end
55 53
56 54main()
test/sort/q.lua+51−0
@@ -0,0 +1,51 @@
1function quicksort(r,s)
2 if s<=r then return end -- caso basico da recursao
3 local v=x[r]
4 local i=r
5 local j=s+1
6 repeat
7 repeat i=i+1 until x[i]>=v
8 repeat j=j-1 until x[j]<=v
9 x[i],x[j]=x[j],x[i]
10 until j<=i -- separacao
11 x[i],x[j]=x[j],x[i] -- undo last swap
12 x[j],x[r]=x[r],x[j]
13 quicksort(r,j-1) -- recursao
14 quicksort(j+1,s)
15end
16
17function main()
18 x=@()
19 n=-1
20 n=n+1; x[n]="a"
21 n=n+1; x[n]="waldemar"
22 n=n+1; x[n]="luiz"
23 n=n+1; x[n]="lula"
24 n=n+1; x[n]="peter"
25 n=n+1; x[n]="raquel"
26 n=n+1; x[n]="camilo"
27 n=n+1; x[n]="andre"
28 n=n+1; x[n]="marcelo"
29 n=n+1; x[n]="sedrez"
30 n=n+1; x[n]="z"
31-- sort(x,n)
32 quicksort(1,n-1)
33print(x[0]..","..x[1]..","..x[2]..","..x[3]..","..x[4]..","..x[5]..","..x[6]..","..x[7]..","..x[8]..","..x[9]..","..x[10])
34end
35
36function sort(a,n) -- selection sort
37 local i=1
38 while i<=n do
39 local m=i
40 local j=i+1
41 while j<=n do
42 if a[j]<a[m] then m=j end
43 j=j+1
44 end
45 a[i],a[m]=a[m],a[i] -- swap a[i] and a[m]
46 print (i, a[i])
47 i=i+1
48 end
49end
50
51main()
test/sort/sort.lua+51−0
@@ -0,0 +1,51 @@
1$debug
2function quicksort(r,s)
3 if s<=r then return end -- caso basico da recursao
4 local v=x[r]
5 local i=r
6 local j=s+1
7 i=i+1; while x[i]<v do i=i+1 end
8 j=j-1; while x[j]>v do j=j-1 end
9 x[i],x[j]=x[j],x[i]
10 while j>i do -- separacao
11 i=i+1; while x[i]<v do i=i+1 end
12 j=j+1; while x[j]>v do j=j-1 end
13 x[i],x[j]=x[j],x[i]
14 end
15 x[i],x[j]=x[j],x[i] -- undo last swap
16 x[j],x[r]=x[r],x[j]
17 quicksort(r,j-1) -- recursao
18 quicksort(j+1,s)
19end
20
21function sort(a,n) -- selection sort
22 local i=1
23 while i<=n do
24 local m=i
25 local j=i+1
26 while j<=n do
27 if a[j]<a[m] then m=j end
28 j=j+1
29 end
30 a[i],a[m]=a[m],a[i] -- swap a[i] and a[m]
31 print (i, a[i])
32 i=i+1
33 end
34end
35
36x=@(20)
37n=-1
38n=n+1; x[n]="a"
39n=n+1; x[n]="waldemar"
40n=n+1; x[n]="luiz"
41n=n+1; x[n]="lula"
42n=n+1; x[n]="peter"
43n=n+1; x[n]="raquel"
44n=n+1; x[n]="camilo"
45n=n+1; x[n]="andre"
46n=n+1; x[n]="marcelo"
47n=n+1; x[n]="sedrez"
48n=n+1; x[n]="z"
49-- sort(x,n)
50quicksort(1,n-1)
51print(x[0]..","..x[1]..","..x[2]..","..x[3]..","..x[4]..","..x[5]..","..x[6]..","..x[7]..","..x[8]..","..x[9]..","..x[10])
test/split.lua+18−0
@@ -0,0 +1,18 @@
1function split (s)
2 local n = 1
3 local f = strfind(s,"/")
4 while f do
5 n = n+f
6 f = strfind(strsub(s,n),"/")
7 end
8 return strsub(s,1,n-1), strsub(s,n)
9end
10
11
12function test(s)
13 local path, filename = split(s)
14 print(s .. "=[".. path.."]+["..filename.."]")
15end
16
17test("a:/lua/obj/lua.c")
18test("lua.lib")
test/teste.lua+22−0
@@ -0,0 +1,22 @@
1function sort(a,n) -- selection sort
2 local i=1
3 while i<=n do
4 local m, j = i, i+1
5 while j<=n do
6 if a[j]<a[m] then m=j end
7 j=j+1
8 end
9 a[i],a[m]=a[m],a[i] -- swap a[i] and a[m]
10 i=i+1
11 end
12end
13
14
15v = @(5000)
16
17i=1
18while i <= 5000 do v[i] = 5000-i i=i+1 end
19
20sort(v,5000)
21
22print("v512 = ".. v[512])
test/type.lua+37−0
@@ -0,0 +1,37 @@
1$debug
2
3function check (object, class)
4 local v = next(object,nil);
5 while v ~= nil do
6 if class[v] = nil then
7 print("unknown field: " .. v)
8 elseif type(object[v]) ~= class[v].type then
9 print("wrong type for field " .. v)
10 end
11 v = next(object,v);
12 end
13 v = next(class,nil);
14 while v ~= nil do
15 if object[v] = nil then
16 if class[v].default ~= nil then
17 object[v] = class[v].default
18 else
19 print("field "..v.." not initialized")
20 end
21 end
22 v = next(class,v);
23 end
24end
25
26typeblock = @{x = @{default = 0, type = "number"},
27 y = @{default = 0, type = "number"},
28 name = @{type = "string"}
29 }
30
31function block(t) check(t,typeblock) end
32
33@block{ x = 7, name = "3"}
34@block{ x = "7", name = "3"}
35@block{ x = 7, name = 3}
36@block{ x = 7}
37@block{ x = 7, name = "3", bogus=3.14}
type.lua+0−35
@@ -1,35 +0,0 @@
1$debug
2
3function check (object, class)
4 local v = next(object,nil);
5 while v ~= nil do
6 if class[v] = nil then print("unknown field: " .. v)
7 elseif type(object[v]) ~= class[v].type
8 then print("wrong type for field " .. v)
9 end
10 v = next(object,v);
11 end
12 v = next(class,nil);
13 while v ~= nil do
14 if object[v] = nil then
15 if class[v].default ~= nil then
16 object[v] = class[v].default
17 else print("field "..v.." not initialized")
18 end
19 end
20 v = next(class,v);
21 end
22end
23
24typetrilha = @{x = @{default = 0, type = "number"},
25 y = @{default = 0, type = "number"},
26 name = @{type = "string"}
27 }
28
29function trilha (t) check(t,typetrilha) end
30
31t1 = @trilha{ x = 4, name = "3"}
32
33a = "na".."me"
34
35
y_tab.h+0−35
@@ -1,35 +0,0 @@
1
2typedef union
3{
4 int vInt;
5 long vLong;
6 float vFloat;
7 Word vWord;
8 Byte *pByte;
9} YYSTYPE;
10extern YYSTYPE yylval;
11# define NIL 257
12# define IF 258
13# define THEN 259
14# define ELSE 260
15# define ELSEIF 261
16# define WHILE 262
17# define DO 263
18# define REPEAT 264
19# define UNTIL 265
20# define END 266
21# define RETURN 267
22# define LOCAL 268
23# define NUMBER 269
24# define FUNCTION 270
25# define NAME 271
26# define STRING 272
27# define DEBUG 273
28# define NOT 274
29# define AND 275
30# define OR 276
31# define NE 277
32# define LE 278
33# define GE 279
34# define CONC 280
35# define UNARY 281