Unified · Split
| @@ -1,29 +1,11 @@ | ||
| 1 | −OBJS= hash.o inout.o lex_yy.o opcode.o table.o y_tab.o lua.o iolib.o mathlib.o strlib.o | |
| 1 | +# makefile for lua hierarchy | |
| 2 | 2 | |
| 3 | −CFLAGS= -O2 -I. | |
| 4 | − | |
| 5 | −T= lua | |
| 6 | − | |
| 7 | −all: $T | |
| 8 | − | |
| 9 | −$T: $(OBJS) | |
| 10 | − $(CC) -o $@ $(OBJS) -lm | |
| 11 | − | |
| 12 | −A=-------------------------------------------------------------------------- | |
| 13 | −test: $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 | |
| 3 | +all: | |
| 4 | + (cd src; make) | |
| 5 | + (cd clients/lib; make) | |
| 6 | + (cd clients/lua; make) | |
| 24 | 7 | |
| 25 | 8 | clean: |
| 26 | − rm -f $T $(OBJS) core core.* | |
| 27 | − | |
| 28 | −diff: | |
| 29 | − diff . fixed | grep -v ^Only | |
| 9 | + (cd src; make clean) | |
| 10 | + (cd clients/lib; make clean) | |
| 11 | + (cd clients/lua; make clean) | |
| @@ -1,22 +1,47 @@ | ||
| 1 | −This is Lua 1.0. It was never publicly released. This code is a snapshot of | |
| 2 | −the status of Lua on 28 Jul 1993. It is distributed for historical curiosity | |
| 3 | −to celebrate 10 years of Lua and is hereby placed in the public domain. | |
| 1 | +* What is Lua? | |
| 2 | + Lua is a simple, yet powerful, language for extending applications. | |
| 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 | |
| 5 | −There is no documentation, except the test programs. The manual for Lua 1.1 | |
| 6 | −probably works for this version as well. | |
| 7 | +* Some features of Lua | |
| 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 | |
| 8 | −The source files for the lexer and parser have been lost: all that is left is | |
| 9 | −the output of lex and yacc. A grammar can be found inside y_tab.c in yyreds. | |
| 17 | +* Coming soon | |
| 18 | + Object-oriented extensions. | |
| 19 | + Lazy evaluation. | |
| 10 | 20 | |
| 11 | −The code compiles and runs in RedHat 5.2 with gcc 2.7.2.3. It may not run in | |
| 12 | −newer systems, because it assumes that stdin and stdout are constants, though | |
| 13 | −ANSI C does not promise they are. If make fails, try using the fixed modules | |
| 14 | −provided in the "fixed" directory. To see the differences (which are really | |
| 15 | −quite minor), do "make diff". | |
| 21 | +* Installing | |
| 22 | + To make, simply type domake. | |
| 23 | + If make succeeds, you get an interpreter in ./bin/lua. | |
| 24 | + The libraries are in ./lib. The include files are in ./include. | |
| 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 | |
| 17 | −To see Lua 1.0 in action, do "make test". (The last test raises an error on | |
| 18 | −purpose.) | |
| 32 | +* Legal matters | |
| 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 | |
| 20 | −Enjoy! | |
| 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.br | |
| 42 | +-- | |
| 43 | +Luiz Henrique de Figueiredo email: lhf@icad.puc-rio.br | |
| 44 | +TeCGraf-Grupo de Tecnologia em Computacao Grafica, ITS, PUC-Rio | |
| 45 | +Rua Marques de Sao Vicente 225 voice: +55 21 529-9424 | |
| 46 | +22453-900 Rio de Janeiro, RJ, Brasil fax: +55 21 511-5645 | |
| 47 | +-- | |
| @@ -0,0 +1,23 @@ | ||
| 1 | +# makefile for lualib | |
| 2 | + | |
| 3 | +INC= $(LUA)/include | |
| 4 | +LIB= $(LUA)/lib | |
| 5 | + | |
| 6 | +CC= gcc | |
| 7 | +CFLAGS= -Wall -O2 -I$(INC) $(DEFS) | |
| 8 | + | |
| 9 | +OBJS= iolib.o mathlib.o strlib.o | |
| 10 | +SLIB= $(LIB)/liblualib.a | |
| 11 | +DLIB= $(LIB)/liblualib.so.1.1 | |
| 12 | + | |
| 13 | +libs: $(SLIB) $(DLIB) | |
| 14 | + | |
| 15 | +$(SLIB): $(OBJS) | |
| 16 | + ar ruvl $@ $(OBJS) | |
| 17 | + ranlib $(SLIB) | |
| 18 | + | |
| 19 | +$(DLIB): $(OBJS) | |
| 20 | + ld -o $@ $(OBJS) | |
| 21 | + | |
| 22 | +clean: | |
| 23 | + rm -f $(OBJS) $(SLIB) $(DLIB) | |
| @@ -1,20 +1,21 @@ | ||
| 1 | 1 | /* |
| 2 | 2 | ** iolib.c |
| 3 | 3 | ** Input/output library to LUA |
| 4 | −** | |
| 5 | −** Waldemar Celes Filho | |
| 6 | −** TeCGraf - PUC-Rio | |
| 7 | −** 19 May 93 | |
| 8 | 4 | */ |
| 9 | 5 | |
| 6 | +char *rcs_iolib="$Id: iolib.c,v 1.4 1994/04/25 20:11:23 celes Exp $"; | |
| 7 | + | |
| 10 | 8 | #include <stdlib.h> |
| 11 | 9 | #include <string.h> |
| 12 | 10 | #include <stdio.h> |
| 13 | 11 | #include <ctype.h> |
| 12 | +#include <sys/stat.h> | |
| 14 | 13 | #ifdef __GNUC__ |
| 15 | 14 | #include <floatingpoint.h> |
| 16 | 15 | #endif |
| 17 | 16 | |
| 17 | +#include "mm.h" | |
| 18 | + | |
| 18 | 19 | #include "lua.h" |
| 19 | 20 | |
| 20 | 21 | static 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 | +*/ | |
| 122 | +static 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 | 166 | ** Read a variable. On error put nil on stack. |
| 114 | 167 | ** LUA interface: |
| @@ -126,7 +179,7 @@ static void io_writeto (void) · 11 unmodified lines | ||
| 126 | 179 | static void io_read (void) |
| 127 | 180 | { |
| 128 | 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 | 184 | int c; |
| 132 | 185 | char s[256]; |
| @@ -134,19 +187,31 @@ static void io_read (void) · 1 unmodified line | ||
| 134 | 187 | ; |
| 135 | 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 (); | |
| 140 | − return; | |
| 193 | + if (c == EOF) | |
| 194 | + { | |
| 195 | + lua_pushnil (); | |
| 196 | + return; | |
| 197 | + } | |
| 198 | + s[n++] = c; | |
| 141 | 199 | } |
| 200 | + s[n] = 0; | |
| 142 | 201 | } |
| 143 | 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 (); | |
| 148 | − return; | |
| 207 | + if (c == EOF) | |
| 208 | + { | |
| 209 | + lua_pushnil (); | |
| 210 | + return; | |
| 211 | + } | |
| 212 | + s[n++] = c; | |
| 149 | 213 | } |
| 214 | + s[n] = 0; | |
| 150 | 215 | } |
| 151 | 216 | else |
| 152 | 217 | { |
| @@ -183,7 +248,16 @@ static void io_read (void) · 30 unmodified lines | ||
| 183 | 248 | char f[80]; |
| 184 | 249 | char s[256]; |
| 185 | 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 | 261 | switch (tolower(t)) |
| 188 | 262 | { |
| 189 | 263 | case 'i': |
| @@ -212,22 +286,25 @@ static void io_read (void) · 22 unmodified lines | ||
| 212 | 286 | case 'i': |
| 213 | 287 | { |
| 214 | 288 | long int l; |
| 215 | − fscanf (in, "%ld", &l); | |
| 216 | − lua_pushnumber(l); | |
| 289 | + if (fscanf (in, "%ld", &l) == EOF) | |
| 290 | + lua_pushnil(); | |
| 291 | + else lua_pushnumber(l); | |
| 217 | 292 | } |
| 218 | 293 | break; |
| 219 | 294 | case 'f': case 'g': case 'e': |
| 220 | 295 | { |
| 221 | 296 | float f; |
| 222 | − fscanf (in, "%f", &f); | |
| 223 | − lua_pushnumber(f); | |
| 297 | + if (fscanf (in, "%f", &f) == EOF) | |
| 298 | + lua_pushnil(); | |
| 299 | + else lua_pushnumber(f); | |
| 224 | 300 | } |
| 225 | 301 | break; |
| 226 | 302 | default: |
| 227 | 303 | { |
| 228 | 304 | char s[256]; |
| 229 | − fscanf (in, "%s", s); | |
| 230 | − lua_pushstring(s); | |
| 305 | + if (fscanf (in, "%s", s) == EOF) | |
| 306 | + lua_pushnil(); | |
| 307 | + else lua_pushstring(s); | |
| 231 | 308 | } |
| 232 | 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". | |
| 350 | −** On error put 0 on stack, otherwise put 1. | |
| 426 | +** Execute a executable program using "system". | |
| 427 | +** Return the result of execution. | |
| 351 | 428 | */ |
| 352 | 429 | void io_execute (void) |
| 353 | 430 | { |
| @@ -359,8 +436,8 @@ void io_execute (void) · 5 unmodified lines | ||
| 359 | 436 | } |
| 360 | 437 | else |
| 361 | 438 | { |
| 362 | − system(lua_getstring(o)); | |
| 363 | − lua_pushnumber (1); | |
| 439 | + int res = system(lua_getstring(o)); | |
| 440 | + lua_pushnumber (res); | |
| 364 | 441 | } |
| 365 | 442 | return; |
| 366 | 443 | } |
| @@ -394,6 +471,7 @@ void iolib_open (void) · 27 unmodified lines | ||
| 394 | 471 | { |
| 395 | 472 | lua_register ("readfrom", io_readfrom); |
| 396 | 473 | lua_register ("writeto", io_writeto); |
| 474 | + lua_register ("appendto", io_appendto); | |
| 397 | 475 | lua_register ("read", io_read); |
| 398 | 476 | lua_register ("write", io_write); |
| 399 | 477 | lua_register ("execute", io_execute); |
| @@ -1,17 +1,18 @@ | ||
| 1 | 1 | /* |
| 2 | 2 | ** mathlib.c |
| 3 | −** Mathematica library to LUA | |
| 4 | −** | |
| 5 | −** Waldemar Celes Filho | |
| 6 | −** TeCGraf - PUC-Rio | |
| 7 | −** 19 May 93 | |
| 3 | +** Mathematics library to LUA | |
| 8 | 4 | */ |
| 9 | 5 | |
| 6 | +char *rcs_mathlib="$Id: mathlib.c,v 1.1 1993/12/17 18:41:19 celes Exp $"; | |
| 7 | + | |
| 10 | 8 | #include <stdio.h> /* NULL */ |
| 11 | 9 | #include <math.h> |
| 12 | 10 | |
| 13 | 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 | + | |
| 15 | 16 | static void math_abs (void) |
| 16 | 17 | { |
| 17 | 18 | double d; |
| @@ -35,7 +36,7 @@ static void math_sin (void) · 17 unmodified lines | ||
| 35 | 36 | if (!lua_isnumber(o)) |
| 36 | 37 | { lua_error ("incorrect arguments to function `sin'"); return; } |
| 37 | 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 | 50 | if (!lua_isnumber(o)) |
| 50 | 51 | { lua_error ("incorrect arguments to function `cos'"); return; } |
| 51 | 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 | 64 | if (!lua_isnumber(o)) |
| 64 | 65 | { lua_error ("incorrect arguments to function `tan'"); return; } |
| 65 | 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 | 77 | if (!lua_isnumber(o)) |
| 77 | 78 | { lua_error ("incorrect arguments to function `asin'"); return; } |
| 78 | 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 | 90 | if (!lua_isnumber(o)) |
| 90 | 91 | { lua_error ("incorrect arguments to function `acos'"); return; } |
| 91 | 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 | 104 | if (!lua_isnumber(o)) |
| 104 | 105 | { lua_error ("incorrect arguments to function `atan'"); return; } |
| 105 | 106 | d = lua_getnumber(o); |
| 106 | − lua_pushnumber (atan(d)); | |
| 107 | + lua_pushnumber (TODEGREE(atan(d))); | |
| 107 | 108 | } |
| 108 | 109 | |
| 109 | 110 | |
| @@ -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 | + | |
| 10 | +void mathlib_open (void); | |
| 11 | + | |
| 12 | +#endif | |
| 13 | + | |
| @@ -1,16 +1,16 @@ | ||
| 1 | 1 | /* |
| 2 | 2 | ** strlib.c |
| 3 | 3 | ** String library to LUA |
| 4 | −** | |
| 5 | −** Waldemar Celes Filho | |
| 6 | −** TeCGraf - PUC-Rio | |
| 7 | −** 19 May 93 | |
| 8 | 4 | */ |
| 9 | 5 | |
| 6 | +char *rcs_strlib="$Id: strlib.c,v 1.2 1994/03/28 15:14:02 celes Exp $"; | |
| 7 | + | |
| 10 | 8 | #include <stdlib.h> |
| 11 | 9 | #include <string.h> |
| 12 | 10 | #include <ctype.h> |
| 13 | 11 | |
| 12 | +#include "mm.h" | |
| 13 | + | |
| 14 | 14 | |
| 15 | 15 | #include "lua.h" |
| 16 | 16 | |
| @@ -21,16 +21,18 @@ · 4 unmodified lines | ||
| 21 | 21 | */ |
| 22 | 22 | static void str_find (void) |
| 23 | 23 | { |
| 24 | − int n; | |
| 25 | − char *s1, *s2; | |
| 24 | + char *s1, *s2, *f; | |
| 26 | 25 | lua_Object o1 = lua_getparam (1); |
| 27 | 26 | lua_Object o2 = lua_getparam (2); |
| 28 | 27 | if (!lua_isstring(o1) || !lua_isstring(o2)) |
| 29 | 28 | { lua_error ("incorrect arguments to function `strfind'"); return; } |
| 30 | 29 | s1 = lua_getstring(o1); |
| 31 | 30 | s2 = lua_getstring(o2); |
| 32 | − n = strstr(s1,s2) - s1 + 1; | |
| 33 | − lua_pushnumber (n); | |
| 31 | + f = strstr(s1,s2); | |
| 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 | 61 | lua_Object o1 = lua_getparam (1); |
| 60 | 62 | lua_Object o2 = lua_getparam (2); |
| 61 | 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 | 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 | 69 | start = lua_getnumber (o2); |
| 66 | − end = lua_getnumber (o3); | |
| 70 | + end = o3 == NULL ? strlen(s) : lua_getnumber (o3); | |
| 67 | 71 | if (end < start || start < 1 || end > strlen(s)) |
| 68 | − lua_pushstring (""); | |
| 72 | + lua_pushstring(""); | |
| 69 | 73 | else |
| 70 | 74 | { |
| 71 | 75 | s[end] = 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 | + | |
| 10 | +void strlib_open (void); | |
| 11 | + | |
| 12 | +#endif | |
| 13 | + | |
| @@ -0,0 +1,17 @@ | ||
| 1 | +# makefile for lua interpreter | |
| 2 | + | |
| 3 | +BIN= $(LUA)/bin | |
| 4 | +INC= $(LUA)/include | |
| 5 | +LIB= $(LUA)/lib | |
| 6 | + | |
| 7 | +CC= gcc | |
| 8 | +CFLAGS= -g -Wall -O2 -I$(INC) | |
| 9 | + | |
| 10 | +OBJS= lua.o | |
| 11 | +T=$(BIN)/lua | |
| 12 | + | |
| 13 | +$T: $(OBJS) | |
| 14 | + $(CC) -o $@ $(OBJS) -L$(LIB) -llua -llualib -lm | |
| 15 | + | |
| 16 | +clean: | |
| 17 | + rm -f $T $(OBJS) | |
| @@ -0,0 +1,5 @@ | ||
| 1 | +This client is a simple lua interpreter. | |
| 2 | +It either loads and executes the files named on the command line or reads | |
| 3 | +and executes lines from stdin. | |
| 4 | +Note that, in the second case, each line must contain a complete statement. | |
| 5 | +For instance, functions cannot span several lines. | |
| @@ -0,0 +1,28 @@ | ||
| 1 | +/* | |
| 2 | +** lua.c | |
| 3 | +** Linguagem para Usuarios de Aplicacao | |
| 4 | +*/ | |
| 5 | + | |
| 6 | +char *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 | + | |
| 13 | +void 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 | +} | |
Binary file not shown.
| @@ -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 | |
| 9 | +load def /X{S N}B /TR /translate load N /isls false N /vsize 10 N /@rigin{ | |
| 10 | +isls{[0 1 -1 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale | |
| 11 | +Resolution 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 | |
| 20 | +ne{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 | |
| 22 | +sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data | |
| 23 | +dup length 1 sub get}B /ctr 0 N /CharBuilder{save 3 1 roll S dup /base get 2 | |
| 24 | +index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff ch-yoff | |
| 25 | +ch-height sub ch-xoff ch-width add ch-yoff setcachedevice ch-width ch-height | |
| 26 | +true[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 | |
| 28 | +ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf div put}if put /ctr | |
| 29 | +ctr 1 add N}B /I{cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI | |
| 30 | +save N @rigin 0 0 moveto}B /eop{clear SI restore showpage userdict /eop-hook | |
| 31 | +known{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 | |
| 33 | +string 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 | |
| 35 | +scale 1 1 false RMat{BDot}imagemask grestore}B /a{moveto}B /delta 0 N /tail{ | |
| 36 | +dup /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 | |
| 42 | +TeXDict begin 1200 300 300 @start /Fa 8 58 df<00000C00001C00001C00003800003800 | |
| 43 | +00700000700000700000E00000E00001C00001C0000380000380000380000700000700000E0000 | |
| 44 | +0E00000E00001C00001C0000380000380000700000700000700000E00000E00001C00001C00001 | |
| 45 | +C0000380000380000700000700000700000E00000E00001C00001C000038000038000038000070 | |
| 46 | +0000700000E00000E00000C0000016317DA41D>47 D<00380000780003F800FFF800FDF80001F8 | |
| 47 | +0001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8 | |
| 48 | +0001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8007FFFF07FFF | |
| 49 | +F014207C9F1D>49 D<03FC000FFF803C0FE07007F07C03F8FE01F8FE01FCFE01FCFE01FC7C01FC | |
| 50 | +3801FC0001FC0001F80003F80003F00007E0000FC0000F80001E00003C0000780000E00C01C00C | |
| 51 | +03801C0300180600180FFFF81FFFF83FFFF87FFFF0FFFFF0FFFFF016207D9F1D>I<00FF0007FF | |
| 52 | +C00F03F01E01F83F01F83F01FC3F81FC3F01FC1F01FC0C01F80001F80003F00003E0000FC000FF | |
| 53 | +0000FF000003E00001F80001FC0000FE0000FE0000FF7C00FF7C00FFFE00FFFE00FFFE00FE7C01 | |
| 54 | +FC7801FC3C03F00FFFE001FF0018207E9F1D>I<0000E00001E00003E00003E00007E0000FE000 | |
| 55 | +1FE0001BE00033E00073E000E3E001C3E00183E00303E00703E00E03E00C03E01803E03803E070 | |
| 56 | +03E0E003E0FFFFFFFFFFFF0007E00007E00007E00007E00007E00007E00007E001FFFF01FFFF18 | |
| 57 | +207E9F1D>I<1000301E00F01FFFE01FFFE01FFFC01FFF001FFE001FF800180000180000180000 | |
| 58 | +18000019FE001FFF801E07E01C03F01801F00001F80001F80001FC0001FC7801FCFC01FCFC01FC | |
| 59 | +FC01FCFC01F8F801F86003F03003E01C0FC00FFF0003FC0016207D9F1D>I<001FC000FFF001F0 | |
| 60 | +3807C0780F80FC1F00FC1F00FC3F00FC7E00787E00007E0000FE0000FE3FC0FE7FF0FE80F8FF80 | |
| 61 | +7CFF007EFF007EFE007FFE007FFE007FFE007F7E007F7E007F7E007F3E007E3E007E1F007C0F00 | |
| 62 | +F807C1F003FFE000FF0018207E9F1D>I<00FF0007FFC00F83E01F00F03E00F87E007C7E007CFE | |
| 63 | +007EFE007EFE007EFE007FFE007FFE007FFE007F7E00FF7E00FF3E01FF1F017F0FFE7F03FC7F00 | |
| 64 | +007F00007E00007E1E007E3F00FC3F00FC3F00F83F01F01E03E01C0FC00FFF0003F80018207E9F | |
| 65 | +1D>57 D E /Fb 1 16 df<03F0000FFC001FFE003FFF007FFF807FFF80FFFFC0FFFFC0FFFFC0FF | |
| 66 | +FFC0FFFFC0FFFFC0FFFFC0FFFFC07FFF807FFF803FFF001FFE000FFC0003F00012147D9519>15 | |
| 67 | +D E /Fc 21 115 df<00030003000700060006000E000C001C0018001800380030003000700060 | |
| 68 | +00E000C000C001C001800180038003000300070006000E000C000C001C00180018003800300070 | |
| 69 | +0060006000E000C000C00010287E9D15>47 D<07E00FF01FF83C3C781E700E700EE007E007E007 | |
| 70 | +E007E007E007E007E007E007E007E007E007700E700E781E3C3C1FF80FF007E0101A7E9915>I< | |
| 71 | +008003803F80FF80C3800380038003800380038003800380038003800380038003800380038003 | |
| 72 | +8003800380038003807FFC7FFC0E1A7D9915>I<0FE01FF0387C701EE00EE00F400F4007000700 | |
| 73 | +0F000F000E001E001C0038007000E001C0038007000E001C0038007000FFFFFFFF101A7E9915> | |
| 74 | +I<07E03FF8783CE01E601E400E001E001E003C007C07F807E007F8003C001E001E000F000F000F | |
| 75 | +800F800FC01E601E383C1FF807E0101A7E9915>I<00780000F80000B80001B80001B800033800 | |
| 76 | +0338000738000638000E38001E38001C38003C3800383800783800703800F03800FFFFC0FFFFC0 | |
| 77 | +003800003800003800003800003800003800003800121A7F9915>I<7FFC7FFC70007000700070 | |
| 78 | +00700070007000700073E07FF87FFC7C3E781E000F000F000F000F000F400FC01E601C38781FF0 | |
| 79 | +0FC0101A7E9915>I<00F803FC0F041C0018003800700070007000E1F0E7F8EFFCFC1EF00EF00F | |
| 80 | +E007E007E007600770077007300E380C1C3C0FF003E0101A7E9915>I<FFFFFFFF0007000E001C | |
| 81 | +003C00380078007000F000E001E001C003C003C0038007800780078007800F000F000F000F000F | |
| 82 | +000F00101A7E9915>I<07E01FF8381C700EE007E007E007E007700E781E3FFC0FF00FF03E7C78 | |
| 83 | +1E700EE007E007E007E007E007700E700E3C3C1FF807E0101A7E9915>I<07E00FF01C38381C70 | |
| 84 | +0CE00EE00EE007E007E007E007F00F700F783F3FF71FE70F870006000E000E001C001C203870F0 | |
| 85 | +3FE00F80101A7E9915>I<001C0000003E0000003E0000002E0000006700000067000000E78000 | |
| 86 | +00C7800000C3800001C3C0000183C0000381E0000381E0000301E0000700F0000700F0000600F0 | |
| 87 | +000E0078000FFFF8001FFFFC001C003C0018003C0038001E0038001E0030001E0070000F007000 | |
| 88 | +0F00E0000780191C7F9B1C>65 D<003FC001FFF003C0F00700300E00001E00003C000038000078 | |
| 89 | +0000780000F00000F00000F00000F00000F00000F00000F00000F000007800007800003800003C | |
| 90 | +00001E00000E000807001803C07801FFF0003F80151C7D9B1B>67 D<FFFC00FFFF80F007C0F001 | |
| 91 | +F0F000F8F00078F0003CF0001CF0001EF0001EF0000FF0000FF0000FF0000FF0000FF0000FF000 | |
| 92 | +0FF0000FF0000EF0001EF0001EF0003CF00078F00078F001F0F007E0FFFF80FFFE00181C7C9B1F | |
| 93 | +>I<003F8001FFF003C0F80700380E00181C00003C0000380000780000780000F00000F00000F0 | |
| 94 | +0000F00000F00000F007F8F007F8F000387800387800383800383C00381C00380E003807003803 | |
| 95 | +C0F801FFF0003F80151C7D9B1C>71 D<F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 | |
| 96 | +F0F0F0F0F0041C7C9B0C>73 D<FFFFFFFFFFFF003C00003C00003C00003C00003C00003C00003C | |
| 97 | +00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C | |
| 98 | +00003C00003C00003C00003C00003C00003C00181C7E9B1D>84 D<0FC03FF07FF87038401C001C | |
| 99 | +001C001C07FC3FFC7C1CE01CE01CE01CF07C7FFC7FDC3F1C0E127E9114>97 | |
| 100 | +D<07C01FF03FF83C3C700C700EFFFEFFFEFFFEE000E000E000700070003C061FFE0FFE07F80F12 | |
| 101 | +7E9113>101 D<00FC03FC07FC07000E000E000E000E000E000E00FFE0FFE00E000E000E000E00 | |
| 102 | +0E000E000E000E000E000E000E000E000E000E000E000E000E1C809B0D>I<E380E780EF80FC00 | |
| 103 | +F800F000F000E000E000E000E000E000E000E000E000E000E000E00009127D910E>114 | |
| 104 | +D E /Fd 24 122 df<00001FE0000070380000E01C0001C03C0001803C00038038000380000007 | |
| 105 | +000000070000000700000007000000070000000E0000000E000000FFFFE000FFFFE0000E00E000 | |
| 106 | +1E01C0001C01C0001C01C0001C01C0001C0380001C038000380380003803800038070000380700 | |
| 107 | +003807080070070C00700E1800700E1800700E180070063000E0062000E003C000E0000000E000 | |
| 108 | +0001C0000001C0000001C0000071800000F3800000F3000000620000003C0000001E2D82A21C> | |
| 109 | +12 D<0000FC060007FF0C001F839C003E00DC0078007C00F0007801E0007803C0007807800038 | |
| 110 | +0F8000301F0000301E0000303E0000303E0000607C0000007C0000007C000000F8000000F80000 | |
| 111 | +00F8000000F8000000F8000000F0000000F0000180F0000180F0000300F0000300F0000600F800 | |
| 112 | +060078000C00780018003C0030001E0060000F81C00007FF000001FC00001F2478A224>67 | |
| 113 | +D<00F180038B80070F800E07001E07001C07003C0700380E00780E00780E00780E00F01C00F01C | |
| 114 | +00F01C20F01C30F03860F0386070786070D8C03198801E0F0014157B9419>97 | |
| 115 | +D<03C03F803F800380038007000700070007000E000E000E000E001C001CF81D8C1E0E3C063C07 | |
| 116 | +3807380F700F700F700F700FE01EE01EE01EE03CE038E038607060E031C01F0010237BA217>I< | |
| 117 | +007C01C2030307070E0F1C0F3C003800780078007800F000F000F000F000F00170037006301C18 | |
| 118 | +380FC010157B9417>I<0000780007F00007F00000700000700000E00000E00000E00000E00001 | |
| 119 | +C00001C00001C00001C000038000F380038B80070F800E07001E07001C07003C0700380E00780E | |
| 120 | +00780E00780E00F01C00F01C00F01C20F01C30F03860F0386070786070D8C03198801E0F001523 | |
| 121 | +7BA219>I<00F803840E061C063C063806780CF038FFE0F000F000E000E000E000E000E002E006 | |
| 122 | +600C703830700F800F157A9417>I<00007C0000CE00019E00039E00038C000300000700000700 | |
| 123 | +000700000700000E00000E00000E00000E0001FFF001FFF0001C00001C00001C00001C00001C00 | |
| 124 | +00380000380000380000380000380000700000700000700000700000700000E00000E00000E000 | |
| 125 | +00E00001C00001C00001C00001C000038000738000F30000F300006600003C0000172D82A20F> | |
| 126 | +I<001F180031B800E0F801C0F001C0700380700780700700E00F00E00F00E00F00E01E01C01E01 | |
| 127 | +C01E01C01E01C01E03800E03800E0780060F80061F0001E700000700000700000E00000E00000E | |
| 128 | +00701C00F01800F0300060E0003F8000151F7E9417>I<00F0000FE0000FE00000E00000E00001 | |
| 129 | +C00001C00001C00001C000038000038000038000038000070000071E0007638007C1800F81C00F | |
| 130 | +01C00E01C00E01C01C03801C03801C03801C0380380700380700380E08380E0C700E18701C1870 | |
| 131 | +1C30700C20E00C6060078016237DA219>I<00E000E001E000C000000000000000000000000000 | |
| 132 | +00000000001E00330063806380C380C700C70007000E000E000E001C001C001C40386038C070C0 | |
| 133 | +7080318031001E000C227CA10F>I<0001C00003C00003C0000180000000000000000000000000 | |
| 134 | +000000000000000000000000000000003C00004600008700018700030700030700030700000E00 | |
| 135 | +000E00000E00000E00001C00001C00001C00001C00003800003800003800003800007000007000 | |
| 136 | +00700000700000E00000E00000E00071C000F18000F380006600003C0000122C82A10F>I<00F0 | |
| 137 | +000FE0000FE00000E00000E00001C00001C00001C00001C0000380000380000380000380000700 | |
| 138 | +000701E00706300708700E10F00E20F00E20600E40001D80001E00001FC0001CE0003870003830 | |
| 139 | +003838203838307070607070607070407030C0E01880600F0014237DA217>I<01E01FC01FC001 | |
| 140 | +C001C0038003800380038007000700070007000E000E000E000E001C001C001C001C0038003800 | |
| 141 | +380038007000700071007180E300E300E300620066003C000B237CA20D>I<1E07C07C00331861 | |
| 142 | +860063B033030063E03E0380C3C03C0380C3C03C0380C380380380078078070007007007000700 | |
| 143 | +70070007007007000E00E00E000E00E00E000E00E01C100E00E01C181C01C01C301C01C038301C | |
| 144 | +01C038601C01C0184038038018C01801800F0026157C9429>I<1E0780003318E00063B0600063 | |
| 145 | +E07000C3C07000C3807000C38070000700E0000700E0000700E0000700E0000E01C0000E01C000 | |
| 146 | +0E0382000E0383001C0386001C0706001C070C001C030800380318001801E00019157C941C>I< | |
| 147 | +007C0001C6000303000603800E03C01C03C03C03C03803C07803C07803C07803C0F00780F00780 | |
| 148 | +F00780F00F00F00E00701E00701C003038001860000F800012157B9419>I<03C1E00666300C7C | |
| 149 | +380C781818781C18701C18701C00E03C00E03C00E03C00E03C01C07801C07801C07801C0700380 | |
| 150 | +E003C0E003C1C003C380076700073C000700000700000E00000E00000E00000E00001C00001C00 | |
| 151 | +00FFC000FFC000161F7F9419>I<1E1F0033318063E1C063C3C0C3C3C0C38180C3800007000007 | |
| 152 | +00000700000700000E00000E00000E00000E00001C00001C00001C00001C000038000018000013 | |
| 153 | +157C9415>114 D<007801840306020E061E061E0608070007F007F803FC007C001E000E700EF0 | |
| 154 | +0CF00CE008601030601F800F157D9414>I<006000E000E000E000E001C001C001C001C00380FF | |
| 155 | +F8FFF8038007000700070007000E000E000E000E001C001C001C101C18383038303860186018C0 | |
| 156 | +0F000D1F7C9E11>I<0F003011807021C07061C0E0C1C0E0C380E0C380E00381C00701C00701C0 | |
| 157 | +0701C00E03800E03800E03840E03860E070C0C070C0E070C0E0B1806131003E1E018157C941B> | |
| 158 | +I<0F01C01183C021C3E061C1E0C1C0E0C380E0C380E00380C00700C00700C00700C00E01800E01 | |
| 159 | +800E01800E03000E03000E02000E04000E0C0006180001E00014157C9417>I<0F003011807021 | |
| 160 | +C07061C0E0C1C0E0C380E0C380E00381C00701C00701C00701C00E03800E03800E03800E03800E | |
| 161 | +07000C07000E07000E0F00061E0003EE00000E00000E00001C00301C0078380078300070600060 | |
| 162 | +C0002180001E0000151F7C9418>121 D E /Fe 33 122 df<00003C007E3C00FE3C01FE3C03C0 | |
| 163 | +00038000078000078000078000078000078000078000078000078000FFFE3CFFFE3CFFFE3C0780 | |
| 164 | +3C07803C07803C07803C07803C07803C07803C07803C07803C07803C07803C07803C07803C0780 | |
| 165 | +3C07803C07803C07803C07803C07803C162480A31B>12 D<787878781830306060E0050A7CA20E | |
| 166 | +>39 D<000F0000001F8000001F8000001B8000003BC0000039C0000079E0000071E0000070E000 | |
| 167 | +00F0F00000F0F00000E0F00001E0780001E0780001C0780003C03C0003C03C0003803C0007801E | |
| 168 | +0007801E0007001E000F000F000FFFFF001FFFFF801FFFFF801E0007803C0003C03C0003C03800 | |
| 169 | +03C0780001E0780001E0700001E0F00000F0F00000F0E00000F01D237EA221>65 | |
| 170 | +D<FFFF0000FFFFC000FFFFF000F001F800F0007C00F0003E00F0001F00F0000F00F0000780F000 | |
| 171 | +0780F00003C0F00003C0F00003C0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F0 | |
| 172 | +0001E0F00001E0F00001E0F00001C0F00003C0F00003C0F00007C0F0000780F0000F80F0001F00 | |
| 173 | +F0003E00F0007C00F001F800FFFFF000FFFFE000FFFF00001B237BA224>68 | |
| 174 | +D<FFFFF8FFFFF8FFFFF8F00000F00000F00000F00000F00000F00000F00000F00000F00000F000 | |
| 175 | +00F00000F00000FFFFF0FFFFF0FFFFF0F00000F00000F00000F00000F00000F00000F00000F000 | |
| 176 | +00F00000F00000F00000F00000F00000F00000FFFFFCFFFFFCFFFFFC16237BA21E>I<F0F0F0F0 | |
| 177 | +F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F004237BA20E>73 | |
| 178 | +D<F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F000 | |
| 179 | +00F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F000 | |
| 180 | +00F00000F00000F00000F00000F00000F00000FFFFE0FFFFE0FFFFE013237BA21B>76 | |
| 181 | +D<FFFE00FFFFC0FFFFE0F003F0F00078F0003CF0003CF0001EF0001EF0001EF0001EF0001EF000 | |
| 182 | +1EF0003CF0003CF00078F003F0FFFFE0FFFFC0FFFE00F00000F00000F00000F00000F00000F000 | |
| 183 | +00F00000F00000F00000F00000F00000F00000F00000F00000F0000017237BA220>80 | |
| 184 | +D<00FF0003FFE007FFF00F81F01E00703C00003C00007800007800007800007800007800007C00 | |
| 185 | +003E00003F00001FE0000FFC0007FF8001FFC0003FE00003F00000F800007800007C00003C0000 | |
| 186 | +3C00003C00003C00003C00003CC00078E00078F800F07F03E01FFFC00FFF8001FE0016257EA31C | |
| 187 | +>83 D<FFFFFFF8FFFFFFF8FFFFFFF8000780000007800000078000000780000007800000078000 | |
| 188 | +000780000007800000078000000780000007800000078000000780000007800000078000000780 | |
| 189 | +000007800000078000000780000007800000078000000780000007800000078000000780000007 | |
| 190 | +80000007800000078000000780000007800000078000000780001D237EA222>I<03F0001FFC00 | |
| 191 | +3FFE00381F00200F00000780000780000780000780000F8003FF801FFF803F0780780780F00780 | |
| 192 | +F00780F00780F007807C1F807FFF803FF7801F878011167E9518>97 D<F00000F00000F00000F0 | |
| 193 | +0000F00000F00000F00000F00000F00000F00000F00000F00000F00000F0F800F3FE00FFFF00FE | |
| 194 | +1F80F80780F003C0F003C0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F003E0F003C0F0 | |
| 195 | +07C0F80780FC1F00FFFE00F7FC00F1F00013237CA21A>I<01FC0007FF000FFF801F03803C0180 | |
| 196 | +780000780000780000F00000F00000F00000F00000F00000F000007800007800007800003C0040 | |
| 197 | +1F03C00FFFC007FF8001FC0012167E9516>I<0001E00001E00001E00001E00001E00001E00001 | |
| 198 | +E00001E00001E00001E00001E00001E00001E003F1E007FDE00FFFE01F07E03C03E07C01E07801 | |
| 199 | +E0F801E0F001E0F001E0F001E0F001E0F001E0F001E0F001E07801E07803E03C03E03F0FE01FFD | |
| 200 | +E00FF9E003E1E013237EA21A>I<03F00007FC001FFE003E0F003C0780780380780380F001C0FF | |
| 201 | +FFC0FFFFC0FFFFC0F00000F00000F000007000007800007800003C00801F07800FFF8007FF0001 | |
| 202 | +F80012167E9516>I<003F00FF01FF03C0038007800780078007800780078007800780FFF8FFF8 | |
| 203 | +FFF807800780078007800780078007800780078007800780078007800780078007800780078007 | |
| 204 | +80102380A20F>I<01F07C07FFFC0FFFFC1F1F001E0F003C07803C07803C07803C07803C07801E | |
| 205 | +0F001F1F000FFE001FFC0019F0003800003800003C00001FFF001FFFE01FFFF03FFFF87C01F878 | |
| 206 | +007CF0003CF0003CF0003CF8007C7C00F83F03F01FFFE00FFFC001FE0016217F9519>I<F00000 | |
| 207 | +F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F0F800 | |
| 208 | +F3FE00F7FF00FE1F00FC0F80F80780F80780F00780F00780F00780F00780F00780F00780F00780 | |
| 209 | +F00780F00780F00780F00780F00780F00780F00780F0078011237CA21A>I<F0F0F0F000000000 | |
| 210 | +0000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F004237DA20B>I<F00000F000 | |
| 211 | +00F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00780F00F | |
| 212 | +00F01E00F03C00F07800F0F000F1E000F3C000F7C000FFC000FFE000FFE000FDF000F8F800F078 | |
| 213 | +00F07C00F03E00F01E00F01F00F00F00F00F80F007C012237CA218>107 | |
| 214 | +D<F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F004237D | |
| 215 | +A20B>I<F0FC03F0F3FF0FFCF7FF9FFEFE0FB83EFC07F01FF803E00FF803E00FF003C00FF003C0 | |
| 216 | +0FF003C00FF003C00FF003C00FF003C00FF003C00FF003C00FF003C00FF003C00FF003C00FF003 | |
| 217 | +C00FF003C00FF003C00FF003C00F20167C9529>I<F0F800F3FE00F7FF00FE1F00FC0F80F80780 | |
| 218 | +F80780F00780F00780F00780F00780F00780F00780F00780F00780F00780F00780F00780F00780 | |
| 219 | +F00780F00780F0078011167C951A>I<00FC0007FF800FFFC01F03E03E01F03C00F07800787000 | |
| 220 | +38F0003CF0003CF0003CF0003CF0003CF0003C7800787800787C00F83E01F01F03E00FFFC007FF | |
| 221 | +8000FC0016167F9519>I<F0F800F3FE00FFFF00FE1F80F80780F007C0F003C0F003E0F001E0F0 | |
| 222 | +01E0F001E0F001E0F001E0F001E0F003E0F003C0F007C0F80F80FC1F00FFFE00F7FC00F1F000F0 | |
| 223 | +0000F00000F00000F00000F00000F00000F00000F00000F00000F0000013207C951A>I<F0E0F3 | |
| 224 | +E0F7E0FF00FE00FC00F800F800F000F000F000F000F000F000F000F000F000F000F000F000F000 | |
| 225 | +F0000B167C9511>114 D<07F01FFC3FFE3C0E7806780078007C003F003FF01FF80FFC01FE001F | |
| 226 | +000F000F000FC00FF81EFFFE3FFC0FF010167F9513>I<0F000F000F000F000F000F00FFF8FFF8 | |
| 227 | +FFF80F000F000F000F000F000F000F000F000F000F000F000F000F000F000F080F1C07FC07F803 | |
| 228 | +E00E1C7F9B12>I<F00780F00780F00780F00780F00780F00780F00780F00780F00780F00780F0 | |
| 229 | +0780F00780F00780F00780F00780F00780F00780F00F80F83F807FFF807FE7801F878011167C95 | |
| 230 | +1A>I<F000F0F000F07801E07801E07801E03C03C03C03C03C03C01E07801E07800E07000F0F00 | |
| 231 | +0F0F00070E00079E00079E00039C00039C0003DC0001D80001F80001F80014167F9517>I<F007 | |
| 232 | +C01EF00FC01EF00EE01E780EE03C781CE03C781CF03C381CF0383C1C70783C3870783C3878781C | |
| 233 | +3878701E3838F01E3038F01E7038F00E703CE00E701CE00F601DE007601DC007600DC007400DC0 | |
| 234 | +07C00FC003C00F801F167F9522>I<7800F83C00F03E01E01E03C00F07C007878003CF0001FE00 | |
| 235 | +01FC0000FC0000780000F80000FC0001DE0003CF000787800F03800F03C01E01E03C00F07800F8 | |
| 236 | +F8007C1616809517>I<F000F0F800F07801E07801E03C01E03C03C03E03C01E03801E07800F07 | |
| 237 | +800F0700070F00078F00078E00038E00039C0001DC0001DC0001D80000D80000F8000070000070 | |
| 238 | +0000E00000E00000E00001C00001C0000380007F80007F00007E000014207F9517>I | |
| 239 | +E /Ff 81 127 df<001FC1F00070270C00C07E1E0180FC3E0380FC3E0700F81C07007800070038 | |
| 240 | +00070038000700380007003800070038000700380007003800FFFFFFE0FFFFFFE0070038000700 | |
| 241 | +380007003800070038000700380007003800070038000700380007003800070038000700380007 | |
| 242 | +00380007003800070038000700380007003800070038007FE1FFC07FE1FFC01F2380A21D>11 | |
| 243 | +D<000FC0000078300000E0080001803C0003807C0007007C0007007C0007003800070000000700 | |
| 244 | +000007000000070000000700000007000000FFFFFC00FFFFFC0007003C0007001C0007001C0007 | |
| 245 | +001C0007001C0007001C0007001C0007001C0007001C0007001C0007001C0007001C0007001C00 | |
| 246 | +07001C0007001C0007001C0007001C007FF1FFC07FF1FFC01A2380A21C>I<000FEC0000701C00 | |
| 247 | +00E07C0001807C0003807C0007003C0007001C0007001C0007001C0007001C0007001C0007001C | |
| 248 | +0007001C0007001C00FFFFFC00FFFFFC0007001C0007001C0007001C0007001C0007001C000700 | |
| 249 | +1C0007001C0007001C0007001C0007001C0007001C0007001C0007001C0007001C0007001C0007 | |
| 250 | +001C0007001C007FF1FFC07FF1FFC01A2380A21C>I<000FC03F00007031E0C000E00B80200180 | |
| 251 | +3E00F003807E01F007007C01F007007C01F007003C00E007001C000007001C000007001C000007 | |
| 252 | +001C000007001C000007001C0000FFFFFFFFF0FFFFFFFFF007001C00F007001C007007001C0070 | |
| 253 | +07001C007007001C007007001C007007001C007007001C007007001C007007001C007007001C00 | |
| 254 | +7007001C007007001C007007001C007007001C007007001C007007001C00707FF1FFC7FF7FF1FF | |
| 255 | +C7FF282380A22A>I<07070F0E1C383060C0080976A219>19 D<0E000F8001C000E0007000E000 | |
| 256 | +E07FC080000C097A7E16>24 D<701CF83EFC3FFC3F741D04010401040104010802080210041004 | |
| 257 | +20084010100F7EA219>34 D<0000C00C000000C00C000000C00C000001C01C0000018018000001 | |
| 258 | +801800000180180000038038000003003000000300300000030030000007007000000600600000 | |
| 259 | +060060000006006000000E00E000000C00C000FFFFFFFFE0FFFFFFFFE000180180000018018000 | |
| 260 | +001801800000380380000030030000003003000000300300000030030000FFFFFFFFE0FFFFFFFF | |
| 261 | +E0006006000000E00E000000C00C000000C00C000000C00C000001C01C00000180180000018018 | |
| 262 | +000001801800000380380000030030000003003000000300300000070070000006006000000600 | |
| 263 | +600000232D7DA22A>I<70F8FCFC7404040404080810102040060F7CA20E>39 | |
| 264 | +D<001000200040008001000300060004000C001800180018003000300030007000600060006000 | |
| 265 | +E000E000E000E000E000E000E000E000E000E000E000E000600060006000700030003000300018 | |
| 266 | +00180018000C00040006000300010000800040002000100C327DA413>I<800040002000100008 | |
| 267 | +000C0006000200030001800180018000C000C000C000E000600060006000700070007000700070 | |
| 268 | +007000700070007000700070007000600060006000E000C000C000C00180018001800300020006 | |
| 269 | +000C00080010002000400080000C327DA413>I<70F8FCFC7404040404080810102040060F7C84 | |
| 270 | +0E>44 D<FFF0FFF00C027F8B11>I<70F8F8F87005057C840E>I<01F800070E000E07001C038038 | |
| 271 | +01C03801C07801E07000E07000E07000E0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F0 | |
| 272 | +00F0F000F0F000F0F000F0F000F0F000F0F000F07000E07000E07000E07801E03801C03801C01C | |
| 273 | +03800E0700070E0001F80014227EA019>48 D<004001C007C0FFC0F9C001C001C001C001C001C0 | |
| 274 | +01C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001 | |
| 275 | +C001C07FFF7FFF10217CA019>I<03F8000FFE00181F802007C04003C04001E0F801E0FC01F0FC | |
| 276 | +00F0FC00F07800F03001F00001E00001E00003E00003C0000780000700000E00001C0000380000 | |
| 277 | +700000E0000080000100000200100400100800101000302000207FFFE0FFFFE0FFFFE014217EA0 | |
| 278 | +19>I<01F8000FFE001C0F803003C03803C07C03E07C01E07C01E03C03E01803E00003C0000380 | |
| 279 | +000780000E00001C0003F800000E000007800003C00003E00001E00001F00001F03001F07801F0 | |
| 280 | +FC01F0FC01F0FC01E0F803E04003C02007801C0F000FFE0003F80014227EA019>I<0003000003 | |
| 281 | +00000700000F00000F0000170000370000270000470000C7000087000107000307000207000407 | |
| 282 | +000C0700080700100700300700200700400700C00700FFFFFCFFFFFC0007000007000007000007 | |
| 283 | +0000070000070000070000FFF800FFF816217FA019>I<1800401E03801FFF801FFF001FFC0013 | |
| 284 | +F00010000010000010000010000010000010000010FC001306001403801801801001C00000E000 | |
| 285 | +00E00000F00000F00000F07000F0F800F0F800F0F800F0F800E0C001E04001C06003C03003801C | |
| 286 | +0F000FFE0003F00014227EA019>I<003E0000FF8003C0C00700E00E01E01C03E01C03E03801C0 | |
| 287 | +380000780000700000700000F0F800F30600F40300F40180F801C0F800E0F000E0F000F0F000F0 | |
| 288 | +F000F0F000F0F000F07000F07000F07800E03800E03801E01C01C01C03800F070003FE0001F800 | |
| 289 | +14227EA019>I<4000006000007FFFF07FFFF07FFFE0400020C000408000808001008001000002 | |
| 290 | +0000040000040000080000180000100000300000300000700000700000E00000E00000E00001E0 | |
| 291 | +0001E00001E00001E00003E00003E00003E00003E00003E00003E00003E00001C00014237DA119 | |
| 292 | +>I<01F80007FE000E07801801C03000C02000606000606000606000607000607800C03E00801F | |
| 293 | +81001FC60007FC0003F80001FE00067F000C1F80100FC03003E06001E0600070C00070C00030C0 | |
| 294 | +0030C00030C000306000607000403800C01E07800FFE0001F80014227EA019>I<01F80007FE00 | |
| 295 | +0E0F001C03803803807801C07001C07001E0F000E0F000E0F000F0F000F0F000F0F000F0F000F0 | |
| 296 | +7000F07001F03801F01802F00C02F0060CF001F0F00000E00000E00001E00001C03801C07C0380 | |
| 297 | +7C0380780700300E00303C001FF80007E00014227EA019>I<70F8F8F870000000000000000000 | |
| 298 | +000070F8F8F87005157C940E>I<70F8F8F870000000000000000000000070F8F8F87808080808 | |
| 299 | +101010204040051F7C940E>I<0001800000018000000180000003C0000003C0000003C0000005 | |
| 300 | +E0000005E0000005E0000008F0000008F0000008F00000107800001078000010780000203C0000 | |
| 301 | +203C0000603E0000401E0000401E0000C01F0000800F0000FFFF0001FFFF800100078001000780 | |
| 302 | +020003C0020003C0020003C0040001E0040001E00C0001E01E0001F0FFC01FFFFFC01FFF20237E | |
| 303 | +A225>65 D<FFFFF800FFFFFE0007800F80078007C0078003E0078001E0078001F0078001F00780 | |
| 304 | +01F0078001F0078001F0078001E0078003E0078007C007800F8007803E0007FFFE000780078007 | |
| 305 | +8003C0078001E0078001F0078000F0078000F8078000F8078000F8078000F8078000F8078000F8 | |
| 306 | +078001F0078003F0078007E007800FC0FFFFFF00FFFFFC001D227EA123>I<0007F008003FFC18 | |
| 307 | +00FC061801F0013803C000F8078000780F0000381E0000381E0000183C0000183C0000187C0000 | |
| 308 | +087C00000878000008F8000000F8000000F8000000F8000000F8000000F8000000F8000000F800 | |
| 309 | +0000780000007C0000087C0000083C0000083C0000081E0000101E0000100F0000200780002003 | |
| 310 | +C0004001F0018000FC0700003FFC000007F0001D247DA224>I<FFFFF800FFFFFE0007800F8007 | |
| 311 | +8003C0078001E0078000F007800078078000780780003C0780003C0780001E0780001E0780001E | |
| 312 | +0780001F0780001F0780001F0780001F0780001F0780001F0780001F0780001F0780001F078000 | |
| 313 | +1E0780001E0780003E0780003C0780003C07800078078000F0078001E0078003C007800F80FFFF | |
| 314 | +FF00FFFFF80020227EA126>I<FFFFFFE0FFFFFFE0078003E0078000E007800060078000200780 | |
| 315 | +0030078000300780001007802010078020100780201007802000078060000780E00007FFE00007 | |
| 316 | +FFE0000780E0000780600007802000078020000780200407802004078000040780000807800008 | |
| 317 | +0780000807800018078000180780003807800078078001F0FFFFFFF0FFFFFFF01E227EA122>I< | |
| 318 | +FFFFFFE0FFFFFFE0078003E0078000E00780006007800020078000300780003007800010078000 | |
| 319 | +1007802010078020100780200007802000078060000780E00007FFE00007FFE0000780E0000780 | |
| 320 | +600007802000078020000780200007802000078000000780000007800000078000000780000007 | |
| 321 | +8000000780000007800000FFFE0000FFFE00001C227EA121>I<0007F008003FFC1800FC061801 | |
| 322 | +F0013803C000F8078000780F0000381E0000381E0000183C0000183C0000187C0000087C000008 | |
| 323 | +78000008F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8001FFF78001F | |
| 324 | +FF7C0000787C0000783C0000783C0000781E0000781F0000780F0000780780007803C000B801F0 | |
| 325 | +01B800FC0718003FFC080007F00020247DA227>I<FFFC3FFFFFFC3FFF078001E0078001E00780 | |
| 326 | +01E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E007 | |
| 327 | +8001E007FFFFE007FFFFE0078001E0078001E0078001E0078001E0078001E0078001E0078001E0 | |
| 328 | +078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0FFFC3FFFFFFC3F | |
| 329 | +FF20227EA125>I<FFFCFFFC078007800780078007800780078007800780078007800780078007 | |
| 330 | +800780078007800780078007800780078007800780078007800780078007800780FFFCFFFC0E22 | |
| 331 | +7EA112>I<07FFF007FFF0000F00000F00000F00000F00000F00000F00000F00000F00000F0000 | |
| 332 | +0F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F0000 | |
| 333 | +0F00300F00780F00FC0F00FC0F00FC0E00F81E00401C0020380018700007C00014237EA11A>I< | |
| 334 | +FFFC01FF80FFFC01FF800780007800078000600007800040000780008000078001000007800200 | |
| 335 | +00078004000007800800000780100000078020000007804000000780C000000781C000000783E0 | |
| 336 | +00000784F000000788F00000079078000007A03C000007C03C000007801E000007800F00000780 | |
| 337 | +0F00000780078000078003C000078003C000078001E000078000F000078000F000078000780007 | |
| 338 | +8000FC00FFFC03FFC0FFFC03FFC022227EA127>I<FFFE0000FFFE000007800000078000000780 | |
| 339 | +000007800000078000000780000007800000078000000780000007800000078000000780000007 | |
| 340 | +800000078000000780000007800000078000000780000007800000078000400780004007800040 | |
| 341 | +07800040078000C0078000C00780008007800180078003800780078007801F80FFFFFF80FFFFFF | |
| 342 | +801A227EA11F>I<FF800001FF80FF800001FF8007800001F00005C00002F00005C00002F00004 | |
| 343 | +E00004F00004E00004F00004E00004F00004700008F00004700008F00004380010F00004380010 | |
| 344 | +F00004380010F000041C0020F000041C0020F000041C0020F000040E0040F000040E0040F00004 | |
| 345 | +070080F00004070080F00004070080F00004038100F00004038100F00004038100F0000401C200 | |
| 346 | +F0000401C200F0000400E400F0000400E400F0000400E400F00004007800F00004007800F0001F | |
| 347 | +003000F000FFE0301FFF80FFE0301FFF8029227EA12E>I<FF8007FFFFC007FF07C000F805E000 | |
| 348 | +2004F0002004F0002004780020047C0020043C0020041E0020041E0020040F0020040780200407 | |
| 349 | +80200403C0200401E0200401E0200400F0200400F8200400782004003C2004003C2004001E2004 | |
| 350 | +000F2004000F20040007A0040003E0040003E0040001E0040001E0040000E01F000060FFE00060 | |
| 351 | +FFE0002020227EA125>I<000FF00000381C0000E0070001C00380078001E0070000E00E000070 | |
| 352 | +1E0000783C00003C3C00003C7C00003E7C00003E7800001E7800001EF800001FF800001FF80000 | |
| 353 | +1FF800001FF800001FF800001FF800001FF800001FF800001F7C00003E7C00003E7C00003E3C00 | |
| 354 | +003C3E00007C1E0000780F0000F00F0000F0078001E003C003C000E0070000381C00000FF00020 | |
| 355 | +247DA227>I<FFFFF800FFFFFE0007801F00078007C0078003C0078001E0078001E0078001F007 | |
| 356 | +8001F0078001F0078001F0078001F0078001E0078003E0078003C00780078007801F0007FFFC00 | |
| 357 | +078000000780000007800000078000000780000007800000078000000780000007800000078000 | |
| 358 | +0007800000078000000780000007800000FFFC0000FFFC00001C227EA122>I<FFFFE00000FFFF | |
| 359 | +FC000007801F00000780078000078003C000078003E000078001E000078001F000078001F00007 | |
| 360 | +8001F000078001F000078001E000078003E000078003C000078007000007803E000007FFF00000 | |
| 361 | +078038000007801C000007800E000007800F000007800700000780078000078007800007800780 | |
| 362 | +000780078000078007C000078007C000078007C000078007C040078007E040078003E040FFFC01 | |
| 363 | +E080FFFC00F1000000003E0022237EA125>82 D<03F8100FFE301E07303801F07000F0700070E0 | |
| 364 | +0030E00030E00010E00010E00010F00000F000007C00007F00003FF0001FFE000FFF8003FFC000 | |
| 365 | +3FE00003F00000F0000070000078000038800038800038800038800038C00030C00070E00060F8 | |
| 366 | +00E0CF03C0C7FF0080FE0015247DA21C>I<7FFFFFFC7FFFFFFC7803C03C6003C00C4003C00440 | |
| 367 | +03C004C003C006C003C0068003C0028003C0028003C0028003C0020003C0000003C0000003C000 | |
| 368 | +0003C0000003C0000003C0000003C0000003C0000003C0000003C0000003C0000003C0000003C0 | |
| 369 | +000003C0000003C0000003C0000003C0000003C0000003C0000003C00001FFFF8001FFFF801F22 | |
| 370 | +7EA124>I<FFFC07FFFFFC07FF078000F807800020078000200780002007800020078000200780 | |
| 371 | +002007800020078000200780002007800020078000200780002007800020078000200780002007 | |
| 372 | +800020078000200780002007800020078000200780002007800020078000200380004003C00040 | |
| 373 | +03C0004001C0008000E0018000700300003C0E00001FF8000003F00020237EA125>I<FFF800FF | |
| 374 | +C0FFF800FFC00F80001E000780000800078000080003C000100003C000100003C000100001E000 | |
| 375 | +200001E000200001F000200000F000400000F0004000007800800000780080000078008000003C | |
| 376 | +010000003C010000003C010000001E020000001E020000001F060000000F040000000F04000000 | |
| 377 | +07880000000788000000078800000003D000000003D000000003F000000001E000000001E00000 | |
| 378 | +0000C000000000C000000000C0000022237FA125>I<FFF83FFE03FFFFF83FFE03FF0F8003E000 | |
| 379 | +780F0001E00030078001E00020078001E00020078001F0002003C001F0004003C001F0004003C0 | |
| 380 | +0278004001E00278008001E00278008001E0043C008000F0043C010000F0043C010000F0081E01 | |
| 381 | +0000F8081E03000078081E02000078181F02000078100F0200003C100F0400003C100F0400003C | |
| 382 | +20078400001E20078800001E20078800001E4003C800000F4003D000000F4003D000000F8001F0 | |
| 383 | +0000078001E00000078001E00000070000E00000070000E00000030000C0000002000040003023 | |
| 384 | +7FA133>I<7FFC0FFF007FFC0FFF0003E001F00003E000C00001F000800000F001000000F80200 | |
| 385 | +000078020000003C040000003E080000001E080000000F100000000FB000000007A000000003C0 | |
| 386 | +00000003E000000001E000000001F000000003F80000000278000000047C0000000C3C00000008 | |
| 387 | +1E000000101F000000300F00000020078000004007C00000C003C000008001E000010001F00003 | |
| 388 | +0000F0000F8001F800FFE007FFC0FFE007FFC022227FA125>I<FFF8007FC0FFF8007FC00F8000 | |
| 389 | +1E0007C000180003C000100003E000100001E000200001F000600000F00040000078008000007C | |
| 390 | +008000003C010000003E030000001E020000000F040000000F84000000078800000007D8000000 | |
| 391 | +03D000000003E000000001E000000001E000000001E000000001E000000001E000000001E00000 | |
| 392 | +0001E000000001E000000001E000000001E000000001E000000001E00000003FFF0000003FFF00 | |
| 393 | +0022227FA125>I<FEFEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 | |
| 394 | +C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FEFE07317BA40E>91 D<08021004200820084010401080 | |
| 395 | +20802080208020B82EFC3FFC3F7C1F380E100F7AA219>I<FEFE06060606060606060606060606 | |
| 396 | +0606060606060606060606060606060606060606060606060606060606060606FEFE07317FA40E | |
| 397 | +>I<1FF000381C007C06007C07007C0380380380000380000380007F8007C3801E03803C038078 | |
| 398 | +0380780380F00384F00384F00384F00784780B843C11C80FE0F016157E9419>97 | |
| 399 | +D<0E0000FE0000FE00001E00000E00000E00000E00000E00000E00000E00000E00000E00000E00 | |
| 400 | +000E00000E1F800E60E00E80300F00380E001C0E001E0E000E0E000F0E000F0E000F0E000F0E00 | |
| 401 | +0F0E000F0E000F0E000E0E001E0E001C0F00380C80700C60E0081F8018237FA21C>I<01FE0007 | |
| 402 | +07000C0F801C0F80380F80780700700000F00000F00000F00000F00000F00000F00000F0000070 | |
| 403 | +00007800403800401C00800C010007060001F80012157E9416>I<0000700007F00007F00000F0 | |
| 404 | +00007000007000007000007000007000007000007000007000007000007001F8700706700E0170 | |
| 405 | +1C00F0380070780070700070F00070F00070F00070F00070F00070F00070F00070700070780070 | |
| 406 | +3800701C00F00C017807067F01F87F18237EA21C>I<01FC000707000C03801C01C03801C07800 | |
| 407 | +E07000E0F000E0FFFFE0F00000F00000F00000F00000F000007000007800203800201C00400E00 | |
| 408 | +8007030000FC0013157F9416>I<003E0000E30001C780038F80030F8007070007000007000007 | |
| 409 | +0000070000070000070000070000070000FFF800FFF80007000007000007000007000007000007 | |
| 410 | +00000700000700000700000700000700000700000700000700000700000700000700007FF8007F | |
| 411 | +F800112380A20F>I<00007801F08C071D1C0E0E1C1C07001C07003C07803C07803C07803C0780 | |
| 412 | +1C07001C07000E0E000F1C0019F0001000001000001800001C00001FFF000FFFE00FFFF03800F8 | |
| 413 | +60001840001CC0000CC0000CC0000C6000186000183800700E01C001FE0016217F9519>I<0E00 | |
| 414 | +0000FE000000FE0000001E0000000E0000000E0000000E0000000E0000000E0000000E0000000E | |
| 415 | +0000000E0000000E0000000E0000000E1F80000E60E0000E8070000F0038000F0038000E003800 | |
| 416 | +0E0038000E0038000E0038000E0038000E0038000E0038000E0038000E0038000E0038000E0038 | |
| 417 | +000E0038000E0038000E003800FFE3FF80FFE3FF8019237FA21C>I<1C003E003E003E001C0000 | |
| 418 | +0000000000000000000000000000000E00FE00FE001E000E000E000E000E000E000E000E000E00 | |
| 419 | +0E000E000E000E000E000E000E00FFC0FFC00A227FA10E>I<00E001F001F001F000E000000000 | |
| 420 | +00000000000000000000000000F007F007F000F000700070007000700070007000700070007000 | |
| 421 | +70007000700070007000700070007000700070007000707070F870F8E0F8C071801F000C2C82A1 | |
| 422 | +0F>I<0E0000FE0000FE00001E00000E00000E00000E00000E00000E00000E00000E00000E0000 | |
| 423 | +0E00000E00000E03FC0E03FC0E01E00E01800E02000E04000E08000E10000E38000EF8000F1C00 | |
| 424 | +0E1E000E0E000E07000E07800E03C00E01C00E01E00E01F0FFE3FEFFE3FE17237FA21A>I<0E00 | |
| 425 | +FE00FE001E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E | |
| 426 | +000E000E000E000E000E000E000E000E000E000E000E000E00FFE0FFE00B237FA20E>I<0E1FC0 | |
| 427 | +7F00FE60E18380FE807201C01F003C00E00F003C00E00E003800E00E003800E00E003800E00E00 | |
| 428 | +3800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E | |
| 429 | +003800E00E003800E00E003800E0FFE3FF8FFEFFE3FF8FFE27157F942A>I<0E1F8000FE60E000 | |
| 430 | +FE8070001F0038000F0038000E0038000E0038000E0038000E0038000E0038000E0038000E0038 | |
| 431 | +000E0038000E0038000E0038000E0038000E0038000E0038000E003800FFE3FF80FFE3FF801915 | |
| 432 | +7F941C>I<00FC000703800E01C01C00E0380070780078700038F0003CF0003CF0003CF0003CF0 | |
| 433 | +003CF0003CF0003C7000387800783800701C00E00E01C007038000FC0016157F9419>I<0E1F80 | |
| 434 | +FE60E0FE80700F00380E001C0E001E0E001E0E000F0E000F0E000F0E000F0E000F0E000F0E000F | |
| 435 | +0E001E0E001E0E001C0F00380E80700E60E00E1F800E00000E00000E00000E00000E00000E0000 | |
| 436 | +0E00000E0000FFE000FFE000181F7F941C>I<01F8200704600E02601C01603801E07800E07800 | |
| 437 | +E0F000E0F000E0F000E0F000E0F000E0F000E0F000E07000E07800E03801E01C01E00C02E0070C | |
| 438 | +E001F0E00000E00000E00000E00000E00000E00000E00000E00000E0000FFE000FFE171F7E941A | |
| 439 | +>I<0E1E00FE6300FE87801E87800F03000F00000E00000E00000E00000E00000E00000E00000E | |
| 440 | +00000E00000E00000E00000E00000E00000E0000FFF000FFF00011157F9414>I<0FC4303C600C | |
| 441 | +C00CC004C004E004F0007F803FF00FF800FC001E800E8006C006C006C004E00CD81887E00F157E | |
| 442 | +9414>I<020002000200020002000600060006000E001E003FF8FFF80E000E000E000E000E000E | |
| 443 | +000E000E000E000E000E040E040E040E040E040E040708030801F00E1F7F9E13>I<0E003800FE | |
| 444 | +03F800FE03F8001E0078000E0038000E0038000E0038000E0038000E0038000E0038000E003800 | |
| 445 | +0E0038000E0038000E0038000E0038000E0038000E0078000E0078000700BC0003833F8000FC3F | |
| 446 | +8019157F941C>I<FFC1FEFFC1FE1E00700E00200E002007004007004003808003808003808001 | |
| 447 | +C10001C10000E20000E20000E20000740000740000380000380000380000100017157F941A>I< | |
| 448 | +FF8FF87F80FF8FF87F801E01C01E000E00C00C000E00E008000E01E00800070160100007017010 | |
| 449 | +0007023030000382382000038238200001C418400001C41C400001C41C400000E80C800000E80E | |
| 450 | +800000E80E8000007007000000700700000070070000002002000021157F9424>I<FF83FEFF83 | |
| 451 | +FE0F01E007008003810003830001C20000E400007800007000003800003C00004E00008E000187 | |
| 452 | +000103800201C00601C01E00E0FF03FEFF03FE17157F941A>I<FFC1FEFFC1FE1E00700E00200E | |
| 453 | +002007004007004003808003808003808001C10001C10000E20000E20000E20000740000740000 | |
| 454 | +3800003800003800001000001000002000002000002000F84000F84000F88000B980006300003E | |
| 455 | +0000171F7F941A>I<3FFFC0380380300780200700600E00401C00403C0040380000700000E000 | |
| 456 | +01E00001C0000380400700400F00400E00C01C0080380080780180700780FFFF8012157F9416> | |
| 457 | +I<FFFFFF1801808C19>I<0E011F02318C40F8807010057CA019>126 D E | |
| 458 | +/Fg 25 121 df<F8F8F8F8F805057B8410>46 D<0003F000000003F000000007F800000007F800 | |
| 459 | +000007780000000F3C0000000F3C0000000F3C0000001E3E0000001E1E0000001E1E0000003E1F | |
| 460 | +0000003C1F0000007C0F8000007C0F800000780F800000F807C00000F807C00000F007C00001F0 | |
| 461 | +03E00001F003E00001E003E00003E001F00003E001F00003C001F00007C000F80007FFFFF80007 | |
| 462 | +FFFFF8000FFFFFFC000F80007C000F00007C001F00003E001F00003E001E00003E003E00001F00 | |
| 463 | +3E00001F003C00001F007C00000F807C00000F80F800000FC0F8000007C0F8000007C0222A7EA9 | |
| 464 | +27>65 D<0003FE00000FFFC0003FFFF000FFFFF001FE03F003F8006007E0002007C000000F8000 | |
| 465 | +001F8000001F0000003E0000003E0000007C0000007C0000007C0000007C000000F8000000F800 | |
| 466 | +0000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F80000007C0000007C | |
| 467 | +0000007C0000007C0000003E0000003E0000001F0000001F8000000F80000007C0000007E00008 | |
| 468 | +03F8003801FE01F800FFFFF8003FFFF0000FFFC00003FE001D2C7CAA25>67 | |
| 469 | +D<FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC0F8000000F8000000F8000000F8000000F8000000F800 | |
| 470 | +0000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000FFFFFF00FF | |
| 471 | +FFFF00FFFFFF00FFFFFF00F8000000F8000000F8000000F8000000F8000000F8000000F8000000 | |
| 472 | +F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000FFFFFF | |
| 473 | +E0FFFFFFE0FFFFFFE0FFFFFFE01B2A7BA923>69 D<F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8 | |
| 474 | +F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8052A7BA910>73 | |
| 475 | +D<F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F800 | |
| 476 | +00F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F800 | |
| 477 | +00F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000FFFF | |
| 478 | +FFFFFFFFFFFFFFFFFFFF182A7BA920>76 D<FFFFE000FFFFFC00FFFFFF00F8003F80F8000FC0F8 | |
| 479 | +0003E0F80001F0F80001F0F80000F8F80000F8F80000F8F80000F8F80000F8F80000F8F80001F0 | |
| 480 | +F80001F0F80003E0F8000FE0F8003FC0FFFFFF80FFFFFE00FFFFF800FFFFE000F801F000F801F0 | |
| 481 | +00F800F800F800F800F8007C00F8003C00F8003E00F8001E00F8001F00F8000F80F8000F80F800 | |
| 482 | +07C0F80007C0F80003E0F80001E0F80001F0F80000F8F80000F8F800007C1E2A7BA926>82 | |
| 483 | +D<01FC000FFF003FFF803FFFC03C07E03003E00001F00001F00001F00001F00001F00003F001FF | |
| 484 | +F007FFF01FFFF03FC1F07E01F0FC01F0F801F0F801F0F801F0FC03F07E0FF07FFFF03FFFF01FF9 | |
| 485 | +F00FE1F0141B7E9A1C>97 D<F80000F80000F80000F80000F80000F80000F80000F80000F80000 | |
| 486 | +F80000F80000F80000F80000F80000F80000F87E00F9FF80FFFFC0FFFFE0FF07E0FC03F0F801F8 | |
| 487 | +F800F8F800F8F8007CF8007CF8007CF8007CF8007CF8007CF8007CF8007CF800FCF800F8F800F8 | |
| 488 | +F801F0FC03F0FE0FE0FFFFC0FFFF80FBFF00F8FC00162A7BA91E>I<007F8001FFE007FFF80FFF | |
| 489 | +F81FC0783F00103E00007C00007C00007C0000F80000F80000F80000F80000F80000F80000F800 | |
| 490 | +007C00007C00007C00003E00003F00181FC0780FFFF807FFF801FFE0007F80151B7E9A1A>I<00 | |
| 491 | +007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00 | |
| 492 | +007C00007C00FC7C03FF7C07FFFC0FFFFC1FC1FC3F00FC3E007C7C007C7C007CFC007CF8007CF8 | |
| 493 | +007CF8007CF8007CF8007CF8007CF8007CF8007C7C007C7C007C7E00FC3F00FC1F83FC1FFFFC0F | |
| 494 | +FF7C03FE7C01F87C162A7EA91E>I<00FC0003FF0007FF800FFFC01F87E03F01E03E00F07C00F0 | |
| 495 | +7C0070F80078FFFFF8FFFFF8FFFFF8FFFFF8F80000F80000F800007800007C00007C00003E0000 | |
| 496 | +3F00181FC0F80FFFF807FFF801FFE0007F00151B7E9A1A>I<001FC0007FC000FFC001FFC003F0 | |
| 497 | +0003E00007C00007C00007C00007C00007C00007C00007C00007C00007C000FFFE00FFFE00FFFE | |
| 498 | +0007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C0 | |
| 499 | +0007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C000122A7FA912 | |
| 500 | +>I<00F80F0003FE7F800FFFFF801FFFFF801F07C0003E03E0003E03E0007C01F0007C01F0007C | |
| 501 | +01F0007C01F0007C01F0003E03E0003E03E0001F07C0001FFFC0003FFF80003BFE000038F80000 | |
| 502 | +78000000780000007C0000003FFF80003FFFF0001FFFF8001FFFFC003FFFFE007C00FE007C003F | |
| 503 | +00F8001F00F8001F00F8001F00F8001F00FC003F007E007E003F81FC001FFFF8000FFFF00007FF | |
| 504 | +E00000FF000019287E9A1D>I<F8F8F8F8F800000000000000000000F8F8F8F8F8F8F8F8F8F8F8 | |
| 505 | +F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8052A7CA90E>105 D<F8F8F8F8F8F8F8F8F8F8F8F8F8F8 | |
| 506 | +F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8052A7CA90E>108 | |
| 507 | +D<F83F007E00F9FF83FF00FBFFC7FF80FFFFEFFFC0FF07FE0FC0FE03FC07E0FC01F803E0FC01F8 | |
| 508 | +03E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801 | |
| 509 | +F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F8 | |
| 510 | +01F003E0F801F003E0F801F003E0F801F003E0231B7B9A2E>I<F87E00F9FF00FBFF80FFFFC0FF | |
| 511 | +0FC0FE07E0FC03E0FC03E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F8 | |
| 512 | +03E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0131B7B9A1E>I<007E00 | |
| 513 | +01FF8007FFE00FFFF01F81F83F00FC3E007C7C003E7C003E78001EF8001FF8001FF8001FF8001F | |
| 514 | +F8001FF8001FF8001F7C003E7C003E7C003E3E007C3F00FC1FC3F80FFFF007FFE003FFC0007E00 | |
| 515 | +181B7E9A1D>I<F87E00F9FF80FFFFC0FFFFE0FF0FE0FC03F0F801F8F800F8F800F8F800FCF800 | |
| 516 | +7CF8007CF8007CF8007CF8007CF8007CF8007CF800FCF800F8F801F8F801F0FC03F0FE0FE0FFFF | |
| 517 | +C0FFFF80FBFF00F8FC00F80000F80000F80000F80000F80000F80000F80000F80000F80000F800 | |
| 518 | +00F80000F8000016277B9A1E>I<F838F8F8F9F8FBF8FFC0FF00FE00FE00FC00FC00F800F800F8 | |
| 519 | +00F800F800F800F800F800F800F800F800F800F800F800F800F800F8000D1B7B9A14>114 | |
| 520 | +D<07F8001FFF003FFF807FFF807C0780F80100F80000F80000F80000FC00007F00007FF0003FFC | |
| 521 | +001FFE0007FF0000FF80001FC0000FC00007C00007C04007C0E007C0FC1F80FFFF807FFF001FFE | |
| 522 | +0007F800121B7E9A16>I<07C00007C00007C00007C00007C00007C00007C000FFFF80FFFF80FF | |
| 523 | +FF8007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007 | |
| 524 | +C00007C00007C00007C00007C00007C00007C08007E38003FFC003FFC001FF0000FC0012227FA1 | |
| 525 | +15>I<F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0 | |
| 526 | +F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F807E0F807E0FC1FE0FFFFE07FFBE0 | |
| 527 | +3FF3E01F83E0131B7B9A1E>I<7C001F803E003F003F003E001F807C000F80FC0007C0F80007E1 | |
| 528 | +F00003F3E00001F7E00000FFC000007F8000007F0000003E0000003E0000003F0000007F800000 | |
| 529 | +FFC00001F3E00003E1E00003E1F00007C0F8000F807C001F807C001F003E003E001F007C001F80 | |
| 530 | +FC000FC01A1B809A1B>120 D E /Fh 69 126 df<701CF01EF01EF01EF01EF01EF01EF01EF01E | |
| 531 | +701C701C701C701C600C0F0E7B9D1A>34 D<01818003C3C003C3C003C3C003C3C003C3C003C3C0 | |
| 532 | +7FFFF0FFFFF8FFFFF8FFFFF80787800787800787800F8F800F0F000F0F000F0F000F0F00FFFFF8 | |
| 533 | +FFFFF8FFFFF87FFFF01E1E001E1E001E1E001E1E001E1E001E1E000C0C00151E7E9D1A>I<1C3E | |
| 534 | +3E3F1F070707070E0E1C3C78F0600810789D1A>39 D<0038007800F001E003C007800F000E001C | |
| 535 | +001C0038003800700070007000E000E000E000E000E000E000E000E000E000E000700070007000 | |
| 536 | +380038001C001C000E000F00078003C001E000F8007800380D2878A21A>I<6000F00078003C00 | |
| 537 | +1E000F000780038001C001C000E000E00070007000700038003800380038003800380038003800 | |
| 538 | +38003800700070007000E000E001C001C0038007800F001E003C007800F00060000D287CA21A> | |
| 539 | +I<00E00000E00000E00000E00040E040F0E1E0F8E3E07EEFC01FFF0007FC0003F80007FC001FFF | |
| 540 | +007EEFC0F8E3E0F0E1E040E04000E00000E00000E00000E00013157D991A>I<00300000780000 | |
| 541 | +78000078000078000078000078000078000078007FFFF0FFFFF8FFFFF87FFFF000780000780000 | |
| 542 | +780000780000780000780000780000780000300015167E991A>I<183E7E7F3F1F070E0E1CFCF8 | |
| 543 | +E0080D77851A>I<7FFFC0FFFFE0FFFFE07FFFC013047D901A>I<3078FCFC7830060676851A>I< | |
| 544 | +0000C00001E00001E00003E00003C00007C0000780000F80000F00000F00001F00001E00003E00 | |
| 545 | +003C00007C0000780000780000F80000F00001F00001E00003E00003C00003C00007C000078000 | |
| 546 | +0F80000F00001F00001E00001E00003E00003C00007C0000780000F80000F00000F00000600000 | |
| 547 | +13277DA21A>I<01F00007FC000FFE001F1F001C07003803803803807001C07001C07001C0E000 | |
| 548 | +E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0F001E07001C07001C07803C03803 | |
| 549 | +803C07801C07001F1F000FFE0007FC0001F000131E7D9D1A>I<00C001C001C003C007C00FC07F | |
| 550 | +C0FDC071C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C0 | |
| 551 | +01C07FFFFFFF7FFF101E7B9D1A>I<03F0000FFC001FFF003C0F807803C07001C0E000E0F000E0 | |
| 552 | +F000E06000E00000E00000E00001C00001C0000380000780000F00000E00003C00007C0000F000 | |
| 553 | +01E00003C0000780000F00001E00E03C00E07FFFE0FFFFE07FFFE0131E7D9D1A>I<01FC0007FF | |
| 554 | +001FFF801E03C03C01C03C00E03C00E00000E00000E00001C00003C000078001FF0001FF0001FF | |
| 555 | +C00003E00000F0000070000038000038000038600038F00038F00038E000707000F07E03E03FFF | |
| 556 | +C00FFF0001FC00151E7E9D1A>I<000F80001F80003F80003B80007B8000F38000E38001E38003 | |
| 557 | +C3800383800783800F03800E03801E03803C0380380380780380F00380FFFFFEFFFFFEFFFFFE00 | |
| 558 | +0380000380000380000380000380000380007FFC007FFC007FFC171E7F9D1A>I<3078FCFC7830 | |
| 559 | +0000000000000000003078FCFC7830061576941A>58 D<183C7E7E3C1800000000000000000018 | |
| 560 | +3C7E7E3E1E0E0E1C3CF8F0C0071C77941A>I<7FFFF0FFFFF8FFFFF87FFFF00000000000000000 | |
| 561 | +000000007FFFF0FFFFF8FFFFF87FFFF0150C7E941A>61 D<003E0001FF0003FF8007C3C00F01C0 | |
| 562 | +1E0EE03C3FE0387FE07071F070E0F070E0F0E1C070E1C070E1C070E1C070E1C070E1C070E1C070 | |
| 563 | +E1C07070E0E070E0E07071C0387FC03C3F801E0E000F007007C1F003FFE001FFC0003F00141E7E | |
| 564 | +9D1A>64 D<003800007C00007C00006C0000EE0000EE0000EE0000EE0000C60001C70001C70001 | |
| 565 | +C70001C7000383800383800383800383800783C00701C007FFC007FFC007FFC00E00E00E00E00E | |
| 566 | +00E00E00E01C00707F83FCFF83FE7F83FC171E7F9D1A>I<FFFE00FFFF80FFFFC01C03E01C00E0 | |
| 567 | +1C00F01C00701C00701C00701C00701C00E01C01E01C07C01FFF801FFF801FFFC01C01E01C00F0 | |
| 568 | +1C00701C00381C00381C00381C00381C00381C00781C00F01C01F0FFFFE0FFFFC0FFFF00151E7E | |
| 569 | +9D1A>I<007C3801FF3807FFF80F83F81E00F81C0078380078380038700038700038700000E000 | |
| 570 | +00E00000E00000E00000E00000E00000E00000E000007000007000387000383800383800381C00 | |
| 571 | +701E00F00F83E007FFC001FF80007C00151E7E9D1A>I<FFFE00FFFF00FFFF801C07C01C01E01C | |
| 572 | +00F01C00701C00781C00381C00381C003C1C001C1C001C1C001C1C001C1C001C1C001C1C001C1C | |
| 573 | +001C1C003C1C00381C00381C00781C00701C00F01C01E01C07C0FFFFC0FFFF00FFFE00161E7F9D | |
| 574 | +1A>I<7FFFFCFFFFFC7FFFFC0E001C0E001C0E001C0E001C0E001C0E00000E00000E07000E0700 | |
| 575 | +0E07000FFF000FFF000FFF000E07000E07000E07000E00000E00000E00000E000E0E000E0E000E | |
| 576 | +0E000E0E000E7FFFFEFFFFFE7FFFFE171E7F9D1A>I<7FFFFCFFFFFC7FFFFC0E001C0E001C0E00 | |
| 577 | +1C0E001C0E001C0E00000E00000E07000E07000E07000FFF000FFF000FFF000E07000E07000E07 | |
| 578 | +000E00000E00000E00000E00000E00000E00000E00000E00007FE000FFF0007FE000161E7F9D1A | |
| 579 | +>I<00F8E003FEE007FFE00F07E01E03E03C01E03800E07000E07000E07000E0E00000E00000E0 | |
| 580 | +0000E00000E00000E00000E00FF8E00FF8E00FF8E000E07000E07000E07001E03801E03C03E01E | |
| 581 | +03E00F07E007FFE003FEE000F8E0151E7E9D1A>I<FF8FF8FF8FF8FF8FF81C01C01C01C01C01C0 | |
| 582 | +1C01C01C01C01C01C01C01C01C01C01C01C01C01C01FFFC01FFFC01FFFC01C01C01C01C01C01C0 | |
| 583 | +1C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C0FF8FF8FF8FF8FF8FF8151E7E9D1A> | |
| 584 | +I<FFFF80FFFF80FFFF8001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0 | |
| 585 | +0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0 | |
| 586 | +0001C000FFFF80FFFF80FFFF80111E7C9D1A>I<03FFC003FFE003FFC0000E00000E00000E0000 | |
| 587 | +0E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0000 | |
| 588 | +0E00000E00000E00000E00600E00F00E00F01E00F03C007FF8003FF0000FC000131E7C9D1A>I< | |
| 589 | +FF83F8FF87FCFF83F81C01E01C03C01C03801C07001C0F001C1E001C1C001C38001C78001CF000 | |
| 590 | +1CF8001DF8001FDC001F9C001F0E001E0F001E07001C07801C03801C01C01C01C01C00E01C00E0 | |
| 591 | +1C0070FF81FCFF81FEFF81FC171E7F9D1A>I<7FE000FFF0007FE0000E00000E00000E00000E00 | |
| 592 | +000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00 | |
| 593 | +000E00000E00000E00380E00380E00380E00380E00387FFFF8FFFFF87FFFF8151E7E9D1A>I<7E | |
| 594 | +003F00FF007F807F007F001D80DC001D80DC001D80DC001DC1DC001DC1DC001CC19C001CC19C00 | |
| 595 | +1CE39C001CE39C001C631C001C771C001C771C001C361C001C361C001C3E1C001C1C1C001C1C1C | |
| 596 | +001C001C001C001C001C001C001C001C001C001C001C001C001C001C007F007F00FF80FF807F00 | |
| 597 | +7F00191E809D1A>I<FE0FF8FF0FF8FF0FF81D81C01D81C01D81C01D81C01DC1C01CC1C01CC1C0 | |
| 598 | +1CE1C01CE1C01C61C01C61C01C71C01C71C01C31C01C31C01C39C01C39C01C19C01C19C01C1DC0 | |
| 599 | +1C0DC01C0DC01C0DC01C0DC0FF87C0FF87C0FF83C0151E7E9D1A>I<0FFE003FFF807FFFC07C07 | |
| 600 | +C07001C0F001E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000 | |
| 601 | +E0E000E0E000E0E000E0E000E0E000E0E000E0F001E0F001E07001C07C07C07FFFC03FFF800FFE | |
| 602 | +00131E7D9D1A>I<7FFF00FFFFC07FFFE00E01F00E00780E00380E003C0E001C0E001C0E001C0E | |
| 603 | +001C0E003C0E00380E00780E01F00FFFE00FFFC00FFF000E00000E00000E00000E00000E00000E | |
| 604 | +00000E00000E00000E00007FC000FFE0007FC000161E7F9D1A>I<FFF000FFFC00FFFF001C0F80 | |
| 605 | +1C07801C03C01C01C01C01C01C01C01C01C01C03C01C07801C0F801FFF001FFC001FFE001C0F00 | |
| 606 | +1C07001C03801C03801C03801C03801C03801C03841C038E1C038E1C038EFF81FCFF81FCFF8070 | |
| 607 | +171E7E9D1A>82 D<03F1C00FFDC03FFFC07C0FC07003C0E003C0E001C0E001C0E001C0E0000070 | |
| 608 | +00007800003F00001FF00007FE0000FF00000F800003C00001C00000E00000E06000E0E000E0E0 | |
| 609 | +00E0E001C0F001C0FC0780FFFF80EFFE00E3F800131E7D9D1A>I<7FFFFEFFFFFEFFFFFEE0380E | |
| 610 | +E0380EE0380EE0380EE0380E003800003800003800003800003800003800003800003800003800 | |
| 611 | +00380000380000380000380000380000380000380000380000380000380003FF8007FFC003FF80 | |
| 612 | +171E7F9D1A>I<7FC1FF00FFE3FF807FC1FF000E0038000E0038000E0038000E0038000E003800 | |
| 613 | +0E0038000E0038000E0038000E0038000E0038000E0038000E0038000E0038000E0038000E0038 | |
| 614 | +000E0038000E0038000E0038000E0038000E00380007007000070070000380E00003C1E00001FF | |
| 615 | +C00000FF8000003E0000191E809D1A>I<3FFFF87FFFF87FFFF87000707000E07001E07001C070 | |
| 616 | +0380000780000700000E00001E00001C0000380000780000F00000E00001C00003C00003800007 | |
| 617 | +00000F00380E00381C00383C0038380038700038FFFFF8FFFFF8FFFFF8151E7E9D1A>90 | |
| 618 | +D<FFF8FFF8FFF8E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000 | |
| 619 | +E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000FFF8FFF8FF | |
| 620 | +F80D2776A21A>I<FFF8FFF8FFF800380038003800380038003800380038003800380038003800 | |
| 621 | +380038003800380038003800380038003800380038003800380038003800380038003800380038 | |
| 622 | +0038FFF8FFF8FFF80D277EA21A>93 D<7FFFC0FFFFE0FFFFE07FFFC013047D7E1A>95 | |
| 623 | +D<1FF0003FFC007FFE00780F00300700000380000380007F8007FF801FFF803F83807803807003 | |
| 624 | +80E00380E00380E00380700780780F803FFFFC1FFDFC07F0FC16157D941A>97 | |
| 625 | +D<FE0000FE0000FE00000E00000E00000E00000E00000E00000E00000E3E000EFF800FFFE00FC1 | |
| 626 | +F00F80700F00380E00380E001C0E001C0E001C0E001C0E001C0E001C0E001C0F00380F00780F80 | |
| 627 | +F00FC1E00FFFC00EFF80063E00161E7F9D1A>I<00FF8003FFC00FFFE01F01E03C00C078000070 | |
| 628 | +0000700000E00000E00000E00000E00000E000007000007000007800703C00701F01F00FFFE003 | |
| 629 | +FFC000FE0014157D941A>I<001FC0001FC0001FC00001C00001C00001C00001C00001C00001C0 | |
| 630 | +01F1C007FDC00FFFC01E0FC03C07C07803C07001C0E001C0E001C0E001C0E001C0E001C0E001C0 | |
| 631 | +E001C07003C07003C03807C03E0FC01FFFFC07FDFC01F1FC161E7E9D1A>I<01F80007FF000FFF | |
| 632 | +801E07C03C01C07800E07000E0E00070E00070FFFFF0FFFFF0FFFFF0E000007000007000007800 | |
| 633 | +703C00701F01F00FFFE003FFC000FE0014157D941A>I<0007E0001FF0003FF800787800F03000 | |
| 634 | +E00000E00000E00000E0007FFFF0FFFFF0FFFFF000E00000E00000E00000E00000E00000E00000 | |
| 635 | +E00000E00000E00000E00000E00000E00000E00000E00000E0007FFFC07FFFC07FFFC0151E7F9D | |
| 636 | +1A>I<00F87C03FFFE07FFFE0F078C0E03801C01C01C01C01C01C01C01C01C01C00E03800F0780 | |
| 637 | +0FFF000FFE001CF8001C00001C00000E00000FFF800FFFE03FFFF87C007C70001CE0000EE0000E | |
| 638 | +E0000EE0000E70001C78003C3E00F81FFFF007FFC001FF0017217F941A>I<FE0000FE0000FE00 | |
| 639 | +000E00000E00000E00000E00000E00000E00000E3E000EFF800FFFC00FC1C00F80E00F00E00E00 | |
| 640 | +E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0FFE3FEFFE3 | |
| 641 | +FEFFE3FE171E7F9D1A>I<01C00003E00003E00003E00001C00000000000000000000000000000 | |
| 642 | +00007FE000FFE0007FE00000E00000E00000E00000E00000E00000E00000E00000E00000E00000 | |
| 643 | +E00000E00000E00000E00000E00000E000FFFFC0FFFFC0FFFFC0121F7C9E1A>I<001C003E003E | |
| 644 | +003E001C000000000000000000000FFE0FFE0FFE000E000E000E000E000E000E000E000E000E00 | |
| 645 | +0E000E000E000E000E000E000E000E000E000E000E000E000E000E001C601CF038FFF87FF01FC0 | |
| 646 | +0F2A7E9E1A>I<FFE000FFE000FFE00000E00000E00000E00000E00000E00000E00000E00000E0 | |
| 647 | +0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0 | |
| 648 | +0000E00000E00000E000FFFFE0FFFFE0FFFFE0131E7D9D1A>108 D<7CE0E000FFFBF8007FFFF8 | |
| 649 | +001F1F1C001E1E1C001E1E1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C | |
| 650 | +1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C007F1F1F00FF9F9F807F1F1F00191580941A | |
| 651 | +>I<FE3E00FEFF80FFFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E | |
| 652 | +00E00E00E00E00E00E00E00E00E00E00E0FFE3FEFFE3FEFFE3FE17157F941A>I<01F00007FC00 | |
| 653 | +1FFF003E0F803C07807803C07001C0E000E0E000E0E000E0E000E0E000E0E000E0F001E07001C0 | |
| 654 | +7803C03C07803E0F801FFF0007FC0001F00013157D941A>I<FE3E00FEFF80FFFFE00FC1F00F80 | |
| 655 | +700F00380E00380E001C0E001C0E001C0E001C0E001C0E001C0E001C0F00380F00780F80F00FC1 | |
| 656 | +E00FFFC00EFF800E3E000E00000E00000E00000E00000E00000E00000E00000E0000FFE000FFE0 | |
| 657 | +00FFE00016207F941A>I<FF83F0FF8FF8FFBFFC03FC3C03F01803E00003C00003C00003800003 | |
| 658 | +8000038000038000038000038000038000038000038000038000FFFF00FFFF80FFFF0016157E94 | |
| 659 | +1A>114 D<07FB801FFF807FFF80780780E00380E00380E003807800007FC0003FFC0007FF0000 | |
| 660 | +3F800003806001C0E001C0E001C0F003C0FC0780FFFF00EFFE00E3F80012157C941A>I<00C000 | |
| 661 | +01C00001C00001C00001C00001C00001C0007FFFE0FFFFE0FFFFE001C00001C00001C00001C000 | |
| 662 | +01C00001C00001C00001C00001C00001C00001C07001C07001C07001C07000E0E000FFE0007FC0 | |
| 663 | +001F00141C7F9B1A>I<FE0FE0FE0FE0FE0FE00E00E00E00E00E00E00E00E00E00E00E00E00E00 | |
| 664 | +E00E00E00E00E00E00E00E00E00E00E00E00E00E01E00F03E007FFFE03FFFE00FCFE17157F941A | |
| 665 | +>I<7FC7FCFFC7FE7FC7FC0E00E00E00E00F01E00701C00701C00783C003838003838003838001 | |
| 666 | +C70001C70001C70000EE0000EE0000EE00007C00007C0000380017157F941A>I<FF83FEFFC7FE | |
| 667 | +FF83FE3800381C00701C00701C00701C00701C38701C7C700C7C600E6CE00E6CE00EEEE00EEEE0 | |
| 668 | +0EEEE006C6C006C6C007C7C007C7C003838017157F941A>I<7FC7F87FCFFC7FC7F80703C00387 | |
| 669 | +8003C70001EE0000FE00007C00007800003800007C0000EE0001EE0001C7000383800783C00701 | |
| 670 | +C07FC7FCFFC7FE7FC7FC17157F941A>I<7FC7FCFFC7FE7FC7FC0E00E00F00E00701E00701C007 | |
| 671 | +81C00381C003838001C38001C38001C70000E70000E70000E600006600006E00003C00003C0000 | |
| 672 | +3C00003C0000380000380000780000700030700078E00079E0007FC0003F80001E000017207F94 | |
| 673 | +1A>I<0007E0001FE0003FE000780000F00000E00000E00000E00000E00000E00000E00000E000 | |
| 674 | +00E00000E00000E00000E00001E00003C000FF8000FF0000FF800003C00001E00000E00000E000 | |
| 675 | +00E00000E00000E00000E00000E00000E00000E00000E00000E00000F000007800003FE0001FE0 | |
| 676 | +0007E013277DA21A>123 D<7C0000FF0000FF800003C00001E00000E00000E00000E00000E000 | |
| 677 | +00E00000E00000E00000E00000E00000E00000E00000F000007800003FE0001FE0003FE0007800 | |
| 678 | +00F00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00001E000 | |
| 679 | +03C000FF8000FF00007C000013277DA21A>125 D E /Fi 62 127 df<0000FE0000038100000E | |
| 680 | +0080001C03C0003807C0007007C0007007800070030000E0000000E0000000E0000000E0000000 | |
| 681 | +E0000000E000003FFFFF003FFFFF0001C00F0001C0070001C0070001C0070003800E0003800E00 | |
| 682 | +03800E0003800E0003800E0003800E0007001C0007001C0007001C0007001C0007001C0007001C | |
| 683 | +000F003C00FFE3FF80FFE3FF801A237FA21C>12 D<0380078007000E001C003800700040008000 | |
| 684 | +0A0971A219>19 D<0700078001E000F0007000E001E0FF800C087B7E16>24 | |
| 685 | +D<0001E000000003100000000C080000000C080000001808000000380800000038080000003008 | |
| 686 | +00000030100000007010000000702000000070400000007080000000710000000072000000003C | |
| 687 | +003FF00038003FF00038000F800038000600007C000800009C000800011C001000061E0020000C | |
| 688 | +0E004000180F004000380700800078078100007003820000F003C40000F001C80000F001F00080 | |
| 689 | +F800F00180F800F001007801B803003E0F1E0E001FFC0FFC0007E003F00024257DA327>38 | |
| 690 | +D<1C3E7E7E3A02020404080810204080070F78A20E>I<1C3E7E7E3A0202040408081020408007 | |
| 691 | +0F7D840E>44 D<FFF0FFF00C027D8B11>I<3078F8787005057C840E>I<001F0000E1C001C06003 | |
| 692 | +80700700300E00380E00381E00381C00381C00383C00383C003838007878007878007878007878 | |
| 693 | +0078780078F000F0F000F0F000F0F000F0F000E0F001E0F001E0F001C0F001C0F0038070038070 | |
| 694 | +0700700600380C001C380007E00015227CA019>48 D<000FC0007FF000E0FC01003E02001E0400 | |
| 695 | +1F07800F0FC00F0FC00F0FC00F0F801F03001E00001E00003C00003C0000780000F00001E00003 | |
| 696 | +C0000700000E00001C0000300000600000C0000180080200080400080800103000107FFFF0FFFF | |
| 697 | +E0FFFFE018217EA019>50 D<001FC0007FE001C0F803007C07803C07C03C0FC03C0FC03C07803C | |
| 698 | +03007C0000780000F00000E00001C000070000FE000003800001C00001E00000F00000F00000F0 | |
| 699 | +0000F81000F87C01F0FC01F0FC01F0FC01E0F803E0C007C0600780381F001FFC0007F00016227D | |
| 700 | +A019>I<0000200000600000E00001E00001E00002E00005C00009C00011C00031C00061C00041 | |
| 701 | +C00083800103800203800403800C0380080380100700200700400700800700FFFFFCFFFFFC000E | |
| 702 | +00000E00000E00000E00000E00000E00001E0003FFE003FFE016217DA019>I<00800400E03C01 | |
| 703 | +FFF801FFF001FFC0017F00010000010000020000020000020000020000023F0002C1C00500E006 | |
| 704 | +00600400700000700000780000780000780000783800787C0078FC00F0F800F0F800E08001E040 | |
| 705 | +01C0400380200700381E000FFC0007E00016227DA019>I<001FC0007FE000E07801801802000C | |
| 706 | +06000C04000C0C000C0C000C0E000C0F00180F803007E06003F0C001FF0000FE00007F00019FC0 | |
| 707 | +060FE00C03E01801F03000F0600070600030C00030C00030C00030C00020E000606000C0300180 | |
| 708 | +3C0F000FFC0003F00016227DA019>56 D<003F0000FFC001E0E00380700700700E00381E00381C | |
| 709 | +00383C00383C00383C00383C00787800787800787800783800F83800F83801781C01F00C02F006 | |
| 710 | +0CF001F0E00001E00001E00001C00003C0700380F80700F80600F00E00803C00E070007FE0001F | |
| 711 | +800015227CA019>I<060F1F1F0E00000000000000000000003078F8787008157C940E>I<000004 | |
| 712 | +0000000006000000000E000000000E000000001E000000001E000000003F000000006F00000000 | |
| 713 | +4F00000000CF000000008F000000018F000000010F800000020780000002078000000407800000 | |
| 714 | +040780000008078000000803C000001003C000001003C000002003C000003FFFC000007FFFC000 | |
| 715 | +004001E000008001E000008001E000010001E000010001E000020001F000020000F000060000F0 | |
| 716 | +001F0001F000FFC01FFF80FFC01FFF0021237EA225>65 D<07FFFFE007FFFFF8003C007C003C00 | |
| 717 | +3E003C001F003C001F003C000F0078000F0078000F0078001F0078001F0078003E0078003C00F0 | |
| 718 | +007800F001F000F007C000FFFFC000F001F000F000F801E0007C01E0007C01E0003C01E0003E01 | |
| 719 | +E0003E01E0003E03C0003C03C0007C03C0007C03C000F803C001F003C003E007C00FC0FFFFFF80 | |
| 720 | +FFFFFC0020227EA123>I<0000FE010007FF83001F81C6007C006E00F0003E01E0001E03C0001E | |
| 721 | +0780000E0F00000C1F00000C1E0000043E0000043C0000047C0000047C000000F8000000F80000 | |
| 722 | +00F8000000F8000000F8000000F8000000F0000000F0000000F0000010F8000010F8000020F800 | |
| 723 | +0020780000207C0000403C0000801E0001800F0003000780060003E0380001FFF000003F800020 | |
| 724 | +247AA224>I<07FFFFE00007FFFFF800003C007C00003C001E00003C000F00003C000780003C00 | |
| 725 | +078000780003C000780003C000780003E000780003E000780003E000780003E000F00003E000F0 | |
| 726 | +0003E000F00003E000F00003E000F00003E000F00003E001E00003C001E00007C001E00007C001 | |
| 727 | +E000078001E0000F8001E0000F0003C0001F0003C0001E0003C0003C0003C000780003C000F000 | |
| 728 | +03C003E00007C00FC000FFFFFF0000FFFFF8000023227EA126>I<07FFFFFF8007FFFFFF80003C | |
| 729 | +001F00003C000700003C000300003C000300003C00010000780001000078000100007802010000 | |
| 730 | +780201000078020100007806000000F004000000F01C000000FFFC000000FFFC000000F01C0000 | |
| 731 | +00F00C000001E008000001E008000001E008010001E008010001E000020001E000020003C00002 | |
| 732 | +0003C000040003C000040003C0000C0003C000180003C000380007C001F800FFFFFFF000FFFFFF | |
| 733 | +F00021227EA122>I<0000FE010007FF83001F81C6007C006E00F0003E01E0001E03C0001E0780 | |
| 734 | +000E0F00000C1F00000C1E0000043E0000043C0000047C0000047C000000F8000000F8000000F8 | |
| 735 | +000000F8000000F8000000F8000000F0003FFFF0003FFFF00000F0F80000F0F80000F0F80001E0 | |
| 736 | +780001E07C0001E03C0001E01E0003E00F0003E0078004C003F038C001FFF040003F800020247A | |
| 737 | +A227>71 D<07FFF007FFF0003E00003C00003C00003C00003C0000780000780000780000780000 | |
| 738 | +780000780000F00000F00000F00000F00000F00000F00001E00001E00001E00001E00001E00001 | |
| 739 | +E00003C00003C00003C00003C00003C00003C00007C000FFFE00FFFC0014227EA112>73 | |
| 740 | +D<003FFF003FFF0000F00000F00000F00000F00000F00001E00001E00001E00001E00001E00001 | |
| 741 | +E00003C00003C00003C00003C00003C00003C0000780000780000780000780000780000780300F | |
| 742 | +007C0F00FC0F00FC0F00FC1E00F81E00803C0040380030E0000F800018237DA11A>I<07FFF00F | |
| 743 | +FE07FFF00FFC003E0003E0003C000300003C000200003C000400003C0018000078002000007800 | |
| 744 | +4000007800800000780100000078020000007808000000F018000000F03C000000F07C000000F0 | |
| 745 | +9E000000F31E000000F40F000001E80F000001F00F800001E007800001E007C00001E003C00001 | |
| 746 | +E003E00003C001E00003C001F00003C000F00003C000F80003C000780003C0007C0007C0007E00 | |
| 747 | +FFFC03FFC0FFFC03FFC027227EA127>I<07FFF80007FFF800003E0000003C0000003C0000003C | |
| 748 | +0000003C000000780000007800000078000000780000007800000078000000F0000000F0000000 | |
| 749 | +F0000000F0000000F0000000F0000001E0000001E0000001E0001001E0001001E0003001E00020 | |
| 750 | +03C0002003C0006003C0006003C000C003C001C003C003C007C00FC0FFFFFF80FFFFFF801C227E | |
| 751 | +A11F>I<07FC000007FE07FC00000FFE002E00000FC0002E00001780002E00001780002E000027 | |
| 752 | +80002700002780004700004F00004700008F00004700008F00004700010F00004380010F000043 | |
| 753 | +80020F00008380021E00008380041E000081C0041E000081C0081E000081C0081E000081C0101E | |
| 754 | +000101C0203C000100E0203C000100E0403C000100E0403C000100E0803C000100E0803C000200 | |
| 755 | +7100780002007100780002007200780002007200780002003C0078000600380078000F003800F8 | |
| 756 | +00FFE0301FFF80FFE0301FFF802F227EA12E>I<07FFFFC007FFFFF0003C00FC003C003E003C00 | |
| 757 | +1E003C001F003C001F0078001F0078001F0078001F0078001F0078001E0078003E00F0003C00F0 | |
| 758 | +007800F000F000F003E000FFFF8000F0000001E0000001E0000001E0000001E0000001E0000001 | |
| 759 | +E0000003C0000003C0000003C0000003C0000003C0000003C0000007C00000FFFC0000FFFC0000 | |
| 760 | +20227EA122>80 D<07FFFF800007FFFFF000003C00F800003C003C00003C001E00003C001F0000 | |
| 761 | +3C001F000078001F000078001F000078001F000078001F000078003E000078003C0000F0007800 | |
| 762 | +00F000F00000F007C00000FFFE000000F00E000000F003000001E003800001E001C00001E001C0 | |
| 763 | +0001E001E00001E001E00001E001E00003C003E00003C003E00003C003E00003C003E00003C003 | |
| 764 | +E02003C003E04007C003E040FFFC01F080FFFC00F1800000003E0023237EA125>82 | |
| 765 | +D<000FC040003FF0C000F0398001C00F80018003800300038007000180070001800E0001000E00 | |
| 766 | +01000E0001000F0000000F0000000F80000007E0000007FE000003FFC00001FFF000007FF80000 | |
| 767 | +07FC0000007C0000003C0000001E0000001E0000001E0020001E0040001C0040001C0060001C00 | |
| 768 | +600018006000380070007000F800E000EF03C000C7FF800080FE00001A247DA21C>I<1FFFFFFF | |
| 769 | +3FFFFFFF3C01E01E3001E0062001E0026001E0024001E0024003C0024003C0028003C0028003C0 | |
| 770 | +028003C0020003C000000780000007800000078000000780000007800000078000000F0000000F | |
| 771 | +0000000F0000000F0000000F0000000F0000001E0000001E0000001E0000001E0000001E000000 | |
| 772 | +1E0000003E00001FFFF8001FFFF80020227AA124>I<FFFE07FF80FFFE07FF8007C00078000780 | |
| 773 | +0020000780002000078000200007800020000F000040000F000040000F000040000F000040000F | |
| 774 | +000040000F000040001E000080001E000080001E000080001E000080001E000080001E00008000 | |
| 775 | +3C000100003C000100003C000100003C000100003C000100003C000200003C000200003C000200 | |
| 776 | +003C000400003C000C00001C000800001E001000000E006000000781C0000003FF800000007E00 | |
| 777 | +0000212379A125>I<FFFC007FE0FFF8007FE00F80001E000780000C0007800008000780001000 | |
| 778 | +03C000100003C000200003C000200003C000400003C000C00001E000800001E001000001E00100 | |
| 779 | +0001E002000001E002000000F004000000F004000000F008000000F008000000F0100000007810 | |
| 780 | +00000078200000007860000000784000000078800000003C800000003D000000003D000000003E | |
| 781 | +000000003E000000001C000000001C0000000018000000001800000023237AA125>I<FFF81FFF | |
| 782 | +03FF80FFF81FFE03FF800F8003E00078000F8001E0003000078001E0002000078001E000200007 | |
| 783 | +8001E0004000078003F0004000078002F0008000078004F000800007C004F001000003C008F001 | |
| 784 | +000003C008F002000003C010F002000003C010F804000003C0307804000003C0207808000001E0 | |
| 785 | +207808000001E0407810000001E0407810000001E0807830000001E0803C20000001E1003C2000 | |
| 786 | +0001E1003C40000000F2003C40000000F2003C80000000F4003C80000000F4003D00000000F800 | |
| 787 | +1F00000000F8001E00000000F0001E0000000070001C0000000060001C00000000600018000000 | |
| 788 | +0040001800000031237AA133>I<03FFF03FF803FFE03FF8001F800F80000F000600000F000C00 | |
| 789 | +000780080000078010000007C020000003C040000003E0C0000001E080000001F100000000F200 | |
| 790 | +000000FC0000000078000000007C000000003C000000003E000000005E000000009F000000018F | |
| 791 | +000000030F800000020780000004078000000803C000001003C000003003E000002001E0000040 | |
| 792 | +01F000008000F000018000F80007C000F800FFF007FFC0FFF007FFC025227FA125>I<FFF8007F | |
| 793 | +E0FFF8007FE007C0001E0007C000180003C000100003C000200003E000200001E000400001F000 | |
| 794 | +800000F001000000F801000000780200000078040000007C080000003C180000003E100000001E | |
| 795 | +200000001F400000001FC00000000F800000000F000000000F000000000F000000000F00000000 | |
| 796 | +0E000000001E000000001E000000001E000000001E000000001E000000001C000000003E000000 | |
| 797 | +07FFE0000007FFE0000023227AA125>I<0100038007C00CC018603030601080080D0876A219> | |
| 798 | +94 D<03FC000E07001F01801F01C01E00C00C00E00001C00001C0003FC003E1C00F01C01E01C0 | |
| 799 | +380380780380F00384F00384F00784F00784F00B887833D01FC1E016157D9419>97 | |
| 800 | +D<0780003F80003F00000700000700000700000700000700000E00000E00000E00000E00000E00 | |
| 801 | +000E00001C3F001CC1C01D00601E00701C00381C003838003C38003C38003C38003C38003C3800 | |
| 802 | +3C7000787000787000707000F07000E06801C0E80380C60E0081F80016237BA21C>I<00FF0003 | |
| 803 | +83800607C00C07C01C0780380300780000700000F00000F00000F00000F00000F00000E00000F0 | |
| 804 | +0000F000807001007001003806001C180007E00012157C9416>I<00000F00007F00007E00000E | |
| 805 | +00000E00000E00000E00000E00001C00001C00001C00001C00001C00001C007E3803C1380700B8 | |
| 806 | +0E00781C0038380038780070700070F00070F00070F00070F00070E000E0E000E0E000E0F000E0 | |
| 807 | +7001E07003E03805E01C19FC07E1FC18237CA21C>I<007E000383800701C00C00E01C00E03800 | |
| 808 | +E07800E07000E0FFFFE0F00000F00000F00000F00000E00000E00000F000407000803000801803 | |
| 809 | +000E0C0003F00013157D9416>I<0001E0000630001C780018F80038F800707000700000700000 | |
| 810 | +E00000E00000E00000E00000E00000E0003FFE003FFE0001C00001C00001C00001C00003800003 | |
| 811 | +80000380000380000380000380000700000700000700000700000700000700000F0000FFF000FF | |
| 812 | +F00015237FA20F>I<00000380001F8CC00070D1C000E0E1C001C0700003C0700003C070000780 | |
| 813 | +F0000780F0000780F0000780E0000381E0000181C00002C30000027E0000040000000400000004 | |
| 814 | +0000000600000007FFC00007FFF00007FFF8001C007C0030000C0060000C0060000C00C0000C00 | |
| 815 | +C0000C004000180060003000300060000C03800003FE00001A21809519>I<0078000003F80000 | |
| 816 | +03F00000007000000070000000700000007000000070000000E0000000E0000000E0000000E000 | |
| 817 | +0000E0000000E0000001C1F80001C60C0001D80E0001E0070001E0070001C0070003C00E000380 | |
| 818 | +0E0003800E0003800E0003800E0003800E0007001C0007001C0007001C0007001C0007001C0007 | |
| 819 | +001C000F003C00FFE3FF80FFE3FF8019237FA21C>I<007000F001F000F000E000000000000000 | |
| 820 | +00000000000000000001C00FC01FC003C001C001C0038003800380038003800380070007000700 | |
| 821 | +0700070007000F00FFE0FFE00C227FA10E>I<0078000003F8000003F000000070000000700000 | |
| 822 | +00700000007000000070000000E0000000E0000000E0000000E0000000E0000000E0000001C07F | |
| 823 | +C001C07FC001C03C0001C0300001C0400001C080000383000003840000038E000003BE000003CF | |
| 824 | +00000387000007078000070380000701C0000701C0000700E0000700F0000F00F800FFE3FF00FF | |
| 825 | +E3FE001A237FA21A>107 D<007803F803F00070007000700070007000E000E000E000E000E000 | |
| 826 | +E001C001C001C001C001C001C00380038003800380038003800700070007000700070007000F00 | |
| 827 | +FFE0FFE00D237FA20E>I<01C1F807E01FC60C18301FD80E603803E007801C01E007801C01C007 | |
| 828 | +001C03C00F003803800E003803800E003803800E003803800E003803800E003807001C00700700 | |
| 829 | +1C007007001C007007001C007007001C007007001C00700F003C00F0FFE3FF8FFEFFE3FF8FFE27 | |
| 830 | +157F942A>I<01C1F8001FC60C001FD80E0003E0070001E0070001C0070003C00E0003800E0003 | |
| 831 | +800E0003800E0003800E0003800E0007001C0007001C0007001C0007001C0007001C0007001C00 | |
| 832 | +0F003C00FFE3FF80FFE3FF8019157F941C>I<007F0001C1C00700E00E00701C00383800387800 | |
| 833 | +3C70003CF0003CF0003CF0003CF0003CE00078E00078E00070F000F07000E07001C03803800E0E | |
| 834 | +0003F00016157D9419>I<00E1F8000FE60E000FE8070000F0038000E003C000E001C001C001E0 | |
| 835 | +01C001E001C001E001C001E001C001E001C001E0038003C0038003C0038007800380078003800F | |
| 836 | +0003C00E0007403C0007307000070FC0000700000007000000070000000E0000000E0000000E00 | |
| 837 | +00000E0000000E000000FFC00000FFC000001B1F80941C>I<00FC100382100701300E00F01C00 | |
| 838 | +F03800F07800E07800E0F000E0F000E0F000E0F000E0F001C0F001C0F001C0F001C07003C07005 | |
| 839 | +C0380B801C338007C380000380000380000380000700000700000700000700000700007FE0007F | |
| 840 | +E0141F7C941A>I<01C3E01FC4701FD8F003D0F001E06001C00003C00003800003800003800003 | |
| 841 | +80000380000700000700000700000700000700000700000F0000FFF000FFF00014157F9414>I< | |
| 842 | +01FC800603800C01801801801801801800801801001E00001FE0000FFC0003FE00007E00000700 | |
| 843 | +400700400300400300600200600600F00400C8180087E00011157E9414>I<0080008000800180 | |
| 844 | +010001000300030007000F001FF8FFF80E000E000E000E001C001C001C001C001C001C00381038 | |
| 845 | +10381038103810382038201C4007800D1F7C9E13>I<0E0038FE03F8FE03F81E00780E00380E00 | |
| 846 | +381C00701C00701C00701C00701C00701C00703800E03800E03800E03800E03801E03802E01805 | |
| 847 | +E01C19FC07E1FC16157C941C>I<FFCFFC3FC0FFCFF87F801E01E01E000E00C008000E00C00800 | |
| 848 | +0E01E010000E03E010000E02E02000070660200007046040000708704000070870800007107180 | |
| 849 | +00079031000003A033000003A03A000003C03C000003C03C000003801800000180180000010010 | |
| 850 | +000022157C9424>119 D<1FF83FC01FF87FC001E03C0000E0100000E020000070400000388000 | |
| 851 | +00390000001E0000001C0000000E0000001F0000003700000063800000C380000181C0000101C0 | |
| 852 | +000600E0001E00F000FF03FF00FF03FF001A157F941A>I<0FFC0FE00FFC0FE000E0078000E002 | |
| 853 | +0000E0040000E00400007008000070080000701000007030000038200000384000003840000038 | |
| 854 | +8000003C8000001D0000001D0000001E0000001C0000000C000000080000000800000010000000 | |
| 855 | +1000000020000078400000F8400000F8800000F1000000420000003C0000001B1F80941A>I<FF | |
| 856 | +FFFF18017E8C19>123 D<0E011F03318440F88070100577A019>126 D E | |
| 857 | +/Fj 27 123 df<70F8FCFC7404040404080810102040060F7A8410>44 D<0003F802001FFF0600 | |
| 858 | +7E038601F000CE03E0003E0780001E0F00001E1F00000E1E0000063E0000063C0000067C000002 | |
| 859 | +7C00000278000002F8000000F8000000F8000000F8000000F8000000F8000000F8000000F80000 | |
| 860 | +00780000007C0000027C0000023C0000023E0000021E0000041F0000040F0000080780001803E0 | |
| 861 | +003001F00060007E03C0001FFF000003FC001F247CA227>67 D<FFFFFFE0FFFFFFE0078003E007 | |
| 862 | +8000E0078000600780002007800030078000300780001007800010078020100780201007802000 | |
| 863 | +07802000078060000780E00007FFE00007FFE0000780E000078060000780200007802000078020 | |
| 864 | +00078020000780000007800000078000000780000007800000078000000780000007800000FFFE | |
| 865 | +0000FFFE00001C227CA123>70 D<FFFC1FFF80FFFC1FFF80078000F000078000F000078000F000 | |
| 866 | +078000F000078000F000078000F000078000F000078000F000078000F000078000F000078000F0 | |
| 867 | +00078000F000078000F00007FFFFF00007FFFFF000078000F000078000F000078000F000078000 | |
| 868 | +F000078000F000078000F000078000F000078000F000078000F000078000F000078000F0000780 | |
| 869 | +00F000078000F000078000F000078000F000FFFC1FFF80FFFC1FFF8021227CA129>72 | |
| 870 | +D<FFFCFFFC07800780078007800780078007800780078007800780078007800780078007800780 | |
| 871 | +0780078007800780078007800780078007800780078007800780FFFCFFFC0E227DA114>I<FFFE | |
| 872 | +0000FFFE0000078000000780000007800000078000000780000007800000078000000780000007 | |
| 873 | +800000078000000780000007800000078000000780000007800000078000000780000007800000 | |
| 874 | +0780000007800020078000200780002007800020078000600780006007800040078000C0078001 | |
| 875 | +C0078003C007800FC0FFFFFFC0FFFFFFC01B227CA122>76 D<FFFFE00000FFFFFC000007801F00 | |
| 876 | +000780078000078003C000078003E000078001E000078001F000078001F000078001F000078001 | |
| 877 | +F000078001E000078003E000078003C000078007000007803E000007FFF0000007807800000780 | |
| 878 | +1C000007800E000007800F00000780070000078007800007800780000780078000078007800007 | |
| 879 | +8007C000078007C000078007C000078007C020078003E020078003E020FFFC01E040FFFC00F080 | |
| 880 | +0000003F0023237CA128>82 D<FFF80FFF807FE0FFF80FFF807FE00F8000F8000F000F80007800 | |
| 881 | +0600078000780004000780007C00040007C000BC000C0003C000BC00080003C000BE00080003E0 | |
| 882 | +011E00080001E0011E00100001E0011E00100001E0020F00100000F0020F00200000F0020F0020 | |
| 883 | +0000F00407802000007804078040000078040780400000780803C04000003C0803C08000003C08 | |
| 884 | +03C08000003C1001E08000001E1001E10000001E1001E10000001E2000F10000000F2000F20000 | |
| 885 | +000F2000F20000000F40007A00000007C0007C00000007C0007C0000000780003C000000038000 | |
| 886 | +38000000038000380000000300001800000001000010000033237EA137>87 | |
| 887 | +D<00040000000E0000000E0000000E0000001F0000001F0000003F800000278000002780000043 | |
| 888 | +C0000043C0000043C0000081E0000081E0000101F0000100F0000100F00003FFF8000200780006 | |
| 889 | +007C0004003C0004003C000C001E000C001E003C003F00FF00FFE01B1A7F991F>97 | |
| 890 | +D<FFFF800F00E00F00700F00380F003C0F003C0F003C0F003C0F003C0F00780F00700F01E00FFF | |
| 891 | +C00F00F00F00380F003C0F001C0F001E0F001E0F001E0F001E0F001C0F003C0F00780F00F0FFFF | |
| 892 | +C0171A7E991D>I<003F0201C0C603002E0E001E1C000E1C0006380006780002700002700002F0 | |
| 893 | +0000F00000F00000F00000F00000F000007000027000027800023800041C00041C00080E000803 | |
| 894 | +003001C0C0003F00171A7E991D>I<FFFF80000F01E0000F0070000F0038000F001C000F000E00 | |
| 895 | +0F000E000F0007000F0007000F0007800F0007800F0007800F0007800F0007800F0007800F0007 | |
| 896 | +800F0007800F0007000F0007000F000F000F000E000F001C000F0038000F0070000F01E000FFFF | |
| 897 | +8000191A7E991F>I<FFFFF80F00380F00180F00080F000C0F00040F00040F00040F02000F0200 | |
| 898 | +0F02000F06000FFE000F06000F02000F02000F02000F00020F00020F00020F00060F00040F0004 | |
| 899 | +0F000C0F003CFFFFFC171A7E991C>I<003F810001E063000380170006000F000C0007001C0003 | |
| 900 | +0038000300780001007800010070000100F0000000F0000000F0000000F0000000F0000000F001 | |
| 901 | +FFE070001F0078000F0078000F0038000F001C000F000C000F0006000F000380170001E0630000 | |
| 902 | +3F81001B1A7E9920>103 D<FFE3FF800F0078000F0078000F0078000F0078000F0078000F0078 | |
| 903 | +000F0078000F0078000F0078000F0078000F0078000FFFF8000F0078000F0078000F0078000F00 | |
| 904 | +78000F0078000F0078000F0078000F0078000F0078000F0078000F0078000F007800FFE3FF8019 | |
| 905 | +1A7E991F>I<FFF00F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F | |
| 906 | +000F000F000F000F000F000F000F000F00FFF00C1A7F990F>I<FFF0000F80000F00000F00000F | |
| 907 | +00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F | |
| 908 | +00100F00100F00100F00300F00200F00600F00600F01E0FFFFE0141A7E991A>108 | |
| 909 | +D<FF0003FE0F0003E00F0003E00B8005E00B8005E00B8005E009C009E009C009E009C009E008E0 | |
| 910 | +11E008E011E008E011E0087021E0087021E0083841E0083841E0083841E0081C81E0081C81E008 | |
| 911 | +1C81E0080F01E0080F01E0080F01E0080601E01C0601E0FF861FFE1F1A7E9925>I<FF00FF800F | |
| 912 | +801C000F8008000BC0080009E0080009E0080008F0080008F8080008780800083C0800083C0800 | |
| 913 | +081E0800080F0800080F0800080788000803C8000803C8000801E8000800F8000800F800080078 | |
| 914 | +000800780008003800080018001C001800FF800800191A7E991F>I<007F800001C0E000070038 | |
| 915 | +000E001C001C000E003C000F0038000700780007807000038070000380F00003C0F00003C0F000 | |
| 916 | +03C0F00003C0F00003C0F00003C0F00003C07800078078000780380007003C000F001C000E000E | |
| 917 | +001C000700380001C0E000007F80001A1A7E9920>I<007F800001C0E000070038000E001C001C | |
| 918 | +000E003C000F0038000700780007807800078070000380F00003C0F00003C0F00003C0F00003C0 | |
| 919 | +F00003C0F00003C0F00003C07000038078000780380007003C1E0F001C310E000E209C000720B8 | |
| 920 | +0001E0E000007FC0400000404000006040000070C000007F8000003F8000003F0000001E001A21 | |
| 921 | +7E9920>113 D<FFFE00000F03C0000F00E0000F00F0000F0078000F0078000F0078000F007800 | |
| 922 | +0F0078000F00F0000F00E0000F03C0000FFE00000F0380000F01E0000F00E0000F00F0000F00F0 | |
| 923 | +000F00F0000F00F0000F00F0000F00F0000F00F0400F0070400F003880FFF01F001A1A7E991E> | |
| 924 | +I<07E100181B00300700600300600300E00100E00100E00100F00000F800007F80003FF8001FFC | |
| 925 | +000FFE0000FF00000F00000780000780800380800380800380C00300C00700E00600DC0C0083F0 | |
| 926 | +00111A7E9917>I<7FFFFF00701E0700601E0100401E0100C01E0180801E0080801E0080801E00 | |
| 927 | +80001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E | |
| 928 | +0000001E0000001E0000001E0000001E0000001E0000001E0000003F000003FFF000191A7F991D | |
| 929 | +>I<FFF0FF800F001C000F0008000F0008000F0008000F0008000F0008000F0008000F0008000F | |
| 930 | +0008000F0008000F0008000F0008000F0008000F0008000F0008000F0008000F0008000F000800 | |
| 931 | +0F00080007001000078010000380200001C0600000E08000003F0000191A7E991F>I<FFC00FF0 | |
| 932 | +1F0007801F0003000F8002000780040007C0040003E0080001E0080001F0100000F83000007820 | |
| 933 | +00007C4000003E4000001E8000001F8000000F0000000F0000000F0000000F0000000F0000000F | |
| 934 | +0000000F0000000F0000000F0000000F000000FFE0001C1A7F991F>121 | |
| 935 | +D<7FFFE07803C07003C0600780400780400F00401E00401E00003C00003C0000780000F00000F0 | |
| 936 | +0001E00001E00003C0000780200780200F00200F00201E00603C00403C00C07801C07803C0FFFF | |
| 937 | +C0131A7E9919>I E /Fk 19 121 df<FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF | |
| 938 | +FFFFFFFFFFFFFFFFFFFFFFFFFF000007F00000000007F00000000007F00000000007F000000000 | |
| 939 | +07F00000000007F00000000007F00000000007F00000000007F00000000007F00000000007F000 | |
| 940 | +00000007F00000000007F00000000007F00000000007F00000000007F00000000007F000000000 | |
| 941 | +07F00000000007F00000000007F00000000007F00000000007F00000000007F00000000007F000 | |
| 942 | +00000007F00000000007F00000000007F00000000007F00000000007F00000000007F000000000 | |
| 943 | +07F00000000007F00000000007F00000000007F00000000007F00000000007F00000000007F000 | |
| 944 | +00000007F00000000007F00000000007F00000000007F00000000007F00000000007F000000000 | |
| 945 | +07F00000000007F00000000007F00000000007F00000000007F00000000007F00000000007F000 | |
| 946 | +00000007F00000000007F00000000007F00000000007F00000303C7DBB37>84 | |
| 947 | +D<003FF00001FFFC0007FFFF001FFFFF801FFFFFC01FC01FE01E000FE0180007F0100007F00000 | |
| 948 | +03F8000003F8000003F8000003F8000003F8000003F8000003F80007FFF8007FFFF801FFFFF807 | |
| 949 | +FFFFF81FFF03F83FF003F87FC003F87F0003F8FF0003F8FE0003F8FE0003F8FE0003F8FE0003F8 | |
| 950 | +FF0007F87F800FF87FE07FF83FFFFFF83FFFFFF81FFFFBF807FFE3F803FE03F81D257DA427>97 | |
| 951 | +D<0007FE00003FFFC000FFFFF001FFFFF803FFFFF807FC03F80FF000701FE000301FC000003F80 | |
| 952 | +00003F8000007F0000007F0000007F000000FE000000FE000000FE000000FE000000FE000000FE | |
| 953 | +000000FE000000FE000000FE0000007F0000007F0000007F0000003F8000003F8000001FC00004 | |
| 954 | +1FE0001C0FF0007C07FC03FC03FFFFFC01FFFFFC00FFFFF0003FFFC00007FC001E257DA424>99 | |
| 955 | +D<0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000 | |
| 956 | +007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F00 | |
| 957 | +00007F0000007F0000007F0000007F001FE07F007FF87F01FFFE7F03FFFFFF07FFFFFF0FFE07FF | |
| 958 | +0FF001FF1FE000FF3FC0007F3F80007F7F80007F7F00007F7F00007F7F00007FFE00007FFE0000 | |
| 959 | +7FFE00007FFE00007FFE00007FFE00007FFE00007FFE00007FFE00007F7F00007F7F00007F7F00 | |
| 960 | +007F7F80007F3F80007F3FC000FF1FE001FF1FF003FF0FFC0FFF07FFFFFF03FFFF7F01FFFC7F00 | |
| 961 | +7FF87F001FC07F203C7DBB2A>I<0007F800003FFE0000FFFF8001FFFFC003FFFFE007FC1FF00F | |
| 962 | +F007F01FE003F81FC001F83F8000FC3F8000FC7F0000FC7F00007E7FFFFFFEFFFFFFFEFFFFFFFE | |
| 963 | +FFFFFFFEFFFFFFFEFE000000FE000000FE000000FE000000FE0000007E0000007F0000007F0000 | |
| 964 | +003F8000003F8000001FC000041FE0001C0FF8007C07FE03FC03FFFFFC01FFFFF8007FFFE0001F | |
| 965 | +FF800003FC001F257EA424>I<0000FFC00003FFC00007FFC0001FFFC0003FFFC0003F8040007F | |
| 966 | +000000FE000000FC000000FC000001FC000001FC000001FC000001FC000001FC000001FC000001 | |
| 967 | +FC000001FC000001FC000001FC000001FC000001FC000001FC0000FFFFFC00FFFFFC00FFFFFC00 | |
| 968 | +FFFFFC00FFFFFC0001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00 | |
| 969 | +0001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC | |
| 970 | +000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001 | |
| 971 | +FC000001FC000001FC000001FC000001FC00001A3C7FBB19>I<001FE007E0007FF83FE001FFFF | |
| 972 | +FFF003FFFFFFF007FFFFFFF00FF87FE0000FE01FC0001FC00FE0001FC00FE0003F8007F0003F80 | |
| 973 | +07F0003F8007F0003F8007F0003F8007F0003F8007F0003F8007F0001F8007E0001FC00FE0001F | |
| 974 | +C00FE0000FE01FC0000FF87FC00007FFFF80000FFFFF00001FFFFE00001E7FF800001E1FE00000 | |
| 975 | +3E000000003E000000003E000000003F000000001F800000001FFFFF00001FFFFFF0000FFFFFFC | |
| 976 | +000FFFFFFE000FFFFFFF001FFFFFFF803FFFFFFFC03F8000FFC07E00001FC07E00000FE0FC0000 | |
| 977 | +07E0FC000007E0FC000007E0FC000007E0FC000007E07E00000FC07F00001FC03FC0007F801FF8 | |
| 978 | +03FF000FFFFFFE0007FFFFFC0001FFFFF000007FFFC000000FFE000024377EA428>I<FE000000 | |
| 979 | +FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000 | |
| 980 | +00FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00 | |
| 981 | +0000FE000000FE000000FE03FC00FE0FFF00FE3FFFC0FE7FFFE0FEFFFFE0FFF01FF0FFE00FF0FF | |
| 982 | +C007F8FF8007F8FF0003F8FF0003F8FF0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8 | |
| 983 | +FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003 | |
| 984 | +F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE00 | |
| 985 | +03F81D3C7ABB2A>I<FEFEFEFEFEFEFE0000000000000000000000000000FEFEFEFEFEFEFEFEFE | |
| 986 | +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE073A7AB914>I<FEFEFEFE | |
| 987 | +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE | |
| 988 | +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE073C7ABB14>108 D<FE03FC000FF000FE0FFF003FFC | |
| 989 | +00FE3FFFC0FFFF00FE7FFFE1FFFF80FEFFFFE3FFFF80FFF01FF7C07FC0FFE00FFF803FC0FFC007 | |
| 990 | +FF001FE0FF8007FE001FE0FF0003FC000FE0FF0003FC000FE0FF0003FC000FE0FE0003F8000FE0 | |
| 991 | +FE0003F8000FE0FE0003F8000FE0FE0003F8000FE0FE0003F8000FE0FE0003F8000FE0FE0003F8 | |
| 992 | +000FE0FE0003F8000FE0FE0003F8000FE0FE0003F8000FE0FE0003F8000FE0FE0003F8000FE0FE | |
| 993 | +0003F8000FE0FE0003F8000FE0FE0003F8000FE0FE0003F8000FE0FE0003F8000FE0FE0003F800 | |
| 994 | +0FE0FE0003F8000FE0FE0003F8000FE0FE0003F8000FE0FE0003F8000FE0FE0003F8000FE0FE00 | |
| 995 | +03F8000FE0FE0003F8000FE033257AA440>I<FE03FC00FE0FFF00FE3FFFC0FE7FFFE0FEFFFFE0 | |
| 996 | +FFF01FF0FFE00FF0FFC007F8FF8007F8FF0003F8FF0003F8FF0003F8FE0003F8FE0003F8FE0003 | |
| 997 | +F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE00 | |
| 998 | +03F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE | |
| 999 | +0003F8FE0003F8FE0003F81D257AA42A>I<0007FC0000001FFF0000007FFFC00001FFFFF00003 | |
| 1000 | +FFFFF80007FC07FC000FF001FE001FE000FF001FC0007F003F80003F803F80003F807F00001FC0 | |
| 1001 | +7F00001FC07E00000FC0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000F | |
| 1002 | +E0FE00000FE0FE00000FE0FE00000FE07F00001FC07F00001FC07F00001FC03F80003F803F8000 | |
| 1003 | +3F801FC0007F001FE000FF000FF001FE0007FE0FFC0003FFFFF80001FFFFF000007FFFC000001F | |
| 1004 | +FF00000007FC000023257EA428>I<FE03FC00FE1FFF00FE7FFF80FEFFFFC0FFFFFFE0FFF03FF0 | |
| 1005 | +FFC00FF8FF0007F8FE0003FCFE0001FCFE0001FEFE0000FEFE0000FEFE0000FFFE00007FFE0000 | |
| 1006 | +7FFE00007FFE00007FFE00007FFE00007FFE00007FFE00007FFE00007FFE0000FEFE0000FEFE00 | |
| 1007 | +01FEFE0001FCFE0003FCFF0003FCFF0007F8FF801FF0FFE07FE0FFFFFFC0FEFFFF80FE7FFF00FE | |
| 1008 | +1FFE00FE07F000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000 | |
| 1009 | +FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00000020367A | |
| 1010 | +A42A>I<FE00F0FE07F0FE1FF0FE3FF0FE7FF0FEFFF0FFFF00FFF800FFF000FFE000FFC000FF80 | |
| 1011 | +00FF8000FF0000FF0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00 | |
| 1012 | +00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00001425 | |
| 1013 | +7AA41C>114 D<007FC00003FFFC0007FFFF000FFFFF801FFFFF803F803F803F000F007E000300 | |
| 1014 | +7E0000007E0000007E0000007E0000007F0000007FC000003FFC00003FFFC0001FFFF0000FFFFC | |
| 1015 | +0007FFFE0001FFFF00007FFF000007FF8000007F8000001FC000001FC000000FC000000FC04000 | |
| 1016 | +0FC060000FC078001F80FC001F80FF807F80FFFFFF007FFFFE001FFFFC0007FFF000007FC0001A | |
| 1017 | +257EA41F>I<01FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001 | |
| 1018 | +FC000001FC000001FC0000FFFFFE00FFFFFE00FFFFFE00FFFFFE00FFFFFE0001FC000001FC0000 | |
| 1019 | +01FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00 | |
| 1020 | +0001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC | |
| 1021 | +000001FC000001FC000001FC010001FE030001FE0F8000FFFF8000FFFF80007FFE00003FF80000 | |
| 1022 | +1FC00019307FAF1D>I<FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE | |
| 1023 | +0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8 | |
| 1024 | +FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003 | |
| 1025 | +F8FE0007F8FE0007F8FE000FF8FF001FF8FF807FF87FFFFFF87FFFFBF83FFFE3F81FFF83F807FC | |
| 1026 | +03F81D257AA42A>I<7F80003FC03FC0003FC03FC0007F801FE000FF000FF001FE0007F801FC00 | |
| 1027 | +03F803FC0003FC07F80001FE07F00000FF0FE000007F1FE000003FBFC000003FFF8000001FFF00 | |
| 1028 | +00000FFF00000007FE00000007FC00000003F800000003F800000007FC00000007FE0000000FFF | |
| 1029 | +0000001FFF8000003F9F8000003F1FC000007F0FE00000FE07F00001FC07F80003FC03F80003F8 | |
| 1030 | +01FC0007F001FE000FF000FF001FE0007F001FC0003F803FC0003FC07F80001FE0FF00000FF024 | |
| 1031 | +2580A425>120 D E end | |
| 1032 | +%%EndProlog | |
| 1033 | +%%BeginSetup | |
| 1034 | +%%Feature: *Resolution 300 | |
| 1035 | +TeXDict begin @letter /letter where {pop letter} if | |
| 1036 | +%%EndSetup | |
| 1037 | +%%Page: 1 1 | |
| 1038 | +bop -5 173 a Fk(The)27 b(design)f(and)g(implementation)e(of)-5 | |
| 1039 | +255 y(a)j(language)f(fo)n(r)h(extending)e(applications)-5 370 | |
| 1040 | +y 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) | |
| 1042 | +q(o)f(de)g(T)l(ecnologia)g(em)g(Computa\030)-22 b(c~)d(ao)16 | |
| 1043 | +b(Gr\023)-25 b(a\014ca,)15 b(ITS,)h(PUC-Rio)-5 514 y(Pr)o(\023)-24 | |
| 1044 | +b(edio)16 b(do)g(ITS,)g(Rua)g(Marqu)o(^)-24 b(es)15 b(de)i(S~)-25 | |
| 1045 | +b(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 | |
| 1047 | +y 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 | |
| 1050 | +b(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) | |
| 1052 | +o(ely)g(used)f(in)h(pro)q(duction)f(for)g(sev)o(eral)h(tasks)f(including)-5 | |
| 1053 | +959 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 | |
| 1055 | +1019 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 | |
| 1057 | +b(o)g(pro)s(jeto)h(e)f(a)h(implemen)o(ta\030)-22 b(c~)d(ao)10 | |
| 1058 | +b(de)i Fe(Lua)p Ff(,)g(uma)f(linguagem)f(simples,)h(p)q(or)o(\023)-24 | |
| 1059 | +b(em)-5 1193 y(p)q(o)q(derosa,)17 b(para)f(extens~)-25 b(ao)18 | |
| 1060 | +b(de)f(aplica\030)-22 b(c~)d(oes.)24 b(Em)o(b)q(ora)16 b(pro)q(cedural,)f | |
| 1061 | +Fe(Lua)j Ff(con)o(t)o(\023)-24 b(em)16 b(mecanismos)g(para)-5 | |
| 1062 | +1253 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 | |
| 1065 | +b(ario,)24 b(en)o(trada)e(de)i(dados,)g(descri\030)-22 b(c~)d(ao)23 | |
| 1066 | +b(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 | |
| 1068 | +Fd(meta\014les)f Ff(gr\023)-25 b(a\014cos)15 b(estruturados.)-5 | |
| 1069 | +1553 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 | |
| 1073 | +1758 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 | |
| 1075 | +1817 y(to)18 b(increase)d(pro)q(ductivit)o(y)i(\(Ry)o(an)f(1990\).)24 | |
| 1076 | +b(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 | |
| 1079 | +y(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 | |
| 1081 | +1997 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 | |
| 1083 | +2056 y(language)e(for)g(eac)o(h)g(application.)-5 2141 y(Our)c(\014rst)g(exp) | |
| 1084 | +q(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 | |
| 1088 | +b(\(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) | |
| 1094 | +h(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) | |
| 1097 | +o(t)g(application)f(for)-5 2560 y(data)h(description.)k(Therefore,)14 | |
| 1098 | +b(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 | |
| 1101 | +b 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 | |
| 1105 | +Fe(Lua)p Ff(.)-5 2883 y Fc(T)l(eCGraf/ICAD)1674 b(1)p eop | |
| 1106 | +%%Page: 2 2 | |
| 1107 | +bop -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 | |
| 1110 | +b(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 | |
| 1112 | +b(Because)18 b(most)f(extension)h(languages)f(are)g(simple,)g(sp)q(ecialized) | |
| 1113 | +h(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 | |
| 1115 | +b(1991\),)g(in)g(con)o(trast)f(to)i(the)f(\\big",)g(mainstream)-5 | |
| 1116 | +487 y(languages,)k(in)h(whic)o(h)e(applications)h(are)g(written.)32 | |
| 1117 | +b(This)19 b(distinction)f(is)i(not)f(so)h(sharp)e(no)o(w)o(ada)o(ys,)-5 | |
| 1118 | +547 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 | |
| 1120 | +607 y(Extension)f(languages)g(come)g(in)g(sev)o(eral)g(\015a)o(v)o(ors:)-5 | |
| 1121 | +741 y Fb(\017)25 b Fi(con\014guration)d(languages)r Ff(:)34 | |
| 1122 | +b(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 | |
| 1126 | +Fh(.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 | |
| 1128 | +Ff(:)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 | |
| 1131 | +y Fb(\017)25 b Fi(macro)15 b(languages)r Ff(:)21 b(also)15 | |
| 1132 | +b(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 | |
| 1135 | +b(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) | |
| 1138 | +o(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 | |
| 1140 | +1459 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 | |
| 1142 | +1518 y(languages)c(only)i(w)o(ork)e Fd(emb)m(e)m(dde)m(d)k | |
| 1143 | +Ff(in)d(a)h(host)f(clien)o(t,)g(called)g(the)h Fd(emb)m(e)m(dding)h | |
| 1144 | +Ff(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) | |
| 1151 | +i(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 | |
| 1154 | +1877 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 | |
| 1157 | +b(Note)c(that)h(the)f(application)e(programmer)g(in)o(terfaces)-5 | |
| 1158 | +1997 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 | |
| 1160 | +y(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) | |
| 1163 | +h(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 | |
| 1165 | +b(F)l(or)16 b(instance,)f(a)i(ma)s(jor)e(part)h(of)-5 2261 | |
| 1166 | +y(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 | |
| 1168 | +2320 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 | |
| 1170 | +2380 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 | |
| 1172 | +2440 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 | |
| 1175 | +b(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 | |
| 1177 | +2644 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 | |
| 1179 | +2704 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 | |
| 1181 | +Fe(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) | |
| 1183 | +1674 b(2)p eop | |
| 1184 | +%%Page: 3 3 | |
| 1185 | +bop -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) | |
| 1187 | +q(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 | |
| 1189 | +Fe(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 | |
| 1191 | +Fe(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 | |
| 1193 | +b(host)h(can)f(in)o(v)o(ok)o(e)g(functions)-5 487 y(to)k(execute)h(a)f(piece) | |
| 1194 | +g(of)g(co)q(de)g(in)g Fe(Lua)p Ff(,)g(can)g(write)f(and)g(read)h | |
| 1195 | +Fe(Lua)f Ff(v)m(ariables,)h(and)f(can)h(register)f(C)-5 547 | |
| 1196 | +y(functions)f(to)h(b)q(e)g(called)g(b)o(y)f Fe(Lua)g Ff(co)q(de.)32 | |
| 1197 | +b(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 | |
| 1200 | +y(sharing)e(a)i(syn)o(tactical)f(framew)o(ork)f(\(Bec)o(kman)i(1991\).)-5 | |
| 1201 | +751 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 | |
| 1203 | +811 y(of)e(actual)f(co)q(de)g(are)g(included,)f(to)i(giv)o(e)f(a)g(\015a)o(v) | |
| 1204 | +o(or)f(of)h(the)h(language.)31 b(A)21 b(precise)e(de\014nition)g(of)i(the)-5 | |
| 1205 | +871 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 | |
| 1207 | +y Fe(Syntax)-5 1075 y Ff(As)g(men)o(tioned)d(b)q(efore,)j(w)o(e)f(explicitly) | |
| 1208 | +h(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 | |
| 1210 | +Ff(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 | |
| 1215 | +Fh(if-then-elseif-else-en)q(d)p Ff(;)h(and)-5 1314 y(function)22 | |
| 1216 | +b(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 | |
| 1218 | +y(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 | |
| 1220 | +1434 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 | |
| 1222 | +Fe(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 | |
| 1224 | +b(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 | |
| 1227 | +y Ff(All)e(statemen)o(ts)e(in)h Fe(Lua)g Ff(are)g(executed)h(in)f(a)g(global) | |
| 1228 | +g(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 | |
| 1231 | +1877 y(and)k(p)q(ersists)f(un)o(til)g(its)h(end.)23 b(The)17 | |
| 1232 | +b(global)f(en)o(vironmen)o(t)f(can)i(b)q(e)g(manipulated)f(b)o(y)g | |
| 1233 | +Fe(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 | |
| 1236 | +Fe(Lua)p Ff(.)-5 2081 y(The)20 b(unit)f(of)h(execution)g(of)g | |
| 1237 | +Fe(Lua)f Ff(is)h(called)f(a)h Fd(mo)m(dule)t Ff(.)31 b(A)20 | |
| 1238 | +b(mo)q(dule)f(ma)o(y)g(con)o(tain)g(statemen)o(ts)g(and)-5 | |
| 1239 | +2141 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 | |
| 1241 | +b(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 | |
| 1243 | +2261 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 | |
| 1245 | +b(All)-5 2320 y(mo)q(di\014cations)10 b(a)h(mo)q(dule)g(e\013ects)g(on)g(the) | |
| 1246 | +h(global)e(en)o(vironmen)o(t)f(p)q(ersist)i(after)g(its)g(end.)20 | |
| 1247 | +b(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) | |
| 1250 | +f(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 | |
| 1258 | +b(3)p eop | |
| 1259 | +%%Page: 4 4 | |
| 1260 | +bop -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 | |
| 1262 | +223 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 | |
| 1264 | +b Fe(Lua)h Ff(has)-5 283 y(garbage)g(collection:)20 b(it)15 | |
| 1265 | +b(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 | |
| 1267 | +b(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.) | |
| 1269 | +20 b(There)c(are)g(sev)o(en)g(basic)g(data)h(t)o(yp)q(es)f(in)g | |
| 1270 | +Fe(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 | |
| 1272 | +b 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 | |
| 1274 | +b(of)i(c)o(haracters;)-5 671 y Fb(\017)25 b Fi(function)p Ff(:)d(user)15 | |
| 1275 | +b(de\014ned)h(functions;)-5 731 y Fb(\017)25 b Fi(Cfunction)p | |
| 1276 | +Ff(:)d(functions)15 b(pro)o(vided)g(b)o(y)h(the)h(host)f(program;)-5 | |
| 1277 | +791 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 | |
| 1279 | +b(arra)o(ys.)-5 966 y Fe(Lua)24 b Ff(pro)o(vides)f(some)g(automatic)h(t)o(yp) | |
| 1280 | +q(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,) | |
| 1284 | +i(that)e(n)o(um)o(b)q(er)e(is)i(con)o(v)o(erted)f(to)h(a)g(string.)32 | |
| 1285 | +b(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 | |
| 1289 | +b(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 | |
| 1291 | +b(v)m(ariable)g(declarations)e(can)i(b)q(e)g(placed)-5 1349 | |
| 1292 | +y(an)o(ywhere)c(inside)f(a)i(blo)q(c)o(k.)31 b(Therefore,)20 | |
| 1293 | +b(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 | |
| 1296 | +1469 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 | |
| 1299 | +b(there)g(are)g(no)g(unini-)-5 1613 y(tialized)h(v)m(ariables)g(in)g | |
| 1300 | +Fe(Lua)p Ff(,)g(another)g(ma)s(jor)f(source)g(of)i(programming)c(errors.)28 | |
| 1301 | +b(Nev)o(ertheless,)20 b(the)-5 1673 y(only)f(v)m(alid)f(op)q(erations)g(on)h | |
| 1302 | +Fh(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 | |
| 1313 | +2032 y(actually)d(uninitialized)e(v)m(ariables.)-5 2116 y(F)l(unctions)d(are) | |
| 1314 | +i(considered)e(\014rst-class)g(v)m(alues)h(in)h Fe(Lua)p Ff(:)20 | |
| 1315 | +b(they)14 b(can)g(b)q(e)g(stored)f(in)g(v)m(ariables,)h(passed)e(as)-5 | |
| 1316 | +2176 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 | |
| 1318 | +2236 y(its)e(b)q(o)q(dy)g(is)f(compiled)f(and)h(stored)g(in)g(a)g(global)g(v) | |
| 1319 | +m(ariable)g(with)g(the)h(giv)o(en)f(name.)20 b Fe(Lua)15 b | |
| 1320 | +Ff(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 | |
| 1322 | +Fd(Cfunction)t Ff(.)-5 2380 y(The)j(t)o(yp)q(e)g Fd(user)m(data)h | |
| 1323 | +Ff(is)e(pro)o(vided)f(to)i(allo)o(w)f(arbitrary)f(\()p Fh(void*)p | |
| 1324 | +Ff(\))k(C)d(p)q(oin)o(ters)g(to)h(b)q(e)g(stored)f(in)g Fe(Lua)-5 | |
| 1325 | +2440 y Ff(v)m(ariables;)d(its)g(only)g(v)m(alid)h(op)q(erations)e(in)i | |
| 1326 | +Fe(Lua)f Ff(are)g(assignmen)o(t)e(and)i(equalit)o(y)h(test.)-5 | |
| 1327 | +2525 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 | |
| 1330 | +b(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 | |
| 1336 | +Fh(a["name"])p Ff(.)-5 2883 y Fc(T)l(eCGraf/ICAD)1674 b(4)p | |
| 1337 | +eop | |
| 1338 | +%%Page: 5 5 | |
| 1339 | +bop -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 | |
| 1343 | +283 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 | |
| 1345 | +b(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) | |
| 1349 | +o(ords.)36 b(\(Ho)o(w)o(ev)o(er,)22 b(an)g(alphab)q(etically)f(ordered)f(rep) | |
| 1350 | +q(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 | |
| 1352 | +Fe(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 | |
| 1355 | +909 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) | |
| 1358 | +o(t)g(to)h(the)f(initial)g(table)g(size.)22 b(Indep)q(enden)o(tly)14 | |
| 1359 | +b(of)i(the)f(initial)-5 1028 y(dimension,)i(all)i(tables)f(in)g | |
| 1360 | +Fe(Lua)h Ff(expand)f(dynamically)f(as)i(needed.)28 b(Th)o(us,)17 | |
| 1361 | +b(it)i(is)f(p)q(erfectly)i(v)m(alid)e(to)-5 1088 y(refer)e(to)h | |
| 1362 | +Fh(t[200])h Ff(or)e(ev)o(en)g(to)h Fh(t["day"])p Ff(.)-5 1173 | |
| 1363 | +y(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 | |
| 1365 | +1233 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 | |
| 1371 | +y(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 | |
| 1373 | +b(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 | |
| 1375 | +b(=)g(@colors["red",)i("green",)g("blue",)f("yellow"])195 2029 | |
| 1376 | +y(t)f(=)g(@employee{name="john)j(smith",)f(age=34})-5 2114 | |
| 1377 | +y Ff(Here,)15 b Fh(colors)g Ff(and)f Fh(employee)h Ff(are)f(user)f(functions) | |
| 1378 | +h(that)g(are)g(automatically)g(called)g(after)g(the)h(table)-5 | |
| 1379 | +2173 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) | |
| 1381 | +g(for)-5 2233 y(an)o(y)g(other)h(side-e\013ect.)k(Th)o(us,)15 | |
| 1382 | +b(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 | |
| 1385 | +2584 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) | |
| 1387 | +o(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 | |
| 1390 | +b(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 | |
| 1393 | +b(5)p eop | |
| 1394 | +%%Page: 6 6 | |
| 1395 | +bop -5 163 a Fe(The)17 b(application)h(p)o(rogram)c(interface)-5 | |
| 1396 | +248 y Ff(The)24 b(library)e(that)i(implemen)o(ts)e Fe(Lua)h | |
| 1397 | +Ff(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 | |
| 1400 | +b(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 | |
| 1402 | +b(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 | |
| 1405 | +b(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 | |
| 1407 | +547 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) | |
| 1409 | +q(e)-5 607 y(written)d(as)f(follo)o(ws:)195 668 y Fh(#include)27 | |
| 1410 | +b("lua.h")195 728 y(int)f(main\(void\))195 787 y({)221 847 | |
| 1411 | +y(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 | |
| 1413 | +1171 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 | |
| 1415 | +1231 y(made)h(a)o(v)m(ailable)g(to)h Fe(Lua)g Ff(with)f(the)h(API)g(function) | |
| 1416 | +f Fh(lua_register)p Ff(.)25 b(Extension)16 b(functions)g(follo)o(w)g(a)-5 | |
| 1417 | +1290 y(proto)q(col)h(to)f(receiv)o(e)h(and)f(return)f(v)m(alues)h(to)h | |
| 1418 | +Fe(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 | |
| 1420 | +Fe(Lua)g Ff(is)f(small)g(but)h(p)q(o)o(w)o(erful.)20 b(Most)13 | |
| 1421 | +b(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 | |
| 1423 | +b(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 | |
| 1426 | +b(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) | |
| 1429 | +g(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) | |
| 1432 | +h(necessary)e(to)i(the)g(language,)g(and)f(are)-5 1930 y(pro)o(vided)14 | |
| 1433 | +b(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 | |
| 1435 | +y(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 | |
| 1437 | +2186 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 | |
| 1439 | +2245 y(within)e Fe(Lua)p Ff(,)h(i.e.,)f(it)h(is)f(p)q(ossible)f(to)i(write)g | |
| 1440 | +Fe(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) | |
| 1443 | +g(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) | |
| 1445 | +e(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 | |
| 1449 | +b(store\(name,)h(value\))247 2644 y(write\(name)g(..)e('='\))247 | |
| 1450 | +2704 y(write_value\(value\))195 2764 y(end)-5 2883 y Fc(T)l(eCGraf/ICAD)1674 | |
| 1451 | +b(6)p eop | |
| 1452 | +%%Page: 7 7 | |
| 1453 | +bop -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 | |
| 1456 | +Ff(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) | |
| 1458 | +h(prede\014ned)e(function)h Fh(type)p Ff(:)195 359 y Fh(function)27 | |
| 1459 | +b(write_value\(value\))247 419 y(local)g(t)f(=)g(type\(value\))351 | |
| 1460 | +478 y(if)h(t)f(=)h('nil')105 b(then)27 b(write\('nil'\))247 | |
| 1461 | +538 y(elseif)g(t)f(=)h('number')g(then)g(write\(value\))247 | |
| 1462 | +598 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 | |
| 1465 | +Ff(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) | |
| 1470 | +g(constructors:)195 1110 y Fh(function)27 b(write_record\(t\))247 | |
| 1471 | +1169 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 | |
| 1473 | +b(--)27 b(starts)g(constructor)247 1289 y(while)g(i)f(do)299 | |
| 1474 | +1349 y(store\(i,v\))299 1408 y(i,)h(v)f(=)g(next\(t,)h(i\))299 | |
| 1475 | +1468 y(if)g(i)f(then)h(write\(',)g('\))f(end)247 1528 y(end)247 | |
| 1476 | +1588 y(write\('}'\))472 b(--)27 b(closes)g(constructor)195 | |
| 1477 | +1648 y(end)-5 1810 y Fg(Implementation)-5 1894 y Ff(Extension)22 | |
| 1478 | +b(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 | |
| 1484 | +b(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 | |
| 1486 | +Ff(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) | |
| 1488 | +o(hine,)f(and)g(then)h(sim)o(ulate)e(the)i(virtual)f(mac)o(hine)f(b)o(y)h(in) | |
| 1489 | +o(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 | |
| 1494 | +b 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 | |
| 1496 | +y(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 | |
| 1498 | +2515 y(shorter)15 b(dev)o(elopmen)o(t)h(cycle)h(and)f(faster)g(execution;)-5 | |
| 1499 | +2584 y Fb(\017)25 b Ff(if)18 b(an)g(external)g(compiler)f(is)h(used,)f(there) | |
| 1500 | +h(is)g(the)g(p)q(ossibilit)o(y)f(of)h(pro)o(viding)e(extension)i(programs)45 | |
| 1501 | +2644 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 | |
| 1503 | +2704 y(and)e(smaller)e(run-time)h(supp)q(ort)g(\(ho)o(w)o(ev)o(er,)h(linking) | |
| 1504 | +f(sev)o(eral)g(pre-compiled)f(extension)i(programs)45 2764 | |
| 1505 | +y(can)i(b)q(e)h(a)g(di\016cult)e(task\).)-5 2883 y Fc(T)l(eCGraf/ICAD)1674 | |
| 1506 | +b(7)p eop | |
| 1507 | +%%Page: 8 8 | |
| 1508 | +bop -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 | |
| 1510 | +223 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 | |
| 1512 | +283 y(system)e(based)g(on)f(P-co)q(de)h(\(Clark{Ko)q(ehler)g(1982\).)39 | |
| 1513 | +b(In)22 b(these)g(systems,)h(b)o(yteco)q(des)f(for)g(virtual)-5 | |
| 1514 | +343 y(mac)o(hines)14 b(w)o(ere)g(used)h(b)q(oth)g(for)g(reducing)e(complexit) | |
| 1515 | +o(y)i(and)g(for)g(increasing)e(p)q(ortabilit)o(y)l(.)21 b(This)14 | |
| 1516 | +b(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 | |
| 1518 | +487 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 | |
| 1520 | +547 y Ff(and)e Fe(y)o(acc)g Ff(\(Levine{Mason{Bro)o(wn)e(1992\).)22 | |
| 1521 | +b(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) | |
| 1524 | +g(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 | |
| 1526 | +b(implemen)o(tation)-5 726 y(of)i Fe(Lua)f Ff(uses)g Fe(y)o(acc)h | |
| 1527 | +Ff(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 | |
| 1529 | +b(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 | |
| 1533 | +b(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 | |
| 1536 | +1219 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 | |
| 1538 | +b(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,) | |
| 1541 | +15 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) | |
| 1543 | +h(the)g(stac)o(k)g(and)g(the)g(execution)h(of)f(programs.)22 | |
| 1544 | +b(These)17 b(registers)f(are)h Fd(b)m(ase)-5 1458 y(of)i(stack)p | |
| 1545 | +Ff(,)d Fd(top)j(of)f(stack)f Ff(and)f Fd(pr)m(o)m(gr)m(am)k(c)m(ounter)p | |
| 1546 | +Ff(.)-5 1543 y(Programs)j(for)h(the)g(virtual)g(mac)o(hine)f(are)h(sequences) | |
| 1547 | +g(of)h(instructions,)f(called)g Fd(byte)m(c)m(o)m(des)p Ff(.)48 | |
| 1548 | +b(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 | |
| 1550 | +1663 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 | |
| 1552 | +1777 y Fh(a)26 b(=)g(b)g(+)h(f\(c\))-5 1862 y Ff(is)16 b(compiled)g(in)o(to) | |
| 1553 | +195 1962 y Fh(PUSHGLOBAL)80 b("b")195 2022 y(PUSHGLOBAL)g("f")195 | |
| 1554 | +2081 y(PUSHMARK)195 2141 y(PUSHGLOBAL)g("c")195 2201 y(CALLFUNC)195 | |
| 1555 | +2261 y(ADJUST)210 b(2)195 2320 y(ADD)195 2380 y(STOREGLOBAL)54 | |
| 1556 | +b("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 | |
| 1562 | +b(Other)11 b(instructions)-5 2644 y(\(e.g.,)16 b Fh(PUSHGLOBAL)i | |
| 1563 | +Ff(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 | |
| 1565 | +b(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 | |
| 1568 | +Fh(NOP)p Ff(s)h(to)g(the)g(alignmen)o(t)e(b)q(oundary)l(.)-5 | |
| 1569 | +2883 y Fc(T)l(eCGraf/ICAD)1674 b(8)p eop | |
| 1570 | +%%Page: 9 9 | |
| 1571 | +bop -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 | |
| 1573 | +Fh(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 | |
| 1577 | +b(Th)o(us,)15 b(w)o(e)-5 343 y(ha)o(v)o(e)k Fh(PUSHNIL)p Ff(,)h | |
| 1578 | +Fh(PUSH0)p Ff(,)h Fh(PUSH1)p Ff(,)g Fh(PUSH2)p Ff(.)31 b(Suc)o(h)18 | |
| 1579 | +b(optimizations)g(reduce)h(b)q(oth)g(the)h(space)f(required)-5 | |
| 1580 | +402 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 | |
| 1582 | +Ff(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 | |
| 1585 | +b(at)e(run)f(time,)g(to)h(a)g(giv)o(en)f(length:)24 b(if)-5 | |
| 1586 | +607 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 | |
| 1588 | +666 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 | |
| 1591 | +Fh(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 | |
| 1593 | +Fe(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.) | |
| 1595 | +24 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 | |
| 1598 | +b(adjustmen)o(t)h(m)o(ust)g(b)q(e)h(done)f(at)h(run)f(time.)22 | |
| 1599 | +b(Similarly)l(,)15 b(the)i(compiler)e(do)q(es)i(not)-5 1050 | |
| 1600 | +y(kno)o(w)f(ho)o(w)g(man)o(y)f(parameters)g(a)h(function)g(tak)o(es.)22 | |
| 1601 | +b(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 | |
| 1604 | +1194 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) | |
| 1606 | +q(de)-5 1254 y(to)j(eac)o(h)f(suc)o(h)g(function)g(\(Betz)i(1988\).)25 | |
| 1607 | +b(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 | |
| 1610 | +1374 y Fe(Lua)e Ff(has)f(8-bit)g(b)o(yteco)q(des)h(and)f(already)g(uses)g(ab) | |
| 1611 | +q(out)g(60)h(of)g(them)f(for)h(its)f(primitiv)o(e)g(instructions.)-5 | |
| 1612 | +1433 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 | |
| 1614 | +1493 y(functions)24 b(lik)o(e)g(nativ)o(e)h Fe(Lua)f Ff(functions.)45 | |
| 1615 | +b(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 | |
| 1618 | +1638 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 | |
| 1622 | +b(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 | |
| 1624 | +b(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 | |
| 1630 | +Ff(As)22 b(men)o(tioned)e(b)q(efore,)i(v)m(ariables)f(in)f | |
| 1631 | +Fe(Lua)i Ff(are)f(not)g(t)o(yp)q(ed;)j(only)d(v)m(alues)g(are.)36 | |
| 1632 | +b(Th)o(us,)21 b(v)m(alues)g(are)-5 2236 y(implemen)o(ted)15 | |
| 1633 | +b(in)g(a)h Fh(struct)i Ff(with)e(t)o(w)o(o)f(\014elds:)21 b(a)16 | |
| 1634 | +b(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 | |
| 1640 | +Ff(con)o(tain)e(p)q(oin)o(ters)h(to)g(this)g(arra)o(y)l(.)32 | |
| 1641 | +b(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 | |
| 1643 | +b(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 | |
| 1652 | +b(b)o(y)-5 2883 y Fc(T)l(eCGraf/ICAD)1674 b(9)p eop | |
| 1653 | +%%Page: 10 10 | |
| 1654 | +bop -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 | |
| 1658 | +b(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.) | |
| 1663 | +29 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 | |
| 1666 | +b(If)16 b(no)f(space)h(is)f(reco)o(v)o(ered)g(\(b)q(ecause)h(all)f(v)m(alues) | |
| 1667 | +h(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 | |
| 1669 | +691 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 | |
| 1671 | +751 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 | |
| 1673 | +811 y(garbage)20 b(collection)g(is)g(an)g(asset.)34 b(Ho)o(w)o(ev)o(er,)20 | |
| 1674 | +b(when)g Fe(Lua)g Ff(is)g(used)g(em)o(b)q(edded)f(in)h(a)h(host)f(program)-5 | |
| 1675 | +871 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 | |
| 1677 | +930 y(programmer)f(who)i(needs)g(to)h(in)o(terface)g(with)f | |
| 1678 | +Fe(Lua)p Ff(:)21 b(care)16 b(should)e(b)q(e)i(tak)o(en)g(not)f(to)h(store)g | |
| 1679 | +Fe(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 | |
| 1688 | +b(for)f(memory)f(managemen)o(t)g(using)h(the)g(standard)f(C)i(library)l(.)-5 | |
| 1689 | +1397 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 | |
| 1695 | +b(of)i(user)e(in)o(terfaces;)-5 1755 y Fb(\017)25 b Ff(programmer)14 | |
| 1696 | +b(description)h(of)i(application)e(ob)s(jects;)-5 1819 y Fb(\017)25 | |
| 1697 | +b 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 | |
| 1699 | +b(and)g(application)f(programs.)-5 1977 y(Moreo)o(v)o(er,)g | |
| 1700 | +Fe(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) | |
| 1703 | +o(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) | |
| 1704 | +g(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) | |
| 1711 | +e(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 | |
| 1713 | +y Fh(ftp.icad.puc-rio.br:/p)q(ub/lua)q(/lua-1.)q(1.tar.Z)q | |
| 1714 | +Ff(.)-5 2560 y Fe(Ackno)o(wledgments)-5 2644 y Ff(W)l(e)f(w)o(ould)d(lik)o(e) | |
| 1715 | +i(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 | |
| 1717 | +b(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 | |
| 1721 | +2883 y Fc(T)l(eCGraf/ICAD)1652 b(10)p eop | |
| 1722 | +%%Page: 11 11 | |
| 1723 | +bop -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) | |
| 1725 | +o(",)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 | |
| 1728 | +Ff(,)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 | |
| 1731 | +Fa(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 | |
| 1734 | +Fi(More)f(programming)d(p)q(earls)p Ff(,)j(Addison-W)l(esley)l(,)f(1988.)-5 | |
| 1735 | +881 y(D.)i(Betz,)g(\\Em)o(b)q(edded)e(languages",)g Fi(Byte)j | |
| 1736 | +Fa(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 | |
| 1738 | +Fi(Dr.)h(Dobb's)f(Journal)f Fa(16)i Ff(\(9\))h(\(Sep)f(1991\))70 | |
| 1739 | +1015 y(26{33.)-5 1090 y(T.)h(Budd,)e Fi(A)i(Little)h(Smalltalk)p | |
| 1740 | +Ff(,)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 | |
| 1747 | +1433 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 | |
| 1749 | +1568 y(N.)e(F)l(ranks,)d(\\Adding)h(an)h(extension)g(language)f(to)i(y)o(our) | |
| 1750 | +e(soft)o(w)o(are",)g Fi(Dr.)g(Dobb's)g(Journal)g Fa(16)g Ff(\(9\))70 | |
| 1751 | +1628 y(\(Sep)e(1991\))h(34{43.)-5 1702 y(A.)24 b(Goldb)q(erg,)f(D.)h(Robson,) | |
| 1752 | +e Fi(Smalltalk-80:)g(the)i(language)f(and)g(its)h(implemen)o(tation)p | |
| 1753 | +Ff(,)d(Addison-)70 1762 y(W)l(esley)l(,)16 b(1983.)-5 1837 | |
| 1754 | +y(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 | |
| 1756 | +1897 y(ming)g(language)f Fe(Lua)p Ff(",)h Fi(Monogra\014as)e(em)j(Ci)o(^)-24 | |
| 1757 | +b(encia)16 b(da)g(Computa\030)-22 b(c~)d(ao)16 b Fa(4/94)p | |
| 1758 | +Ff(,)f(Departamen)o(to)g(de)70 1956 y(Inform\023)-25 b(atica,)15 | |
| 1759 | +b(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 | |
| 1763 | +Ff(.)-5 2181 y(M.)i(Ric)o(hards,)e(C.)j(Whitb)o(y-Strev)o(ens,)d | |
| 1764 | +Fi(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\)) | |
| 1767 | +f(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 | |
| 1769 | +Fa(16)h Ff(\(9\))h(\(Sep)g(1991\))f(16{25.)-5 2883 y Fc(T)l(eCGraf/ICAD)1652 | |
| 1770 | +b(11)p eop | |
| 1771 | +%%Trailer | |
| 1772 | +end | |
| 1773 | +userdict /end-hook known{end-hook}if | |
| 1774 | +%%EOF | |
Binary file not shown.
| @@ -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 | |
| 9 | +load def /X{S N}B /TR /translate load N /isls false N /vsize 10 N /@rigin{ | |
| 10 | +isls{[0 1 -1 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale | |
| 11 | +Resolution 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 | |
| 20 | +ne{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 | |
| 22 | +sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data | |
| 23 | +dup length 1 sub get}B /ctr 0 N /CharBuilder{save 3 1 roll S dup /base get 2 | |
| 24 | +index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff ch-yoff | |
| 25 | +ch-height sub ch-xoff ch-width add ch-yoff setcachedevice ch-width ch-height | |
| 26 | +true[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 | |
| 28 | +ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf div put}if put /ctr | |
| 29 | +ctr 1 add N}B /I{cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI | |
| 30 | +save N @rigin 0 0 moveto}B /eop{clear SI restore showpage userdict /eop-hook | |
| 31 | +known{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 | |
| 33 | +string 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 | |
| 35 | +scale 1 1 false RMat{BDot}imagemask grestore}B /a{moveto}B /delta 0 N /tail{ | |
| 36 | +dup /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 | |
| 42 | +TeXDict begin 1000 300 300 @start /Fa 7 121 df<1FF0003FFC007FFE00780F00300700 | |
| 43 | +000380000380007F8007FF801FFF803F8380780380700380E00380E00380E00380700780780F80 | |
| 44 | +3FFFFC1FFDFC07F0FC16157D941A>97 D<01F80007FF000FFF801E07C03C01C07800E07000E0E0 | |
| 45 | +0070E00070FFFFF0FFFFF0FFFFF0E000007000007000007800703C00701F01F00FFFE003FFC000 | |
| 46 | +FE0014157D941A>101 D<FE3E00FEFF80FFFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E | |
| 47 | +00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0FFE3FEFFE7FEFFE3FE17157F94 | |
| 48 | +1A>110 D<7F83F0FF8FF87FBFFC03FC3C03F01803E00003C00003C00003800003800003800003 | |
| 49 | +80000380000380000380000380000380000380007FFF00FFFF007FFF0016157E941A>114 | |
| 50 | +D<00C00001C00001C00001C00001C00001C00001C0007FFFE0FFFFE0FFFFE001C00001C00001C0 | |
| 51 | +0001C00001C00001C00001C00001C00001C00001C00001C07001C07001C07001C07000E0E000FF | |
| 52 | +E0007FC0001F00141C7F9B1A>116 D<7F83FCFFC7FE7F83FC0E00E00E00E00E00E00701C00701 | |
| 53 | +C00701C003838003838003838001C70001C70001C70000EE0000EE0000EE00007C00007C000038 | |
| 54 | +0017157F941A>118 D<7FC7F87FCFFC7FC7F80703C003838003C70001EF0000FE00007C000078 | |
| 55 | +00003800007C0000EE0001EE0001C7000383800783C00F01C07FC7FCFFC7FE7FC7FC17157F941A | |
| 56 | +>120 D E /Fb 46 121 df<000FF000007FFC0001F80E0003E01F0007C03F000F803F000F803F | |
| 57 | +000F801E000F800C000F8000000F8000000F8000000F800000FFFFFF00FFFFFF000F801F000F80 | |
| 58 | +1F000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F | |
| 59 | +801F000F801F000F801F000F801F000F801F000F801F000F801F007FF0FFE07FF0FFE01B237FA2 | |
| 60 | +1F>12 D<387CFEFEFE7C3807077C8610>46 D<0000180000380000380000700000700000E00000 | |
| 61 | +E00000E00001C00001C0000380000380000380000700000700000700000E00000E00001C00001C | |
| 62 | +00001C0000380000380000700000700000700000E00000E00001C00001C00001C0000380000380 | |
| 63 | +000700000700000700000E00000E00000E00001C00001C00003800003800003800007000007000 | |
| 64 | +00E00000E00000C0000015317DA41C>I<00180000780001F800FFF800FFF80001F80001F80001 | |
| 65 | +F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001 | |
| 66 | +F80001F80001F80001F80001F80001F80001F80001F80001F80001F8007FFFE07FFFE013207C9F | |
| 67 | +1C>49 D<03FC000FFF003C1FC07007E07C07F0FE03F0FE03F8FE03F8FE01F87C01F83803F80003 | |
| 68 | +F80003F00003F00007E00007C0000F80001F00003E0000380000700000E01801C0180380180700 | |
| 69 | +180E00380FFFF01FFFF03FFFF07FFFF0FFFFF0FFFFF015207D9F1C>I<00FE0007FFC00F07E01E | |
| 70 | +03F03F03F03F81F83F81F83F81F81F03F81F03F00003F00003E00007C0001F8001FE0001FF0000 | |
| 71 | +07C00001F00001F80000FC0000FC3C00FE7E00FEFF00FEFF00FEFF00FEFF00FC7E01FC7801F81E | |
| 72 | +07F00FFFC001FE0017207E9F1C>I<0000E00001E00003E00003E00007E0000FE0001FE0001FE0 | |
| 73 | +0037E00077E000E7E001C7E00187E00307E00707E00E07E00C07E01807E03807E07007E0E007E0 | |
| 74 | +FFFFFEFFFFFE0007E00007E00007E00007E00007E00007E00007E000FFFE00FFFE17207E9F1C> | |
| 75 | +I<1000201E01E01FFFC01FFF801FFF001FFE001FF8001BC00018000018000018000018000019FC | |
| 76 | +001FFF001E0FC01807E01803E00003F00003F00003F80003F83803F87C03F8FE03F8FE03F8FC03 | |
| 77 | +F0FC03F07007E03007C01C1F800FFF0003F80015207D9F1C>I<001F8000FFE003F07007C0F00F | |
| 78 | +01F81F01F83E01F83E01F87E00F07C00007C0000FC0800FC7FC0FCFFE0FD80F0FF00F8FE007CFE | |
| 79 | +007CFC007EFC007EFC007EFC007E7C007E7C007E7C007E3C007C3E007C1E00F80F00F00783E003 | |
| 80 | +FFC000FF0017207E9F1C>I<6000007800007FFFFE7FFFFE7FFFFC7FFFF87FFFF87FFFF0E00060 | |
| 81 | +E000C0C00180C00300C00300000600000C00001C0000180000380000780000780000F00000F000 | |
| 82 | +00F00001F00001F00001F00003F00003F00003F00003F00003F00003F00003F00001E00017227D | |
| 83 | +A11C>I<000070000000007000000000F800000000F800000000F800000001FC00000001FC0000 | |
| 84 | +0003FE00000003FE00000003FE00000006FF000000067F0000000E7F8000000C3F8000000C3F80 | |
| 85 | +0000183FC00000181FC00000381FE00000300FE00000300FE00000600FF000006007F00000E007 | |
| 86 | +F80000FFFFF80000FFFFF800018001FC00018001FC00038001FE00030000FE00030000FE000600 | |
| 87 | +007F000600007F00FFE00FFFF8FFE00FFFF825227EA12A>65 D<0003FE0080001FFF818000FF01 | |
| 88 | +E38001F8003F8003E0001F8007C0000F800F800007801F800007803F000003803F000003807F00 | |
| 89 | +0001807E000001807E00000180FE00000000FE00000000FE00000000FE00000000FE00000000FE | |
| 90 | +00000000FE00000000FE000000007E000000007E000001807F000001803F000001803F00000380 | |
| 91 | +1F800003000F8000030007C000060003F0000C0001F800380000FF00F000001FFFC0000003FE00 | |
| 92 | +0021227DA128>67 D<FFFFFF8000FFFFFFF00007F003FC0007F0007E0007F0003F0007F0001F80 | |
| 93 | +07F0000FC007F00007E007F00007E007F00007F007F00003F007F00003F007F00003F007F00003 | |
| 94 | +F807F00003F807F00003F807F00003F807F00003F807F00003F807F00003F807F00003F807F000 | |
| 95 | +03F807F00003F007F00003F007F00003F007F00007E007F00007E007F0000FC007F0001F8007F0 | |
| 96 | +003F0007F0007E0007F003FC00FFFFFFF000FFFFFF800025227EA12B>I<FFFFFFFCFFFFFFFC07 | |
| 97 | +F000FC07F0003C07F0001C07F0000C07F0000E07F0000E07F0000607F0180607F0180607F01806 | |
| 98 | +07F0180007F0380007F0780007FFF80007FFF80007F0780007F0380007F0180007F0180007F018 | |
| 99 | +0307F0180307F0000307F0000607F0000607F0000607F0000E07F0000E07F0001E07F0003E07F0 | |
| 100 | +01FCFFFFFFFCFFFFFFFC20227EA125>I<FFFFFFF8FFFFFFF807F001F807F0007807F0003807F0 | |
| 101 | +001807F0001C07F0001C07F0000C07F0000C07F0180C07F0180C07F0180007F0180007F0380007 | |
| 102 | +F0780007FFF80007FFF80007F0780007F0380007F0180007F0180007F0180007F0180007F00000 | |
| 103 | +07F0000007F0000007F0000007F0000007F0000007F0000007F00000FFFFE000FFFFE0001E227E | |
| 104 | +A123>I<FFFF83FFFEFFFF83FFFE07F0001FC007F0001FC007F0001FC007F0001FC007F0001FC0 | |
| 105 | +07F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001F | |
| 106 | +C007FFFFFFC007FFFFFFC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F000 | |
| 107 | +1FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0 | |
| 108 | +001FC007F0001FC0FFFF83FFFEFFFF83FFFE27227EA12C>72 D<FFFFE0FFFFE003F80003F80003 | |
| 109 | +F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003 | |
| 110 | +F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003 | |
| 111 | +F80003F800FFFFE0FFFFE013227FA115>I<FFFFE000FFFFE00007F0000007F0000007F0000007 | |
| 112 | +F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F00000 | |
| 113 | +07F0000007F0000007F0000007F0000007F0000007F0000007F0001807F0001807F0001807F000 | |
| 114 | +1807F0003807F0003807F0007007F0007007F000F007F001F007F007F0FFFFFFF0FFFFFFF01D22 | |
| 115 | +7EA122>76 D<FFF000000FFFFFF800001FFF07F800001FE006FC000037E006FC000037E006FC00 | |
| 116 | +0037E0067E000067E0067E000067E0063F0000C7E0063F0000C7E0061F800187E0061F800187E0 | |
| 117 | +060FC00307E0060FC00307E0060FC00307E00607E00607E00607E00607E00603F00C07E00603F0 | |
| 118 | +0C07E00601F81807E00601F81807E00601F81807E00600FC3007E00600FC3007E006007E6007E0 | |
| 119 | +06007E6007E006003FC007E006003FC007E006001F8007E006001F8007E006001F8007E006000F | |
| 120 | +0007E0FFF00F00FFFFFFF00600FFFF30227EA135>I<0007FC0000003FFF800000FC07E00003F0 | |
| 121 | +01F80007E000FC000FC0007E001F80003F001F80003F003F00001F803F00001F807F00001FC07E | |
| 122 | +00000FC07E00000FC0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0 | |
| 123 | +FE00000FE0FE00000FE0FE00000FE07E00000FC07F00001FC07F00001FC03F00001F803F80003F | |
| 124 | +801F80003F000FC0007E0007E000FC0003F001F80000FC07E000003FFF80000007FC000023227D | |
| 125 | +A12A>79 D<FFFFFF00FFFFFFE007F007F007F001FC07F000FC07F0007E07F0007E07F0007F07F0 | |
| 126 | +007F07F0007F07F0007F07F0007F07F0007E07F0007E07F000FC07F001FC07F007F007FFFFE007 | |
| 127 | +FFFF0007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F00000 | |
| 128 | +07F0000007F0000007F0000007F00000FFFF8000FFFF800020227EA126>I<01FC0407FF8C1F03 | |
| 129 | +FC3C007C7C003C78001C78001CF8000CF8000CFC000CFC0000FF0000FFE0007FFF007FFFC03FFF | |
| 130 | +F01FFFF80FFFFC03FFFE003FFE0003FF00007F00003F00003FC0001FC0001FC0001FE0001EE000 | |
| 131 | +1EF0003CFC003CFF00F8C7FFE080FF8018227DA11F>83 D<7FFFFFFF807FFFFFFF807E03F80F80 | |
| 132 | +7803F807807003F803806003F80180E003F801C0E003F801C0C003F800C0C003F800C0C003F800 | |
| 133 | +C0C003F800C00003F800000003F800000003F800000003F800000003F800000003F800000003F8 | |
| 134 | +00000003F800000003F800000003F800000003F800000003F800000003F800000003F800000003 | |
| 135 | +F800000003F800000003F800000003F800000003F800000003F8000003FFFFF80003FFFFF80022 | |
| 136 | +227EA127>I<FFFF800FFEFFFF800FFE07F00000C007F80000C003F800018003F800018001FC00 | |
| 137 | +030001FC00030001FE00070000FE00060000FF000600007F000C00007F800C00003F801800003F | |
| 138 | +801800003FC03800001FC03000001FE03000000FE06000000FF060000007F0C0000007F0C00000 | |
| 139 | +07F9C0000003F980000003FD80000001FF00000001FF00000000FE00000000FE00000000FE0000 | |
| 140 | +00007C000000007C00000000380000000038000027227FA12A>86 D<07FC001FFF803F07C03F03 | |
| 141 | +E03F01E03F01F01E01F00001F00001F0003FF003FDF01FC1F03F01F07E01F0FC01F0FC01F0FC01 | |
| 142 | +F0FC01F07E02F07E0CF81FF87F07E03F18167E951B>97 D<FF000000FF0000001F0000001F0000 | |
| 143 | +001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0F | |
| 144 | +E0001F3FF8001FF07C001F801E001F001F001F000F801F000F801F000FC01F000FC01F000FC01F | |
| 145 | +000FC01F000FC01F000FC01F000FC01F000FC01F000F801F001F801F801F001FC03E001EE07C00 | |
| 146 | +1C3FF800180FC0001A237EA21F>I<00FF8007FFE00F83F01F03F03E03F07E03F07C01E07C0000 | |
| 147 | +FC0000FC0000FC0000FC0000FC0000FC00007C00007E00007E00003E00301F00600FC0E007FF80 | |
| 148 | +00FE0014167E9519>I<0001FE000001FE0000003E0000003E0000003E0000003E0000003E0000 | |
| 149 | +003E0000003E0000003E0000003E0000003E0000003E0001FC3E0007FFBE000F81FE001F007E00 | |
| 150 | +3E003E007E003E007C003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E | |
| 151 | +00FC003E007C003E007C003E003E007E001E00FE000F83BE0007FF3FC001FC3FC01A237EA21F> | |
| 152 | +I<00FE0007FF800F87C01E01E03E01F07C00F07C00F8FC00F8FC00F8FFFFF8FFFFF8FC0000FC00 | |
| 153 | +00FC00007C00007C00007E00003E00181F00300FC07003FFC000FF0015167E951A>I<003F8000 | |
| 154 | +FFC001E3E003C7E007C7E00F87E00F83C00F80000F80000F80000F80000F80000F8000FFFC00FF | |
| 155 | +FC000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F | |
| 156 | +80000F80000F80000F80000F80000F80007FF8007FF80013237FA211>I<03FC1E0FFF7F1F0F8F | |
| 157 | +3E07CF3C03C07C03E07C03E07C03E07C03E07C03E03C03C03E07C01F0F801FFF0013FC00300000 | |
| 158 | +3000003800003FFF801FFFF00FFFF81FFFFC3800FC70003EF0001EF0001EF0001EF0001E78003C | |
| 159 | +7C007C3F01F80FFFE001FF0018217E951C>I<FF000000FF0000001F0000001F0000001F000000 | |
| 160 | +1F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F07E0001F1FF8 | |
| 161 | +001F307C001F403C001F803E001F803E001F003E001F003E001F003E001F003E001F003E001F00 | |
| 162 | +3E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E00FFE1FFC0FF | |
| 163 | +E1FFC01A237EA21F>I<1C003F007F007F007F003F001C000000000000000000000000000000FF | |
| 164 | +00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00 | |
| 165 | +FFE0FFE00B247EA310>I<0038007C00FE00FE00FE007C00380000000000000000000000000000 | |
| 166 | +03FE03FE003E003E003E003E003E003E003E003E003E003E003E003E003E003E003E003E003E00 | |
| 167 | +3E003E003E003E003E003E783EFC3EFC3CFC7C78F87FE01F800F2E83A311>I<FF00FF001F001F | |
| 168 | +001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00 | |
| 169 | +1F001F001F001F001F001F001F001F001F001F00FFE0FFE00B237EA210>108 | |
| 170 | +D<FF07F007F000FF1FFC1FFC001F303E303E001F403E403E001F801F801F001F801F801F001F00 | |
| 171 | +1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F | |
| 172 | +001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00 | |
| 173 | +1F001F00FFE0FFE0FFE0FFE0FFE0FFE02B167E9530>I<FF07E000FF1FF8001F307C001F403C00 | |
| 174 | +1F803E001F803E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E | |
| 175 | +001F003E001F003E001F003E001F003E001F003E001F003E00FFE1FFC0FFE1FFC01A167E951F> | |
| 176 | +I<00FE0007FFC00F83E01E00F03E00F87C007C7C007C7C007CFC007EFC007EFC007EFC007EFC00 | |
| 177 | +7EFC007EFC007E7C007C7C007C3E00F81F01F00F83E007FFC000FE0017167E951C>I<FF0FE000 | |
| 178 | +FF3FF8001FF07C001F803E001F001F001F001F801F001F801F000FC01F000FC01F000FC01F000F | |
| 179 | +C01F000FC01F000FC01F000FC01F000FC01F001F801F001F801F803F001FC03E001FE0FC001F3F | |
| 180 | +F8001F0FC0001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F000000FF | |
| 181 | +E00000FFE000001A207E951F>I<FE1F00FE3FC01E67E01EC7E01E87E01E87E01F83C01F00001F | |
| 182 | +00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F0000FFF000FF | |
| 183 | +F00013167E9517>114 D<0FF3003FFF00781F00600700E00300E00300F00300FC00007FE0007F | |
| 184 | +F8003FFE000FFF0001FF00000F80C00780C00380E00380E00380F00700FC0E00EFFC00C7F00011 | |
| 185 | +167E9516>I<0180000180000180000180000380000380000780000780000F80003F8000FFFF00 | |
| 186 | +FFFF000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F8180 | |
| 187 | +0F81800F81800F81800F81800F830007C30003FE0000F80011207F9F16>I<FF01FE00FF01FE00 | |
| 188 | +1F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E | |
| 189 | +001F003E001F003E001F003E001F003E001F003E001F007E001F00FE000F81BE0007FF3FC001FC | |
| 190 | +3FC01A167E951F>I<FFE01FE0FFE01FE00F8006000F8006000FC00E0007C00C0007E01C0003E0 | |
| 191 | +180003E0180001F0300001F0300000F8600000F86000007CC000007CC000007FC000003F800000 | |
| 192 | +3F8000001F0000001F0000000E0000000E00001B167F951E>I<FFE7FF07F8FFE7FF07F81F0078 | |
| 193 | +00C00F807801800F807C01800F807C018007C07E030007C0DE030007E0DE070003E0DF060003E1 | |
| 194 | +8F060001F18F0C0001F38F8C0001FB079C0000FB07D80000FE03D800007E03F000007E03F00000 | |
| 195 | +7C01F000003C01E000003800E000001800C00025167F9528>I<FFE07FC0FFE07FC00F801C0007 | |
| 196 | +C0380003E0700003F0600001F8C00000F98000007F8000003F0000001F0000001F8000003FC000 | |
| 197 | +0037C0000063E00000C1F00001C0F8000380FC0007007E000E003E00FF80FFE0FF80FFE01B167F | |
| 198 | +951E>I E /Fc 1 98 df<03CC0E2E181C381C301C701CE038E038E038E038C072C072C07260F2 | |
| 199 | +61341E180F107C8F14>97 D E /Fd 2 104 df<007001C0038007000700070007000700070007 | |
| 200 | +000700070007000700070007000E001C00F0001C000E0007000700070007000700070007000700 | |
| 201 | +07000700070007000700038001C000700C257D9B13>102 D<F0001C000E000700070007000700 | |
| 202 | +070007000700070007000700070007000700038001C0007001C003800700070007000700070007 | |
| 203 | +0007000700070007000700070007000E001C00F0000C257D9B13>I E /Fe | |
| 204 | +34 122 df<00FC000182000703000607000E02000E00000E00000E00000E00000E0000FFFF000E | |
| 205 | +07000E07000E07000E07000E07000E07000E07000E07000E07000E07000E07000E07000E07000E | |
| 206 | +07007F0FE0131A809915>12 D<60F0F868080808101020C0050B7D990B>39 | |
| 207 | +D<60F0F07010101020204080040B7D830B>44 D<60F0F06004047D830B>46 | |
| 208 | +D<078018603030303060186018E01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01C6018 | |
| 209 | +601870383030186007800E187E9713>48 D<0F8010E02070607870382038007800700070006000 | |
| 210 | +C00F8000E000700038003C003CE03CE03CC03C4038407030E00F800E187E9713>51 | |
| 211 | +D<60F0F060000000000000000060F0F0701010102020408004177D8F0B>59 | |
| 212 | +D<000C0000000C0000000C0000001E0000001E0000003F00000027000000270000004380000043 | |
| 213 | +8000004380000081C0000081C0000081C0000100E0000100E00001FFE000020070000200700006 | |
| 214 | +007800040038000400380008001C0008001C001C001E00FF00FFC01A1A7F991D>65 | |
| 215 | +D<FFFF000E01C00E00E00E00700E00780E00780E00780E00780E00780E00F00E00E00E03C00FFF | |
| 216 | +800E01E00E00700E00780E003C0E003C0E003C0E003C0E003C0E00380E00780E00F00E01E0FFFF | |
| 217 | +80161A7E991B>I<FFFFE00E00E00E00600E00200E00300E00100E00100E00100E04000E04000E | |
| 218 | +04000E0C000FFC000E0C000E04000E04000E04000E00000E00000E00000E00000E00000E00000E | |
| 219 | +00000E0000FFF000141A7E9919>70 D<FE01FF0F00380F00100B80100B801009C01008E01008E0 | |
| 220 | +10087010087010083810081C10081C10080E10080E100807100803900803900801D00801D00800 | |
| 221 | +F00800700800700800301C0030FF8010181A7E991D>78 D<0FC21836200E6006C006C002C002C0 | |
| 222 | +02E00070007E003FE01FF807FC003E000E00070003800380038003C002C006E004D81887E0101A | |
| 223 | +7E9915>83 D<FEFEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 | |
| 224 | +C0C0FEFE07257D9B0B>91 D<FEFE06060606060606060606060606060606060606060606060606 | |
| 225 | +0606060606060606FEFE0725809B0B>93 D<3F8070C070E020700070007007F01C7030707070E0 | |
| 226 | +70E071E071E0F171FB1E3C10107E8F13>97 D<FC00001C00001C00001C00001C00001C00001C00 | |
| 227 | +001C00001C00001C00001CF8001F0E001E07001C03801C01801C01C01C01C01C01C01C01C01C01 | |
| 228 | +C01C01C01C03801C03001E07001B0C0010F000121A7F9915>I<07F80C1C381C30087000E000E0 | |
| 229 | +00E000E000E000E0007000300438080C1807E00E107F8F11>I<007E00000E00000E00000E0000 | |
| 230 | +0E00000E00000E00000E00000E00000E0003CE000C3E00380E00300E00700E00E00E00E00E00E0 | |
| 231 | +0E00E00E00E00E00E00E00600E00700E00381E001C2E0007CFC0121A7F9915>I<07C01C303018 | |
| 232 | +7018600CE00CFFFCE000E000E000E0006000300438080C1807E00E107F8F11>I<01F003180738 | |
| 233 | +0E100E000E000E000E000E000E00FFC00E000E000E000E000E000E000E000E000E000E000E000E | |
| 234 | +000E000E007FE00D1A80990C>I<0FCE187330307038703870387038303018602FC02000600070 | |
| 235 | +003FF03FFC1FFE600FC003C003C003C0036006381C07E010187F8F13>I<18003C003C00180000 | |
| 236 | +0000000000000000000000FC001C001C001C001C001C001C001C001C001C001C001C001C001C00 | |
| 237 | +1C00FF80091A80990A>105 D<FC001C001C001C001C001C001C001C001C001C001C001C001C00 | |
| 238 | +1C001C001C001C001C001C001C001C001C001C001C001C00FF80091A80990A>108 | |
| 239 | +D<FC7C1F001D8E63801E0781C01E0781C01C0701C01C0701C01C0701C01C0701C01C0701C01C07 | |
| 240 | +01C01C0701C01C0701C01C0701C01C0701C01C0701C0FF9FE7F81D107F8F20>I<FCF8001D0C00 | |
| 241 | +1E0E001E0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E00 | |
| 242 | +FF9FC012107F8F15>I<07E01C38300C700E6006E007E007E007E007E007E0076006700E381C1C | |
| 243 | +3807E010107F8F13>I<FCF8001F0E001E07001C03801C03801C01C01C01C01C01C01C01C01C01 | |
| 244 | +C01C01C01C03801C03001E07001F0C001CF0001C00001C00001C00001C00001C00001C0000FF80 | |
| 245 | +0012177F8F15>I<FCE01D701E701E201C001C001C001C001C001C001C001C001C001C001C00FF | |
| 246 | +C00C107F8F0F>114 D<1F2060E04020C020C020F0007F003FC01FE000F080708030C030C020F0 | |
| 247 | +408F800C107F8F0F>I<0400040004000C000C001C003C00FFC01C001C001C001C001C001C001C | |
| 248 | +001C001C201C201C201C201C200E4003800B177F960F>I<FC7E001C0E001C0E001C0E001C0E00 | |
| 249 | +1C0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C1E000C2E0007CFC012107F8F15> | |
| 250 | +I<FF1F803C06001C04001C04001E0C000E08000E080007100007100007900003A00003A00001C0 | |
| 251 | +0001C00001C00000800011107F8F14>I<FF3F803C1C001C18000E100007200007600003C00001 | |
| 252 | +C00001E00003E000027000043800083800181C00381E00FC3FC012107F8F14>120 | |
| 253 | +D<FF1F803C06001C04001C04001E0C000E08000E080007100007100007900003A00003A00001C0 | |
| 254 | +0001C00001C000008000008000010000010000E10000E20000E4000078000011177F8F14>I | |
| 255 | +E /Ff 3 51 df<00C00000C00000C00000C00000C00000C00000C00000C00000C000FFFF80FFFF | |
| 256 | +8000C00000C00000C00000C00000C00000C00000C00000C00000C00011147E8F17>43 | |
| 257 | +D<0C003C00CC000C000C000C000C000C000C000C000C000C000C000C000C00FF8009107E8F0F> | |
| 258 | +49 D<1F00618040C08060C0600060006000C00180030006000C00102020207FC0FFC00B107F8F | |
| 259 | +0F>I E /Fg 5 107 df<07E01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFE7F | |
| 260 | +FE3FFC1FF807E010127D9317>15 D<000000040000000002000000000200000000010000000000 | |
| 261 | +8000000000400000000020FFFFFFFFFCFFFFFFFFFC000000002000000000400000000080000000 | |
| 262 | +010000000002000000000200000000040026107D922D>33 D<000F0038006000E001C001C001C0 | |
| 263 | +01C001C001C001C001C001C001C001C001C001C001C001C0038007001E00F8001E000700038001 | |
| 264 | +C001C001C001C001C001C001C001C001C001C001C001C001C001C001C000E000600038000F102D | |
| 265 | +7DA117>102 D<F8001E000700038001C001C001C001C001C001C001C001C001C001C001C001C0 | |
| 266 | +01C001C001C000E000600038000F0038006000E001C001C001C001C001C001C001C001C001C001 | |
| 267 | +C001C001C001C001C001C0038007001E00F800102D7DA117>I<C0C0C0C0C0C0C0C0C0C0C0C0C0 | |
| 268 | +C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0022D7BA10D> | |
| 269 | +106 D E /Fh 2 51 df<03000700FF000700070007000700070007000700070007000700070007 | |
| 270 | +00070007000700070007007FF00C157E9412>49 D<0F8030E040708030C038E038403800380070 | |
| 271 | +0070006000C00180030006000C08080810183FF07FF0FFF00D157E9412>I | |
| 272 | +E /Fi 44 121 df<387CFEFFFF7F3B030306060E0C18702008107C9F0F>39 | |
| 273 | +D<387CFEFEFE7C3807077C860F>46 D<00E00001E0000FE000FFE000F3E00003E00003E00003E0 | |
| 274 | +0003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0 | |
| 275 | +0003E00003E00003E00003E00003E00003E000FFFF80FFFF80111D7C9C1A>49 | |
| 276 | +D<07F0001FFE00383F007C1F80FE0FC0FE0FC0FE0FE0FE07E07C07E03807E0000FE0000FC0000F | |
| 277 | +C0001F80001F00003E0000780000F00000E00001C0000380600700600E00601C00E01FFFC03FFF | |
| 278 | +C07FFFC0FFFFC0FFFFC0131D7D9C1A>I<01FC0007FF000E0F801E0FC03F07E03F07E03F07E03F | |
| 279 | +07E01E0FC0000FC0000F80001F0001FC0001FC00000F800007C00003E00003F00003F83803F87C | |
| 280 | +03F8FE03F8FE03F8FE03F0FC03F07807E03C0FC01FFF8003FC00151D7E9C1A>I<0001C00003C0 | |
| 281 | +0007C00007C0000FC0001FC0003BC00073C00063C000C3C00183C00383C00703C00E03C00C03C0 | |
| 282 | +1803C03803C07003C0E003C0FFFFFEFFFFFE0007C00007C00007C00007C00007C00007C000FFFE | |
| 283 | +00FFFE171D7F9C1A>I<3803803FFF803FFF003FFE003FFC003FF0003F80003000003000003000 | |
| 284 | +0030000033F8003FFE003C1F00380F803007C00007C00007E00007E07807E0FC07E0FC07E0FC07 | |
| 285 | +E0FC07C0780FC0600F80381F001FFC0007F000131D7D9C1A>I<003F0001FFC007E0E00F81E01F | |
| 286 | +03F01E03F03E03F07C03F07C01E07C0000FC1000FCFF00FDFFC0FD03E0FE01F0FE01F0FC01F8FC | |
| 287 | +01F8FC01F8FC01F87C01F87C01F87C01F83C01F03E01F01E03E00F07C007FF8001FE00151D7E9C | |
| 288 | +1A>I<6000007FFFF87FFFF87FFFF07FFFE07FFFE0E001C0C00380C00700C00E00000C00001C00 | |
| 289 | +00380000780000780000F00000F00000F00001F00001F00001F00003F00003F00003F00003F000 | |
| 290 | +03F00003F00003F00003F00001E000151E7D9D1A>I<01FC0007FF000E07801C01C01800E03800 | |
| 291 | +E03800E03C00E03F00E03FC1C01FE3801FFF000FFE0007FF8007FFC01FFFE03C3FF0780FF07803 | |
| 292 | +F8F001F8F000F8F00078F00078F000707800707C00E03E03C00FFF8003FC00151D7E9C1A>I<00 | |
| 293 | +00E000000000E000000001F000000001F000000001F000000003F800000003F800000006FC0000 | |
| 294 | +0006FC0000000EFE0000000C7E0000000C7E000000183F000000183F000000303F800000301F80 | |
| 295 | +0000701FC00000600FC00000600FC00000C007E00000FFFFE00001FFFFF000018003F000018003 | |
| 296 | +F000030001F800030001F800060001FC00060000FC000E0000FE00FFE00FFFE0FFE00FFFE0231F | |
| 297 | +7E9E28>65 D<FFFFFE00FFFFFFC007C007E007C003F007C001F807C001FC07C001FC07C001FC07 | |
| 298 | +C001FC07C001FC07C001F807C003F807C007F007C00FE007FFFF8007FFFFC007C003F007C001F8 | |
| 299 | +07C001FC07C000FC07C000FE07C000FE07C000FE07C000FE07C000FE07C000FC07C001FC07C003 | |
| 300 | +F807C007F0FFFFFFE0FFFFFF001F1F7E9E25>I<0007FC02003FFF0E00FE03DE03F000FE07E000 | |
| 301 | +3E0FC0001E1F80001E3F00000E3F00000E7F0000067E0000067E000006FE000000FE000000FE00 | |
| 302 | +0000FE000000FE000000FE000000FE0000007E0000007E0000067F0000063F0000063F00000C1F | |
| 303 | +80000C0FC0001807E0003803F0007000FE01C0003FFF800007FC001F1F7D9E26>I<FFFFFE0000 | |
| 304 | +FFFFFFC00007E007F00007E001F80007E000FC0007E0007E0007E0003F0007E0003F0007E0001F | |
| 305 | +8007E0001F8007E0001F8007E0001FC007E0001FC007E0001FC007E0001FC007E0001FC007E000 | |
| 306 | +1FC007E0001FC007E0001FC007E0001FC007E0001F8007E0001F8007E0001F8007E0003F0007E0 | |
| 307 | +003F0007E0007E0007E000FC0007E001F80007E007F000FFFFFFC000FFFFFE0000221F7E9E28> | |
| 308 | +I<FFFFFFE0FFFFFFE007E007E007E001E007E000E007E0006007E0007007E0003007E0003007E0 | |
| 309 | +603007E0603007E0600007E0E00007E1E00007FFE00007FFE00007E1E00007E0E00007E0600007 | |
| 310 | +E0600C07E0600C07E0000C07E0001807E0001807E0001807E0003807E0007807E000F807E003F0 | |
| 311 | +FFFFFFF0FFFFFFF01E1F7E9E22>I<FFFFFFE0FFFFFFE007E007E007E001E007E000E007E00060 | |
| 312 | +07E0007007E0003007E0003007E0603007E0603007E0600007E0E00007E1E00007FFE00007FFE0 | |
| 313 | +0007E1E00007E0E00007E0600007E0600007E0600007E0000007E0000007E0000007E0000007E0 | |
| 314 | +000007E0000007E0000007E00000FFFF8000FFFF80001C1F7E9E21>I<FFFFFFFF07E007E007E0 | |
| 315 | +07E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007 | |
| 316 | +E007E007E007E007E0FFFFFFFF101F7E9E14>73 D<FFFF8000FFFF800007E0000007E0000007E0 | |
| 317 | +000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007 | |
| 318 | +E0000007E0000007E0000007E0000007E0000007E000C007E000C007E000C007E001C007E001C0 | |
| 319 | +07E001C007E0038007E0038007E00F8007E01F80FFFFFF80FFFFFF801A1F7E9E1F>76 | |
| 320 | +D<001FF80000FFFF0001F81F8007E007E00FC003F01F8001F81F0000F83F0000FC7F0000FE7E00 | |
| 321 | +007E7E00007EFE00007FFE00007FFE00007FFE00007FFE00007FFE00007FFE00007FFE00007FFE | |
| 322 | +00007F7E00007E7F0000FE7F0000FE3F0000FC3F8001FC1F8001F80FC003F007E007E001F81F80 | |
| 323 | +00FFFF00001FF800201F7D9E27>79 D<FFFFFE00FFFFFF8007E00FE007E003F007E001F807E001 | |
| 324 | +F807E001FC07E001FC07E001FC07E001FC07E001FC07E001F807E001F807E003F007E00FE007FF | |
| 325 | +FF8007FFFE0007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007 | |
| 326 | +E0000007E0000007E0000007E00000FFFF0000FFFF00001E1F7E9E24>I<FFFFF80000FFFFFF00 | |
| 327 | +0007E01FC00007E007E00007E003F00007E003F00007E003F80007E003F80007E003F80007E003 | |
| 328 | +F80007E003F00007E003F00007E007E00007E01FC00007FFFF000007FFFC000007E03E000007E0 | |
| 329 | +1F000007E01F800007E00FC00007E00FC00007E00FC00007E00FE00007E00FE00007E00FE00007 | |
| 330 | +E00FE03007E00FF03007E00FF07007E007F860FFFF01FFE0FFFF007F80241F7E9E27>82 | |
| 331 | +D<03FC080FFF381E03F83800F8700078700038F00038F00018F00018F80000FC00007FC0007FFE | |
| 332 | +003FFF801FFFE00FFFF007FFF000FFF80007F80000FC00007C00003CC0003CC0003CC0003CE000 | |
| 333 | +38E00078F80070FE01E0E7FFC081FF00161F7D9E1D>I<7FFFFFFC7FFFFFFC7C07E07C7007E01C | |
| 334 | +6007E00C6007E00CE007E00EC007E006C007E006C007E006C007E0060007E0000007E0000007E0 | |
| 335 | +000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007 | |
| 336 | +E0000007E0000007E0000007E0000007E00003FFFFC003FFFFC01F1E7E9D24>I<07FC001FFF00 | |
| 337 | +3F0F803F07C03F03E03F03E00C03E00003E0007FE007FBE01F03E03C03E07C03E0F803E0F803E0 | |
| 338 | +F803E0FC05E07E0DE03FF9FE0FE07E17147F9319>97 D<FF0000FF00001F00001F00001F00001F | |
| 339 | +00001F00001F00001F00001F00001F00001F00001F1FC01F7FF01FE0F81F807C1F007E1F003E1F | |
| 340 | +003E1F003F1F003F1F003F1F003F1F003F1F003F1F003E1F003E1F007C1F807C1EC1F81C7FE018 | |
| 341 | +1F8018207E9F1D>I<01FE0007FF801F0FC03E0FC03E0FC07C0FC07C0300FC0000FC0000FC0000 | |
| 342 | +FC0000FC0000FC00007C00007E00003E00603F00C01F81C007FF0001FC0013147E9317>I<0007 | |
| 343 | +F80007F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F801F8F80FFE | |
| 344 | +F81F83F83E01F87E00F87C00F87C00F8FC00F8FC00F8FC00F8FC00F8FC00F8FC00F87C00F87C00 | |
| 345 | +F87E00F83E01F81F07F80FFEFF03F8FF18207E9F1D>I<01FE0007FF801F83E03F01F07E00F07E | |
| 346 | +00F8FC00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007E00003E00183F00380F807007 | |
| 347 | +FFE000FF8015147F9318>I<001F8000FFC001F3E003E7E003C7E007C7E007C3C007C00007C000 | |
| 348 | +07C00007C00007C000FFFC00FFFC0007C00007C00007C00007C00007C00007C00007C00007C000 | |
| 349 | +07C00007C00007C00007C00007C00007C00007C00007C0003FFC003FFC0013207F9F10>I<01FC | |
| 350 | +3C07FFFE0F079E1E03DE3E03E03E03E03E03E03E03E03E03E01E03C00F07800FFF0009FC001800 | |
| 351 | +001800001C00001FFF800FFFF007FFF81FFFFC3C007C70003EF0001EF0001EF0001E78003C7800 | |
| 352 | +3C3F01F80FFFE001FF00171E7F931A>I<FF0000FF00001F00001F00001F00001F00001F00001F | |
| 353 | +00001F00001F00001F00001F00001F0FC01F3FE01F61F01FC0F81F80F81F00F81F00F81F00F81F | |
| 354 | +00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8FFE3FFFFE3FF18207D9F | |
| 355 | +1D>I<1C003F007F007F007F003F001C00000000000000000000000000FF00FF001F001F001F00 | |
| 356 | +1F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B217EA00E>I<FF00 | |
| 357 | +00FF00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F01FE1F01 | |
| 358 | +FE1F00F01F01C01F03801F07001F1E001F38001F7C001FFE001FFF001F1F001E0F801E07C01E07 | |
| 359 | +E01E03F01E01F01E00F8FFC3FFFFC3FF18207E9F1C>107 D<FF00FF001F001F001F001F001F00 | |
| 360 | +1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F | |
| 361 | +001F001F001F00FFE0FFE00B207E9F0E>I<FE0FE03F80FE1FF07FC01E70F9C3E01E407D01F01E | |
| 362 | +807E01F01F807E01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F0 | |
| 363 | +1F007C01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F0FFE3FF8FFEFFE3FF8F | |
| 364 | +FE27147D932E>I<FE0FC0FE3FE01E61F01EC0F81E80F81F00F81F00F81F00F81F00F81F00F81F | |
| 365 | +00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8FFE3FFFFE3FF18147D931D>I<01FF00 | |
| 366 | +07FFC01F83F03E00F83E00F87C007C7C007CFC007EFC007EFC007EFC007EFC007EFC007E7C007C | |
| 367 | +7C007C3E00F83E00F81F83F007FFC001FF0017147F931A>I<FF1FC0FF7FF01FE1F81F80FC1F00 | |
| 368 | +7E1F007E1F003E1F003F1F003F1F003F1F003F1F003F1F003F1F003E1F007E1F007C1F80FC1FC1 | |
| 369 | +F81F7FE01F1F801F00001F00001F00001F00001F00001F00001F0000FFE000FFE000181D7E931D | |
| 370 | +>I<FE3E00FE7F801ECFC01E8FC01E8FC01F8FC01F03001F00001F00001F00001F00001F00001F | |
| 371 | +00001F00001F00001F00001F00001F0000FFF000FFF00012147E9316>114 | |
| 372 | +D<0FE63FFE701E600EE006E006F800FFC07FF83FFC1FFE03FE001FC007C007E007F006F81EFFFC | |
| 373 | +C7F010147E9315>I<01800180018003800380038007800F803F80FFFCFFFC0F800F800F800F80 | |
| 374 | +0F800F800F800F800F800F800F860F860F860F860F8607CC03F801F00F1D7F9C14>I<FF07F8FF | |
| 375 | +07F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F | |
| 376 | +00F81F01F81F01F80F06F807FCFF03F8FF18147D931D>I<FFE7FE1FE0FFE7FE1FE01F00F00700 | |
| 377 | +1F00F803000F80F806000F80F8060007C1BC0C0007C1BC0C0007C1BE0C0003E31E180003E31E18 | |
| 378 | +0001F60F300001F60F300001F60FB00000FC07E00000FC07E000007803C000007803C000007803 | |
| 379 | +C000003001800023147F9326>119 D<FFE1FF00FFE1FF000F80700007C0E00007E0C00003E180 | |
| 380 | +0001F3800000FF0000007E0000003E0000003F0000007F8000006F800000C7C0000183E0000381 | |
| 381 | +F0000701F8000E00FC00FF81FF80FF81FF8019147F931C>I E /Fj 73 127 | |
| 382 | +df<70F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F870000000000070F8F8F870051C779B18>33 | |
| 383 | +D<4010E038F078E038E038E038E038E038E038E038E038E038E03860300D0E7B9C18>I<030600 | |
| 384 | +078F00078F00078F00078F00078F00078F007FFFC0FFFFE0FFFFE07FFFC00F1E000F1E000F1E00 | |
| 385 | +0F1E000F1E000F1E007FFFC0FFFFE0FFFFE07FFFC01E3C001E3C001E3C001E3C001E3C001E3C00 | |
| 386 | +0C1800131C7E9B18>I<3803007C07807C0780EE0F80EE0F00EE0F00EE1F00EE1E00EE1E00EE3E | |
| 387 | +007C3C007C3C00387C0000780000780000F80000F00001F00001E00001E00003E00003C00003C0 | |
| 388 | +0007C0000783800787C00F87C00F0EE00F0EE01F0EE01E0EE01E0EE03E0EE03C07C03C07C01803 | |
| 389 | +8013247E9F18>37 D<387C7C7E3E0E0E0E1C1C38F8F0C0070E789B18>39 | |
| 390 | +D<007000F001E003C007800F001E001C00380038007000700070007000E000E000E000E000E000 | |
| 391 | +E000E000E0007000700070007000380038001C001E000F00078003C001F000F000700C24799F18 | |
| 392 | +>I<6000F00078003C001E000F000780038001C001C000E000E000E000E0007000700070007000 | |
| 393 | +7000700070007000E000E000E000E001C001C0038007800F001E003C007800F00060000C247C9F | |
| 394 | +18>I<01C00001C00001C00001C000C1C180F1C780F9CF807FFF001FFC0007F00007F0001FFC00 | |
| 395 | +7FFF00F9CF80F1C780C1C18001C00001C00001C00001C00011147D9718>I<00600000F00000F0 | |
| 396 | +0000F00000F00000F00000F00000F0007FFFC0FFFFE0FFFFE07FFFC000F00000F00000F00000F0 | |
| 397 | +0000F00000F00000F00000600013147E9718>I<1C3E7E7F3F1F070E1E7CF860080C788518>I<7F | |
| 398 | +FF00FFFF80FFFF807FFF0011047D8F18>I<3078FCFC78300606778518>I<000300000780000780 | |
| 399 | +000F80000F00001F00001E00001E00003E00003C00007C0000780000780000F80000F00001F000 | |
| 400 | +01E00003E00003C00003C00007C0000780000F80000F00000F00001F00001E00003E00003C0000 | |
| 401 | +3C00007C0000780000F80000F00000F0000060000011247D9F18>I<01F00007FC000FFE001F1F | |
| 402 | +001C07003803807803C07001C07001C0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000 | |
| 403 | +E0E000E0F001E07001C07001C07803C03803801C07001F1F000FFE0007FC0001F000131C7E9B18 | |
| 404 | +>I<01800380038007800F803F80FF80FB80438003800380038003800380038003800380038003 | |
| 405 | +800380038003800380038003807FFCFFFE7FFC0F1C7B9B18>I<03F0000FFE003FFF007C0F8070 | |
| 406 | +03C0E001C0F000E0F000E06000E00000E00000E00001C00001C00003C0000780000F00001E0000 | |
| 407 | +3C0000780000F00001E00007C0000F80001E00E03C00E07FFFE0FFFFE07FFFE0131C7E9B18>I< | |
| 408 | +07F8001FFE003FFF007807807803C07801C03001C00001C00003C0000380000F0003FF0003FE00 | |
| 409 | +03FF000007800003C00001C00000E00000E00000E0F000E0F000E0F001C0F003C07C07803FFF00 | |
| 410 | +1FFE0003F800131C7E9B18>I<001F00003F0000770000770000E70001E70001C7000387000787 | |
| 411 | +000707000E07001E07003C0700380700780700F00700FFFFF8FFFFF8FFFFF80007000007000007 | |
| 412 | +00000700000700000700007FF000FFF8007FF0151C7F9B18>I<1FFF803FFF803FFF8038000038 | |
| 413 | +00003800003800003800003800003800003800003BF8003FFE003FFF003C07801803C00001C000 | |
| 414 | +00E00000E06000E0F000E0F000E0E001C07003C07C0F803FFF001FFC0003F000131C7E9B18>I< | |
| 415 | +E00000FFFFE0FFFFE0FFFFE0E003C0E00780000700000E00001E00001C00003800003800007000 | |
| 416 | +00700000E00000E00000E00001C00001C00001C00001C00003C000038000038000038000038000 | |
| 417 | +038000038000038000131D7E9C18>55 D<3078FCFC783000000000000000003078FCFC78300614 | |
| 418 | +779318>58 D<183C7E7E3C180000000000000000183C7E7E3E1E0E1C3C78F060071A789318>I< | |
| 419 | +000300000780001F80003F00007E0001FC0003F00007E0001FC0003F00007E0000FC0000FC0000 | |
| 420 | +7E00003F00001FC00007E00003F00001FC00007E00003F00001F8000078000030011187D9918> | |
| 421 | +I<7FFFC0FFFFE0FFFFE0FFFFE0000000000000000000000000FFFFE0FFFFE0FFFFE07FFFC0130C | |
| 422 | +7E9318>I<600000F00000FC00007E00003F00001FC00007E00003F00001FC00007E00003F0000 | |
| 423 | +1F80001F80003F00007E0001FC0003F00007E0001FC0003F00007E0000FC0000F0000060000011 | |
| 424 | +187D9918>I<0FF0003FFC007FFF00700F00F00380F00380600780000F00003E00007C0001F000 | |
| 425 | +01E00003C00003C00003C00003C00003C000038000000000000000000000000000000000038000 | |
| 426 | +07C00007C00007C000038000111C7D9B18>I<007C0001FE0007FF000F87801E03C03C1DC0387F | |
| 427 | +C070FFE071E3E071C1E0E1C1E0E380E0E380E0E380E0E380E0E380E0E380E0E1C1C071C1C071E3 | |
| 428 | +C070FF80387F003C1C001E00E00F83E007FFC001FF80007E00131C7E9B18>I<00700000F80000 | |
| 429 | +F80000D80000D80001DC0001DC0001DC00018C00038E00038E00038E00038E0003060007070007 | |
| 430 | +07000707000707000FFF800FFF800FFF800E03800E03801C01C01C01C07F07F0FF8FF87F07F015 | |
| 431 | +1C7F9B18>I<00F8E003FEE007FFE00F07E01E03E03C01E03800E07000E07000E0700000E00000 | |
| 432 | +E00000E00000E00000E00000E00000E00000E000007000007000E07000E03800E03C00E01E01C0 | |
| 433 | +0F07C007FF8003FE0000F800131C7E9B18>67 D<FFFFF0FFFFF0FFFFF01C00701C00701C00701C | |
| 434 | +00701C00001C00001C0E001C0E001C0E001FFE001FFE001FFE001C0E001C0E001C0E001C00001C | |
| 435 | +00001C00381C00381C00381C00381C0038FFFFF8FFFFF8FFFFF8151C7F9B18>69 | |
| 436 | +D<FFFFE0FFFFE0FFFFE01C00E01C00E01C00E01C00E01C00001C00001C1C001C1C001C1C001FFC | |
| 437 | +001FFC001FFC001C1C001C1C001C1C001C00001C00001C00001C00001C00001C00001C0000FFC0 | |
| 438 | +00FFC000FFC000131C7E9B18>I<01F1C003FDC00FFFC01F0FC01C03C03803C03801C07001C070 | |
| 439 | +01C0700000E00000E00000E00000E00000E00000E00FF0E01FF0E00FF07001C07001C07003C038 | |
| 440 | +03C03803C01C07C01F0FC00FFFC003FDC001F1C0141C7E9B18>I<7FFF00FFFF807FFF0001C000 | |
| 441 | +01C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000 | |
| 442 | +01C00001C00001C00001C00001C00001C00001C00001C0007FFF00FFFF807FFF00111C7D9B18> | |
| 443 | +73 D<7FE000FFE0007FE0000E00000E00000E00000E00000E00000E00000E00000E00000E0000 | |
| 444 | +0E00000E00000E00000E00000E00000E00000E00000E00000E00700E00700E00700E00700E0070 | |
| 445 | +7FFFF0FFFFF07FFFF0141C7F9B18>76 D<FC01F8FE03F8FE03F83B06E03B06E03B06E03B06E03B | |
| 446 | +8EE03B8EE0398CE0398CE039DCE039DCE039DCE038D8E038D8E038F8E03870E03870E03800E038 | |
| 447 | +00E03800E03800E03800E03800E0FE03F8FE03F8FE03F8151C7F9B18>I<7E07F0FF0FF87F07F0 | |
| 448 | +1D81C01D81C01D81C01DC1C01CC1C01CC1C01CE1C01CE1C01CE1C01C61C01C71C01C71C01C31C0 | |
| 449 | +1C39C01C39C01C39C01C19C01C19C01C1DC01C0DC01C0DC01C0DC07F07C0FF87C07F03C0151C7F | |
| 450 | +9B18>I<0FF8003FFE007FFF00780F00700700F00780E00380E00380E00380E00380E00380E003 | |
| 451 | +80E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380F00780700700780F | |
| 452 | +007FFF003FFE000FF800111C7D9B18>I<FF07F8FF07F8FF07F81C01C01C01C01C01C01C01C00E | |
| 453 | +03800E03800E03800E03800F0780070700070700070700070700038E00038E00038E00038E0001 | |
| 454 | +8C0001DC0001DC0001DC0000D80000F80000F800007000151C7F9B18>86 | |
| 455 | +D<3FFFE07FFFE07FFFE07001C07003C0700780700700000F00001E00001C00003C000078000070 | |
| 456 | +0000F00001E00001C00003C0000780000700000F00001E00E01C00E03C00E07800E07000E0FFFF | |
| 457 | +E0FFFFE0FFFFE0131C7E9B18>90 D<FFF8FFF8FFF8E000E000E000E000E000E000E000E000E000 | |
| 458 | +E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0 | |
| 459 | +00E000FFF8FFF8FFF80D24779F18>I<600000F00000F00000F800007800007C00003C00003C00 | |
| 460 | +003E00001E00001F00000F00000F00000F800007800007C00003C00003C00003E00001E00001F0 | |
| 461 | +0000F00000F800007800007800007C00003C00003E00001E00001E00001F00000F00000F800007 | |
| 462 | +8000078000030011247D9F18>I<FFF8FFF8FFF800380038003800380038003800380038003800 | |
| 463 | +380038003800380038003800380038003800380038003800380038003800380038003800380038 | |
| 464 | +0038FFF8FFF8FFF80D247F9F18>I<7FFF00FFFF80FFFF807FFF0011047D7F18>95 | |
| 465 | +D<061E3E387070E0E0E0F8FC7C7C38070E789E18>I<1FE0003FF8007FFC00781E00300E000007 | |
| 466 | +0000070000FF0007FF001FFF007F0700780700E00700E00700E00700F00F00781F003FFFF01FFB | |
| 467 | +F007E1F014147D9318>I<7E0000FE00007E00000E00000E00000E00000E00000E00000E3E000E | |
| 468 | +FF800FFFC00FC1E00F80E00F00700E00700E00380E00380E00380E00380E00380E00380F00700F | |
| 469 | +00700F80E00FC1E00FFFC00EFF80063E00151C809B18>I<01FE0007FF001FFF803E0780380300 | |
| 470 | +700000700000E00000E00000E00000E00000E00000E000007000007001C03801C03E03C01FFF80 | |
| 471 | +07FF0001FC0012147D9318>I<001F80003F80001F8000038000038000038000038000038003E3 | |
| 472 | +800FFB801FFF803C1F80380F80700780700380E00380E00380E00380E00380E00380E003807007 | |
| 473 | +80700780380F803C1F801FFFF00FFBF803E3F0151C7E9B18>I<01F00007FC001FFE003E0F0038 | |
| 474 | +0780700380700380E001C0E001C0FFFFC0FFFFC0FFFFC0E000007000007001C03801C03E03C01F | |
| 475 | +FF8007FF0001FC0012147D9318>I<001F80007FC000FFE000E1E001C0C001C00001C00001C000 | |
| 476 | +7FFFC0FFFFC0FFFFC001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000 | |
| 477 | +01C00001C00001C00001C0007FFF007FFF007FFF00131C7F9B18>I<01E1F007FFF80FFFF81E1E | |
| 478 | +301C0E003807003807003807003807003807001C0E001E1E001FFC001FF80039E0003800001C00 | |
| 479 | +001FFE001FFFC03FFFE07801F0700070E00038E00038E00038E000387800F07E03F01FFFC00FFF | |
| 480 | +8001FC00151F7F9318>I<7E0000FE00007E00000E00000E00000E00000E00000E00000E3E000E | |
| 481 | +FF800FFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E | |
| 482 | +00E00E00E00E00E07FC3FCFFE7FE7FC3FC171C809B18>I<03800007C00007C00007C000038000 | |
| 483 | +0000000000000000000000007FC000FFC0007FC00001C00001C00001C00001C00001C00001C000 | |
| 484 | +01C00001C00001C00001C00001C00001C00001C00001C000FFFF00FFFF80FFFF00111D7C9C18> | |
| 485 | +I<0038007C007C007C003800000000000000000FFC1FFC0FFC001C001C001C001C001C001C001C | |
| 486 | +001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C6038F078FFF07FE03F | |
| 487 | +800E277E9C18>I<FE0000FE0000FE00000E00000E00000E00000E00000E00000E3FF00E7FF00E | |
| 488 | +3FF00E07800E0F000E1E000E3C000E78000EF0000FF8000FFC000F9C000F0E000E0F000E07000E | |
| 489 | +03800E03C0FFC7F8FFC7F8FFC7F8151C7F9B18>I<7FE000FFE0007FE00000E00000E00000E000 | |
| 490 | +00E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E000 | |
| 491 | +00E00000E00000E00000E00000E00000E0007FFFC0FFFFE07FFFC0131C7E9B18>I<7CE0E000FF | |
| 492 | +FBF8007FFFF8001F1F1C001E1E1C001E1E1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C00 | |
| 493 | +1C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C007F1F1F00FFBFBF807F1F1F00191481 | |
| 494 | +9318>I<7E3E00FEFF807FFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00 | |
| 495 | +E00E00E00E00E00E00E00E00E00E00E07FC3FCFFE7FE7FC3FC1714809318>I<01F0000FFE001F | |
| 496 | +FF003E0F803803807001C07001C0E000E0E000E0E000E0E000E0E000E0F001E07001C07803C03C | |
| 497 | +07803E0F801FFF000FFE0001F00013147E9318>I<7E3E00FEFF807FFFC00FC1E00F80E00F0070 | |
| 498 | +0E00700E00380E00380E00380E00380E00380E00380F00700F00700F80E00FC1E00FFFC00EFF80 | |
| 499 | +0E3E000E00000E00000E00000E00000E00000E00000E00007FC000FFE0007FC000151E809318> | |
| 500 | +I<01E38007FB801FFF803E1F80380F80700780700780E00380E00380E00380E00380E00380E003 | |
| 501 | +80700780700780380F803C1F801FFF800FFB8003E3800003800003800003800003800003800003 | |
| 502 | +80000380003FF8003FF8003FF8151E7E9318>I<7F87E0FF9FF07FBFF803F87803F03003E00003 | |
| 503 | +C00003C0000380000380000380000380000380000380000380000380000380007FFE00FFFF007F | |
| 504 | +FE0015147F9318>I<07F7003FFF007FFF00780F00E00700E00700E007007C00007FE0001FFC00 | |
| 505 | +03FE00001F00600780E00380E00380F00380F80F00FFFF00FFFC00E7F00011147D9318>I<0180 | |
| 506 | +000380000380000380000380007FFFC0FFFFC0FFFFC00380000380000380000380000380000380 | |
| 507 | +000380000380000380000380400380E00380E00380E001C1C001FFC000FF80003E0013197F9818 | |
| 508 | +>I<7E07E0FE0FE07E07E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E | |
| 509 | +00E00E00E00E00E00E01E00F03E007FFFC03FFFE01FCFC1714809318>I<7F8FF0FF8FF87F8FF0 | |
| 510 | +1E03C00E03800E03800E0380070700070700070700038E00038E00038E00038E0001DC0001DC00 | |
| 511 | +01DC0000F80000F80000700015147F9318>I<FF8FF8FF8FF8FF8FF83800E03800E03800E01C01 | |
| 512 | +C01C01C01C71C01CF9C01CF9C01CD9C01CD9C00DDD800DDD800DDD800D8D800F8F800F8F800707 | |
| 513 | +0015147F9318>I<7F8FF07F9FF07F8FF0070700078E00039E0001DC0001F80000F80000700000 | |
| 514 | +F00000F80001DC00039E00038E000707000F07807F8FF0FF8FF87F8FF015147F9318>I<7F8FF0 | |
| 515 | +FF8FF87F8FF00E01C00E03800E0380070380070700070700038700038600038E0001CE0001CE00 | |
| 516 | +00CC0000CC0000DC0000780000780000780000700000700000700000F00000E00079E0007BC000 | |
| 517 | +7F80003F00001E0000151E7F9318>I<0007E0001FE0007FE000780000E00000E00000E00000E0 | |
| 518 | +0000E00000E00000E00000E00000E00000E00000E00001E0007FC000FF8000FF80007FC00001E0 | |
| 519 | +0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E000007800007F | |
| 520 | +E0001FE00007E013247E9F18>123 D<60F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 | |
| 521 | +F0F0F0F0F0F0F0F0F0F0F0F0600424769F18>I<7C0000FF0000FFC00003C00000E00000E00000 | |
| 522 | +E00000E00000E00000E00000E00000E00000E00000E00000E00000F000007FC0003FE0003FE000 | |
| 523 | +7FC000F00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00003 | |
| 524 | +C000FFC000FF00007C000013247E9F18>I<060C1F1E3FBEFBF8F1F060C00F067C9B18>I | |
| 525 | +E /Fk 27 121 df<00003FE00000E0100001803800038078000300780007003000070000000700 | |
| 526 | +0000070000000E0000000E0000000E000000FFFFE0000E00E0001C01C0001C01C0001C01C0001C | |
| 527 | +01C0001C03800038038000380380003803800038070000380700007007000070071000700E2000 | |
| 528 | +700E2000700E2000E00E2000E0064000E0038000E0000000C0000001C0000001C0000031800000 | |
| 529 | +79800000F3000000620000003C0000001D29829F1A>12 D<00003FC0FF800000E0E38040000181 | |
| 530 | +E600E0000381EC01E0000300DC01E00007001C00C0000700180000000700380000000E00380000 | |
| 531 | +000E00380000000E00380000000E0070000000FFFFFFFF80001C00700380001C00700700001C00 | |
| 532 | +700700001C00700700001C00E00700001C00E00E00003800E00E00003800E00E00003800E00E00 | |
| 533 | +003801C01C00003801C01C00007001C01C00007001C01C40007001C03880007003803880007003 | |
| 534 | +80388000E00380388000E00380190000E003000E0000E00700000000C00700000001C006000000 | |
| 535 | +01C00600000031860E000000798F0C000000F31E18000000620C300000003C07C00000002B2982 | |
| 536 | +9F28>14 D<0E1F3F3F1D0102020404081020C0080E779F0E>39 D<000200020006000E003C00DC | |
| 537 | +031C001C0038003800380038007000700070007000E000E000E000E001C001C001C001C0038003 | |
| 538 | +80038003800780FFF80F1E7B9D17>49 D<0000FE0200078186001C004C0038003C0060003C00C0 | |
| 539 | +001C01C0001803800018070000180F0000181E0000101E0000103C0000003C0000007800000078 | |
| 540 | +0000007800000078000000F0000000F0000000F0000000F0000000F00000807000008070000080 | |
| 541 | +700001003800010038000200180004000C001800060020000381C00000FE00001F217A9F21>67 | |
| 542 | +D<01FF007FE0001F000F00001F0004000017800400001780040000278008000023C008000023C0 | |
| 543 | +08000023C008000041E010000041E010000041F010000040F010000080F0200000807820000080 | |
| 544 | +782000008078200001003C400001003C400001003C400001001E400002001E800002001E800002 | |
| 545 | +000F800002000F800004000F0000040007000004000700000C000700001C00020000FF80020000 | |
| 546 | +231F7D9E22>78 D<00F1800389C00707800E03801C03803C0380380700780700780700780700F0 | |
| 547 | +0E00F00E00F00E00F00E20F01C40F01C40703C40705C40308C800F070013147C9317>97 | |
| 548 | +D<07803F8007000700070007000E000E000E000E001C001C001CF01D0C3A0E3C0E380F380F700F | |
| 549 | +700F700F700FE01EE01EE01EE01CE03CE038607060E031C01F0010207B9F15>I<007E0001C100 | |
| 550 | +0300800E07801E07801C07003C0200780000780000780000F00000F00000F00000F00000F00000 | |
| 551 | +70010070020030040018380007C00011147C9315>I<0000780003F80000700000700000700000 | |
| 552 | +700000E00000E00000E00000E00001C00001C000F1C00389C00707800E03801C03803C03803807 | |
| 553 | +00780700780700780700F00E00F00E00F00E00F00E20F01C40F01C40703C40705C40308C800F07 | |
| 554 | +0015207C9F17>I<007C01C207010E011C013C013802780C7BF07C00F000F000F000F000700070 | |
| 555 | +0170023804183807C010147C9315>I<00007800019C00033C00033C000718000700000700000E | |
| 556 | +00000E00000E00000E00000E0001FFE0001C00001C00001C00001C000038000038000038000038 | |
| 557 | +0000380000700000700000700000700000700000700000E00000E00000E00000E00000C00001C0 | |
| 558 | +0001C0000180003180007B0000F300006600003C00001629829F0E>I<003C6000E27001C1E003 | |
| 559 | +80E00700E00F00E00E01C01E01C01E01C01E01C03C03803C03803C03803C03803C07003C07001C | |
| 560 | +0F001C17000C2E0003CE00000E00000E00001C00001C00301C00783800F0700060E0003F800014 | |
| 561 | +1D7E9315>I<00C001E001E001C000000000000000000000000000000E00330023004380430047 | |
| 562 | +0087000E000E000E001C001C001C003840388030807080310033001C000B1F7C9E0E>105 | |
| 563 | +D<0001800003C00003C0000380000000000000000000000000000000000000000000003C000046 | |
| 564 | +00008700008700010700010700020E00000E00000E00000E00001C00001C00001C00001C000038 | |
| 565 | +0000380000380000380000700000700000700000700000E00000E00030E00079C000F180006300 | |
| 566 | +003C00001228829E0E>I<01E0000FE00001C00001C00001C00001C00003800003800003800003 | |
| 567 | +80000700000700000703C00704200E08E00E11E00E21E00E40C01C80001D00001E00001FC00038 | |
| 568 | +E000387000387000383840707080707080707080703100E03100601E0013207D9F15>I<03C01F | |
| 569 | +C0038003800380038007000700070007000E000E000E000E001C001C001C001C00380038003800 | |
| 570 | +38007000700070007100E200E200E200E200640038000A207C9F0C>I<1C0F80F0002630C31800 | |
| 571 | +4740640C004780680E004700700E004700700E008E00E01C000E00E01C000E00E01C000E00E01C | |
| 572 | +001C01C038001C01C038001C01C038001C01C0708038038071003803806100380380E100380380 | |
| 573 | +62007007006600300300380021147C9325>I<1C0F802630C04740604780604700704700708E00 | |
| 574 | +E00E00E00E00E00E00E01C01C01C01C01C01C01C03843803883803083807083803107003303001 | |
| 575 | +C016147C931A>I<007C0001C3000301800E01C01E01C01C01E03C01E07801E07801E07801E0F0 | |
| 576 | +03C0F003C0F003C0F00780F00700700F00700E0030180018700007C00013147C9317>I<01C1E0 | |
| 577 | +02621804741C04781C04701E04701E08E01E00E01E00E01E00E01E01C03C01C03C01C03C01C038 | |
| 578 | +0380780380700380E003C1C0072380071E000700000700000E00000E00000E00000E00001C0000 | |
| 579 | +1C0000FFC000171D809317>I<1C1E002661004783804787804707804703008E00000E00000E00 | |
| 580 | +000E00001C00001C00001C00001C000038000038000038000038000070000030000011147C9313 | |
| 581 | +>114 D<00FC030206010C030C070C060C000F800FF007F803FC003E000E700EF00CF00CE00840 | |
| 582 | +1020601F8010147D9313>I<018001C0038003800380038007000700FFF007000E000E000E000E | |
| 583 | +001C001C001C001C003800380038003820704070407080708031001E000C1C7C9B0F>I<0E00C0 | |
| 584 | +3300E02301C04381C04301C04701C08703800E03800E03800E03801C07001C07001C07001C0710 | |
| 585 | +1C0E20180E20180E201C1E200C264007C38014147C9318>I<0E03803307802307C04383C04301 | |
| 586 | +C04700C08700800E00800E00800E00801C01001C01001C01001C02001C02001C04001C04001C08 | |
| 587 | +000E300003C00012147C9315>I<0383800CC4401068E01071E02071E02070C040E00000E00000 | |
| 588 | +E00000E00001C00001C00001C00001C040638080F38080F38100E5810084C60078780013147D93 | |
| 589 | +15>120 D E /Fl 40 122 df<0001FF0000001FFFC000007F80F00000FE00F80003FC01FC0003 | |
| 590 | +F803FC0007F003FC0007F003FC0007F003FC0007F001F80007F000F00007F000000007F0000000 | |
| 591 | +07F000000007F0000000FFFFFFFC00FFFFFFFC00FFFFFFFC0007F001FC0007F001FC0007F001FC | |
| 592 | +0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001 | |
| 593 | +FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F0 | |
| 594 | +01FC0007F001FC0007F001FC007FFF1FFFC07FFF1FFFC07FFF1FFFC0222A7FA926>12 | |
| 595 | +D<000E00001E00007E0007FE00FFFE00FFFE00F8FE0000FE0000FE0000FE0000FE0000FE0000FE | |
| 596 | +0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE | |
| 597 | +0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE007FFFFE7FFFFE7FFF | |
| 598 | +FE17277BA622>49 D<00FF800003FFF0000FFFFC003F03FF007C00FF807C007FC0FE007FC0FF00 | |
| 599 | +3FE0FF003FE0FF003FE0FF001FE07E001FE03C003FE000003FE000003FC000003FC000007F8000 | |
| 600 | +007F800000FF000001FE000001FC000003F0000007E000000FC000001F0000003E0000007C00E0 | |
| 601 | +007800E000F000E001E001C0038001C0070001C00FFFFFC01FFFFFC03FFFFFC07FFFFFC0FFFFFF | |
| 602 | +80FFFFFF80FFFFFF801B277DA622>I<007F800003FFF00007FFFC001F81FE001F00FF003F80FF | |
| 603 | +003F807F803FC07F803F807F803F807F801F007F800000FF800000FF000000FF000001FE000003 | |
| 604 | +F8000007F00000FFC00000FFF0000001FC000000FF0000007F8000007FC000003FC000003FE000 | |
| 605 | +003FE000003FE03C003FE07E003FE0FF003FE0FF003FE0FF003FC0FF007FC0FE007F807C00FF80 | |
| 606 | +3F01FF001FFFFC0007FFF00000FF80001B277DA622>I<00000E0000001E0000003E0000007E00 | |
| 607 | +0000FE000000FE000001FE000003FE0000077E00000E7E00000E7E00001C7E0000387E0000707E | |
| 608 | +0000E07E0000E07E0001C07E0003807E0007007E000E007E000E007E001C007E0038007E007000 | |
| 609 | +7E00E0007E00FFFFFFF8FFFFFFF8FFFFFFF80000FE000000FE000000FE000000FE000000FE0000 | |
| 610 | +00FE000000FE000000FE00007FFFF8007FFFF8007FFFF81D277EA622>I<0C0003000F803F000F | |
| 611 | +FFFE000FFFFE000FFFFC000FFFF8000FFFE0000FFFC0000FFE00000E0000000E0000000E000000 | |
| 612 | +0E0000000E0000000E0000000E7FC0000FFFF8000F80FE000E007F000C003F8000003F8000001F | |
| 613 | +C000001FC000001FE000001FE018001FE07E001FE0FE001FE0FE001FE0FE001FE0FE001FE0FE00 | |
| 614 | +1FC078003FC078003F803C007F001F01FE000FFFFC0003FFF00000FF80001B277DA622>I<0007 | |
| 615 | +F000003FFC0000FFFF0001FC0F0007F01F800FE03F800FC03F801FC03F803F803F803F801F007F | |
| 616 | +8000007F0000007F0000007F000000FF000000FF0FC000FF3FF800FF70FE00FFE03F00FFC03F80 | |
| 617 | +FF801FC0FF801FC0FF801FC0FF001FE0FF001FE0FF001FE0FF001FE07F001FE07F001FE07F001F | |
| 618 | +E07F001FE03F801FC03F801FC01F803F800FC03F8007E0FF0003FFFC0000FFF000003FC0001B27 | |
| 619 | +7DA622>I<380000003E0000003FFFFFF03FFFFFF03FFFFFF07FFFFFE07FFFFFC07FFFFFC07FFF | |
| 620 | +FF8070000F0070001E0070003C00E0003800E0007800E000F0000001E0000003C0000003C00000 | |
| 621 | +07800000078000000F0000001F0000001F0000001F0000003F0000003F0000003E0000007E0000 | |
| 622 | +007E0000007E0000007E000000FE000000FE000000FE000000FE000000FE000000FE000000FE00 | |
| 623 | +0000FE000000FE0000003800001C297CA822>I<000003800000000007C00000000007C0000000 | |
| 624 | +000FE0000000000FE0000000000FE0000000001FF0000000001FF0000000003FF8000000003FF8 | |
| 625 | +000000003FF80000000073FC0000000073FC00000000F3FE00000000E1FE00000000E1FE000000 | |
| 626 | +01C0FF00000001C0FF00000003C0FF80000003807F80000007807FC0000007003FC0000007003F | |
| 627 | +C000000E003FE000000E001FE000001E001FF000001C000FF000001FFFFFF000003FFFFFF80000 | |
| 628 | +3FFFFFF80000780007FC0000700003FC0000700003FC0000E00001FE0000E00001FE0001E00001 | |
| 629 | +FF0001C00000FF0001C00000FF00FFFE001FFFFEFFFE001FFFFEFFFE001FFFFE2F297EA834>65 | |
| 630 | +D<FFFFFFFFE0FFFFFFFFE0FFFFFFFFE003FC001FE003FC0007F003FC0001F003FC0001F003FC00 | |
| 631 | +00F003FC00007003FC00007003FC00007003FC01C07803FC01C03803FC01C03803FC01C03803FC | |
| 632 | +03C00003FC03C00003FC0FC00003FFFFC00003FFFFC00003FFFFC00003FC0FC00003FC03C00003 | |
| 633 | +FC03C00003FC01C00E03FC01C00E03FC01C00E03FC01C01C03FC00001C03FC00001C03FC00001C | |
| 634 | +03FC00003C03FC00003803FC00007803FC0000F803FC0001F803FC0003F803FC001FF8FFFFFFFF | |
| 635 | +F0FFFFFFFFF0FFFFFFFFF027297DA82D>69 D<FFFFFFFFC0FFFFFFFFC0FFFFFFFFC003FC003FC0 | |
| 636 | +03FC000FE003FC0003E003FC0001E003FC0001E003FC0000E003FC0000E003FC0000E003FC0000 | |
| 637 | +F003FC03807003FC03807003FC03807003FC03800003FC07800003FC07800003FC1F800003FFFF | |
| 638 | +800003FFFF800003FFFF800003FC1F800003FC07800003FC07800003FC03800003FC03800003FC | |
| 639 | +03800003FC03800003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003 | |
| 640 | +FC00000003FC00000003FC000000FFFFFC0000FFFFFC0000FFFFFC000024297DA82B>I<FFFFFC | |
| 641 | +FFFFFCFFFFFC01FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00 | |
| 642 | +01FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00 | |
| 643 | +01FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00FFFFFCFFFFFC | |
| 644 | +FFFFFC16297EA81A>73 D<FFFFFC0000FFFFFC0000FFFFFC000003FC00000003FC00000003FC00 | |
| 645 | +000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC | |
| 646 | +00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003 | |
| 647 | +FC00000003FC00000003FC00000003FC0001C003FC0001C003FC0001C003FC0001C003FC0003C0 | |
| 648 | +03FC00038003FC00038003FC00078003FC00078003FC000F8003FC000F8003FC001F8003FC007F | |
| 649 | +8003FC01FF00FFFFFFFF00FFFFFFFF00FFFFFFFF0022297DA829>76 D<FFFE0000001FFFC0FFFE | |
| 650 | +0000001FFFC0FFFF0000003FFFC003FF0000003FF00003FF0000003FF00003BF80000077F00003 | |
| 651 | +BF80000077F000039FC00000E7F000039FC00000E7F000038FE00001C7F000038FE00001C7F000 | |
| 652 | +0387F0000387F0000387F0000387F0000387F0000387F0000383F8000707F0000383F8000707F0 | |
| 653 | +000381FC000E07F0000381FC000E07F0000380FE001C07F0000380FE001C07F0000380FF003807 | |
| 654 | +F00003807F003807F00003807F003807F00003803F807007F00003803F807007F00003801FC0E0 | |
| 655 | +07F00003801FC0E007F00003800FE1C007F00003800FE1C007F00003800FE1C007F000038007F3 | |
| 656 | +8007F000038007F38007F000038003FF0007F000038003FF0007F000038001FE0007F000038001 | |
| 657 | +FE0007F000038000FC0007F000038000FC0007F000FFFE00FC01FFFFC0FFFE007801FFFFC0FFFE | |
| 658 | +007801FFFFC03A297DA841>I<FFFFFFF800FFFFFFFF00FFFFFFFFC003FC003FE003FC000FF003 | |
| 659 | +FC0007F803FC0007FC03FC0003FC03FC0003FE03FC0003FE03FC0003FE03FC0003FE03FC0003FE | |
| 660 | +03FC0003FE03FC0003FE03FC0003FC03FC0007FC03FC0007F803FC000FF003FC003FE003FFFFFF | |
| 661 | +8003FFFFFE0003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00 | |
| 662 | +000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC | |
| 663 | +00000003FC000000FFFFF00000FFFFF00000FFFFF0000027297DA82F>80 | |
| 664 | +D<007F806003FFF0E00FFFFFE01F807FE03F001FE07E0007E07E0003E07C0003E0FC0001E0FC00 | |
| 665 | +01E0FC0000E0FE0000E0FE0000E0FF000000FFC000007FFE00007FFFE0003FFFFC003FFFFF001F | |
| 666 | +FFFF8007FFFFC003FFFFE000FFFFF00007FFF000007FF000000FF8000007F8000003F8E00003F8 | |
| 667 | +E00001F8E00001F8E00001F8F00001F8F00001F0F80003F0FC0003E0FF0007E0FFE01FC0FFFFFF | |
| 668 | +00E0FFFE00C01FF0001D297CA826>83 D<7FFFFFFFFFC07FFFFFFFFFC07FFFFFFFFFC07F803FC0 | |
| 669 | +3FC07E003FC007C078003FC003C078003FC003C070003FC001C0F0003FC001E0F0003FC001E0E0 | |
| 670 | +003FC000E0E0003FC000E0E0003FC000E0E0003FC000E0E0003FC000E000003FC0000000003FC0 | |
| 671 | +000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000 | |
| 672 | +003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0 | |
| 673 | +000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000 | |
| 674 | +003FC00000007FFFFFE000007FFFFFE000007FFFFFE0002B287EA730>I<01FF800007FFF0000F | |
| 675 | +81FC001FC0FE001FC07F001FC07F001FC03F800F803F8000003F8000003F8000003F80000FFF80 | |
| 676 | +00FFFF8007FC3F801FE03F803F803F807F803F807F003F80FE003F80FE003F80FE003F80FE007F | |
| 677 | +80FF007F807F00FFC03F83DFFC0FFF0FFC01FC03FC1E1B7E9A21>97 D<FFE0000000FFE0000000 | |
| 678 | +FFE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000 | |
| 679 | +000FE00000000FE00000000FE00000000FE00000000FE00000000FE1FE00000FE7FF80000FFE07 | |
| 680 | +E0000FF803F8000FF001FC000FE000FE000FE000FE000FE0007F000FE0007F000FE0007F800FE0 | |
| 681 | +007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800F | |
| 682 | +E0007F000FE000FF000FE000FE000FF000FE000FF001FC000FF803F8000F9E07E0000F0FFF8000 | |
| 683 | +0E01FC0000212A7EA926>I<001FF80000FFFE0003F01F000FE03F801FC03F803F803F803F803F | |
| 684 | +807F801F007F000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00 | |
| 685 | +0000FF0000007F0000007F8000003F8001C03FC001C01FC003C00FE0078003F01F0000FFFC0000 | |
| 686 | +1FE0001A1B7E9A1F>I<00003FF80000003FF80000003FF800000003F800000003F800000003F8 | |
| 687 | +00000003F800000003F800000003F800000003F800000003F800000003F800000003F800000003 | |
| 688 | +F800000003F800001FE3F80000FFFBF80003F03FF8000FE00FF8001FC007F8003F8003F8003F80 | |
| 689 | +03F8007F8003F8007F0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF | |
| 690 | +0003F800FF0003F800FF0003F800FF0003F8007F0003F8007F0003F8003F8003F8003F8007F800 | |
| 691 | +1FC00FF8000FE01FF80003F03FFF8000FFF3FF80003FC3FF80212A7EA926>I<003FE00001FFF8 | |
| 692 | +0003F07E000FE03F001FC01F803F800FC03F800FC07F000FC07F0007E0FF0007E0FF0007E0FF00 | |
| 693 | +07E0FFFFFFE0FFFFFFE0FF000000FF000000FF000000FF0000007F0000007F8000003F8000E03F | |
| 694 | +8001E01FC001C00FE003C003F81F8000FFFE00001FF0001B1B7E9A20>I<0007F0003FFC00FE3E | |
| 695 | +01FC7F03F87F03F87F07F07F07F03E07F00007F00007F00007F00007F00007F00007F000FFFFC0 | |
| 696 | +FFFFC0FFFFC007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F000 | |
| 697 | +07F00007F00007F00007F00007F00007F00007F00007F00007F00007F0007FFF807FFF807FFF80 | |
| 698 | +182A7EA915>I<00FF81F003FFE7FC0FC1FE7C1F80FC7C3F80FE7C3F007E107F007F007F007F00 | |
| 699 | +7F007F007F007F007F007F007F007F003F007E003F80FE001F80FC000FC1F8001FFFE00018FF80 | |
| 700 | +00380000003C0000003C0000003E0000003FFFF8003FFFFF001FFFFFC00FFFFFE007FFFFF01FFF | |
| 701 | +FFF07E0007F87C0001F8F80001F8F80000F8F80000F8F80000F8FC0001F87E0003F03F0007E00F | |
| 702 | +C01F8003FFFE00007FF0001E287E9A22>I<FFE0000000FFE0000000FFE00000000FE00000000F | |
| 703 | +E00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0000000 | |
| 704 | +0FE00000000FE00000000FE00000000FE07F00000FE1FFC0000FE787E0000FEE07F0000FFC03F8 | |
| 705 | +000FF803F8000FF003F8000FF003F8000FF003F8000FE003F8000FE003F8000FE003F8000FE003 | |
| 706 | +F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE0 | |
| 707 | +03F8000FE003F8000FE003F8000FE003F800FFFE3FFF80FFFE3FFF80FFFE3FFF80212A7DA926> | |
| 708 | +I<07001FC01FE03FE03FE03FE01FE01FC007000000000000000000000000000000FFE0FFE0FFE0 | |
| 709 | +0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F | |
| 710 | +E00FE0FFFEFFFEFFFE0F2B7DAA14>I<FFE00000FFE00000FFE000000FE000000FE000000FE000 | |
| 711 | +000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE0 | |
| 712 | +1FFC0FE01FFC0FE01FFC0FE007C00FE00F800FE01E000FE07C000FE0F8000FE1F0000FE3E0000F | |
| 713 | +E7C0000FEFE0000FFFF0000FFFF0000FFFF8000FF3FC000FE1FE000FC0FE000FC0FF000FC07F80 | |
| 714 | +0FC03F800FC03FC00FC01FE00FC00FF0FFFC3FFEFFFC3FFEFFFC3FFE1F2A7EA924>107 | |
| 715 | +D<FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0 | |
| 716 | +0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F | |
| 717 | +E0FFFEFFFEFFFE0F2A7DA914>I<FFC07F800FF000FFC1FFE03FFC00FFC783F0F07E000FCE03F9 | |
| 718 | +C07F000FDC01FB803F000FF801FF003F800FF001FE003F800FF001FE003F800FF001FE003F800F | |
| 719 | +E001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC00 | |
| 720 | +3F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE0 | |
| 721 | +01FC003F800FE001FC003F800FE001FC003F800FE001FC003F80FFFE1FFFC3FFF8FFFE1FFFC3FF | |
| 722 | +F8FFFE1FFFC3FFF8351B7D9A3C>I<FFC07F0000FFC1FFC000FFC787E0000FCE07F0000FDC03F8 | |
| 723 | +000FF803F8000FF003F8000FF003F8000FF003F8000FE003F8000FE003F8000FE003F8000FE003 | |
| 724 | +F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE0 | |
| 725 | +03F8000FE003F8000FE003F8000FE003F800FFFE3FFF80FFFE3FFF80FFFE3FFF80211B7D9A26> | |
| 726 | +I<003FE00001FFFC0003F07E000FC01F801F800FC03F800FE03F0007E07F0007F07F0007F07F00 | |
| 727 | +07F0FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F87F0007F07F | |
| 728 | +0007F03F800FE03F800FE01F800FC00FC01F8007F07F0001FFFC00003FE0001D1B7E9A22>I<FF | |
| 729 | +E1FE0000FFE7FF8000FFFE07E0000FF803F8000FF001FC000FE001FE000FE000FE000FE000FF00 | |
| 730 | +0FE000FF000FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F | |
| 731 | +800FE0007F800FE0007F800FE000FF000FE000FF000FE000FE000FF001FE000FF003FC000FF803 | |
| 732 | +F8000FFE0FE0000FEFFF80000FE1FC00000FE00000000FE00000000FE00000000FE00000000FE0 | |
| 733 | +0000000FE00000000FE00000000FE00000000FE0000000FFFE000000FFFE000000FFFE00000021 | |
| 734 | +277E9A26>I<FFC1F0FFC7FCFFCE3E0FDC7F0FD87F0FF87F0FF07F0FF03E0FF0000FE0000FE000 | |
| 735 | +0FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE000 | |
| 736 | +FFFF00FFFF00FFFF00181B7E9A1C>114 D<03FE300FFFF03E03F07800F07000F0F00070F00070 | |
| 737 | +F80070FC0000FFE000FFFE007FFFC03FFFE01FFFF007FFF800FFFC0003FC0000FCE0007CE0003C | |
| 738 | +F0003CF0003CF80078FC0078FF01F0F7FFC0C1FF00161B7E9A1B>I<0070000070000070000070 | |
| 739 | +0000F00000F00000F00001F00003F00003F00007F0001FFFF0FFFFF0FFFFF007F00007F00007F0 | |
| 740 | +0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F03807F03807F0 | |
| 741 | +3807F03807F03807F03807F03803F87001F8F000FFE0001F8015267FA51B>I<FFE03FF800FFE0 | |
| 742 | +3FF800FFE03FF8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000F | |
| 743 | +E003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F800 | |
| 744 | +0FE003F8000FE003F8000FE003F8000FE007F8000FE007F8000FE00FF80007E01FF80003F03BFF | |
| 745 | +8001FFF3FF80003FC3FF80211B7D9A26>I<FFFE03FF80FFFE03FF80FFFE03FF8007F000700007 | |
| 746 | +F000700007F800F00003F800E00003FC01E00001FC01C00001FC01C00000FE03800000FE038000 | |
| 747 | +007F070000007F070000007F8F0000003F8E0000003FDE0000001FDC0000001FDC0000000FF800 | |
| 748 | +00000FF80000000FF800000007F000000007F000000003E000000003E000000001C00000211B7F | |
| 749 | +9A24>I<FFFE7FFC0FFEFFFE7FFC0FFEFFFE7FFC0FFE0FE007E000E007F003F001C007F003F001 | |
| 750 | +C007F807F803C003F807F8038003F807F8038001FC0EFC070001FC0EFC070001FE1EFC0F0000FE | |
| 751 | +1C7E0E0000FE1C7E0E0000FF383F1E00007F383F1C00007F783F3C00003FF01FB800003FF01FB8 | |
| 752 | +00003FF01FF800001FE00FF000001FE00FF000000FC007E000000FC007E000000FC007E0000007 | |
| 753 | +8003C00000078003C0002F1B7F9A32>I<FFFC0FFF00FFFC0FFF00FFFC0FFF0007F003C00003F8 | |
| 754 | +07800001FC07800000FE0F000000FF1E0000007F3C0000003FF80000001FF00000000FF0000000 | |
| 755 | +0FF000000007F000000007F80000000FFC0000001FFE0000001EFE0000003C7F000000783F8000 | |
| 756 | +00F01FC00001E01FE00001C00FE00003C007F000FFF01FFF80FFF01FFF80FFF01FFF80211B7F9A | |
| 757 | +24>I<FFFE03FF80FFFE03FF80FFFE03FF8007F000700007F000700007F800F00003F800E00003 | |
| 758 | +FC01E00001FC01C00001FC01C00000FE03800000FE038000007F070000007F070000007F8F0000 | |
| 759 | +003F8E0000003FDE0000001FDC0000001FDC0000000FF80000000FF80000000FF800000007F000 | |
| 760 | +000007F000000003E000000003E000000001C000000001C0000000038000000003800000380780 | |
| 761 | +00007C07000000FE0F000000FE0E000000FE1E000000FE3C0000007C780000003FE00000000FC0 | |
| 762 | +00000021277F9A24>I E /Fm 75 123 df<001F83E000F06E3001C078780380F8780300F03007 | |
| 763 | +007000070070000700700007007000070070000700700007007000FFFFFF800700700007007000 | |
| 764 | +070070000700700007007000070070000700700007007000070070000700700007007000070070 | |
| 765 | +000700700007007000070070000700700007007000070070007FE3FF001D20809F1B>11 | |
| 766 | +D<003F0000E0C001C0C00381E00701E00701E0070000070000070000070000070000070000FFFF | |
| 767 | +E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700 | |
| 768 | +E00700E00700E00700E00700E00700E07FC3FE1720809F19>I<003FE000E0E001C1E00381E007 | |
| 769 | +00E00700E00700E00700E00700E00700E00700E00700E0FFFFE00700E00700E00700E00700E007 | |
| 770 | +00E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E007 | |
| 771 | +00E07FE7FE1720809F19>I<001F81F80000F04F040001C07C06000380F80F000300F00F000700 | |
| 772 | +F00F00070070000007007000000700700000070070000007007000000700700000FFFFFFFF0007 | |
| 773 | +007007000700700700070070070007007007000700700700070070070007007007000700700700 | |
| 774 | +070070070007007007000700700700070070070007007007000700700700070070070007007007 | |
| 775 | +00070070070007007007007FE3FE3FF02420809F26>I<07070F1C383060C00808779F17>19 | |
| 776 | +D<7038F87CFC7EFC7E743A0402040204020804080410081008201040200F0E7E9F17>34 | |
| 777 | +D<70F8FCFC74040404080810102040060E7C9F0D>39 D<0020004000800100020006000C000C00 | |
| 778 | +180018003000300030007000600060006000E000E000E000E000E000E000E000E000E000E000E0 | |
| 779 | +00E0006000600060007000300030003000180018000C000C000600020001000080004000200B2E | |
| 780 | +7DA112>I<800040002000100008000C00060006000300030001800180018001C000C000C000C0 | |
| 781 | +00E000E000E000E000E000E000E000E000E000E000E000E000C000C000C001C001800180018003 | |
| 782 | +000300060006000C00080010002000400080000B2E7DA112>I<70F8FCFC740404040808101020 | |
| 783 | +40060E7C840D>44 D<FFC0FFC00A027F8A0F>I<70F8F8F87005057C840D>I<0003000300070006 | |
| 784 | +0006000E000C000C001C0018001800380030003000700060006000E000C000C001C00180018001 | |
| 785 | +800380030003000700060006000E000C000C001C0018001800380030003000700060006000E000 | |
| 786 | +C000C000102D7DA117>I<03F0000E1C001C0E00180600380700700380700380700380700380F0 | |
| 787 | +03C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C070 | |
| 788 | +03807003807003807807803807001806001C0E000E1C0003F000121F7E9D17>I<018003800F80 | |
| 789 | +F38003800380038003800380038003800380038003800380038003800380038003800380038003 | |
| 790 | +800380038003800380038007C0FFFE0F1E7C9D17>I<03F0000C1C00100E002007004007808007 | |
| 791 | +80F007C0F803C0F803C0F803C02007C00007C0000780000780000F00000E00001C000038000070 | |
| 792 | +0000600000C0000180000300000600400C00401800401000803FFF807FFF80FFFF80121E7E9D17 | |
| 793 | +>I<03F0000C1C00100E00200F00780F80780780780780380F80000F80000F00000F00000E0000 | |
| 794 | +1C0000380003F000003C00000E00000F000007800007800007C02007C0F807C0F807C0F807C0F0 | |
| 795 | +0780400780400F00200E001C3C0003F000121F7E9D17>I<000600000600000E00000E00001E00 | |
| 796 | +002E00002E00004E00008E00008E00010E00020E00020E00040E00080E00080E00100E00200E00 | |
| 797 | +200E00400E00C00E00FFFFF0000E00000E00000E00000E00000E00000E00000E0000FFE0141E7F | |
| 798 | +9D17>I<1803001FFE001FFC001FF8001FE00010000010000010000010000010000010000011F0 | |
| 799 | +00161C00180E001007001007800003800003800003C00003C00003C07003C0F003C0F003C0E003 | |
| 800 | +80400380400700200600100E000C380003E000121F7E9D17>I<007C000182000701000E03800C | |
| 801 | +07801C0780380300380000780000700000700000F1F000F21C00F40600F80700F80380F80380F0 | |
| 802 | +03C0F003C0F003C0F003C0F003C07003C07003C07003803803803807001807000C0E00061C0001 | |
| 803 | +F000121F7E9D17>I<4000007FFFC07FFF807FFF80400100800200800200800400000800000800 | |
| 804 | +00100000200000200000400000400000C00000C00001C000018000038000038000038000038000 | |
| 805 | +078000078000078000078000078000078000078000030000121F7D9D17>I<03F0000C0C001006 | |
| 806 | +003003002001806001806001806001807001807803003E03003F06001FC8000FF00003F80007FC | |
| 807 | +000C7E00103F00300F806003804001C0C001C0C000C0C000C0C000C0C000806001802001001002 | |
| 808 | +000C0C0003F000121F7E9D17>I<03F0000E18001C0C00380600380700700700700380F00380F0 | |
| 809 | +0380F003C0F003C0F003C0F003C0F003C07007C07007C03807C0180BC00E13C003E3C000038000 | |
| 810 | +0380000380000700300700780600780E00700C002018001070000FC000121F7E9D17>I<70F8F8 | |
| 811 | +F8700000000000000000000070F8F8F87005147C930D>I<70F8F8F87000000000000000000000 | |
| 812 | +70F0F8F878080808101010202040051D7C930D>I<7FFFFFE0FFFFFFF000000000000000000000 | |
| 813 | +00000000000000000000000000000000000000000000FFFFFFF07FFFFFE01C0C7D9023>61 | |
| 814 | +D<001F800000E0700001000800060006000800010008000100100F00802030C0402060404040C0 | |
| 815 | +202041C01C2041C01C2081801C1083801C1083801C1083801C1083801C1083801C1083801C1081 | |
| 816 | +801C1041C01C1041C01C1040C03C2020605C202030CC40100F0780080000000800000006000070 | |
| 817 | +010001C000E01F00001FF0001C207D9F23>64 D<000100000003800000038000000380000007C0 | |
| 818 | +000007C0000007C0000009E0000009E0000009E0000010F0000010F0000010F000002078000020 | |
| 819 | +78000020780000403C0000403C0000403C0000801E0000801E0000FFFE0001000F0001000F0001 | |
| 820 | +000F00020007800200078002000780040003C00E0003C01F0007E0FFC03FFE1F207F9F22>I<FF | |
| 821 | +FFE0000F80380007801E0007801F0007800F0007800F8007800F8007800F8007800F8007800F80 | |
| 822 | +07800F0007801F0007801E0007803C0007FFF00007803C0007801E0007800F0007800F80078007 | |
| 823 | +80078007C0078007C0078007C0078007C0078007C00780078007800F8007800F0007801F000F80 | |
| 824 | +3C00FFFFF0001A1F7E9E20>I<000FC040007030C001C009C0038005C0070003C00E0001C01E00 | |
| 825 | +00C01C0000C03C0000C07C0000407C00004078000040F8000000F8000000F8000000F8000000F8 | |
| 826 | +000000F8000000F8000000F8000000F8000000780000007C0000407C0000403C0000401C000040 | |
| 827 | +1E0000800E000080070001000380020001C0040000703800000FC0001A217D9F21>I<FFFFFF00 | |
| 828 | +0F800F000780030007800300078001000780018007800080078000800780008007808080078080 | |
| 829 | +0007808000078080000781800007FF800007818000078080000780800007808000078080000780 | |
| 830 | +00200780002007800020078000400780004007800040078000C0078000C0078001800F800F80FF | |
| 831 | +FFFF801B1F7E9E1F>69 D<FFFFFF000F800F000780030007800300078001000780018007800080 | |
| 832 | +078000800780008007800080078080000780800007808000078080000781800007FF8000078180 | |
| 833 | +000780800007808000078080000780800007800000078000000780000007800000078000000780 | |
| 834 | +000007800000078000000FC00000FFFE0000191F7E9E1E>I<000FE0200078186000E004E00380 | |
| 835 | +02E0070001E00F0000E01E0000601E0000603C0000603C0000207C00002078000020F8000000F8 | |
| 836 | +000000F8000000F8000000F8000000F8000000F8000000F8007FFCF80003E0780001E07C0001E0 | |
| 837 | +3C0001E03C0001E01E0001E01E0001E00F0001E0070001E0038002E000E0046000781820000FE0 | |
| 838 | +001E217D9F24>I<FFF8FFF80F800F8007800F0007800F0007800F0007800F0007800F0007800F | |
| 839 | +0007800F0007800F0007800F0007800F0007800F0007800F0007FFFF0007800F0007800F000780 | |
| 840 | +0F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007 | |
| 841 | +800F0007800F000F800F80FFF8FFF81D1F7E9E22>I<FFFC0FC007800780078007800780078007 | |
| 842 | +800780078007800780078007800780078007800780078007800780078007800780078007800780 | |
| 843 | +07800FC0FFFC0E1F7F9E10>I<FFFE000FC0000780000780000780000780000780000780000780 | |
| 844 | +000780000780000780000780000780000780000780000780000780000780000780000780020780 | |
| 845 | +0207800207800207800607800407800407800C07801C0F807CFFFFFC171F7E9E1C>76 | |
| 846 | +D<FF80001FF80F80001F800780001F0005C0002F0005C0002F0005C0002F0004E0004F0004E000 | |
| 847 | +4F000470008F000470008F000470008F000438010F000438010F000438010F00041C020F00041C | |
| 848 | +020F00041C020F00040E040F00040E040F00040E040F000407080F000407080F000407080F0004 | |
| 849 | +03900F000403900F000401E00F000401E00F000401E00F000E00C00F001F00C01F80FFE0C1FFF8 | |
| 850 | +251F7E9E2A>I<FF803FF807C007C007C0038005E0010005E0010004F001000478010004780100 | |
| 851 | +043C0100043C0100041E0100040F0100040F010004078100040781000403C1000401E1000401E1 | |
| 852 | +000400F1000400F1000400790004003D0004003D0004001F0004001F0004000F00040007000400 | |
| 853 | +07000E0003001F000300FFE001001D1F7E9E22>I<001F800000F0F00001C0380007801E000F00 | |
| 854 | +0F000E0007001E0007803C0003C03C0003C07C0003E0780001E0780001E0F80001F0F80001F0F8 | |
| 855 | +0001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0780001E07C0003E07C0003E0 | |
| 856 | +3C0003C03C0003C01E0007800E0007000F000F0007801E0001C0380000F0F000001F80001C217D | |
| 857 | +9F23>I<FFFFE0000F80780007801C0007801E0007800F0007800F8007800F8007800F8007800F | |
| 858 | +8007800F8007800F8007800F0007801E0007801C000780780007FFE00007800000078000000780 | |
| 859 | +000007800000078000000780000007800000078000000780000007800000078000000780000007 | |
| 860 | +8000000FC00000FFFC0000191F7E9E1F>I<FFFF80000F80F0000780780007803C0007801E0007 | |
| 861 | +801E0007801F0007801F0007801F0007801F0007801E0007801E0007803C00078078000780F000 | |
| 862 | +07FF80000781C0000780E0000780F0000780700007807800078078000780780007807C0007807C | |
| 863 | +0007807C0007807C0407807E0407803E040FC01E08FFFC0F10000003E01E207E9E21>82 | |
| 864 | +D<07E0800C1980100780300380600180600180E00180E00080E00080E00080F00000F000007800 | |
| 865 | +007F00003FF0001FFC000FFE0003FF00001F800007800003C00003C00001C08001C08001C08001 | |
| 866 | +C08001C0C00180C00380E00300F00600CE0C0081F80012217D9F19>I<7FFFFFE0780F01E0600F | |
| 867 | +0060400F0020400F0020C00F0030800F0010800F0010800F0010800F0010000F0000000F000000 | |
| 868 | +0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000 | |
| 869 | +000F0000000F0000000F0000000F0000000F0000000F0000000F0000001F800007FFFE001C1F7E | |
| 870 | +9E21>I<FFFC3FF80FC007C0078003800780010007800100078001000780010007800100078001 | |
| 871 | +000780010007800100078001000780010007800100078001000780010007800100078001000780 | |
| 872 | +01000780010007800100078001000780010007800100038002000380020001C0020001C0040000 | |
| 873 | +E008000070180000382000000FC0001D207E9E22>I<FFF003FE1F8000F80F0000600F80006007 | |
| 874 | +8000400780004003C0008003C0008003C0008001E0010001E0010001F0010000F0020000F00200 | |
| 875 | +00F806000078040000780400003C0800003C0800003C0800001E1000001E1000001F3000000F20 | |
| 876 | +00000F20000007C0000007C0000007C000000380000003800000038000000100001F207F9E22> | |
| 877 | +I<FFF07FF81FF01F800FC007C00F00078003800F00078001000F0007C00100078007C002000780 | |
| 878 | +07C00200078007C0020003C009E0040003C009E0040003C009E0040003E010F00C0001E010F008 | |
| 879 | +0001E010F0080001F02078080000F02078100000F02078100000F0403C10000078403C20000078 | |
| 880 | +403C20000078C03E2000003C801E4000003C801E4000003C801E4000001F000F8000001F000F80 | |
| 881 | +00001F000F8000001E00078000000E00070000000E00070000000C000300000004000200002C20 | |
| 882 | +7F9E2F>I<FEFEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 | |
| 883 | +C0C0C0C0C0C0C0C0C0FEFE072D7CA10D>91 D<080410082010201040204020804080408040B85C | |
| 884 | +FC7EFC7E7C3E381C0F0E7B9F17>I<FEFE06060606060606060606060606060606060606060606 | |
| 885 | +06060606060606060606060606060606060606FEFE072D7FA10D>I<1FE000303000781800781C | |
| 886 | +00300E00000E00000E00000E0000FE00078E001E0E00380E00780E00F00E10F00E10F00E10F01E | |
| 887 | +10781E103867200F83C014147E9317>97 D<0E0000FE00000E00000E00000E00000E00000E0000 | |
| 888 | +0E00000E00000E00000E00000E00000E3E000EC3800F01C00F00E00E00E00E00700E00700E0078 | |
| 889 | +0E00780E00780E00780E00780E00780E00700E00700E00E00F00E00D01C00CC300083E0015207F | |
| 890 | +9F19>I<03F80E0C1C1E381E380C70007000F000F000F000F000F000F00070007000380138011C | |
| 891 | +020E0C03F010147E9314>I<000380003F80000380000380000380000380000380000380000380 | |
| 892 | +00038000038000038003E380061B801C0780380380380380700380700380F00380F00380F00380 | |
| 893 | +F00380F00380F003807003807003803803803807801C07800E1B8003E3F815207E9F19>I<03F0 | |
| 894 | +000E1C001C0E00380700380700700700700380F00380F00380FFFF80F00000F00000F000007000 | |
| 895 | +007000003800801800800C010007060001F80011147F9314>I<007C00C6018F038F0706070007 | |
| 896 | +0007000700070007000700FFF00700070007000700070007000700070007000700070007000700 | |
| 897 | +070007000700070007007FF01020809F0E>I<0000E003E3300E3C301C1C30380E00780F00780F | |
| 898 | +00780F00780F00780F00380E001C1C001E380033E0002000002000003000003000003FFE001FFF | |
| 899 | +800FFFC03001E0600070C00030C00030C00030C000306000603000C01C038003FC00141F7F9417 | |
| 900 | +>I<0E0000FE00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E | |
| 901 | +3E000E43000E81800F01C00F01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E | |
| 902 | +01C00E01C00E01C00E01C00E01C00E01C0FFE7FC16207F9F19>I<1C001E003E001E001C000000 | |
| 903 | +000000000000000000000E007E000E000E000E000E000E000E000E000E000E000E000E000E000E | |
| 904 | +000E000E000E000E00FFC00A1F809E0C>I<00E001F001F001F000E00000000000000000000000 | |
| 905 | +00007007F000F00070007000700070007000700070007000700070007000700070007000700070 | |
| 906 | +007000700070007000706070F060F0C061803F000C28829E0E>I<0E0000FE00000E00000E0000 | |
| 907 | +0E00000E00000E00000E00000E00000E00000E00000E00000E0FF00E03C00E03000E02000E0400 | |
| 908 | +0E08000E10000E30000E70000EF8000F38000E1C000E1E000E0E000E07000E07800E03800E03C0 | |
| 909 | +0E03E0FFCFF815207F9F18>I<0E00FE000E000E000E000E000E000E000E000E000E000E000E00 | |
| 910 | +0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00FFE00B | |
| 911 | +20809F0C>I<0E1F01F000FE618618000E81C81C000F00F00E000F00F00E000E00E00E000E00E0 | |
| 912 | +0E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00 | |
| 913 | +E00E000E00E00E000E00E00E000E00E00E000E00E00E00FFE7FE7FE023147F9326>I<0E3E00FE | |
| 914 | +43000E81800F01C00F01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E | |
| 915 | +01C00E01C00E01C00E01C00E01C0FFE7FC16147F9319>I<01F800070E001C03803801C03801C0 | |
| 916 | +7000E07000E0F000F0F000F0F000F0F000F0F000F0F000F07000E07000E03801C03801C01C0380 | |
| 917 | +070E0001F80014147F9317>I<0E3E00FEC3800F01C00F00E00E00E00E00F00E00700E00780E00 | |
| 918 | +780E00780E00780E00780E00780E00700E00F00E00E00F01E00F01C00EC3000E3E000E00000E00 | |
| 919 | +000E00000E00000E00000E00000E00000E0000FFE000151D7F9319>I<03E0800619801C05803C | |
| 920 | +0780380380780380700380F00380F00380F00380F00380F00380F0038070038078038038038038 | |
| 921 | +07801C0B800E138003E380000380000380000380000380000380000380000380000380003FF815 | |
| 922 | +1D7E9318>I<0E78FE8C0F1E0F1E0F0C0E000E000E000E000E000E000E000E000E000E000E000E | |
| 923 | +000E000E00FFE00F147F9312>I<1F9030704030C010C010C010E00078007F803FE00FF0007080 | |
| 924 | +3880188018C018C018E030D0608F800D147E9312>I<020002000200060006000E000E003E00FF | |
| 925 | +F80E000E000E000E000E000E000E000E000E000E000E000E080E080E080E080E080610031001E0 | |
| 926 | +0D1C7F9B12>I<0E01C0FE1FC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01 | |
| 927 | +C00E01C00E01C00E01C00E01C00E01C00E03C00603C0030DC001F1FC16147F9319>I<FF83F81E | |
| 928 | +01E01C00C00E00800E00800E008007010007010003820003820003820001C40001C40001EC0000 | |
| 929 | +E80000E80000700000700000700000200015147F9318>I<FF9FE1FC3C0780701C0300601C0380 | |
| 930 | +200E0380400E0380400E03C0400707C0800704C0800704E080038861000388710003C8730001D0 | |
| 931 | +320001D03A0000F03C0000E01C0000E01C0000601800004008001E147F9321>I<7FC3FC0F01E0 | |
| 932 | +0701C007018003810001C20000E40000EC00007800003800003C00007C00004E00008700010700 | |
| 933 | +0303800201C00601E01E01E0FF07FE1714809318>I<FF83F81E01E01C00C00E00800E00800E00 | |
| 934 | +8007010007010003820003820003820001C40001C40001EC0000E80000E8000070000070000070 | |
| 935 | +00002000002000004000004000004000F08000F08000F100006200003C0000151D7F9318>I<3F | |
| 936 | +FF380E200E201C40384078407000E001E001C00380078007010E011E011C0338027006700EFFFE | |
| 937 | +10147F9314>I E /Fn 13 118 df<0F001F003F803F007E00F800F000C0000A08769C18>19 | |
| 938 | +D<00038000000380000007C0000007C0000007C000000FE000000FE000001FF000001BF000001B | |
| 939 | +F0000031F8000031F8000061FC000060FC0000E0FE0000C07E0000C07E0001803F0001FFFF0003 | |
| 940 | +FFFF8003001F8003001F8006000FC006000FC00E000FE00C0007E0FFC07FFEFFC07FFE1F1C7E9B | |
| 941 | +24>65 D<07F8201FFEE03C07E07801E07000E0F000E0F00060F00060F80000FE0000FFE0007FFE | |
| 942 | +003FFF003FFF800FFFC007FFE0007FE00003F00001F00000F0C000F0C000F0C000E0E000E0F001 | |
| 943 | +C0FC03C0EFFF0083FC00141C7D9B1B>83 D<0FF8001C1E003E0F803E07803E07C01C07C00007C0 | |
| 944 | +007FC007E7C01F07C03C07C07C07C0F807C0F807C0F807C0780BC03E13F80FE1F815127F9117> | |
| 945 | +97 D<FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F3F80 | |
| 946 | +1FE1E01F80701F00781F003C1F003C1F003E1F003E1F003E1F003E1F003E1F003E1F003C1F003C | |
| 947 | +1F00781F80701EC1E01C3F00171D7F9C1B>I<03FC000E0E001C1F003C1F00781F00780E00F800 | |
| 948 | +00F80000F80000F80000F80000F800007800007801803C01801C03000E0E0003F80011127E9115 | |
| 949 | +>I<1E003F003F003F003F001E00000000000000000000000000FF00FF001F001F001F001F001F | |
| 950 | +001F001F001F001F001F001F001F001F001F00FFE0FFE00B1E7F9D0E>105 | |
| 951 | +D<FF0FC07E00FF31E18F001F40F207801F80FC07C01F80FC07C01F00F807C01F00F807C01F00F8 | |
| 952 | +07C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00 | |
| 953 | +F807C0FFE7FF3FF8FFE7FF3FF825127F9128>109 D<01FC000F07801C01C03C01E07800F07800 | |
| 954 | +F0F800F8F800F8F800F8F800F8F800F8F800F87800F07800F03C01E01E03C00F078001FC001512 | |
| 955 | +7F9118>111 D<FE3E00FE47001E8F801E8F801E8F801F07001F00001F00001F00001F00001F00 | |
| 956 | +001F00001F00001F00001F00001F0000FFF000FFF00011127F9114>114 | |
| 957 | +D<1FD830786018E018E018F000FF807FE07FF01FF807FC007CC01CC01CE01CE018F830CFC00E12 | |
| 958 | +7E9113>I<0300030003000300070007000F000F003FFCFFFC1F001F001F001F001F001F001F00 | |
| 959 | +1F001F001F0C1F0C1F0C1F0C0F08079803F00E1A7F9913>I<FF07F8FF07F81F00F81F00F81F00 | |
| 960 | +F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F01F80F01F80786FF01F8 | |
| 961 | +FF18127F911B>I E /Fo 45 127 df<007E0001C1800301800703C00E03C00E01800E00000E00 | |
| 962 | +000E00000E00000E0000FFFFC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01 | |
| 963 | +C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07F87F8151D809C17>12 | |
| 964 | +D<FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF800912 | |
| 965 | +7F910C>16 D<1C1C3C3870C0800707779C15>19 D<1C001E00078003C001C00380FF000A077B7E | |
| 966 | +12>24 D<60F0F0701010101020204080040C7C830C>44 D<FFE0FFE00B0280890E>I<60F0F060 | |
| 967 | +04047C830C>I<003F800000C0600003001800040004000800020010000100201F008020708080 | |
| 968 | +40E0404040C0384041C03840818038208380382083803820838038208380382083803820818038 | |
| 969 | +2041C0382040C0384040E0784020709880201F0F00100000000800000004000000030001E000C0 | |
| 970 | +1F80003FF0001B1D7E9C20>64 D<000600000006000000060000000F0000000F0000000F000000 | |
| 971 | +17800000178000001780000023C0000023C0000023C0000041E0000041E0000041E0000080F000 | |
| 972 | +0080F0000180F8000100780001FFF80003007C0002003C0002003C0006003E0004001E0004001E | |
| 973 | +000C001F001E001F00FF80FFF01C1D7F9C1F>I<001F808000E0618001801980070007800E0003 | |
| 974 | +801C0003801C00018038000180780000807800008070000080F0000000F0000000F0000000F000 | |
| 975 | +0000F0000000F0000000F0000000F0000000700000807800008078000080380000801C0001001C | |
| 976 | +0001000E000200070004000180080000E03000001FC000191E7E9C1E>67 | |
| 977 | +D<FFFFFC0F003C0F000C0F00040F00040F00060F00020F00020F02020F02000F02000F02000F06 | |
| 978 | +000FFE000F06000F02000F02000F02000F02010F00010F00020F00020F00020F00060F00060F00 | |
| 979 | +0C0F003CFFFFFC181C7E9B1C>69 D<001F808000E0618001801980070007800E0003801C000380 | |
| 980 | +1C00018038000180780000807800008070000080F0000000F0000000F0000000F0000000F00000 | |
| 981 | +00F0000000F000FFF0F0000F80700007807800078078000780380007801C0007801C0007800E00 | |
| 982 | +078007000B800180118000E06080001F80001C1E7E9C21>71 D<FFF00F000F000F000F000F000F | |
| 983 | +000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00 | |
| 984 | +0F00FFF00C1C7F9B0F>73 D<FFF8000F80000F00000F00000F00000F00000F00000F00000F0000 | |
| 985 | +0F00000F00000F00000F00000F00000F00000F00000F00000F00000F00080F00080F00080F0018 | |
| 986 | +0F00180F00100F00300F00700F01F0FFFFF0151C7E9B1A>76 D<003F800000E0E0000380380007 | |
| 987 | +001C000E000E001C0007003C00078038000380780003C0780003C0700001C0F00001E0F00001E0 | |
| 988 | +F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0700001C0780003C0780003C0380003 | |
| 989 | +803C0007801C0007000E000E0007001C000380380000E0E000003F80001B1E7E9C20>79 | |
| 990 | +D<FFFF800F00E00F00780F003C0F001C0F001E0F001E0F001E0F001E0F001E0F001C0F003C0F00 | |
| 991 | +780F00E00FFF800F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00 | |
| 992 | +000F0000FFF000171C7E9B1C>I<FFFF00000F01E0000F0078000F003C000F001C000F001E000F | |
| 993 | +001E000F001E000F001E000F001C000F003C000F0078000F01E0000FFF00000F03C0000F00E000 | |
| 994 | +0F00F0000F0078000F0078000F0078000F0078000F0078000F0078000F0078100F0078100F0038 | |
| 995 | +100F003C20FFF01C20000007C01C1D7E9B1F>82 D<7FFFFFC0700F01C0600F00C0400F0040400F | |
| 996 | +0040C00F0020800F0020800F0020800F0020000F0000000F0000000F0000000F0000000F000000 | |
| 997 | +0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000 | |
| 998 | +000F0000000F0000001F800003FFFC001B1C7F9B1E>84 D<FFF07FC00F000E000F0004000F0004 | |
| 999 | +000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F00 | |
| 1000 | +04000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000700080007 | |
| 1001 | +800800038010000180100000C020000070C000001F00001A1D7E9B1F>I<1FC000307000783800 | |
| 1002 | +781C00301C00001C00001C0001FC000F1C00381C00701C00601C00E01C40E01C40E01C40603C40 | |
| 1003 | +304E801F870012127E9115>97 D<FC00001C00001C00001C00001C00001C00001C00001C00001C | |
| 1004 | +00001C00001C00001C7C001D86001E03001C01801C01C01C00C01C00E01C00E01C00E01C00E01C | |
| 1005 | +00E01C00E01C00C01C01C01C01801E030019060010F800131D7F9C17>I<07E00C301878307870 | |
| 1006 | +306000E000E000E000E000E000E00060007004300418080C3007C00E127E9112>I<003F000007 | |
| 1007 | +0000070000070000070000070000070000070000070000070000070003E7000C1700180F003007 | |
| 1008 | +00700700600700E00700E00700E00700E00700E00700E00700600700700700300700180F000C37 | |
| 1009 | +0007C7E0131D7E9C17>I<03E00C301818300C700E6006E006FFFEE000E000E000E00060007002 | |
| 1010 | +300218040C1803E00F127F9112>I<00F8018C071E061E0E0C0E000E000E000E000E000E00FFE0 | |
| 1011 | +0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E007FE00F1D809C0D | |
| 1012 | +>I<00038003C4C00C38C01C3880181800381C00381C00381C00381C001818001C38000C300013 | |
| 1013 | +C0001000003000001800001FF8001FFF001FFF803003806001C0C000C0C000C0C000C060018030 | |
| 1014 | +03001C0E0007F800121C7F9215>I<FC00001C00001C00001C00001C00001C00001C00001C0000 | |
| 1015 | +1C00001C00001C00001C7C001C87001D03001E03801C03801C03801C03801C03801C03801C0380 | |
| 1016 | +1C03801C03801C03801C03801C03801C03801C0380FF9FF0141D7F9C17>I<18003C003C001800 | |
| 1017 | +0000000000000000000000000000FC001C001C001C001C001C001C001C001C001C001C001C001C | |
| 1018 | +001C001C001C001C00FF80091D7F9C0C>I<00C001E001E000C000000000000000000000000000 | |
| 1019 | +000FE000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0 | |
| 1020 | +00E000E060E0F0C0F1C061803E000B25839C0D>I<FC001C001C001C001C001C001C001C001C00 | |
| 1021 | +1C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF | |
| 1022 | +80091D7F9C0C>108 D<FC7E07E0001C838838001D019018001E01E01C001C01C01C001C01C01C | |
| 1023 | +001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C0 | |
| 1024 | +1C001C01C01C001C01C01C001C01C01C00FF8FF8FF8021127F9124>I<FC7C001C87001D03001E | |
| 1025 | +03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C | |
| 1026 | +0380FF9FF014127F9117>I<03F0000E1C00180600300300700380600180E001C0E001C0E001C0 | |
| 1027 | +E001C0E001C0E001C06001807003803003001806000E1C0003F00012127F9115>I<FC7C001D86 | |
| 1028 | +001E03001C01801C01C01C00C01C00E01C00E01C00E01C00E01C00E01C00E01C01C01C01C01C01 | |
| 1029 | +801E03001D06001CF8001C00001C00001C00001C00001C00001C00001C0000FF8000131A7F9117 | |
| 1030 | +>I<03C1000C3300180B00300F00700700700700E00700E00700E00700E00700E00700E0070060 | |
| 1031 | +0700700700300F00180F000C370007C70000070000070000070000070000070000070000070000 | |
| 1032 | +3FE0131A7E9116>I<FCE01D301E781E781C301C001C001C001C001C001C001C001C001C001C00 | |
| 1033 | +1C001C00FFC00D127F9110>I<1F9030704030C010C010E010F8007F803FE00FF000F880388018 | |
| 1034 | +C018C018E010D0608FC00D127F9110>I<04000400040004000C000C001C003C00FFE01C001C00 | |
| 1035 | +1C001C001C001C001C001C001C001C101C101C101C101C100C100E2003C00C1A7F9910>I<FC1F | |
| 1036 | +801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03 | |
| 1037 | +801C07800C07800E1B8003E3F014127F9117>I<FF07E03C03801C01001C01000E02000E020007 | |
| 1038 | +040007040007040003880003880003D80001D00001D00000E00000E00000E00000400013127F91 | |
| 1039 | +16>I<FF3FCFE03C0F03801C0701801C0701001C0B01000E0B82000E0B82000E1182000711C400 | |
| 1040 | +0711C4000720C40003A0E80003A0E80003C0680001C0700001C0700001803000008020001B127F | |
| 1041 | +911E>I<7F8FF00F03800F030007020003840001C80001D80000F00000700000780000F800009C | |
| 1042 | +00010E00020E000607000403801E07C0FF0FF81512809116>I<FF07E03C03801C01001C01000E | |
| 1043 | +02000E020007040007040007040003880003880003D80001D00001D00000E00000E00000E00000 | |
| 1044 | +4000004000008000008000F08000F10000F300006600003C0000131A7F9116>I<FFFFFFFFFF80 | |
| 1045 | +2901808B2A>124 D<1C043F0843F080E00E047D9B15>126 D E /Fp 33 | |
| 1046 | +123 df<70F8FCFC7404040404080810102040060F7C840E>44 D<008003800F80F38003800380 | |
| 1047 | +038003800380038003800380038003800380038003800380038003800380038003800380038003 | |
| 1048 | +800380038003800380038007C0FFFE0F217CA018>49 D<03F0000C1C001007002007804003C040 | |
| 1049 | +03C08003E0F003E0F801E0F801E0F801E02003E00003E00003C00003C0000780000700000E0000 | |
| 1050 | +1C0000180000300000600000C0000180000100000200200400200800201800603000403FFFC07F | |
| 1051 | +FFC0FFFFC013217EA018>I<000200000600000E00000E00001E00001E00002E00004E00004E00 | |
| 1052 | +008E00008E00010E00020E00020E00040E00040E00080E00100E00100E00200E00200E00400E00 | |
| 1053 | +800E00FFFFF8000E00000E00000E00000E00000E00000E00000E00001F0001FFF015217FA018> | |
| 1054 | +52 D<4000006000007FFFE07FFFC07FFFC0400080C00100800100800200800200000400000800 | |
| 1055 | +00080000100000300000200000600000600000600000E00000C00000C00001C00001C00001C000 | |
| 1056 | +01C00003C00003C00003C00003C00003C00003C00003C00003C00001800013237DA118>55 | |
| 1057 | +D<01F000060C000C0600180700380380700380700380F001C0F001C0F001C0F001E0F001E0F001 | |
| 1058 | +E0F001E0F001E07001E07003E03803E01805E00C05E00619E003E1E00001C00001C00001C00003 | |
| 1059 | +80000380300300780700780600700C002018001030000FC00013227EA018>57 | |
| 1060 | +D<0007E0100038183000E0063001C00170038000F0070000F00E0000701E0000701C0000303C00 | |
| 1061 | +00303C0000307C0000107800001078000010F8000000F8000000F8000000F8000000F8000000F8 | |
| 1062 | +000000F8000000F800000078000000780000107C0000103C0000103C0000101C0000201E000020 | |
| 1063 | +0E000040070000400380008001C0010000E0020000381C000007E0001C247DA223>67 | |
| 1064 | +D<FFFFFFC00F8007C0078001C0078000C007800040078000400780006007800020078000200780 | |
| 1065 | +002007802020078020000780200007802000078060000780E00007FFE0000780E0000780600007 | |
| 1066 | +802000078020000780200007802000078000000780000007800000078000000780000007800000 | |
| 1067 | +0780000007800000078000000FC00000FFFE00001B227EA120>70 D<FFFC3FFF0FC003F0078001 | |
| 1068 | +E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E00780 | |
| 1069 | +01E0078001E0078001E0078001E007FFFFE0078001E0078001E0078001E0078001E0078001E007 | |
| 1070 | +8001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0 | |
| 1071 | +0FC003F0FFFC3FFF20227EA125>72 D<FFFC0FC007800780078007800780078007800780078007 | |
| 1072 | +800780078007800780078007800780078007800780078007800780078007800780078007800780 | |
| 1073 | +07800FC0FFFC0E227EA112>I<FFFE00000FC00000078000000780000007800000078000000780 | |
| 1074 | +000007800000078000000780000007800000078000000780000007800000078000000780000007 | |
| 1075 | +800000078000000780000007800000078000000780000007800080078000800780008007800080 | |
| 1076 | +078001800780018007800100078003000780030007800F000F803F00FFFFFF0019227EA11E>76 | |
| 1077 | +D<FFC00003FF0FC00003F007C00003E005E00005E005E00005E004F00009E004F00009E004F000 | |
| 1078 | +09E004780011E004780011E004780011E0043C0021E0043C0021E0043C0021E0041E0041E0041E | |
| 1079 | +0041E0040F0081E0040F0081E0040F0081E004078101E004078101E004078101E00403C201E004 | |
| 1080 | +03C201E00401E401E00401E401E00401E401E00400F801E00400F801E00400F801E004007001E0 | |
| 1081 | +0E007001E01F007003F0FFE0203FFF28227EA12D>I<FFFFE000000F803C000007800E00000780 | |
| 1082 | +078000078007C000078003C000078003E000078003E000078003E000078003E000078003E00007 | |
| 1083 | +8003C000078007C000078007800007800E000007803C000007FFE0000007807000000780380000 | |
| 1084 | +07801C000007801E000007800E000007800F000007800F000007800F000007800F000007800F80 | |
| 1085 | +0007800F800007800F800007800F808007800FC080078007C0800FC003C100FFFC01E200000000 | |
| 1086 | +7C0021237EA124>82 D<FFF03FFC03FE1F8007E000F80F0003C000700F0003C000200F0003C000 | |
| 1087 | +20078001E00040078001E00040078001E0004003C002F0008003C002F0008003C002F0008001E0 | |
| 1088 | +0478010001E00478010001E00478010000F0083C020000F0083C020000F0083C020000F8183E06 | |
| 1089 | +000078101E04000078101E0400007C101E0400003C200F0800003C200F0800003C200F0800001E | |
| 1090 | +40079000001E40079000001E40079000000F8003E000000F8003E000000F8003E00000070001C0 | |
| 1091 | +0000070001C00000070001C0000003000180000002000080002F237FA132>87 | |
| 1092 | +D<0FE0001838003C0C003C0E0018070000070000070000070000FF0007C7001E07003C07007807 | |
| 1093 | +00700700F00708F00708F00708F00F087817083C23900FC1E015157E9418>97 | |
| 1094 | +D<0E0000FE00001E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00 | |
| 1095 | +000E00000E1F000E61C00E80600F00300E00380E003C0E001C0E001E0E001E0E001E0E001E0E00 | |
| 1096 | +1E0E001E0E001E0E001C0E003C0E00380F00700C80600C41C0083F0017237FA21B>I<01FE0007 | |
| 1097 | +03000C07801C0780380300780000700000F00000F00000F00000F00000F00000F00000F0000070 | |
| 1098 | +00007800403800401C00800C010007060001F80012157E9416>I<0000E0000FE00001E00000E0 | |
| 1099 | +0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E001F8E00704E00C02E0 | |
| 1100 | +1C01E03800E07800E07000E0F000E0F000E0F000E0F000E0F000E0F000E0F000E07000E07800E0 | |
| 1101 | +3800E01801E00C02E0070CF001F0FE17237EA21B>I<01FC000707000C03801C01C03801C07801 | |
| 1102 | +E07000E0F000E0FFFFE0F00000F00000F00000F00000F000007000007800203800201C00400E00 | |
| 1103 | +8007030000FC0013157F9416>I<00007001F198071E180E0E181C07001C07003C07803C07803C | |
| 1104 | +07803C07801C07001C07000E0E000F1C0019F0001000001000001800001800001FFE000FFFC00F | |
| 1105 | +FFE03800F0600030400018C00018C00018C000186000306000303800E00E038003FE0015217F95 | |
| 1106 | +18>103 D<0E0000FE00001E00000E00000E00000E00000E00000E00000E00000E00000E00000E | |
| 1107 | +00000E00000E00000E1F800E60C00E80E00F00700F00700E00700E00700E00700E00700E00700E | |
| 1108 | +00700E00700E00700E00700E00700E00700E00700E00700E00700E0070FFE7FF18237FA21B>I< | |
| 1109 | +1C001E003E001E001C00000000000000000000000000000000000E00FE001E000E000E000E000E | |
| 1110 | +000E000E000E000E000E000E000E000E000E000E000E000E000E00FFC00A227FA10E>I<0E00FE | |
| 1111 | +001E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00 | |
| 1112 | +0E000E000E000E000E000E000E000E000E000E000E000E000E00FFE00B237FA20E>108 | |
| 1113 | +D<0E1FC07F00FE60E183801E807201C00F003C00E00F003C00E00E003800E00E003800E00E0038 | |
| 1114 | +00E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E00 | |
| 1115 | +3800E00E003800E00E003800E00E003800E00E003800E0FFE3FF8FFE27157F942A>I<0E1F80FE | |
| 1116 | +60C01E80E00F00700F00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E | |
| 1117 | +00700E00700E00700E00700E00700E0070FFE7FF18157F941B>I<01FC000707000C01801800C0 | |
| 1118 | +3800E0700070700070F00078F00078F00078F00078F00078F00078F000787000707800F03800E0 | |
| 1119 | +1C01C00E038007070001FC0015157F9418>I<01F8200704600E02601C01603801E07800E07800 | |
| 1120 | +E0F000E0F000E0F000E0F000E0F000E0F000E0F000E07000E07800E03801E01C01E00C02E0070C | |
| 1121 | +E001F0E00000E00000E00000E00000E00000E00000E00000E00000E00000E0000FFE171F7E941A | |
| 1122 | +>113 D<0E3CFE461E8F0F0F0F060F000E000E000E000E000E000E000E000E000E000E000E000E | |
| 1123 | +000E000F00FFF010157F9413>I<0F8830786018C018C008C008E008F0007F803FE00FF001F800 | |
| 1124 | +3C801C800C800CC00CC008E018D0308FC00E157E9413>I<02000200020002000600060006000E | |
| 1125 | +001E003E00FFF80E000E000E000E000E000E000E000E000E000E000E000E040E040E040E040E04 | |
| 1126 | +0E040708030801F00E1F7F9E13>I<0E0070FE07F01E00F00E00700E00700E00700E00700E0070 | |
| 1127 | +0E00700E00700E00700E00700E00700E00700E00700E00700E00F00E00F006017003827800FC7F | |
| 1128 | +18157F941B>I<FFC1FE1E00780E00300E00200E002007004007004003808003808003808001C1 | |
| 1129 | +0001C10000E20000E20000E2000074000074000038000038000038000010000010000020000020 | |
| 1130 | +00002000004000F04000F08000F180004300003C0000171F7F941A>121 | |
| 1131 | +D<3FFFC0380380300780200700600E00401C00403C0040380000700000E00001E00001C0000380 | |
| 1132 | +400700400F00400E00C01C0080380080780180700780FFFF8012157F9416>I | |
| 1133 | +E /Fq 18 118 df<FFFFC00000FFFFC0000007F000000003E000000003E000000003E000000003 | |
| 1134 | +E000000003E000000003E000000003E000000003E000000003E000000003E000000003E0000000 | |
| 1135 | +03E000000003E000000003E000000003E000000003E000000003E000000003E000000003E00000 | |
| 1136 | +0003E000000003E000000003E000000003E000000003E000000003E000000003E000000003E000 | |
| 1137 | +000003E000000003E000004003E000004003E000004003E000004003E000008003E000008003E0 | |
| 1138 | +00008003E000008003E000018003E000018003E000038003E000038003E000078003E0000F0003 | |
| 1139 | +E0003F0007E000FF00FFFFFFFF00FFFFFFFF0022317CB029>76 D<FFF00000007FF8FFF0000000 | |
| 1140 | +7FF807F00000007F0002F8000000BE0002F8000000BE0002F8000000BE00027C0000013E00027C | |
| 1141 | +0000013E00023E0000023E00023E0000023E00023E0000023E00021F0000043E00021F0000043E | |
| 1142 | +00021F0000043E00020F8000083E00020F8000083E00020F8000083E000207C000103E000207C0 | |
| 1143 | +00103E000207C000103E000203E000203E000203E000203E000201F000403E000201F000403E00 | |
| 1144 | +0201F000403E000200F800803E000200F800803E000200F800803E0002007C01003E0002007C01 | |
| 1145 | +003E0002007C01003E0002003E02003E0002003E02003E0002003E02003E0002001F04003E0002 | |
| 1146 | +001F04003E0002000F88003E0002000F88003E0002000F88003E00020007D0003E00020007D000 | |
| 1147 | +3E00020007D0003E00020003E0003E00020003E0003E00020003E0003E00070001C0003E000F80 | |
| 1148 | +01C0007F00FFF801C00FFFF8FFF800800FFFF835317CB03D>I<FFFFFFC000FFFFFFF80007E000 | |
| 1149 | +FE0003E0001F0003E0000F8003E00007C003E00003E003E00003F003E00001F003E00001F003E0 | |
| 1150 | +0001F803E00001F803E00001F803E00001F803E00001F803E00001F803E00001F003E00001F003 | |
| 1151 | +E00003E003E00003E003E00007C003E0000F8003E0001F0003E000FC0003FFFFF00003E0000000 | |
| 1152 | +03E000000003E000000003E000000003E000000003E000000003E000000003E000000003E00000 | |
| 1153 | +0003E000000003E000000003E000000003E000000003E000000003E000000003E000000003E000 | |
| 1154 | +000003E000000003E000000003E000000003E000000007F0000000FFFF800000FFFF8000002531 | |
| 1155 | +7CB02D>80 D<FFFFFF000000FFFFFFF0000007E001FC000003E0003E000003E0001F800003E000 | |
| 1156 | +07C00003E00007E00003E00003E00003E00003F00003E00001F00003E00001F80003E00001F800 | |
| 1157 | +03E00001F80003E00001F80003E00001F80003E00001F80003E00001F00003E00003F00003E000 | |
| 1158 | +03E00003E00007C00003E0000F800003E0001F000003E0003C000003E001F0000003FFFF000000 | |
| 1159 | +03E003E0000003E00078000003E0003C000003E0001E000003E0000F000003E0000F800003E000 | |
| 1160 | +07800003E00007C00003E00007C00003E00007C00003E00007C00003E00007C00003E00007E000 | |
| 1161 | +03E00007E00003E00007E00003E00007E00003E00007E00003E00007E00803E00007F00803E000 | |
| 1162 | +03F00803E00003F00807F00001F010FFFF8000F810FFFF80007C60000000000F802D327CB031> | |
| 1163 | +82 D<00FE00000303C0000C00E00010007000100038003C003C003E001C003E001E003E001E00 | |
| 1164 | +08001E0000001E0000001E0000001E00000FFE0000FC1E0003E01E000F801E001F001E003E001E | |
| 1165 | +003C001E007C001E00F8001E04F8001E04F8001E04F8003E04F8003E0478003E047C005E043E00 | |
| 1166 | +8F080F0307F003FC03E01E1F7D9E21>97 D<003F8000E0600380180700040F00041E001E1C003E | |
| 1167 | +3C003E7C003E7C0008780000F80000F80000F80000F80000F80000F80000F80000F80000F80000 | |
| 1168 | +7800007C00007C00003C00011E00011E00020F000207000403801800E060003F80181F7D9E1D> | |
| 1169 | +99 D<003F800000E0E0000380380007003C000E001E001E001E001C000F003C000F007C000F00 | |
| 1170 | +78000F8078000780F8000780F8000780FFFFFF80F8000000F8000000F8000000F8000000F80000 | |
| 1171 | +00F8000000780000007C0000003C0000003C0000801E0000800E0001000F0002000780020001C0 | |
| 1172 | +0C0000F03000001FC000191F7E9E1D>101 D<0007E0001C1000383800707C00E07C01E07C01C0 | |
| 1173 | +3803C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C000FFFF | |
| 1174 | +C0FFFFC003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C0 | |
| 1175 | +0003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C0 | |
| 1176 | +0003C00007E0007FFF007FFF0016327FB114>I<000000F0007F030801C1C41C0380E81C070070 | |
| 1177 | +080F0078001E003C001E003C003E003E003E003E003E003E003E003E003E003E003E003E001E00 | |
| 1178 | +3C001E003C000F007800070070000780E00009C1C000087F000018000000180000001800000018 | |
| 1179 | +000000180000001C0000000E0000000FFFF80007FFFF0003FFFF800E000FC0180001E0300000F0 | |
| 1180 | +70000070E0000038E0000038E0000038E0000038E00000387000007070000070380000E01C0001 | |
| 1181 | +C00700070001C01C00003FE0001E2F7E9F21>I<01800000003F80000000FF80000000FF800000 | |
| 1182 | +000F80000000078000000007800000000780000000078000000007800000000780000000078000 | |
| 1183 | +000007800000000780000000078000000007800000000780000000078000000007800000000780 | |
| 1184 | +FE00000783078000078C03C000079001E00007A001E00007A000F00007C000F00007C000F00007 | |
| 1185 | +8000F000078000F000078000F000078000F000078000F000078000F000078000F000078000F000 | |
| 1186 | +078000F000078000F000078000F000078000F000078000F000078000F000078000F000078000F0 | |
| 1187 | +00078000F000078000F000078000F000078000F0000FC001F800FFFC1FFF80FFFC1FFF8021327E | |
| 1188 | +B125>I<07000F801F801F800F8007000000000000000000000000000000000000000000000001 | |
| 1189 | +801F80FF80FF800F80078007800780078007800780078007800780078007800780078007800780 | |
| 1190 | +078007800780078007800780078007800FC0FFF8FFF80D307EAF12>I<01803F80FF80FF800F80 | |
| 1191 | +078007800780078007800780078007800780078007800780078007800780078007800780078007 | |
| 1192 | +800780078007800780078007800780078007800780078007800780078007800780078007800780 | |
| 1193 | +0780078007800FC0FFFCFFFC0E327EB112>108 D<0180FE001FC0003F83078060F000FF8C03C1 | |
| 1194 | +807800FF9001E2003C000FA001E4003C0007A000F4001E0007C000F8001E0007C000F8001E0007 | |
| 1195 | +8000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F000 | |
| 1196 | +1E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E000780 | |
| 1197 | +00F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E | |
| 1198 | +00078000F0001E00078000F0001E00078000F0001E000FC001F8003F00FFFC1FFF83FFF0FFFC1F | |
| 1199 | +FF83FFF0341F7E9E38>I<0180FE00003F83078000FF8C03C000FF9001E0000FA001E00007A000 | |
| 1200 | +F00007C000F00007C000F000078000F000078000F000078000F000078000F000078000F0000780 | |
| 1201 | +00F000078000F000078000F000078000F000078000F000078000F000078000F000078000F00007 | |
| 1202 | +8000F000078000F000078000F000078000F000078000F000078000F000078000F0000FC001F800 | |
| 1203 | +FFFC1FFF80FFFC1FFF80211F7E9E25>I<001FC00000F0780001C01C00070007000F0007801E00 | |
| 1204 | +03C01C0001C03C0001E03C0001E0780000F0780000F0780000F0F80000F8F80000F8F80000F8F8 | |
| 1205 | +0000F8F80000F8F80000F8F80000F8F80000F8780000F07C0001F03C0001E03C0001E01E0003C0 | |
| 1206 | +1E0003C00F00078007800F0001C01C0000F07800001FC0001D1F7E9E21>I<0183E03F8C18FF90 | |
| 1207 | +7CFF907C0FA07C07C03807C00007C00007C0000780000780000780000780000780000780000780 | |
| 1208 | +000780000780000780000780000780000780000780000780000780000780000780000780000FC0 | |
| 1209 | +00FFFE00FFFE00161F7E9E19>114 D<00400000400000400000400000400000C00000C00000C0 | |
| 1210 | +0001C00001C00003C00007C0000FC0001FFFE0FFFFE003C00003C00003C00003C00003C00003C0 | |
| 1211 | +0003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C01003C01003C0 | |
| 1212 | +1003C01003C01003C01003C01003C01001C02001E02000E0400078C0001F00142C7FAB19>116 | |
| 1213 | +D<01800030003F8007F000FF801FF000FF801FF0000F8001F000078000F000078000F000078000 | |
| 1214 | +F000078000F000078000F000078000F000078000F000078000F000078000F000078000F0000780 | |
| 1215 | +00F000078000F000078000F000078000F000078000F000078000F000078000F000078000F00007 | |
| 1216 | +8001F000078001F000078001F000038002F00003C004F00001C008F800007030FF80001FC0FF80 | |
| 1217 | +211F7E9E25>I E end | |
| 1218 | +%%EndProlog | |
| 1219 | +%%BeginSetup | |
| 1220 | +%%Feature: *Resolution 300 | |
| 1221 | +TeXDict begin @a4 /a4 where {pop a4} if | |
| 1222 | +%%EndSetup | |
| 1223 | +%%Page: 1 1 | |
| 1224 | +bop 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 | |
| 1226 | +526 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 | |
| 1229 | +991 y Fn(Abstract)164 1067 y Fo(Lua)j(is)g(an)g(em)o(b)q(edded)g(programming) | |
| 1230 | +c(language)k(designed)g(to)g(b)q(e)h(used)g(as)f(a)g(con\014guration)102 | |
| 1231 | +1117 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 | |
| 1233 | +1166 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 | |
| 1235 | +1216 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 | |
| 1237 | +1538 y Fo(Lua)9 b(\023)-20 b(e)11 b(uma)d(linguagem)g(de)j(extens~)-21 | |
| 1238 | +b(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 | |
| 1244 | +y(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 | |
| 1246 | +1737 y(das)f(principais)f(caracter)-5 b(\023)-16 b(\020sticas)16 | |
| 1247 | +b(do)d(sistema.)910 2976 y Fm(1)p eop | |
| 1248 | +%%Page: 2 2 | |
| 1249 | +bop -12 160 a Fl(1)69 b(In)n(tro)r(duction)-12 261 y Fm(Lua)16 | |
| 1250 | +b(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) | |
| 1253 | +h(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 | |
| 1257 | +y(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 | |
| 1259 | +543 y(notion)j(of)f(a)g(\\main")g(program:)28 b(it)19 b(only)h(w)o(orks)f | |
| 1260 | +Fk(emb)n(e)n(dde)n(d)g Fm(in)h(a)f(host)g(clien)o(t,)j(called)f(the)e | |
| 1261 | +Fk(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 | |
| 1265 | +b(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) | |
| 1268 | +h(a)f(syn)o(tactical)g(framew)o(ork.)59 826 y(Lua)k(is)g(free)g(distribution) | |
| 1269 | +h(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) | |
| 1272 | +60 976 y Fj(ftp.icad.puc-rio.br:/pub)o(/lua/lua)o(_1.0.ta)o(r.Z)-12 | |
| 1273 | +1119 y Fl(2)69 b(En)n(vironmen)n(t)21 b(and)i(Mo)r(dules)-12 | |
| 1274 | +1221 y Fm(All)15 b(statemen)o(ts)d(in)j(Lua)e(are)h(executed)g(in)g(a)f | |
| 1275 | +Fk(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 | |
| 1279 | +1390 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 | |
| 1281 | +1446 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 | |
| 1283 | +1503 y(Global)22 b(v)m(ariables)g(do)f(not)g(need)h(declaration.)39 | |
| 1284 | +b(An)o(y)22 b(v)m(ariable)g(is)g(assumed)g(to)e(b)q(e)i(global)g(unless)-12 | |
| 1285 | +1559 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 | |
| 1288 | +Fi(nil)p Fm(.)59 1672 y(The)g(unit)h(of)f(execution)h(of)f(Lua)h(is)f(called) | |
| 1289 | +i(a)e Fk(mo)n(dule)s Fm(.)20 b(The)c(syn)o(tax)e(for)h(mo)q(dules)h(is:)1563 | |
| 1290 | +1656 y Fh(1)72 1744 y Fk(mo)n(dule)50 b Fg(!)g(f)p Fk(statement)32 | |
| 1291 | +b 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 | |
| 1294 | +b(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 | |
| 1296 | +y(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 | |
| 1298 | +1986 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 | |
| 1302 | +2026 y Fh(2)1757 2042 y Fm(.)-12 2185 y Fl(3)69 b(T)n(yp)r(es)-12 | |
| 1303 | +2287 y Fm(Lua)16 b(is)h(a)e(dynamically)j(t)o(yp)q(ed)e(language.)22 | |
| 1304 | +b(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.) | |
| 1306 | +20 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) | |
| 1308 | +h(Lua:)k Fk(nil)p Fm(,)14 b Fk(numb)n(er)p Fm(,)g Fk(string)p | |
| 1309 | +Fm(,)g Fk(function)p Fm(,)g Fk(Cfunction)p Fm(,)g Fk(user)n(data)p | |
| 1310 | +Fm(,)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 | |
| 1313 | +2513 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 | |
| 1319 | +b(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 | |
| 1322 | +y Fe(As)12 b(usual)i(in)g(extended)f(BNF,)f Fd(f)p Fc(a)s Fd(g)g | |
| 1323 | +Fe(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 | |
| 1325 | +Ff(+)1538 2764 y Fe(means)g(one)g(or)f(more)-12 2810 y Fc(a)s | |
| 1326 | +Fe('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 | |
| 1330 | +bop -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 | |
| 1332 | +216 y(ha)o(v)o(e)f(t)o(yp)q(e)g Fk(Cfunction)s Fm(.)59 273 | |
| 1333 | +y(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 | |
| 1336 | +Fm(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) | |
| 1338 | +h 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 | |
| 1340 | +498 y(n)o(um)o(b)q(ers)19 b(and)f(with)h(strings.)29 b(Therefore,)19 | |
| 1341 | +b(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) | |
| 1342 | +g(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 | |
| 1345 | +b(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 | |
| 1347 | +Fj(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 | |
| 1349 | +b(cannot)e(con)o(tain)-12 781 y(tables,)e(only)h(references)f(to)f(them.)19 | |
| 1350 | +b(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) | |
| 1353 | +e(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 | |
| 1355 | +b(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 | |
| 1357 | +1346 y Fm(Lua)c(is)g(a)f(case)g(sensitiv)o(e)i(language.)19 | |
| 1358 | +b(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 | |
| 1362 | +Fj(and)143 b(do)190 b(else)143 b(elseif)95 b(end)203 1552 y(function)23 | |
| 1363 | +b(if)190 b(local)119 b(nil)167 b(not)203 1609 y(or)g(repeat)94 | |
| 1364 | +b(return)h(until)119 b(then)95 b(while)59 1703 y Fm(The)15 | |
| 1365 | +b(follo)o(wing)h(strings)f(denote)h(other)e(tok)o(ens:)203 | |
| 1366 | +1797 y Fj(~=)47 b(<=)h(>=)f(<)72 b(>)f(=)h(..)47 b(+)72 b(-)f(*)g(/)h(\045) | |
| 1367 | +203 1853 y(\()f(\))h({)f(})h([)f(])h(@)f(;)h(,)f(.)59 1947 | |
| 1368 | +y 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 | |
| 1370 | +2003 y(C-lik)o(e)f(escap)q(e)g(sequences)g Fj('\\n')p Fm(,)e | |
| 1371 | +Fj('\\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(\() | |
| 1373 | +p Fj(--)p Fm(\))e(and)h(run)h(un)o(til)g(the)f(end)h(of)f(the)g(line.)59 | |
| 1374 | +2116 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 | |
| 1376 | +2173 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 | |
| 1378 | +2388 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 | |
| 1382 | +b(More)17 b(sp)q(eci\014cally)l(,)k(the)c(string)h(is)-12 2587 | |
| 1383 | +y(con)o(v)o(erted)c(to)f(a)h(n)o(um)o(b)q(er)g(using)h(the)f(standard)g | |
| 1384 | +Fj(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 | |
| 1388 | +b(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 | |
| 1390 | +2756 y(otherwise,)e(it)g(is)g(formatted)e(follo)o(wing)i(the)f(\\)p | |
| 1391 | +Fj(\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 | |
| 1393 | +y(3)p eop | |
| 1394 | +%%Page: 4 4 | |
| 1395 | +bop -12 160 a Fb(4.3)56 b(Adjustmen)n(t)-12 245 y Fm(F)l(unctions)16 | |
| 1396 | +b(in)h(Lua)e(can)h(return)f(man)o(y)g(v)m(alues.)22 b(Because)16 | |
| 1397 | +b(there)f(are)h(no)f(t)o(yp)q(e)g(declarations,)h(the)g(system)-12 | |
| 1398 | +302 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 | |
| 1400 | +358 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 | |
| 1405 | +Fm('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 | |
| 1407 | +593 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 | |
| 1409 | +b(The)18 b(con)o(v)o(en)o(tional)f(commands)g(include)-12 735 | |
| 1410 | +y(assignmen)o(t,)d(con)o(trol)h(structures)f(and)h(pro)q(cedure)g(calls.)21 | |
| 1411 | +b(Non-con)o(v)o(en)o(tional)15 b(commands)g(include)i(table)-12 | |
| 1412 | +792 y(constructors,)d(explained)j(in)f(Section)h(4.5.7,)c(and)i(lo)q(cal)h(v) | |
| 1413 | +m(ariable)h(declarations.)-12 912 y Fi(4.4.1)52 b(Blo)q(c)o(ks)-12 | |
| 1414 | +998 y Fm(A)13 b(blo)q(c)o(k)g(is)g(a)f(list)i(of)e(statemen)o(ts,)g(executed) | |
| 1415 | +h(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 | |
| 1417 | +1122 y Fk(blo)n(ck)49 b Fg(!)h(f)p Fk(stat)16 b(sc)s Fg(g)f | |
| 1418 | +Fm([)p Fk(r)n(et)h(sc)s Fm(])128 1179 y Fk(sc)49 b Fg(!)h Fm([';'])2 | |
| 1419 | +1247 y(F)l(or)13 b(syn)o(tactic)g(reasons,)h(a)f(return)h(statemen)o(t)e(can) | |
| 1420 | +i(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) | |
| 1421 | +o(k.)-12 1303 y(This)j(restriction)g(also)f(a)o(v)o(oids)g(some)g(\\statemen) | |
| 1422 | +o(t)e(not)i(reac)o(hed")g(errors.)-12 1423 y Fi(4.4.2)52 b(Assignmen)n(t)-12 | |
| 1423 | +1509 y Fm(The)17 b(language)g(allo)o(ws)g(m)o(ultiple)i(assignmen)o(t.)24 | |
| 1424 | +b(Therefore,)17 b(the)g(syn)o(tax)f(de\014nes)i(a)e(list)i(of)e(v)m(ariables) | |
| 1425 | +i(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 | |
| 1428 | +y Fk(stat)49 b Fg(!)i Fk(varlist1)16 b Fm('=')g Fk(explist1)72 | |
| 1429 | +1747 y(varlist1)49 b Fg(!)i Fk(var)16 b Fg(f)p Fm(',')f Fk(var)5 | |
| 1430 | +b Fg(g)2 1815 y Fm(This)14 b(statemen)o(t)f(\014rst)h(ev)m(aluates)g(all)h(v) | |
| 1431 | +m(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.) | |
| 1433 | +20 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 | |
| 1435 | +2059 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 | |
| 1439 | +2240 y Fk(var)50 b Fg(!)g Fk(name)72 2297 y(var)g Fg(!)g Fk(var)17 | |
| 1440 | +b Fm('[')e Fk(exp1)i Fm(']')31 b Fg(j)16 b Fk(var)g Fm('.')k | |
| 1441 | +Fk(name)4 2365 y Fm(Brac)o(k)o(ets)c(are)g(used)h(to)f(index)h(a)f(table.)24 | |
| 1442 | +b(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 | |
| 1445 | +Fj(var["NAME"])p Fm(.)-12 2542 y Fi(4.4.3)52 b(Con)o(trol)17 | |
| 1446 | +b(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 | |
| 1448 | +b(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 | |
| 1450 | +Fm(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 | |
| 1453 | +bop 100 158 a Fk(stat)50 b Fg(!)g Fi(while)17 b Fk(exp1)g Fi(do)f | |
| 1454 | +Fk(blo)n(ck)g Fi(end)100 214 y Fk(stat)50 b Fg(!)g Fi(rep)q(eat)17 | |
| 1455 | +b Fk(blo)n(ck)e Fi(un)o(til)i Fk(exp1)100 271 y(stat)50 b Fg(!)g | |
| 1456 | +Fi(if)17 b Fk(exp1)f Fi(then)h Fk(blo)n(ck)e Fg(f)p Fk(elseif)9 | |
| 1457 | +b Fg(g)16 b Fm([)p Fi(else)g Fk(blo)n(ck)5 b Fm(])15 b Fi(end)72 | |
| 1458 | +327 y Fk(elseif)49 b Fg(!)h Fi(elseif)17 b Fk(exp1)f Fi(then)h | |
| 1459 | +Fk(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 | |
| 1463 | +Fi(return)15 b Fk(explist)-12 741 y Fi(4.4.4)52 b(Expressions)16 | |
| 1464 | +b(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 | |
| 1466 | +b(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 | |
| 1468 | +999 y(stat)g Fg(!)g Fk(table)n(c)n(onstructor)1 1067 y Fm(Ev)o(en)o(tual)14 | |
| 1469 | +b(returned)f(v)m(alues)i(are)d(thro)o(wn)h(a)o(w)o(a)o(y)l(.)18 | |
| 1470 | +b(F)l(unction)c(calls)g(are)f(explained)i(in)f(Section)g(4.5.8,)e(while)-12 | |
| 1471 | +1124 y(constructors)j(are)f(the)i(sub)s(ject)f(of)g(Section)h(4.5.7.)-12 | |
| 1472 | +1244 y Fi(4.4.5)52 b(Lo)q(cal)20 b(Declarations)-12 1330 y | |
| 1473 | +Fm(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 | |
| 1476 | +b(The)21 b(declaration)g(ma)o(y)g(include)i(an)e(initial)i(assignmen)o(t:)122 | |
| 1477 | +1502 y Fk(stat)50 b Fg(!)g Fi(lo)q(cal)18 b Fk(de)n(clist)e | |
| 1478 | +Fm([)p Fk(init)t Fm(])72 1558 y Fk(de)n(clist)49 b Fg(!)h Fk(name)16 | |
| 1479 | +b Fg(f)p Fm(',')f Fk(name)s Fg(g)125 1615 y Fk(init)50 b Fg(!)g | |
| 1480 | +Fm('=')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 | |
| 1484 | +b(Expressions)-12 1947 y Fi(4.5.1)c(Simple)16 b(Expressions)-12 | |
| 1485 | +2033 y Fm(Simple)h(expressions)f(are:)72 2101 y Fk(exp)50 b | |
| 1486 | +Fg(!)g Fm('\(')15 b Fk(exp)i Fm('\)')72 2157 y Fk(exp)50 b | |
| 1487 | +Fg(!)g Fi(nil)72 2214 y Fk(exp)g Fg(!)g Fm('n)o(um)o(b)q(er')72 | |
| 1488 | +2270 y Fk(exp)g Fg(!)g Fm('literal')72 2327 y Fk(exp)g Fg(!)g | |
| 1489 | +Fk(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 | |
| 1492 | +y Fi(4.5.2)52 b(Arithmetic)16 b(Op)q(erators)-12 2660 y Fm(Lua)f(supp)q(orts) | |
| 1493 | +f(the)g(usual)g(arithmetic)h(op)q(erators,)e(with)h(the)g(usual)h(meaning.)20 | |
| 1494 | +b(These)14 b(op)q(erators)g(are)f(the)-12 2716 y(binary)k Fj(+)p | |
| 1495 | +Fm(,)e Fj(-)p Fm(,)h Fj(*)g Fm(and)g Fj(/)p Fm(,)f(and)h(the)h(unary)e | |
| 1496 | +Fj(+)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 | |
| 1501 | +bop -12 160 a Fi(4.5.3)52 b(Relational)20 b(Op)q(erators)-12 | |
| 1502 | +245 y Fm(Lua)c(o\013ers)e(the)h(follo)o(wing)h(relational)g(op)q(erators:)155 | |
| 1503 | +339 y Fj(<)72 b(>)f(<=)48 b(>=)f(~=)g(=)-12 433 y Fm(All)17 | |
| 1504 | +b(return)e Fi(nil)h Fm(as)f(false)g(and)h(1)f(as)f(true.)59 | |
| 1505 | +490 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 | |
| 1507 | +Fi(nil)p Fm(.)-12 546 y(Otherwise,)h(their)e(v)m(alues)i(are)d(compared.)29 | |
| 1508 | +b(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 | |
| 1512 | +b(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 | |
| 1515 | +b(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 | |
| 1518 | +b(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 | |
| 1520 | +1034 y Fm(All)g(logical)g(op)q(erators,)f(lik)o(e)h(con)o(trol)e(structures,) | |
| 1521 | +h(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 | |
| 1523 | +Fi(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 | |
| 1525 | +Fm(The)18 b(op)q(erators)f Fj(and)g Fm(and)h Fj(or)g Fm(use)g(short-cut)f(ev) | |
| 1526 | +m(aluation,)j(that)d(is,)h(the)g(second)h(op)q(erand)f(is)g(ev)m(aluated)-12 | |
| 1527 | +1335 y(only)e(if)g(necessary)l(.)-12 1455 y Fi(4.5.5)52 b(Concatenation)-12 | |
| 1528 | +1541 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 | |
| 1533 | +b(precedence)i(follo)o(ws)e(the)h(table)f(b)q(elo)o(w,)h(from)e(the)h(lo)o(w) | |
| 1534 | +o(er)g(to)g(the)g(higher)h(priorit)o(y:)298 1897 y Fj(and)72 | |
| 1535 | +b(or)298 1953 y(<)g(>)f(<=)48 b(>=)f(~=)h(=)298 2010 y(..)298 | |
| 1536 | +2066 y(+)72 b(-)298 2122 y(*)g(/)298 2179 y(not)48 b(+)23 b(\(unary\))47 | |
| 1537 | +b(-)24 b(\(unary\))-12 2273 y Fm(All)17 b(binary)e(op)q(erators)g(are)g(left) | |
| 1538 | +g(asso)q(ciativ)o(e.)-12 2393 y Fi(4.5.7)52 b(T)l(able)18 b(Constructors)-12 | |
| 1539 | +2479 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) | |
| 1541 | +o(t)-12 2535 y(\015a)o(v)o(ors.)19 b(The)c(simplest)i(one)e(is:)72 | |
| 1542 | +2607 y Fk(table)n(c)n(onstructor)49 b Fg(!)h Fm('@')16 b('\(')f([)p | |
| 1543 | +Fk(exp1)6 b Fm(])17 b('\)')5 2679 y(Suc)o(h)h(an)f(expression)h(results)f(in) | |
| 1544 | +h(a)f(new)g(empt)o(y)g(table.)26 b(An)18 b(optional)f(dimension)i(ma)o(y)e(b) | |
| 1545 | +q(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 | |
| 1548 | +2849 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 | |
| 1550 | +2976 y(6)p eop | |
| 1551 | +%%Page: 7 7 | |
| 1552 | +bop 72 160 a Fk(table)n(c)n(onstructor)49 b Fg(!)h Fm('@')16 | |
| 1553 | +b([)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 | |
| 1556 | +y(\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 | |
| 1559 | +b(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 | |
| 1562 | +Fm(')p Fg(f)p Fm(')15 b([)p Fk(\016eld)r(list1)6 b Fm(])15 | |
| 1563 | +b(')p Fg(g)p Fm(')72 526 y Fk(\016eld)r(list1)49 b Fg(!)i Fk(\016eld)16 | |
| 1564 | +b Fg(f)p Fm(',')e Fk(\016eld)5 b Fg(g)157 582 y Fk(\016eld)49 | |
| 1565 | +b 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 | |
| 1567 | +b(an)g(example:)60 730 y Fj(a)24 b(=)f(@f{x)h(=)f(1,)h(y)g(=)f(3})-12 | |
| 1568 | +809 y Fm(is)16 b(equiv)m(alen)o(t)h(to:)60 888 y Fj(temp)23 | |
| 1569 | +b(=)h(@\(2\))60 945 y(temp.x)f(=)h(1)60 1001 y(temp.y)f(=)h(3)60 | |
| 1570 | +1058 y(f\(temp\))60 1114 y(a)g(=)f(temp)59 1193 y Fm(In)16 | |
| 1571 | +b(order)f(to)f(initialize)k(a)d(list,)h(one)f(can)h(use)f(the)g(follo)o(wing) | |
| 1572 | +h(syn)o(tax:)107 1261 y Fk(\014eld)r(list)48 b Fg(!)j Fm('[')15 | |
| 1573 | +b([)p Fk(l\014eld)r(list1)6 b Fm(])14 b(']')72 1318 y Fk(l\014eld)r(list1)48 | |
| 1574 | +b Fg(!)j Fk(exp)16 b Fg(f)p Fm(',')f Fk(exp)s Fg(g)3 1386 y | |
| 1575 | +Fm(As)h(an)f(example:)60 1465 y Fj(a)24 b(=)f(@["v1",)g("vv"])-12 | |
| 1576 | +1545 y Fm(is)16 b(equiv)m(alen)o(t)h(to:)60 1624 y Fj(temp)23 | |
| 1577 | +b(=)h(@\(2\))60 1680 y(temp[1])f(=)g("v1")60 1737 y(temp[2])g(=)g("v2")60 | |
| 1578 | +1793 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 | |
| 1580 | +1952 y Fj(@f{)23 b(})215 b(@f[)23 b(])-12 2069 y Fi(4.5.8)52 | |
| 1581 | +b(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 | |
| 1583 | +b Fg(!)h Fk(var)16 b Fm('\(')g([)p Fk(explist1)6 b Fm(])15 | |
| 1584 | +b('\)')154 2279 y Fk(explist1)50 b Fg(!)g(f)p Fk(exp1)16 b | |
| 1585 | +Fm(',')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 | |
| 1588 | +Fm(.)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 | |
| 1590 | +2463 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 | |
| 1592 | +2520 y(this)e(list)g(is)g(assigned)f(to)g(the)g(parameters.)59 | |
| 1593 | +2576 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 | |
| 1595 | +2632 y(results)11 b(m)o(ust)f(b)q(e)h(adjusted)f(b)q(efore)h(used.)19 | |
| 1596 | +b(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 | |
| 1600 | +b(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 | |
| 1602 | +2802 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 | |
| 1604 | +Fj(exp)p Fm(\),)-12 2858 y(no)h(adjustmen)o(t)g(is)h(done.)910 | |
| 1605 | +2976 y(7)p eop | |
| 1606 | +%%Page: 8 8 | |
| 1607 | +bop -12 160 a Fb(4.6)56 b(F)-5 b(unction)19 b(De\014nitions)-12 | |
| 1608 | +245 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) | |
| 1610 | +q(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 | |
| 1612 | +b Fg(!)i Fi(function)17 b Fk(name)f Fm('\(')f([)p Fk(p)n(arlist1)6 | |
| 1613 | +b Fm(])16 b('\)')f Fk(blo)n(ck)h Fi(end)59 503 y Fm(When)d(Lua)g(\014nds)h(a) | |
| 1614 | +f(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 | |
| 1616 | +Fk(function)p Fm(,)f(in)o(to)i(the)f(global)h(v)m(ariable)g | |
| 1617 | +Fj(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 | |
| 1619 | +y Fk(p)n(arlist1)49 b Fg(!)i Fk('name')16 b Fg(f)p Fm(',')f | |
| 1620 | +Fk(name)s Fg(g)59 816 y Fm(Results)h(are)e(returned)h(using)h(the)e | |
| 1621 | +Fj(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 | |
| 1624 | +1016 y Fl(5)69 b(The)23 b(Application)e(Program)h(In)n(terface)-12 | |
| 1625 | +1117 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 | |
| 1627 | +1174 y(program)13 b(to)g(comm)o(unicate)h(with)g(the)f(library)l(.)21 | |
| 1628 | +b(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 | |
| 1630 | +b(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 | |
| 1632 | +b(\(reading)e(and)g(writing\))h(Lua)f(ob)s(jects;)44 1605 y(4.)22 | |
| 1633 | +b(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 | |
| 1635 | +1887 y(All)h(API)f(functions)g(are)f(declared)h(in)g(the)g(\014le)g | |
| 1636 | +Fj(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 | |
| 1639 | +b(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 | |
| 1642 | +2301 y Fj(int)286 b(lua_dofile)357 b(\(char)23 b(*filename\);)-12 | |
| 1643 | +2358 y(int)286 b(lua_dostring)309 b(\(char)23 b(*string\);)-12 | |
| 1644 | +2479 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 | |
| 1648 | +b(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) | |
| 1649 | +g(can)h(hold)h(an)o(y)e(Lua)h(v)m(alue.)21 b Fj(lua_Object)-12 | |
| 1650 | +2678 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 | |
| 1653 | +bop -12 160 a Fm(where)16 b Fj(Object)e Fm(is)i(not)e(declared)j(in)f | |
| 1654 | +Fj(lua.h)p Fm(.)59 216 y(Lua)j(has)g(garbage)f(collection.)34 | |
| 1655 | +b(Therefore,)19 b(there)g(is)h(no)f(guaran)o(tee)f(that)g(a)h | |
| 1656 | +Fj(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 | |
| 1663 | +b(\(lua_Object)22 b(object\);)-12 536 y(int)286 b(lua_isnumber)309 | |
| 1664 | +b(\(lua_Object)22 b(object\);)-12 592 y(int)286 b(lua_isstring)309 | |
| 1665 | +b(\(lua_Object)22 b(object\);)-12 649 y(int)286 b(lua_istable)333 | |
| 1666 | +b(\(lua_Object)22 b(object\);)-12 705 y(int)286 b(lua_iscfunction)237 | |
| 1667 | +b(\(lua_Object)22 b(object\);)-12 762 y(int)286 b(lua_isuserdata)261 | |
| 1668 | +b(\(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 | |
| 1670 | +912 y(T)l(o)g(translate)f(a)h(v)m(alue)i(from)d(t)o(yp)q(e)h | |
| 1671 | +Fj(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 | |
| 1673 | +b(\(lua_Object)22 b(object\);)-12 1062 y(char)238 b(*lua_getstring)285 | |
| 1674 | +b(\(lua_Object)22 b(object\);)-12 1119 y(char)238 b(*lua_copystring)261 | |
| 1675 | +b(\(lua_Object)22 b(object\);)-12 1175 y(lua_CFunction)46 b(lua_getcfunction) | |
| 1676 | +213 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 | |
| 1678 | +Fm(con)o(v)o(erts)h(a)h Fj(lua_Object)e Fm(to)h(a)h(\015oat.)27 | |
| 1679 | +b(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 | |
| 1682 | +1438 y Fj(lua_getstring)f Fm(con)o(v)o(erts)h(a)h Fj(lua_Object)e | |
| 1683 | +Fm(to)i(a)g(string)f(\()p Fj(char)23 b(*)p Fm(\).)f(This)17 | |
| 1684 | +b 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) | |
| 1685 | +o(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 | |
| 1687 | +b(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 | |
| 1689 | +1608 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 | |
| 1692 | +Fj(lua_copystring)d Fm(b)q(eha)o(v)o(es)i(exactly)g(lik)o(e)h | |
| 1693 | +Fj(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 | |
| 1695 | +Fj(lua_Object)g Fm(to)f(a)i(C)f(function.)28 b(This)18 b Fj(lua_Object)f | |
| 1696 | +Fm(m)o(ust)g(ha)o(v)o(e)-12 1833 y(t)o(yp)q(e)d Fk(Cfunction)s | |
| 1697 | +Fm(;)g(otherwise,)g(the)g(function)h(returns)f(0)g(\(the)g(n)o(ull)h(p)q(oin) | |
| 1698 | +o(ter\).)20 b(The)14 b(t)o(yp)q(e)g Fj(lua_CFunction)-12 1890 | |
| 1699 | +y Fm(is)i(explained)h(in)f(Section)g(5.5.)59 1946 y Fj(lua_getuserdata)k | |
| 1700 | +Fm(con)o(v)o(erts)h(a)h Fj(lua_Object)e Fm(to)i Fj(void*)p | |
| 1701 | +Fm(.)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 | |
| 1702 | +2003 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,) | |
| 1704 | +g(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 | |
| 1706 | +2116 y(is)i(done)f(b)o(y)h(using)g(the)f(follo)o(wing)h(functions:)-12 | |
| 1707 | +2209 y Fj(int)286 b(lua_pushnumber)261 b(\(float)23 b(n\);)-12 | |
| 1708 | +2266 y(int)286 b(lua_pushstring)261 b(\(char)23 b(*s\);)-12 | |
| 1709 | +2322 y(int)286 b(lua_pushcfunction)189 b(\(lua_CFunction)22 | |
| 1710 | +b(f\);)-12 2379 y(int)286 b(lua_pushuserdata)213 b(\(void)23 | |
| 1711 | +b(*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 | |
| 1717 | +Fi(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 | |
| 1719 | +b(lua_pushnil)333 b(\(void\);)-12 2792 y(int)286 b(lua_pushobject)261 | |
| 1720 | +b(\(lua_Object)22 b(object\);)910 2976 y Fm(9)p eop | |
| 1721 | +%%Page: 10 10 | |
| 1722 | +bop -12 160 a Fb(5.3)56 b(Manipulating)18 b(Lua)h(Ob)s(jects)-12 | |
| 1723 | +245 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 | |
| 1725 | +b(lua_getglobal)285 b(\(char)23 b(*varname\);)-12 430 y Fm(T)l(o)15 | |
| 1726 | +b(store)g(a)f(v)m(alue)j(previously)f(pushed)h(on)o(to)d(the)h(stac)o(k)g(in) | |
| 1727 | +h(a)f(global)g(v)m(ariable,)i(there)e(is)h(the)f(function:)-12 | |
| 1728 | +523 y Fj(int)286 b(lua_storeglobal)237 b(\(char)23 b(*varname\);)59 | |
| 1729 | +615 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 | |
| 1731 | +b(lua_getindexed)261 b(\(lua_Object)22 b(table,)h(float)g(index\);)-12 | |
| 1732 | +764 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 | |
| 1734 | +b(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.) | |
| 1736 | +24 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) | |
| 1737 | +f(table,)g(then)g(the)-12 970 y(returned)g Fj(lua_Object)e | |
| 1738 | +Fm(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) | |
| 1740 | +f(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 | |
| 1742 | +b(object,)h(float)g(index\);)-12 1232 y(int)286 b(lua_storefield)261 | |
| 1743 | +b(\(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 | |
| 1746 | +y(index.)-12 1502 y Fb(5.4)56 b(Calling)18 b(Lua)h(F)-5 b(unctions)-12 | |
| 1747 | +1588 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) | |
| 1749 | +g(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 | |
| 1755 | +b(\(char)23 b(*functionname,)f(int)h(nparam\);)-12 1942 y Fm(where)17 | |
| 1756 | +b(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 | |
| 1758 | +b(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 | |
| 1763 | +2240 y Fm(When)16 b(there)f(are)g(no)g(more)g(results)g(to)g(b)q(e)h(p)q(opp) | |
| 1764 | +q(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 | |
| 1766 | +2418 y Fb(5.5)56 b(C)19 b(F)-5 b(unctions)-12 2504 y Fm(T)l(o)15 | |
| 1767 | +b(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 | |
| 1769 | +b(\(lua_pushcfunction\(f\),)21 b(lua_storeglobal\(n\)\))-12 | |
| 1770 | +2653 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 | |
| 1773 | +b(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 | |
| 1774 | +Fj(lua_CFunction)p Fm(,)d(whic)o(h)j(is)f(de\014ned)i(as)899 | |
| 1775 | +2976 y(10)p eop | |
| 1776 | +%%Page: 11 11 | |
| 1777 | +bop -12 160 a Fj(typedef)23 b(void)g(\(*lua_CFunction\))f(\(void\);)-12 | |
| 1778 | +253 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,) | |
| 1783 | +f(a)h(C)g(function)h(calls:)-12 517 y Fj(lua_Object)118 b(lua_getparam)309 | |
| 1784 | +b(\(int)23 b(number\);)-12 610 y(number)17 b Fm(starts)g(with)h(1)g(to)f(get) | |
| 1785 | +g(the)h(\014rst)g(argumen)o(t.)27 b(When)18 b(called)i(with)e(a)f(n)o(um)o(b) | |
| 1786 | +q(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 | |
| 1788 | +b(this)g(w)o(a)o(y)l(,)e(it)i(is)f(p)q(ossible)i(to)d(write)i(functions)-12 | |
| 1789 | +723 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.) | |
| 1794 | +59 893 y(Section)i(7.4)e(presen)o(ts)h(an)g(example)h(of)f(a)g(Cfunction.)-12 | |
| 1795 | +1014 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 | |
| 1798 | +Fj(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) | |
| 1803 | +g(the)-12 1326 y(error)19 b(is)g(at)g(execution\).)33 b(The)19 | |
| 1804 | +b(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 | |
| 1808 | +b(\(*fn\))g(\(char)g(*s\)\);)-12 1570 y Fm(whose)15 b(argumen)o(t)g(is)g(the) | |
| 1809 | +h(address)f(of)g(the)g(new)g(error)g(function.)-12 1713 y Fl(6)69 | |
| 1810 | +b(Prede\014ned)23 b(F)-6 b(unctions)23 b(and)g(Libraries)-12 | |
| 1811 | +1815 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 | |
| 1820 | +2097 y(as)j(separated)g(C)g(mo)q(dules.)21 b(Curren)o(tly)15 | |
| 1821 | +b(there)g(are)g(three)h(libraries:)56 2191 y Fg(\017)23 b Fm(string)15 | |
| 1822 | +b(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 | |
| 1824 | +b(and)f(output;)-12 2500 y Fb(6.1)56 b(Prede\014ned)18 b(F)-5 | |
| 1825 | +b(unctions)-12 2586 y Fj(dofile)23 b(\(filename\))-12 2672 | |
| 1826 | +y 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 | |
| 1828 | +b(It)-12 2728 y(returns)15 b(1)g(if)h(there)f(are)g(no)g(errors,)f | |
| 1829 | +Fi(nil)i Fm(otherwise.)899 2976 y(11)p eop | |
| 1830 | +%%Page: 12 12 | |
| 1831 | +bop -12 160 a Fj(dostring)23 b(\(string\))-12 245 y Fm(This)17 | |
| 1832 | +b(function)f(executes)h(a)e(giv)o(en)i(string)e(as)h(a)f(Lua)i(mo)q(dule.)23 | |
| 1833 | +b(It)16 b(returns)f(1)h(if)g(there)g(are)g(no)f(errors,)g Fi(nil)-12 | |
| 1834 | +302 y Fm(otherwise.)-12 422 y Fj(next)24 b(\(table,)e(index\))-12 | |
| 1835 | +508 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) | |
| 1838 | +h(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 | |
| 1841 | +b(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 | |
| 1844 | +b(called)g(with)g(the)f(last)g(index,)h(or)f(with)h Fi(nil)g | |
| 1845 | +Fm(in)g(an)f(empt)o(y)g(table,)g(it)h(returns)f Fi(nil)p Fm(.)59 | |
| 1846 | +790 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 | |
| 1851 | +b(order)f(the)g(indices)j(are)d(en)o(umerated)g(are)g(not)g(sp)q(eci\014ed,)i | |
| 1852 | +Fk(even)f(for)g(numeric)-12 959 y(indic)n(es)p Fm(.)59 1016 | |
| 1853 | +y(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 | |
| 1855 | +b(function)g(is)g(similar)g(to)e(the)i(function)g Fj(next)p | |
| 1856 | +Fm(,)e(but)i(it)f(iterates)g(o)o(v)o(er)f(the)i(global)f(v)m(ariables.)21 | |
| 1857 | +b(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 | |
| 1859 | +b(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 | |
| 1861 | +Fi(nil)h Fm(if)h(there)e(are)h(no)f(more)g(v)m(ariables.)26 | |
| 1862 | +b(See)-12 1391 y(Section)16 b(7.1)f(for)f(an)h(example)h(of)f(the)g(use)h(of) | |
| 1863 | +f(this)g(function.)-12 1511 y Fj(print)23 b(\(e1,)h(e2,)f(...\))-12 | |
| 1864 | +1597 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 | |
| 1870 | +b(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 | |
| 1872 | +b(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 | |
| 1874 | +2029 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 | |
| 1877 | +Fm(.)-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 | |
| 1879 | +b(It)16 b(receiv)o(es)g(one)f(argumen)o(t,)f(and)h(returns)g(its)-12 | |
| 1880 | +2347 y(t)o(yp)q(e,)g(co)q(ded)h(as)f(a)g(string.)20 b(The)15 | |
| 1881 | +b(p)q(ossible)i(results)f(of)e(this)i(function)g(are:)56 2441 | |
| 1882 | +y Fg(\017)23 b Fj('nil')56 2535 y Fg(\017)g Fj('number')56 | |
| 1883 | +2629 y Fg(\017)g Fj('string')56 2723 y Fg(\017)g Fj('table')56 | |
| 1884 | +2817 y Fg(\017)g Fj('cfunction')899 2976 y Fm(12)p eop | |
| 1885 | +%%Page: 13 13 | |
| 1886 | +bop 56 160 a Fg(\017)23 b Fj('function')56 253 y Fg(\017)g | |
| 1887 | +Fj('userdata')-12 375 y Fb(6.2)56 b(String)18 b(Manipulation)-12 | |
| 1888 | +461 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 | |
| 1890 | +517 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 | |
| 1893 | +694 y Fj(strfind)23 b(\(str,)g(substr\))-12 780 y Fm(Receiv)o(es)15 | |
| 1894 | +b(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.) | |
| 1895 | +20 b(This)14 b(n)o(um)o(b)q(er)g(indicates)h(the)e(\014rst)g(p)q(osition)-12 | |
| 1896 | +836 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 | |
| 1899 | +Fj(strfind)f Fm(returns)h Fi(nil)p Fm(.)-12 1013 y Fj(strlen)23 | |
| 1900 | +b(\(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 | |
| 1902 | +y Fm(Returns)13 b(another)f(string,)h(whic)o(h)g(is)g(a)f(substring)h(of)f | |
| 1903 | +Fj(s)p Fm(,)h(starting)f(at)g Fj(i)g Fm(and)h(runing)g(un)o(til)h | |
| 1904 | +Fj(j)p Fm(.)k(If)13 b Fj(j)g Fm(is)g(absen)o(t)-12 1361 y(or)18 | |
| 1905 | +b(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 | |
| 1907 | +Fj(strsub\(s,1,j\))-12 1417 y Fm(returns)c(a)g(pre\014x)h(of)f | |
| 1908 | +Fj(s)g Fm(with)g(length)h Fj(j)p Fm(,)f(while)h(the)g(call)g | |
| 1909 | +Fj(strsub\(s,i\))e Fm(returns)h(a)g(su\014x)g(of)g Fj(s)p Fm(.)-12 | |
| 1910 | +1537 y Fj(strlower)23 b(\(s\))-12 1623 y Fm(Receiv)o(es)16 | |
| 1911 | +b(a)d(string)i(and)f(returns)g(a)f(cop)o(y)h(of)g(that)f(string)h(with)h(all) | |
| 1912 | +g(upp)q(er)g(case)f(letters)g(c)o(hanged)g(to)g(lo)o(w)o(er)-12 | |
| 1913 | +1680 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 | |
| 1915 | +b(a)d(string)i(and)f(returns)g(a)f(cop)o(y)h(of)g(that)f(string)h(with)h(all) | |
| 1916 | +g(lo)o(w)o(er)e(case)h(letters)h(c)o(hanged)f(to)f(upp)q(er)-12 | |
| 1917 | +1942 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 | |
| 1919 | +2149 y Fm(This)17 b(library)g(is)f(an)g(in)o(terface)h(to)e(some)h(functions) | |
| 1920 | +g(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 | |
| 1922 | +b(acos)23 b(asin)g(atan)g(ceil)h(cos)f(floor)g(max)h(min)-12 | |
| 1923 | +2356 y(mod)48 b(pow)f(sin)g(sqrt)23 b(tan)59 2450 y Fm(The)f(functions)h | |
| 1924 | +Fj(floor)p Fm(,)f Fj(sqrt)p Fm(,)h Fj(pow)p Fm(,)f Fj(ceil)p | |
| 1925 | +Fm(,)h Fj(sin)p Fm(,)g Fj(cos)p Fm(,)g Fj(tan)p Fm(,)f Fj(asin)p | |
| 1926 | +Fm(,)h Fj(acos)p Fm(,)g(and)f Fj(atan)f Fm(are)h(only)-12 2506 | |
| 1927 | +y(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 | |
| 1929 | +2563 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 | |
| 1932 | +b(Similarly)l(,)c Fj(min)-12 2676 y Fm(computes)g(the)h(minim)o(um.)21 | |
| 1933 | +b(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) | |
| 1935 | +o(t)h(to)d(the)h Fj(\045)g Fm(op)q(erator)g(in)h(C.)899 2976 | |
| 1936 | +y(13)p eop | |
| 1937 | +%%Page: 14 14 | |
| 1938 | +bop -12 160 a Fb(6.4)56 b(I/O)18 b(F)-5 b(acilities)-12 245 | |
| 1939 | +y 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) | |
| 1941 | +f(writing.)-12 302 y(Initially)l(,)k(the)d(curren)o(t)g(input)h(\014le)h(is)e | |
| 1942 | +Fj(stdin)p Fm(,)f(and)i(the)f(curren)o(t)g(output)g(\014le)h(is)g | |
| 1943 | +Fj(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 | |
| 1945 | +477 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 | |
| 1947 | +Fk(curr)n(ent)h Fm(input)g(\014le.)24 b(When)17 b(called)-12 | |
| 1948 | +620 y(without)e(parameters,)f(this)i(function)g(restores)e | |
| 1949 | +Fj(stdin)h Fm(as)g(the)g(curren)o(t)g(input)h(\014le.)-12 739 | |
| 1950 | +y 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 | |
| 1952 | +Fk(curr)n(ent)g Fm(output)g(\014le.)21 b(Notice)15 b(that,)-12 | |
| 1953 | +881 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 | |
| 1955 | +938 y(parameters,)14 b(this)i(function)g(restores)e Fj(stdout)h | |
| 1956 | +Fm(as)f(the)i(curren)o(t)f(output)g(\014le.)-12 1057 y Fj(appendto)23 | |
| 1957 | +b(\(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 | |
| 1959 | +Fm(output)f(\014le.)27 b(Unlik)o(e)18 b(the)-12 1199 y Fj(writeto)d | |
| 1960 | +Fm(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 | |
| 1962 | +b(called)-12 1255 y(without)j(parameters,)g(this)h(function)g(restores)f | |
| 1963 | +Fj(stdout)f Fm(as)h(the)g(curren)o(t)g(output)h(\014le.)33 | |
| 1964 | +b(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 | |
| 1966 | +Fi(nil)i Fm(on)e(failure.)-12 1431 y Fj(read)24 b(\([format]\))-12 | |
| 1967 | +1517 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 | |
| 1971 | +Fj(read)g Fm(\014rst)g(skips)h(blanks,)g(tabs)f(and)g(newlines.)34 | |
| 1972 | +b(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 | |
| 1975 | +b(and)h(returns)f(this)h(string,)g(without)f(the)h(quotation)f(marks.)19 | |
| 1976 | +b(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 | |
| 1979 | +Fm(can)g(b)q(e:)-12 2122 y Fi('s')h(or)h('S')22 b Fm(to)15 | |
| 1980 | +b(read)g(a)g(string;)-12 2214 y Fi('f)5 b(')17 b(or)g('F')k | |
| 1981 | +Fm(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 | |
| 1982 | +b Fm(to)14 b(read)i(an)f(in)o(teger.)-12 2395 y(The)g(optional)g | |
| 1983 | +Fj(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 | |
| 1985 | +2451 y(input)i(v)m(alue.)-12 2571 y Fj(write)23 b(\(value,)g([format]\))-12 | |
| 1986 | +2656 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 | |
| 1988 | +2713 y(argumen)o(t)g(sp)q(eci\014es)j(the)e(format)e(to)i(b)q(e)g(used.)26 | |
| 1989 | +b(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 | |
| 1993 | +2976 y(14)p eop | |
| 1994 | +%%Page: 15 15 | |
| 1995 | +bop -12 160 a Fi('f)5 b(')17 b(or)g('F')k Fm(to)15 b(write)g(\015oats;)-12 | |
| 1996 | +253 y Fi('i')i(or)g('I')22 b Fm(to)14 b(write)i(in)o(tegers.)-12 | |
| 1997 | +347 y(These)g(c)o(haracters)e(can)i(b)q(e)f(follo)o(w)o(ed)h(b)o(y)60 | |
| 1998 | +441 y Fj([?][m][.n])-12 535 y Fm(where:)-12 629 y Fj(?)23 b | |
| 1999 | +Fm(indicates)16 b(justi\014cation)g(inside)h(the)f(\014eld.)130 | |
| 2000 | +723 y(')p Fj(<)p Fm(')22 b(righ)o(t)15 b(justi\014cation;)130 | |
| 2001 | +796 y(')p Fj(>)p Fm(')22 b(left)15 b(justi\014cation;)130 869 | |
| 2002 | +y(')p Fj(|)p Fm(')22 b(cen)o(ter)15 b(justi\014cation.)-12 | |
| 2003 | +962 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 | |
| 2010 | +Fj(\045s)p Fm(.)-12 1406 y Fl(7)69 b(Some)21 b(Examples)-12 | |
| 2011 | +1508 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) | |
| 2014 | +f(in)o(teresting)h(uses)f(of)g(the)g(system.)-12 1686 y Fb(7.1)56 | |
| 2015 | +b(The)18 b(F)-5 b(unctions)19 b Fa(next)e Fb(and)j Fa(nextvar)-12 | |
| 2016 | +1772 y Fm(This)c(example)g(sho)o(ws)f(ho)o(w)f(to)h(use)g(the)h(function)g | |
| 2017 | +Fj(next)e Fm(to)h(iterate)g(o)o(v)o(er)f(the)i(\014elds)g(of)f(a)g(table.)-12 | |
| 2018 | +1865 y Fj(function)23 b(f)h(\(t\))357 b(--)24 b(t)g(is)f(a)h(table)36 | |
| 2019 | +1922 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 | |
| 2021 | +2035 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 | |
| 2023 | +2204 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) | |
| 2025 | +m(alues:)-12 2392 y Fj(function)23 b(printGlobalVariables)e(\(\))36 | |
| 2026 | +2448 y(local)i(i,)h(v)f(=)h(nextvar\(nil\))36 2505 y(while)f(i)h(do)84 | |
| 2027 | +2561 y(print\(i\))84 2618 y(i,)f(v)h(=)g(nextvar\(i\))36 2674 | |
| 2028 | +y(end)-12 2731 y(end)899 2976 y Fm(15)p eop | |
| 2029 | +%%Page: 16 16 | |
| 2030 | +bop -12 160 a Fb(7.2)56 b(String)18 b(Manipulation)-12 245 | |
| 2031 | +y 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 | |
| 2033 | +339 y Fj(function)23 b(trim\(s\))36 396 y(local)g(i)h(=)g(1)36 | |
| 2034 | +452 y(while)f(strsub\(s,i,i\))f(=)i(')g(')f(do)84 509 y(i)g(=)h(i+1)36 | |
| 2035 | +565 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 | |
| 2037 | +y(end)36 847 y(return)f(strsub\(s,i,l\))-12 904 y(end)59 998 | |
| 2038 | +y Fm(The)15 b(second)h(example)g(sho)o(ws)e(a)h(function)h(that)f(eliminates) | |
| 2039 | +i(all)f(blanks)g(of)f(a)f(string.)899 2976 y(16)p eop | |
| 2040 | +%%Page: 17 17 | |
| 2041 | +bop -12 160 a Fj(function)23 b(remove_blanks)f(\(s\))36 216 | |
| 2042 | +y(local)h(b)h(=)g(strfind\(s,)e(')i('\))36 273 y(while)f(b)h(do)84 | |
| 2043 | +329 y(s)f(=)h(strsub\(s,)f(1,)g(b-1\))h(..)f(strsub\(s,)g(b+1\))84 | |
| 2044 | +385 y(b)g(=)h(strfind\(s,)f(')g('\))36 442 y(end)36 498 y(return)g(s)-12 | |
| 2045 | +555 y(end)-12 677 y Fb(7.3)56 b(P)n(ersistence)-12 762 y Fm(Because)19 | |
| 2046 | +b(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 | |
| 2048 | +819 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 | |
| 2051 | +932 y(T)l(o)h(store)f(a)h(single)i(v)m(alue)f(with)g(a)e(name,)h(the)h(follo) | |
| 2052 | +o(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 | |
| 2054 | +1138 y(write_value\(value\))-12 1195 y(end)-12 1301 y(function)f(write_value) | |
| 2055 | +f(\(value\))36 1358 y(local)h(t)h(=)g(type\(value\))131 1414 | |
| 2056 | +y(if)g(t)g(=)f('nil')95 b(then)23 b(write\('nil'\))36 1471 | |
| 2057 | +y(elseif)g(t)h(=)f('number')g(then)g(write\(value\))36 1527 | |
| 2058 | +y(elseif)g(t)h(=)f('string')g(then)g(write\('"')g(..)h(value)f(..)g('"'\))36 | |
| 2059 | +1583 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) | |
| 2064 | +g(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 | |
| 2066 | +Fm(is)i(c)o(hanged)f(to)-12 2009 y Fj(function)23 b(write_value)f(\(value\)) | |
| 2067 | +36 2066 y(local)h(t)h(=)g(type\(value\))131 2122 y(if)g(t)g(=)f('nil')95 | |
| 2068 | +b(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(..) | |
| 2070 | +h(value)f(..)g('"'\))36 2292 y(elseif)g(t)h(=)f('table')47 | |
| 2071 | +b(then)23 b(write_record\(value\))36 2348 y(end)-12 2405 y(end)-12 | |
| 2072 | +2498 y Fm(The)16 b(function)g Fj(write_record)d Fm(is:)899 | |
| 2073 | +2976 y(17)p eop | |
| 2074 | +%%Page: 18 18 | |
| 2075 | +bop -12 160 a Fj(function)23 b(write_record\(t\))36 216 y(local)g(i,)h(v)f(=) | |
| 2076 | +h(next\(t,)f(nil\))36 273 y(write\('@{'\))46 b(--)24 b(starts)f(constructor) | |
| 2077 | +36 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 | |
| 2079 | +555 y(end)36 611 y(write\('}'\))46 b(--)24 b(closes)f(constructor)-12 | |
| 2080 | +668 y(end)-12 789 y Fb(7.4)56 b(A)19 b(Cfunction)-12 875 y | |
| 2081 | +Fm(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 | |
| 2083 | +969 y Fj(void)24 b(math_max)e(\(void\))-12 1026 y({)12 1082 | |
| 2084 | +y(int)i(i=1;)71 b(/*)23 b(number)g(of)h(arguments)e(*/)12 1138 | |
| 2085 | +y(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 | |
| 2087 | +1308 y(if)h(\(\(o)f(=)h(lua_getparam\(i++\)\))d(==)j(0\))12 | |
| 2088 | +1364 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 | |
| 2092 | +1590 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 | |
| 2098 | +2042 y(})12 2098 y(/*)g(push)f(the)g(result)g(to)h(be)g(returned)e(*/)12 | |
| 2099 | +2155 y(lua_pushnumber)g(\(dmax\);)-12 2211 y(})59 2305 y Fm(After)15 | |
| 2100 | +b(registered)g(with)-12 2399 y Fj(lua_register)22 b(\("max",)71 | |
| 2101 | +b(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\)) | |
| 2103 | +47 b(--)23 b(i)h(receives)f(10)-12 2708 y Fb(7.5)56 b(Calling)18 | |
| 2104 | +b(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 | |
| 2106 | +Fj(remove_blanks)e Fm(presen)o(ted)-12 2850 y(in)j(Section)g(7.2.)899 | |
| 2107 | +2976 y(18)p eop | |
| 2108 | +%%Page: 19 19 | |
| 2109 | +bop -12 160 a Fj(void)24 b(remove_blanks)e(\(char)h(*s\))-12 | |
| 2110 | +216 y({)36 273 y(lua_pushstring\(s\);)45 b(/*)24 b(prepare)f(parameter)f(*/) | |
| 2111 | +36 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 | |
| 2115 | +687 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 | |
| 2121 | +eop | |
| 2122 | +%%Trailer | |
| 2123 | +end | |
| 2124 | +userdict /end-hook known{end-hook}if | |
| 2125 | +%%EOF | |
| @@ -0,0 +1,6 @@ | ||
| 1 | +#!/bin/sh | |
| 2 | + | |
| 3 | +LUA=`pwd` | |
| 4 | +export LUA | |
| 5 | + | |
| 6 | +make $* | |
| @@ -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 | − | |
| 20 | −static 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 | −*/ | |
| 30 | −static 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 | −*/ | |
| 75 | −static 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 | −*/ | |
| 126 | −static 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 | −*/ | |
| 265 | −static 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 | −} | |
| 318 | −static 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 | −*/ | |
| 352 | −void 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 | −*/ | |
| 372 | −void 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 | −*/ | |
| 393 | −void 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 | −} | |
| @@ -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;} | |
| 16 | −int yyleng; extern char yytext[]; | |
| 17 | −int yymorfg; | |
| 18 | −extern char *yysptr, yysbuf[]; | |
| 19 | −int yytchar; | |
| 20 | −FILE *yyin = {NULL}, *yyout = {NULL}; | |
| 21 | −extern int yylineno; | |
| 22 | −struct yysvf { | |
| 23 | − struct yywork *yystoff; | |
| 24 | − struct yysvf *yyother; | |
| 25 | − int *yystops;}; | |
| 26 | −struct yysvf *yyestate; | |
| 27 | −extern 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 | − | |
| 40 | −static Input input; | |
| 41 | −static Unput unput; | |
| 42 | − | |
| 43 | −void lua_setinput (Input fn) | |
| 44 | −{ | |
| 45 | − input = fn; | |
| 46 | −} | |
| 47 | − | |
| 48 | −void lua_setunput (Unput fn) | |
| 49 | −{ | |
| 50 | − unput = fn; | |
| 51 | −} | |
| 52 | − | |
| 53 | −char *lua_lasttext (void) | |
| 54 | −{ | |
| 55 | − return yytext; | |
| 56 | −} | |
| 57 | − | |
| 58 | −# define YYNEWLINE 10 | |
| 59 | −yylex(){ | |
| 60 | −int nstr; extern int yyprevious; | |
| 61 | −while((nstr = yylook()) >= 0) | |
| 62 | −yyfussy: switch(nstr){ | |
| 63 | −case 0: | |
| 64 | −if(yywrap()) return(0); break; | |
| 65 | −case 1: | |
| 66 | − ; | |
| 67 | −break; | |
| 68 | −case 2: | |
| 69 | − {yylval.vInt = 1; return DEBUG;} | |
| 70 | −break; | |
| 71 | −case 3: | |
| 72 | − {yylval.vInt = 0; return DEBUG;} | |
| 73 | −break; | |
| 74 | −case 4: | |
| 75 | − lua_linenumber++; | |
| 76 | −break; | |
| 77 | −case 5: | |
| 78 | − ; | |
| 79 | −break; | |
| 80 | −case 6: | |
| 81 | − return LOCAL; | |
| 82 | −break; | |
| 83 | −case 7: | |
| 84 | − return IF; | |
| 85 | −break; | |
| 86 | −case 8: | |
| 87 | − return THEN; | |
| 88 | −break; | |
| 89 | −case 9: | |
| 90 | − return ELSE; | |
| 91 | −break; | |
| 92 | −case 10: | |
| 93 | − return ELSEIF; | |
| 94 | −break; | |
| 95 | −case 11: | |
| 96 | − return WHILE; | |
| 97 | −break; | |
| 98 | −case 12: | |
| 99 | − return DO; | |
| 100 | −break; | |
| 101 | −case 13: | |
| 102 | − return REPEAT; | |
| 103 | −break; | |
| 104 | −case 14: | |
| 105 | − return UNTIL; | |
| 106 | −break; | |
| 107 | −case 15: | |
| 108 | − { | |
| 109 | − yylval.vWord = lua_nfile-1; | |
| 110 | − return FUNCTION; | |
| 111 | − } | |
| 112 | −break; | |
| 113 | −case 16: | |
| 114 | − return END; | |
| 115 | −break; | |
| 116 | −case 17: | |
| 117 | − return RETURN; | |
| 118 | −break; | |
| 119 | −case 18: | |
| 120 | − return LOCAL; | |
| 121 | −break; | |
| 122 | −case 19: | |
| 123 | − return NIL; | |
| 124 | −break; | |
| 125 | −case 20: | |
| 126 | − return AND; | |
| 127 | −break; | |
| 128 | −case 21: | |
| 129 | − return OR; | |
| 130 | −break; | |
| 131 | −case 22: | |
| 132 | − return NOT; | |
| 133 | −break; | |
| 134 | −case 23: | |
| 135 | − return NE; | |
| 136 | −break; | |
| 137 | −case 24: | |
| 138 | − return LE; | |
| 139 | −break; | |
| 140 | −case 25: | |
| 141 | − return GE; | |
| 142 | −break; | |
| 143 | −case 26: | |
| 144 | − return CONC; | |
| 145 | −break; | |
| 146 | −case 27: | |
| 147 | − case 28: | |
| 148 | − { | |
| 149 | − yylval.vWord = lua_findenclosedconstant (yytext); | |
| 150 | − return STRING; | |
| 151 | − } | |
| 152 | −break; | |
| 153 | −case 29: | |
| 154 | −case 30: | |
| 155 | −case 31: | |
| 156 | −case 32: | |
| 157 | −{ | |
| 158 | − yylval.vFloat = atof(yytext); | |
| 159 | − return NUMBER; | |
| 160 | − } | |
| 161 | −break; | |
| 162 | −case 33: | |
| 163 | − { | |
| 164 | − yylval.vWord = lua_findsymbol (yytext); | |
| 165 | − return NAME; | |
| 166 | − } | |
| 167 | −break; | |
| 168 | −case 34: | |
| 169 | − return *yytext; | |
| 170 | −break; | |
| 171 | −case -1: | |
| 172 | −break; | |
| 173 | −default: | |
| 174 | −fprintf(yyout,"bad switch yylook %d",nstr); | |
| 175 | −} return(0); } | |
| 176 | −/* end of yylex */ | |
| 177 | −int yyvstop[] = { | |
| 178 | −0, | |
| 179 | − | |
| 180 | −1, | |
| 181 | −0, | |
| 182 | − | |
| 183 | −1, | |
| 184 | −0, | |
| 185 | − | |
| 186 | −34, | |
| 187 | −0, | |
| 188 | − | |
| 189 | −1, | |
| 190 | −34, | |
| 191 | −0, | |
| 192 | − | |
| 193 | −4, | |
| 194 | −0, | |
| 195 | − | |
| 196 | −34, | |
| 197 | −0, | |
| 198 | − | |
| 199 | −34, | |
| 200 | −0, | |
| 201 | − | |
| 202 | −34, | |
| 203 | −0, | |
| 204 | − | |
| 205 | −34, | |
| 206 | −0, | |
| 207 | − | |
| 208 | −29, | |
| 209 | −34, | |
| 210 | −0, | |
| 211 | − | |
| 212 | −34, | |
| 213 | −0, | |
| 214 | − | |
| 215 | −34, | |
| 216 | −0, | |
| 217 | − | |
| 218 | −33, | |
| 219 | −34, | |
| 220 | −0, | |
| 221 | − | |
| 222 | −33, | |
| 223 | −34, | |
| 224 | −0, | |
| 225 | − | |
| 226 | −33, | |
| 227 | −34, | |
| 228 | −0, | |
| 229 | − | |
| 230 | −33, | |
| 231 | −34, | |
| 232 | −0, | |
| 233 | − | |
| 234 | −33, | |
| 235 | −34, | |
| 236 | −0, | |
| 237 | − | |
| 238 | −33, | |
| 239 | −34, | |
| 240 | −0, | |
| 241 | − | |
| 242 | −33, | |
| 243 | −34, | |
| 244 | −0, | |
| 245 | − | |
| 246 | −33, | |
| 247 | −34, | |
| 248 | −0, | |
| 249 | − | |
| 250 | −33, | |
| 251 | −34, | |
| 252 | −0, | |
| 253 | − | |
| 254 | −33, | |
| 255 | −34, | |
| 256 | −0, | |
| 257 | − | |
| 258 | −33, | |
| 259 | −34, | |
| 260 | −0, | |
| 261 | − | |
| 262 | −33, | |
| 263 | −34, | |
| 264 | −0, | |
| 265 | − | |
| 266 | −33, | |
| 267 | −34, | |
| 268 | −0, | |
| 269 | − | |
| 270 | −34, | |
| 271 | −0, | |
| 272 | − | |
| 273 | −34, | |
| 274 | −0, | |
| 275 | − | |
| 276 | −1, | |
| 277 | −0, | |
| 278 | − | |
| 279 | −27, | |
| 280 | −0, | |
| 281 | − | |
| 282 | −28, | |
| 283 | −0, | |
| 284 | − | |
| 285 | −5, | |
| 286 | −0, | |
| 287 | − | |
| 288 | −26, | |
| 289 | −0, | |
| 290 | − | |
| 291 | −30, | |
| 292 | −0, | |
| 293 | − | |
| 294 | −29, | |
| 295 | −0, | |
| 296 | − | |
| 297 | −29, | |
| 298 | −0, | |
| 299 | − | |
| 300 | −24, | |
| 301 | −0, | |
| 302 | − | |
| 303 | −25, | |
| 304 | −0, | |
| 305 | − | |
| 306 | −33, | |
| 307 | −0, | |
| 308 | − | |
| 309 | −33, | |
| 310 | −0, | |
| 311 | − | |
| 312 | −12, | |
| 313 | −33, | |
| 314 | −0, | |
| 315 | − | |
| 316 | −33, | |
| 317 | −0, | |
| 318 | − | |
| 319 | −33, | |
| 320 | −0, | |
| 321 | − | |
| 322 | −33, | |
| 323 | −0, | |
| 324 | − | |
| 325 | −7, | |
| 326 | −33, | |
| 327 | −0, | |
| 328 | − | |
| 329 | −33, | |
| 330 | −0, | |
| 331 | − | |
| 332 | −33, | |
| 333 | −0, | |
| 334 | − | |
| 335 | −33, | |
| 336 | −0, | |
| 337 | − | |
| 338 | −21, | |
| 339 | −33, | |
| 340 | −0, | |
| 341 | − | |
| 342 | −33, | |
| 343 | −0, | |
| 344 | − | |
| 345 | −33, | |
| 346 | −0, | |
| 347 | − | |
| 348 | −33, | |
| 349 | −0, | |
| 350 | − | |
| 351 | −33, | |
| 352 | −0, | |
| 353 | − | |
| 354 | −23, | |
| 355 | −0, | |
| 356 | − | |
| 357 | −29, | |
| 358 | −30, | |
| 359 | −0, | |
| 360 | − | |
| 361 | −31, | |
| 362 | −0, | |
| 363 | − | |
| 364 | −20, | |
| 365 | −33, | |
| 366 | −0, | |
| 367 | − | |
| 368 | −33, | |
| 369 | −0, | |
| 370 | − | |
| 371 | −16, | |
| 372 | −33, | |
| 373 | −0, | |
| 374 | − | |
| 375 | −33, | |
| 376 | −0, | |
| 377 | − | |
| 378 | −33, | |
| 379 | −0, | |
| 380 | − | |
| 381 | −19, | |
| 382 | −33, | |
| 383 | −0, | |
| 384 | − | |
| 385 | −22, | |
| 386 | −33, | |
| 387 | −0, | |
| 388 | − | |
| 389 | −33, | |
| 390 | −0, | |
| 391 | − | |
| 392 | −33, | |
| 393 | −0, | |
| 394 | − | |
| 395 | −33, | |
| 396 | −0, | |
| 397 | − | |
| 398 | −33, | |
| 399 | −0, | |
| 400 | − | |
| 401 | −33, | |
| 402 | −0, | |
| 403 | − | |
| 404 | −32, | |
| 405 | −0, | |
| 406 | − | |
| 407 | −9, | |
| 408 | −33, | |
| 409 | −0, | |
| 410 | − | |
| 411 | −33, | |
| 412 | −0, | |
| 413 | − | |
| 414 | −33, | |
| 415 | −0, | |
| 416 | − | |
| 417 | −33, | |
| 418 | −0, | |
| 419 | − | |
| 420 | −33, | |
| 421 | −0, | |
| 422 | − | |
| 423 | −8, | |
| 424 | −33, | |
| 425 | −0, | |
| 426 | − | |
| 427 | −33, | |
| 428 | −0, | |
| 429 | − | |
| 430 | −33, | |
| 431 | −0, | |
| 432 | − | |
| 433 | −31, | |
| 434 | −32, | |
| 435 | −0, | |
| 436 | − | |
| 437 | −33, | |
| 438 | −0, | |
| 439 | − | |
| 440 | −33, | |
| 441 | −0, | |
| 442 | − | |
| 443 | −6, | |
| 444 | −18, | |
| 445 | −33, | |
| 446 | −0, | |
| 447 | − | |
| 448 | −33, | |
| 449 | −0, | |
| 450 | − | |
| 451 | −33, | |
| 452 | −0, | |
| 453 | − | |
| 454 | −14, | |
| 455 | −33, | |
| 456 | −0, | |
| 457 | − | |
| 458 | −11, | |
| 459 | −33, | |
| 460 | −0, | |
| 461 | − | |
| 462 | −10, | |
| 463 | −33, | |
| 464 | −0, | |
| 465 | − | |
| 466 | −33, | |
| 467 | −0, | |
| 468 | − | |
| 469 | −13, | |
| 470 | −33, | |
| 471 | −0, | |
| 472 | − | |
| 473 | −17, | |
| 474 | −33, | |
| 475 | −0, | |
| 476 | − | |
| 477 | −2, | |
| 478 | −0, | |
| 479 | − | |
| 480 | −33, | |
| 481 | −0, | |
| 482 | − | |
| 483 | −15, | |
| 484 | −33, | |
| 485 | −0, | |
| 486 | − | |
| 487 | −3, | |
| 488 | −0, | |
| 489 | −0}; | |
| 490 | −# define YYTYPE char | |
| 491 | −struct yywork { YYTYPE verify, advance; } yycrank[] = { | |
| 492 | −0,0, 0,0, 1,3, 0,0, | |
| 493 | −0,0, 0,0, 0,0, 0,0, | |
| 494 | −0,0, 0,0, 1,4, 1,5, | |
| 495 | −6,29, 4,28, 0,0, 0,0, | |
| 496 | −0,0, 0,0, 7,31, 0,0, | |
| 497 | −6,29, 6,29, 0,0, 0,0, | |
| 498 | −0,0, 0,0, 7,31, 7,31, | |
| 499 | −0,0, 0,0, 0,0, 0,0, | |
| 500 | −0,0, 0,0, 0,0, 1,6, | |
| 501 | −4,28, 0,0, 0,0, 0,0, | |
| 502 | −1,7, 0,0, 0,0, 0,0, | |
| 503 | −1,3, 6,30, 1,8, 1,9, | |
| 504 | −0,0, 1,10, 6,29, 7,31, | |
| 505 | −8,33, 0,0, 6,29, 0,0, | |
| 506 | −7,32, 0,0, 0,0, 6,29, | |
| 507 | −7,31, 1,11, 0,0, 1,12, | |
| 508 | −2,27, 7,31, 1,13, 11,39, | |
| 509 | −12,40, 1,13, 26,56, 0,0, | |
| 510 | −0,0, 2,8, 2,9, 0,0, | |
| 511 | −6,29, 0,0, 0,0, 6,29, | |
| 512 | −0,0, 0,0, 7,31, 0,0, | |
| 513 | −0,0, 7,31, 0,0, 0,0, | |
| 514 | −2,11, 0,0, 2,12, 0,0, | |
| 515 | −0,0, 0,0, 0,0, 0,0, | |
| 516 | −0,0, 0,0, 1,14, 0,0, | |
| 517 | −0,0, 1,15, 1,16, 1,17, | |
| 518 | −0,0, 22,52, 1,18, 18,47, | |
| 519 | −23,53, 1,19, 42,63, 1,20, | |
| 520 | −1,21, 25,55, 14,42, 1,22, | |
| 521 | −15,43, 1,23, 1,24, 16,44, | |
| 522 | −1,25, 16,45, 17,46, 19,48, | |
| 523 | −21,51, 2,14, 20,49, 1,26, | |
| 524 | −2,15, 2,16, 2,17, 24,54, | |
| 525 | −20,50, 2,18, 44,64, 45,65, | |
| 526 | −2,19, 46,66, 2,20, 2,21, | |
| 527 | −27,57, 48,67, 2,22, 49,68, | |
| 528 | −2,23, 2,24, 50,69, 2,25, | |
| 529 | −52,70, 53,72, 27,58, 54,73, | |
| 530 | −52,71, 9,34, 2,26, 9,35, | |
| 531 | −9,35, 9,35, 9,35, 9,35, | |
| 532 | −9,35, 9,35, 9,35, 9,35, | |
| 533 | −9,35, 10,36, 55,74, 10,37, | |
| 534 | −10,37, 10,37, 10,37, 10,37, | |
| 535 | −10,37, 10,37, 10,37, 10,37, | |
| 536 | −10,37, 57,75, 58,76, 64,80, | |
| 537 | −66,81, 67,82, 70,83, 71,84, | |
| 538 | −72,85, 73,86, 74,87, 10,38, | |
| 539 | −10,38, 38,61, 10,38, 38,61, | |
| 540 | −75,88, 76,89, 38,62, 38,62, | |
| 541 | −38,62, 38,62, 38,62, 38,62, | |
| 542 | −38,62, 38,62, 38,62, 38,62, | |
| 543 | −80,92, 81,93, 13,41, 13,41, | |
| 544 | −13,41, 13,41, 13,41, 13,41, | |
| 545 | −13,41, 13,41, 13,41, 13,41, | |
| 546 | −82,94, 83,95, 84,96, 10,38, | |
| 547 | −10,38, 86,97, 10,38, 13,41, | |
| 548 | −13,41, 13,41, 13,41, 13,41, | |
| 549 | −13,41, 13,41, 13,41, 13,41, | |
| 550 | −13,41, 13,41, 13,41, 13,41, | |
| 551 | −13,41, 13,41, 13,41, 13,41, | |
| 552 | −13,41, 13,41, 13,41, 13,41, | |
| 553 | −13,41, 13,41, 13,41, 13,41, | |
| 554 | −13,41, 87,98, 88,99, 60,79, | |
| 555 | −60,79, 13,41, 60,79, 13,41, | |
| 556 | −13,41, 13,41, 13,41, 13,41, | |
| 557 | −13,41, 13,41, 13,41, 13,41, | |
| 558 | −13,41, 13,41, 13,41, 13,41, | |
| 559 | −13,41, 13,41, 13,41, 13,41, | |
| 560 | −13,41, 13,41, 13,41, 13,41, | |
| 561 | −13,41, 13,41, 13,41, 13,41, | |
| 562 | −13,41, 33,33, 89,100, 60,79, | |
| 563 | −60,79, 92,101, 60,79, 93,102, | |
| 564 | −95,103, 33,33, 33,0, 96,104, | |
| 565 | −99,105, 100,106, 102,107, 106,108, | |
| 566 | −107,109, 35,35, 35,35, 35,35, | |
| 567 | −35,35, 35,35, 35,35, 35,35, | |
| 568 | −35,35, 35,35, 35,35, 108,110, | |
| 569 | −0,0, 0,0, 0,0, 0,0, | |
| 570 | −0,0, 0,0, 33,33, 0,0, | |
| 571 | −0,0, 35,59, 35,59, 33,33, | |
| 572 | −35,59, 0,0, 0,0, 33,33, | |
| 573 | −0,0, 0,0, 0,0, 0,0, | |
| 574 | −33,33, 0,0, 0,0, 0,0, | |
| 575 | −0,0, 36,60, 36,60, 36,60, | |
| 576 | −36,60, 36,60, 36,60, 36,60, | |
| 577 | −36,60, 36,60, 36,60, 0,0, | |
| 578 | −0,0, 33,33, 0,0, 0,0, | |
| 579 | −33,33, 35,59, 35,59, 0,0, | |
| 580 | −35,59, 36,38, 36,38, 59,77, | |
| 581 | −36,38, 59,77, 0,0, 0,0, | |
| 582 | −59,78, 59,78, 59,78, 59,78, | |
| 583 | −59,78, 59,78, 59,78, 59,78, | |
| 584 | −59,78, 59,78, 61,62, 61,62, | |
| 585 | −61,62, 61,62, 61,62, 61,62, | |
| 586 | −61,62, 61,62, 61,62, 61,62, | |
| 587 | −0,0, 0,0, 0,0, 0,0, | |
| 588 | −0,0, 36,38, 36,38, 0,0, | |
| 589 | −36,38, 77,78, 77,78, 77,78, | |
| 590 | −77,78, 77,78, 77,78, 77,78, | |
| 591 | −77,78, 77,78, 77,78, 79,90, | |
| 592 | −0,0, 79,90, 0,0, 0,0, | |
| 593 | −79,91, 79,91, 79,91, 79,91, | |
| 594 | −79,91, 79,91, 79,91, 79,91, | |
| 595 | −79,91, 79,91, 90,91, 90,91, | |
| 596 | −90,91, 90,91, 90,91, 90,91, | |
| 597 | −90,91, 90,91, 90,91, 90,91, | |
| 598 | −0,0}; | |
| 599 | −struct yysvf yysvec[] = { | |
| 600 | −0, 0, 0, | |
| 601 | −yycrank+-1, 0, yyvstop+1, | |
| 602 | −yycrank+-28, yysvec+1, yyvstop+3, | |
| 603 | −yycrank+0, 0, yyvstop+5, | |
| 604 | −yycrank+4, 0, yyvstop+7, | |
| 605 | −yycrank+0, 0, yyvstop+10, | |
| 606 | −yycrank+-11, 0, yyvstop+12, | |
| 607 | −yycrank+-17, 0, yyvstop+14, | |
| 608 | −yycrank+7, 0, yyvstop+16, | |
| 609 | −yycrank+107, 0, yyvstop+18, | |
| 610 | −yycrank+119, 0, yyvstop+20, | |
| 611 | −yycrank+6, 0, yyvstop+23, | |
| 612 | −yycrank+7, 0, yyvstop+25, | |
| 613 | −yycrank+158, 0, yyvstop+27, | |
| 614 | −yycrank+4, yysvec+13, yyvstop+30, | |
| 615 | −yycrank+5, yysvec+13, yyvstop+33, | |
| 616 | −yycrank+11, yysvec+13, yyvstop+36, | |
| 617 | −yycrank+5, yysvec+13, yyvstop+39, | |
| 618 | −yycrank+5, yysvec+13, yyvstop+42, | |
| 619 | −yycrank+12, yysvec+13, yyvstop+45, | |
| 620 | −yycrank+21, yysvec+13, yyvstop+48, | |
| 621 | −yycrank+10, yysvec+13, yyvstop+51, | |
| 622 | −yycrank+4, yysvec+13, yyvstop+54, | |
| 623 | −yycrank+4, yysvec+13, yyvstop+57, | |
| 624 | −yycrank+21, yysvec+13, yyvstop+60, | |
| 625 | −yycrank+9, yysvec+13, yyvstop+63, | |
| 626 | −yycrank+9, 0, yyvstop+66, | |
| 627 | −yycrank+40, 0, yyvstop+68, | |
| 628 | −yycrank+0, yysvec+4, yyvstop+70, | |
| 629 | −yycrank+0, yysvec+6, 0, | |
| 630 | −yycrank+0, 0, yyvstop+72, | |
| 631 | −yycrank+0, yysvec+7, 0, | |
| 632 | −yycrank+0, 0, yyvstop+74, | |
| 633 | −yycrank+-280, 0, yyvstop+76, | |
| 634 | −yycrank+0, 0, yyvstop+78, | |
| 635 | −yycrank+249, 0, yyvstop+80, | |
| 636 | −yycrank+285, 0, yyvstop+82, | |
| 637 | −yycrank+0, yysvec+10, yyvstop+84, | |
| 638 | −yycrank+146, 0, 0, | |
| 639 | −yycrank+0, 0, yyvstop+86, | |
| 640 | −yycrank+0, 0, yyvstop+88, | |
| 641 | −yycrank+0, yysvec+13, yyvstop+90, | |
| 642 | −yycrank+10, yysvec+13, yyvstop+92, | |
| 643 | −yycrank+0, yysvec+13, yyvstop+94, | |
| 644 | −yycrank+19, yysvec+13, yyvstop+97, | |
| 645 | −yycrank+35, yysvec+13, yyvstop+99, | |
| 646 | −yycrank+27, yysvec+13, yyvstop+101, | |
| 647 | −yycrank+0, yysvec+13, yyvstop+103, | |
| 648 | −yycrank+42, yysvec+13, yyvstop+106, | |
| 649 | −yycrank+35, yysvec+13, yyvstop+108, | |
| 650 | −yycrank+30, yysvec+13, yyvstop+110, | |
| 651 | −yycrank+0, yysvec+13, yyvstop+112, | |
| 652 | −yycrank+36, yysvec+13, yyvstop+115, | |
| 653 | −yycrank+48, yysvec+13, yyvstop+117, | |
| 654 | −yycrank+35, yysvec+13, yyvstop+119, | |
| 655 | −yycrank+61, yysvec+13, yyvstop+121, | |
| 656 | −yycrank+0, 0, yyvstop+123, | |
| 657 | −yycrank+76, 0, 0, | |
| 658 | −yycrank+67, 0, 0, | |
| 659 | −yycrank+312, 0, 0, | |
| 660 | −yycrank+183, yysvec+36, yyvstop+125, | |
| 661 | −yycrank+322, 0, 0, | |
| 662 | −yycrank+0, yysvec+61, yyvstop+128, | |
| 663 | −yycrank+0, yysvec+13, yyvstop+130, | |
| 664 | −yycrank+78, yysvec+13, yyvstop+133, | |
| 665 | −yycrank+0, yysvec+13, yyvstop+135, | |
| 666 | −yycrank+81, yysvec+13, yyvstop+138, | |
| 667 | −yycrank+84, yysvec+13, yyvstop+140, | |
| 668 | −yycrank+0, yysvec+13, yyvstop+142, | |
| 669 | −yycrank+0, yysvec+13, yyvstop+145, | |
| 670 | −yycrank+81, yysvec+13, yyvstop+148, | |
| 671 | −yycrank+66, yysvec+13, yyvstop+150, | |
| 672 | −yycrank+74, yysvec+13, yyvstop+152, | |
| 673 | −yycrank+80, yysvec+13, yyvstop+154, | |
| 674 | −yycrank+78, yysvec+13, yyvstop+156, | |
| 675 | −yycrank+94, 0, 0, | |
| 676 | −yycrank+93, 0, 0, | |
| 677 | −yycrank+341, 0, 0, | |
| 678 | −yycrank+0, yysvec+77, yyvstop+158, | |
| 679 | −yycrank+356, 0, 0, | |
| 680 | −yycrank+99, yysvec+13, yyvstop+160, | |
| 681 | −yycrank+89, yysvec+13, yyvstop+163, | |
| 682 | −yycrank+108, yysvec+13, yyvstop+165, | |
| 683 | −yycrank+120, yysvec+13, yyvstop+167, | |
| 684 | −yycrank+104, yysvec+13, yyvstop+169, | |
| 685 | −yycrank+0, yysvec+13, yyvstop+171, | |
| 686 | −yycrank+113, yysvec+13, yyvstop+174, | |
| 687 | −yycrank+148, yysvec+13, yyvstop+176, | |
| 688 | −yycrank+133, 0, 0, | |
| 689 | −yycrank+181, 0, 0, | |
| 690 | −yycrank+366, 0, 0, | |
| 691 | −yycrank+0, yysvec+90, yyvstop+178, | |
| 692 | −yycrank+183, yysvec+13, yyvstop+181, | |
| 693 | −yycrank+182, yysvec+13, yyvstop+183, | |
| 694 | −yycrank+0, yysvec+13, yyvstop+185, | |
| 695 | −yycrank+172, yysvec+13, yyvstop+189, | |
| 696 | −yycrank+181, yysvec+13, yyvstop+191, | |
| 697 | −yycrank+0, yysvec+13, yyvstop+193, | |
| 698 | −yycrank+0, yysvec+13, yyvstop+196, | |
| 699 | −yycrank+189, 0, 0, | |
| 700 | −yycrank+195, 0, 0, | |
| 701 | −yycrank+0, yysvec+13, yyvstop+199, | |
| 702 | −yycrank+183, yysvec+13, yyvstop+202, | |
| 703 | −yycrank+0, yysvec+13, yyvstop+204, | |
| 704 | −yycrank+0, yysvec+13, yyvstop+207, | |
| 705 | −yycrank+0, 0, yyvstop+210, | |
| 706 | −yycrank+178, 0, 0, | |
| 707 | −yycrank+186, yysvec+13, yyvstop+212, | |
| 708 | −yycrank+204, 0, 0, | |
| 709 | −yycrank+0, yysvec+13, yyvstop+214, | |
| 710 | −yycrank+0, 0, yyvstop+217, | |
| 711 | −0, 0, 0}; | |
| 712 | −struct yywork *yytop = yycrank+423; | |
| 713 | −struct yysvf *yybgin = yysvec+1; | |
| 714 | −char yymatch[] = { | |
| 715 | −00 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , | |
| 716 | −01 ,011 ,012 ,01 ,01 ,01 ,01 ,01 , | |
| 717 | −01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , | |
| 718 | −01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , | |
| 719 | −011 ,01 ,'"' ,01 ,01 ,01 ,01 ,047 , | |
| 720 | −01 ,01 ,01 ,'+' ,01 ,'+' ,01 ,01 , | |
| 721 | −'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' , | |
| 722 | −'0' ,'0' ,01 ,01 ,01 ,01 ,01 ,01 , | |
| 723 | −01 ,'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' , | |
| 727 | −01 ,'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 , | |
| 731 | −0}; | |
| 732 | −char yyextra[] = { | |
| 733 | −0,0,0,0,0,0,0,0, | |
| 734 | −0,0,0,0,0,0,0,0, | |
| 735 | −0,0,0,0,0,0,0,0, | |
| 736 | −0,0,0,0,0,0,0,0, | |
| 737 | −0,0,0,0,0,0,0,0, | |
| 738 | −0}; | |
| 739 | −#ifndef lint | |
| 740 | −static char ncform_sccsid[] = "@(#)ncform 1.6 88/02/08 SMI"; /* from S5R2 1.2 */ | |
| 741 | −#endif | |
| 742 | − | |
| 743 | −int yylineno =1; | |
| 744 | −# define YYU(x) x | |
| 745 | −# define NLSTATE yyprevious=YYNEWLINE | |
| 746 | −char yytext[YYLMAX]; | |
| 747 | −struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp; | |
| 748 | −char yysbuf[YYLMAX]; | |
| 749 | −char *yysptr = yysbuf; | |
| 750 | −int *yyfnd; | |
| 751 | −extern struct yysvf *yyestate; | |
| 752 | −int yyprevious = YYNEWLINE; | |
| 753 | −yylook(){ | |
| 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 | − } | |
| 901 | −yyback(p, m) | |
| 902 | − int *p; | |
| 903 | −{ | |
| 904 | −if (p==0) return(0); | |
| 905 | −while (*p) | |
| 906 | − { | |
| 907 | − if (*p++ == m) | |
| 908 | − return(1); | |
| 909 | − } | |
| 910 | −return(0); | |
| 911 | −} | |
| 912 | − /* the following are only used in the lex library */ | |
| 913 | −yyinput(){ | |
| 914 | − return(input()); | |
| 915 | − } | |
| 916 | −yyoutput(c) | |
| 917 | − int c; { | |
| 918 | − output(c); | |
| 919 | − } | |
| 920 | −yyunput(c) | |
| 921 | − int c; { | |
| 922 | − unput(c); | |
| 923 | − } | |
| @@ -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 | − | |
| 14 | −void test (void) | |
| 15 | −{ | |
| 16 | − lua_pushobject(lua_getparam(1)); | |
| 17 | − lua_call ("c", 1); | |
| 18 | −} | |
| 19 | − | |
| 20 | − | |
| 21 | −static void callfunc (void) | |
| 22 | −{ | |
| 23 | − lua_Object obj = lua_getparam (1); | |
| 24 | − if (lua_isstring(obj)) lua_call(lua_getstring(obj),0); | |
| 25 | −} | |
| 26 | − | |
| 27 | −static void execstr (void) | |
| 28 | −{ | |
| 29 | − lua_Object obj = lua_getparam (1); | |
| 30 | − if (lua_isstring(obj)) lua_dostring(lua_getstring(obj)); | |
| 31 | −} | |
| 32 | − | |
| 33 | −int 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 | − | |
| @@ -1 +0,0 @@ | ||
| 1 | −/* empty file to please silly code in iolib.c and opcode.c */ | |
| @@ -1,5 +0,0 @@ | ||
| 1 | −k,v=nextvar(k) | |
| 2 | −while k do | |
| 3 | − print(k) | |
| 4 | − k,v=nextvar(k) | |
| 5 | −end | |
| @@ -2,7 +2,7 @@ · 1 unmodified line | ||
| 2 | 2 | ** LUA - Linguagem para Usuarios de Aplicacao |
| 3 | 3 | ** Grupo de Tecnologia em Computacao Grafica |
| 4 | 4 | ** TeCGraf - PUC-Rio |
| 5 | −** 19 May 93 | |
| 5 | +** $Id: lua.h,v 1.1 1993/12/17 18:41:19 celes Exp $ | |
| 6 | 6 | */ |
| 7 | 7 | |
| 8 | 8 | |
| @@ -1,8 +1,8 @@ | ||
| 1 | 1 | /* |
| 2 | −** Libraries to use in LUA programs | |
| 2 | +** Libraries to be used in LUA programs | |
| 3 | 3 | ** Grupo de Tecnologia em Computacao Grafica |
| 4 | 4 | ** TeCGraf - PUC-Rio |
| 5 | −** 19 May 93 | |
| 5 | +** $Id: lualib.h,v 1.1 1993/12/17 19:01:46 celes Exp $ | |
| 6 | 6 | */ |
| 7 | 7 | |
| 8 | 8 | #ifndef lualib_h |
| @@ -13,3 +13,4 @@ void strlib_open (void); · 4 unmodified lines | ||
| 13 | 13 | void mathlib_open (void); |
| 14 | 14 | |
| 15 | 15 | #endif |
| 16 | + | |
Empty file added.
| @@ -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;} | |
| 16 | −int yyleng; extern char yytext[]; | |
| 17 | −int yymorfg; | |
| 18 | −extern char *yysptr, yysbuf[]; | |
| 19 | −int yytchar; | |
| 20 | −FILE *yyin = {stdin}, *yyout = {stdout}; | |
| 21 | −extern int yylineno; | |
| 22 | −struct yysvf { | |
| 23 | − struct yywork *yystoff; | |
| 24 | − struct yysvf *yyother; | |
| 25 | − int *yystops;}; | |
| 26 | −struct yysvf *yyestate; | |
| 27 | −extern 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 | − | |
| 40 | −static Input input; | |
| 41 | −static Unput unput; | |
| 42 | − | |
| 43 | −void lua_setinput (Input fn) | |
| 44 | −{ | |
| 45 | − input = fn; | |
| 46 | −} | |
| 47 | − | |
| 48 | −void lua_setunput (Unput fn) | |
| 49 | −{ | |
| 50 | − unput = fn; | |
| 51 | −} | |
| 52 | − | |
| 53 | −char *lua_lasttext (void) | |
| 54 | −{ | |
| 55 | − return yytext; | |
| 56 | −} | |
| 57 | − | |
| 58 | −# define YYNEWLINE 10 | |
| 59 | −yylex(){ | |
| 60 | −int nstr; extern int yyprevious; | |
| 61 | −while((nstr = yylook()) >= 0) | |
| 62 | −yyfussy: switch(nstr){ | |
| 63 | −case 0: | |
| 64 | −if(yywrap()) return(0); break; | |
| 65 | −case 1: | |
| 66 | − ; | |
| 67 | −break; | |
| 68 | −case 2: | |
| 69 | − {yylval.vInt = 1; return DEBUG;} | |
| 70 | −break; | |
| 71 | −case 3: | |
| 72 | − {yylval.vInt = 0; return DEBUG;} | |
| 73 | −break; | |
| 74 | −case 4: | |
| 75 | − lua_linenumber++; | |
| 76 | −break; | |
| 77 | −case 5: | |
| 78 | − ; | |
| 79 | −break; | |
| 80 | −case 6: | |
| 81 | − return LOCAL; | |
| 82 | −break; | |
| 83 | −case 7: | |
| 84 | − return IF; | |
| 85 | −break; | |
| 86 | −case 8: | |
| 87 | − return THEN; | |
| 88 | −break; | |
| 89 | −case 9: | |
| 90 | − return ELSE; | |
| 91 | −break; | |
| 92 | −case 10: | |
| 93 | − return ELSEIF; | |
| 94 | −break; | |
| 95 | −case 11: | |
| 96 | − return WHILE; | |
| 97 | −break; | |
| 98 | −case 12: | |
| 99 | − return DO; | |
| 100 | −break; | |
| 101 | −case 13: | |
| 102 | − return REPEAT; | |
| 103 | −break; | |
| 104 | −case 14: | |
| 105 | − return UNTIL; | |
| 106 | −break; | |
| 107 | −case 15: | |
| 108 | − { | |
| 109 | − yylval.vWord = lua_nfile-1; | |
| 110 | − return FUNCTION; | |
| 111 | − } | |
| 112 | −break; | |
| 113 | −case 16: | |
| 114 | − return END; | |
| 115 | −break; | |
| 116 | −case 17: | |
| 117 | − return RETURN; | |
| 118 | −break; | |
| 119 | −case 18: | |
| 120 | − return LOCAL; | |
| 121 | −break; | |
| 122 | −case 19: | |
| 123 | − return NIL; | |
| 124 | −break; | |
| 125 | −case 20: | |
| 126 | − return AND; | |
| 127 | −break; | |
| 128 | −case 21: | |
| 129 | − return OR; | |
| 130 | −break; | |
| 131 | −case 22: | |
| 132 | − return NOT; | |
| 133 | −break; | |
| 134 | −case 23: | |
| 135 | − return NE; | |
| 136 | −break; | |
| 137 | −case 24: | |
| 138 | − return LE; | |
| 139 | −break; | |
| 140 | −case 25: | |
| 141 | − return GE; | |
| 142 | −break; | |
| 143 | −case 26: | |
| 144 | − return CONC; | |
| 145 | −break; | |
| 146 | −case 27: | |
| 147 | − case 28: | |
| 148 | − { | |
| 149 | − yylval.vWord = lua_findenclosedconstant (yytext); | |
| 150 | − return STRING; | |
| 151 | − } | |
| 152 | −break; | |
| 153 | −case 29: | |
| 154 | −case 30: | |
| 155 | −case 31: | |
| 156 | −case 32: | |
| 157 | −{ | |
| 158 | − yylval.vFloat = atof(yytext); | |
| 159 | − return NUMBER; | |
| 160 | − } | |
| 161 | −break; | |
| 162 | −case 33: | |
| 163 | − { | |
| 164 | − yylval.vWord = lua_findsymbol (yytext); | |
| 165 | − return NAME; | |
| 166 | − } | |
| 167 | −break; | |
| 168 | −case 34: | |
| 169 | − return *yytext; | |
| 170 | −break; | |
| 171 | −case -1: | |
| 172 | −break; | |
| 173 | −default: | |
| 174 | −fprintf(yyout,"bad switch yylook %d",nstr); | |
| 175 | −} return(0); } | |
| 176 | −/* end of yylex */ | |
| 177 | −int yyvstop[] = { | |
| 178 | −0, | |
| 179 | − | |
| 180 | −1, | |
| 181 | −0, | |
| 182 | − | |
| 183 | −1, | |
| 184 | −0, | |
| 185 | − | |
| 186 | −34, | |
| 187 | −0, | |
| 188 | − | |
| 189 | −1, | |
| 190 | −34, | |
| 191 | −0, | |
| 192 | − | |
| 193 | −4, | |
| 194 | −0, | |
| 195 | − | |
| 196 | −34, | |
| 197 | −0, | |
| 198 | − | |
| 199 | −34, | |
| 200 | −0, | |
| 201 | − | |
| 202 | −34, | |
| 203 | −0, | |
| 204 | − | |
| 205 | −34, | |
| 206 | −0, | |
| 207 | − | |
| 208 | −29, | |
| 209 | −34, | |
| 210 | −0, | |
| 211 | − | |
| 212 | −34, | |
| 213 | −0, | |
| 214 | − | |
| 215 | −34, | |
| 216 | −0, | |
| 217 | − | |
| 218 | −33, | |
| 219 | −34, | |
| 220 | −0, | |
| 221 | − | |
| 222 | −33, | |
| 223 | −34, | |
| 224 | −0, | |
| 225 | − | |
| 226 | −33, | |
| 227 | −34, | |
| 228 | −0, | |
| 229 | − | |
| 230 | −33, | |
| 231 | −34, | |
| 232 | −0, | |
| 233 | − | |
| 234 | −33, | |
| 235 | −34, | |
| 236 | −0, | |
| 237 | − | |
| 238 | −33, | |
| 239 | −34, | |
| 240 | −0, | |
| 241 | − | |
| 242 | −33, | |
| 243 | −34, | |
| 244 | −0, | |
| 245 | − | |
| 246 | −33, | |
| 247 | −34, | |
| 248 | −0, | |
| 249 | − | |
| 250 | −33, | |
| 251 | −34, | |
| 252 | −0, | |
| 253 | − | |
| 254 | −33, | |
| 255 | −34, | |
| 256 | −0, | |
| 257 | − | |
| 258 | −33, | |
| 259 | −34, | |
| 260 | −0, | |
| 261 | − | |
| 262 | −33, | |
| 263 | −34, | |
| 264 | −0, | |
| 265 | − | |
| 266 | −33, | |
| 267 | −34, | |
| 268 | −0, | |
| 269 | − | |
| 270 | −34, | |
| 271 | −0, | |
| 272 | − | |
| 273 | −34, | |
| 274 | −0, | |
| 275 | − | |
| 276 | −1, | |
| 277 | −0, | |
| 278 | − | |
| 279 | −27, | |
| 280 | −0, | |
| 281 | − | |
| 282 | −28, | |
| 283 | −0, | |
| 284 | − | |
| 285 | −5, | |
| 286 | −0, | |
| 287 | − | |
| 288 | −26, | |
| 289 | −0, | |
| 290 | − | |
| 291 | −30, | |
| 292 | −0, | |
| 293 | − | |
| 294 | −29, | |
| 295 | −0, | |
| 296 | − | |
| 297 | −29, | |
| 298 | −0, | |
| 299 | − | |
| 300 | −24, | |
| 301 | −0, | |
| 302 | − | |
| 303 | −25, | |
| 304 | −0, | |
| 305 | − | |
| 306 | −33, | |
| 307 | −0, | |
| 308 | − | |
| 309 | −33, | |
| 310 | −0, | |
| 311 | − | |
| 312 | −12, | |
| 313 | −33, | |
| 314 | −0, | |
| 315 | − | |
| 316 | −33, | |
| 317 | −0, | |
| 318 | − | |
| 319 | −33, | |
| 320 | −0, | |
| 321 | − | |
| 322 | −33, | |
| 323 | −0, | |
| 324 | − | |
| 325 | −7, | |
| 326 | −33, | |
| 327 | −0, | |
| 328 | − | |
| 329 | −33, | |
| 330 | −0, | |
| 331 | − | |
| 332 | −33, | |
| 333 | −0, | |
| 334 | − | |
| 335 | −33, | |
| 336 | −0, | |
| 337 | − | |
| 338 | −21, | |
| 339 | −33, | |
| 340 | −0, | |
| 341 | − | |
| 342 | −33, | |
| 343 | −0, | |
| 344 | − | |
| 345 | −33, | |
| 346 | −0, | |
| 347 | − | |
| 348 | −33, | |
| 349 | −0, | |
| 350 | − | |
| 351 | −33, | |
| 352 | −0, | |
| 353 | − | |
| 354 | −23, | |
| 355 | −0, | |
| 356 | − | |
| 357 | −29, | |
| 358 | −30, | |
| 359 | −0, | |
| 360 | − | |
| 361 | −31, | |
| 362 | −0, | |
| 363 | − | |
| 364 | −20, | |
| 365 | −33, | |
| 366 | −0, | |
| 367 | − | |
| 368 | −33, | |
| 369 | −0, | |
| 370 | − | |
| 371 | −16, | |
| 372 | −33, | |
| 373 | −0, | |
| 374 | − | |
| 375 | −33, | |
| 376 | −0, | |
| 377 | − | |
| 378 | −33, | |
| 379 | −0, | |
| 380 | − | |
| 381 | −19, | |
| 382 | −33, | |
| 383 | −0, | |
| 384 | − | |
| 385 | −22, | |
| 386 | −33, | |
| 387 | −0, | |
| 388 | − | |
| 389 | −33, | |
| 390 | −0, | |
| 391 | − | |
| 392 | −33, | |
| 393 | −0, | |
| 394 | − | |
| 395 | −33, | |
| 396 | −0, | |
| 397 | − | |
| 398 | −33, | |
| 399 | −0, | |
| 400 | − | |
| 401 | −33, | |
| 402 | −0, | |
| 403 | − | |
| 404 | −32, | |
| 405 | −0, | |
| 406 | − | |
| 407 | −9, | |
| 408 | −33, | |
| 409 | −0, | |
| 410 | − | |
| 411 | −33, | |
| 412 | −0, | |
| 413 | − | |
| 414 | −33, | |
| 415 | −0, | |
| 416 | − | |
| 417 | −33, | |
| 418 | −0, | |
| 419 | − | |
| 420 | −33, | |
| 421 | −0, | |
| 422 | − | |
| 423 | −8, | |
| 424 | −33, | |
| 425 | −0, | |
| 426 | − | |
| 427 | −33, | |
| 428 | −0, | |
| 429 | − | |
| 430 | −33, | |
| 431 | −0, | |
| 432 | − | |
| 433 | −31, | |
| 434 | −32, | |
| 435 | −0, | |
| 436 | − | |
| 437 | −33, | |
| 438 | −0, | |
| 439 | − | |
| 440 | −33, | |
| 441 | −0, | |
| 442 | − | |
| 443 | −6, | |
| 444 | −18, | |
| 445 | −33, | |
| 446 | −0, | |
| 447 | − | |
| 448 | −33, | |
| 449 | −0, | |
| 450 | − | |
| 451 | −33, | |
| 452 | −0, | |
| 453 | − | |
| 454 | −14, | |
| 455 | −33, | |
| 456 | −0, | |
| 457 | − | |
| 458 | −11, | |
| 459 | −33, | |
| 460 | −0, | |
| 461 | − | |
| 462 | −10, | |
| 463 | −33, | |
| 464 | −0, | |
| 465 | − | |
| 466 | −33, | |
| 467 | −0, | |
| 468 | − | |
| 469 | −13, | |
| 470 | −33, | |
| 471 | −0, | |
| 472 | − | |
| 473 | −17, | |
| 474 | −33, | |
| 475 | −0, | |
| 476 | − | |
| 477 | −2, | |
| 478 | −0, | |
| 479 | − | |
| 480 | −33, | |
| 481 | −0, | |
| 482 | − | |
| 483 | −15, | |
| 484 | −33, | |
| 485 | −0, | |
| 486 | − | |
| 487 | −3, | |
| 488 | −0, | |
| 489 | −0}; | |
| 490 | −# define YYTYPE char | |
| 491 | −struct yywork { YYTYPE verify, advance; } yycrank[] = { | |
| 492 | −0,0, 0,0, 1,3, 0,0, | |
| 493 | −0,0, 0,0, 0,0, 0,0, | |
| 494 | −0,0, 0,0, 1,4, 1,5, | |
| 495 | −6,29, 4,28, 0,0, 0,0, | |
| 496 | −0,0, 0,0, 7,31, 0,0, | |
| 497 | −6,29, 6,29, 0,0, 0,0, | |
| 498 | −0,0, 0,0, 7,31, 7,31, | |
| 499 | −0,0, 0,0, 0,0, 0,0, | |
| 500 | −0,0, 0,0, 0,0, 1,6, | |
| 501 | −4,28, 0,0, 0,0, 0,0, | |
| 502 | −1,7, 0,0, 0,0, 0,0, | |
| 503 | −1,3, 6,30, 1,8, 1,9, | |
| 504 | −0,0, 1,10, 6,29, 7,31, | |
| 505 | −8,33, 0,0, 6,29, 0,0, | |
| 506 | −7,32, 0,0, 0,0, 6,29, | |
| 507 | −7,31, 1,11, 0,0, 1,12, | |
| 508 | −2,27, 7,31, 1,13, 11,39, | |
| 509 | −12,40, 1,13, 26,56, 0,0, | |
| 510 | −0,0, 2,8, 2,9, 0,0, | |
| 511 | −6,29, 0,0, 0,0, 6,29, | |
| 512 | −0,0, 0,0, 7,31, 0,0, | |
| 513 | −0,0, 7,31, 0,0, 0,0, | |
| 514 | −2,11, 0,0, 2,12, 0,0, | |
| 515 | −0,0, 0,0, 0,0, 0,0, | |
| 516 | −0,0, 0,0, 1,14, 0,0, | |
| 517 | −0,0, 1,15, 1,16, 1,17, | |
| 518 | −0,0, 22,52, 1,18, 18,47, | |
| 519 | −23,53, 1,19, 42,63, 1,20, | |
| 520 | −1,21, 25,55, 14,42, 1,22, | |
| 521 | −15,43, 1,23, 1,24, 16,44, | |
| 522 | −1,25, 16,45, 17,46, 19,48, | |
| 523 | −21,51, 2,14, 20,49, 1,26, | |
| 524 | −2,15, 2,16, 2,17, 24,54, | |
| 525 | −20,50, 2,18, 44,64, 45,65, | |
| 526 | −2,19, 46,66, 2,20, 2,21, | |
| 527 | −27,57, 48,67, 2,22, 49,68, | |
| 528 | −2,23, 2,24, 50,69, 2,25, | |
| 529 | −52,70, 53,72, 27,58, 54,73, | |
| 530 | −52,71, 9,34, 2,26, 9,35, | |
| 531 | −9,35, 9,35, 9,35, 9,35, | |
| 532 | −9,35, 9,35, 9,35, 9,35, | |
| 533 | −9,35, 10,36, 55,74, 10,37, | |
| 534 | −10,37, 10,37, 10,37, 10,37, | |
| 535 | −10,37, 10,37, 10,37, 10,37, | |
| 536 | −10,37, 57,75, 58,76, 64,80, | |
| 537 | −66,81, 67,82, 70,83, 71,84, | |
| 538 | −72,85, 73,86, 74,87, 10,38, | |
| 539 | −10,38, 38,61, 10,38, 38,61, | |
| 540 | −75,88, 76,89, 38,62, 38,62, | |
| 541 | −38,62, 38,62, 38,62, 38,62, | |
| 542 | −38,62, 38,62, 38,62, 38,62, | |
| 543 | −80,92, 81,93, 13,41, 13,41, | |
| 544 | −13,41, 13,41, 13,41, 13,41, | |
| 545 | −13,41, 13,41, 13,41, 13,41, | |
| 546 | −82,94, 83,95, 84,96, 10,38, | |
| 547 | −10,38, 86,97, 10,38, 13,41, | |
| 548 | −13,41, 13,41, 13,41, 13,41, | |
| 549 | −13,41, 13,41, 13,41, 13,41, | |
| 550 | −13,41, 13,41, 13,41, 13,41, | |
| 551 | −13,41, 13,41, 13,41, 13,41, | |
| 552 | −13,41, 13,41, 13,41, 13,41, | |
| 553 | −13,41, 13,41, 13,41, 13,41, | |
| 554 | −13,41, 87,98, 88,99, 60,79, | |
| 555 | −60,79, 13,41, 60,79, 13,41, | |
| 556 | −13,41, 13,41, 13,41, 13,41, | |
| 557 | −13,41, 13,41, 13,41, 13,41, | |
| 558 | −13,41, 13,41, 13,41, 13,41, | |
| 559 | −13,41, 13,41, 13,41, 13,41, | |
| 560 | −13,41, 13,41, 13,41, 13,41, | |
| 561 | −13,41, 13,41, 13,41, 13,41, | |
| 562 | −13,41, 33,33, 89,100, 60,79, | |
| 563 | −60,79, 92,101, 60,79, 93,102, | |
| 564 | −95,103, 33,33, 33,0, 96,104, | |
| 565 | −99,105, 100,106, 102,107, 106,108, | |
| 566 | −107,109, 35,35, 35,35, 35,35, | |
| 567 | −35,35, 35,35, 35,35, 35,35, | |
| 568 | −35,35, 35,35, 35,35, 108,110, | |
| 569 | −0,0, 0,0, 0,0, 0,0, | |
| 570 | −0,0, 0,0, 33,33, 0,0, | |
| 571 | −0,0, 35,59, 35,59, 33,33, | |
| 572 | −35,59, 0,0, 0,0, 33,33, | |
| 573 | −0,0, 0,0, 0,0, 0,0, | |
| 574 | −33,33, 0,0, 0,0, 0,0, | |
| 575 | −0,0, 36,60, 36,60, 36,60, | |
| 576 | −36,60, 36,60, 36,60, 36,60, | |
| 577 | −36,60, 36,60, 36,60, 0,0, | |
| 578 | −0,0, 33,33, 0,0, 0,0, | |
| 579 | −33,33, 35,59, 35,59, 0,0, | |
| 580 | −35,59, 36,38, 36,38, 59,77, | |
| 581 | −36,38, 59,77, 0,0, 0,0, | |
| 582 | −59,78, 59,78, 59,78, 59,78, | |
| 583 | −59,78, 59,78, 59,78, 59,78, | |
| 584 | −59,78, 59,78, 61,62, 61,62, | |
| 585 | −61,62, 61,62, 61,62, 61,62, | |
| 586 | −61,62, 61,62, 61,62, 61,62, | |
| 587 | −0,0, 0,0, 0,0, 0,0, | |
| 588 | −0,0, 36,38, 36,38, 0,0, | |
| 589 | −36,38, 77,78, 77,78, 77,78, | |
| 590 | −77,78, 77,78, 77,78, 77,78, | |
| 591 | −77,78, 77,78, 77,78, 79,90, | |
| 592 | −0,0, 79,90, 0,0, 0,0, | |
| 593 | −79,91, 79,91, 79,91, 79,91, | |
| 594 | −79,91, 79,91, 79,91, 79,91, | |
| 595 | −79,91, 79,91, 90,91, 90,91, | |
| 596 | −90,91, 90,91, 90,91, 90,91, | |
| 597 | −90,91, 90,91, 90,91, 90,91, | |
| 598 | −0,0}; | |
| 599 | −struct yysvf yysvec[] = { | |
| 600 | −0, 0, 0, | |
| 601 | −yycrank+-1, 0, yyvstop+1, | |
| 602 | −yycrank+-28, yysvec+1, yyvstop+3, | |
| 603 | −yycrank+0, 0, yyvstop+5, | |
| 604 | −yycrank+4, 0, yyvstop+7, | |
| 605 | −yycrank+0, 0, yyvstop+10, | |
| 606 | −yycrank+-11, 0, yyvstop+12, | |
| 607 | −yycrank+-17, 0, yyvstop+14, | |
| 608 | −yycrank+7, 0, yyvstop+16, | |
| 609 | −yycrank+107, 0, yyvstop+18, | |
| 610 | −yycrank+119, 0, yyvstop+20, | |
| 611 | −yycrank+6, 0, yyvstop+23, | |
| 612 | −yycrank+7, 0, yyvstop+25, | |
| 613 | −yycrank+158, 0, yyvstop+27, | |
| 614 | −yycrank+4, yysvec+13, yyvstop+30, | |
| 615 | −yycrank+5, yysvec+13, yyvstop+33, | |
| 616 | −yycrank+11, yysvec+13, yyvstop+36, | |
| 617 | −yycrank+5, yysvec+13, yyvstop+39, | |
| 618 | −yycrank+5, yysvec+13, yyvstop+42, | |
| 619 | −yycrank+12, yysvec+13, yyvstop+45, | |
| 620 | −yycrank+21, yysvec+13, yyvstop+48, | |
| 621 | −yycrank+10, yysvec+13, yyvstop+51, | |
| 622 | −yycrank+4, yysvec+13, yyvstop+54, | |
| 623 | −yycrank+4, yysvec+13, yyvstop+57, | |
| 624 | −yycrank+21, yysvec+13, yyvstop+60, | |
| 625 | −yycrank+9, yysvec+13, yyvstop+63, | |
| 626 | −yycrank+9, 0, yyvstop+66, | |
| 627 | −yycrank+40, 0, yyvstop+68, | |
| 628 | −yycrank+0, yysvec+4, yyvstop+70, | |
| 629 | −yycrank+0, yysvec+6, 0, | |
| 630 | −yycrank+0, 0, yyvstop+72, | |
| 631 | −yycrank+0, yysvec+7, 0, | |
| 632 | −yycrank+0, 0, yyvstop+74, | |
| 633 | −yycrank+-280, 0, yyvstop+76, | |
| 634 | −yycrank+0, 0, yyvstop+78, | |
| 635 | −yycrank+249, 0, yyvstop+80, | |
| 636 | −yycrank+285, 0, yyvstop+82, | |
| 637 | −yycrank+0, yysvec+10, yyvstop+84, | |
| 638 | −yycrank+146, 0, 0, | |
| 639 | −yycrank+0, 0, yyvstop+86, | |
| 640 | −yycrank+0, 0, yyvstop+88, | |
| 641 | −yycrank+0, yysvec+13, yyvstop+90, | |
| 642 | −yycrank+10, yysvec+13, yyvstop+92, | |
| 643 | −yycrank+0, yysvec+13, yyvstop+94, | |
| 644 | −yycrank+19, yysvec+13, yyvstop+97, | |
| 645 | −yycrank+35, yysvec+13, yyvstop+99, | |
| 646 | −yycrank+27, yysvec+13, yyvstop+101, | |
| 647 | −yycrank+0, yysvec+13, yyvstop+103, | |
| 648 | −yycrank+42, yysvec+13, yyvstop+106, | |
| 649 | −yycrank+35, yysvec+13, yyvstop+108, | |
| 650 | −yycrank+30, yysvec+13, yyvstop+110, | |
| 651 | −yycrank+0, yysvec+13, yyvstop+112, | |
| 652 | −yycrank+36, yysvec+13, yyvstop+115, | |
| 653 | −yycrank+48, yysvec+13, yyvstop+117, | |
| 654 | −yycrank+35, yysvec+13, yyvstop+119, | |
| 655 | −yycrank+61, yysvec+13, yyvstop+121, | |
| 656 | −yycrank+0, 0, yyvstop+123, | |
| 657 | −yycrank+76, 0, 0, | |
| 658 | −yycrank+67, 0, 0, | |
| 659 | −yycrank+312, 0, 0, | |
| 660 | −yycrank+183, yysvec+36, yyvstop+125, | |
| 661 | −yycrank+322, 0, 0, | |
| 662 | −yycrank+0, yysvec+61, yyvstop+128, | |
| 663 | −yycrank+0, yysvec+13, yyvstop+130, | |
| 664 | −yycrank+78, yysvec+13, yyvstop+133, | |
| 665 | −yycrank+0, yysvec+13, yyvstop+135, | |
| 666 | −yycrank+81, yysvec+13, yyvstop+138, | |
| 667 | −yycrank+84, yysvec+13, yyvstop+140, | |
| 668 | −yycrank+0, yysvec+13, yyvstop+142, | |
| 669 | −yycrank+0, yysvec+13, yyvstop+145, | |
| 670 | −yycrank+81, yysvec+13, yyvstop+148, | |
| 671 | −yycrank+66, yysvec+13, yyvstop+150, | |
| 672 | −yycrank+74, yysvec+13, yyvstop+152, | |
| 673 | −yycrank+80, yysvec+13, yyvstop+154, | |
| 674 | −yycrank+78, yysvec+13, yyvstop+156, | |
| 675 | −yycrank+94, 0, 0, | |
| 676 | −yycrank+93, 0, 0, | |
| 677 | −yycrank+341, 0, 0, | |
| 678 | −yycrank+0, yysvec+77, yyvstop+158, | |
| 679 | −yycrank+356, 0, 0, | |
| 680 | −yycrank+99, yysvec+13, yyvstop+160, | |
| 681 | −yycrank+89, yysvec+13, yyvstop+163, | |
| 682 | −yycrank+108, yysvec+13, yyvstop+165, | |
| 683 | −yycrank+120, yysvec+13, yyvstop+167, | |
| 684 | −yycrank+104, yysvec+13, yyvstop+169, | |
| 685 | −yycrank+0, yysvec+13, yyvstop+171, | |
| 686 | −yycrank+113, yysvec+13, yyvstop+174, | |
| 687 | −yycrank+148, yysvec+13, yyvstop+176, | |
| 688 | −yycrank+133, 0, 0, | |
| 689 | −yycrank+181, 0, 0, | |
| 690 | −yycrank+366, 0, 0, | |
| 691 | −yycrank+0, yysvec+90, yyvstop+178, | |
| 692 | −yycrank+183, yysvec+13, yyvstop+181, | |
| 693 | −yycrank+182, yysvec+13, yyvstop+183, | |
| 694 | −yycrank+0, yysvec+13, yyvstop+185, | |
| 695 | −yycrank+172, yysvec+13, yyvstop+189, | |
| 696 | −yycrank+181, yysvec+13, yyvstop+191, | |
| 697 | −yycrank+0, yysvec+13, yyvstop+193, | |
| 698 | −yycrank+0, yysvec+13, yyvstop+196, | |
| 699 | −yycrank+189, 0, 0, | |
| 700 | −yycrank+195, 0, 0, | |
| 701 | −yycrank+0, yysvec+13, yyvstop+199, | |
| 702 | −yycrank+183, yysvec+13, yyvstop+202, | |
| 703 | −yycrank+0, yysvec+13, yyvstop+204, | |
| 704 | −yycrank+0, yysvec+13, yyvstop+207, | |
| 705 | −yycrank+0, 0, yyvstop+210, | |
| 706 | −yycrank+178, 0, 0, | |
| 707 | −yycrank+186, yysvec+13, yyvstop+212, | |
| 708 | −yycrank+204, 0, 0, | |
| 709 | −yycrank+0, yysvec+13, yyvstop+214, | |
| 710 | −yycrank+0, 0, yyvstop+217, | |
| 711 | −0, 0, 0}; | |
| 712 | −struct yywork *yytop = yycrank+423; | |
| 713 | −struct yysvf *yybgin = yysvec+1; | |
| 714 | −char yymatch[] = { | |
| 715 | −00 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , | |
| 716 | −01 ,011 ,012 ,01 ,01 ,01 ,01 ,01 , | |
| 717 | −01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , | |
| 718 | −01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , | |
| 719 | −011 ,01 ,'"' ,01 ,01 ,01 ,01 ,047 , | |
| 720 | −01 ,01 ,01 ,'+' ,01 ,'+' ,01 ,01 , | |
| 721 | −'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' , | |
| 722 | −'0' ,'0' ,01 ,01 ,01 ,01 ,01 ,01 , | |
| 723 | −01 ,'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' , | |
| 727 | −01 ,'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 , | |
| 731 | −0}; | |
| 732 | −char yyextra[] = { | |
| 733 | −0,0,0,0,0,0,0,0, | |
| 734 | −0,0,0,0,0,0,0,0, | |
| 735 | −0,0,0,0,0,0,0,0, | |
| 736 | −0,0,0,0,0,0,0,0, | |
| 737 | −0,0,0,0,0,0,0,0, | |
| 738 | −0}; | |
| 739 | −#ifndef lint | |
| 740 | −static char ncform_sccsid[] = "@(#)ncform 1.6 88/02/08 SMI"; /* from S5R2 1.2 */ | |
| 741 | −#endif | |
| 742 | − | |
| 743 | −int yylineno =1; | |
| 744 | −# define YYU(x) x | |
| 745 | −# define NLSTATE yyprevious=YYNEWLINE | |
| 746 | −char yytext[YYLMAX]; | |
| 747 | −struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp; | |
| 748 | −char yysbuf[YYLMAX]; | |
| 749 | −char *yysptr = yysbuf; | |
| 750 | −int *yyfnd; | |
| 751 | −extern struct yysvf *yyestate; | |
| 752 | −int yyprevious = YYNEWLINE; | |
| 753 | −yylook(){ | |
| 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 | − } | |
| 901 | −yyback(p, m) | |
| 902 | − int *p; | |
| 903 | −{ | |
| 904 | −if (p==0) return(0); | |
| 905 | −while (*p) | |
| 906 | − { | |
| 907 | − if (*p++ == m) | |
| 908 | − return(1); | |
| 909 | − } | |
| 910 | −return(0); | |
| 911 | −} | |
| 912 | − /* the following are only used in the lex library */ | |
| 913 | −yyinput(){ | |
| 914 | − return(input()); | |
| 915 | − } | |
| 916 | −yyoutput(c) | |
| 917 | − int c; { | |
| 918 | − output(c); | |
| 919 | − } | |
| 920 | −yyunput(c) | |
| 921 | − int c; { | |
| 922 | − unput(c); | |
| 923 | − } | |
| @@ -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 | − | |
| 14 | −void test (void) | |
| 15 | −{ | |
| 16 | − lua_pushobject(lua_getparam(1)); | |
| 17 | − lua_call ("c", 1); | |
| 18 | −} | |
| 19 | − | |
| 20 | − | |
| 21 | −static void callfunc (void) | |
| 22 | −{ | |
| 23 | − lua_Object obj = lua_getparam (1); | |
| 24 | − if (lua_isstring(obj)) lua_call(lua_getstring(obj),0); | |
| 25 | −} | |
| 26 | − | |
| 27 | −static void execstr (void) | |
| 28 | −{ | |
| 29 | − lua_Object obj = lua_getparam (1); | |
| 30 | − if (lua_isstring(obj)) lua_dostring(lua_getstring(obj)); | |
| 31 | −} | |
| 32 | − | |
| 33 | −void 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 | − | |
| @@ -0,0 +1,24 @@ | ||
| 1 | +# makefile for lua | |
| 2 | + | |
| 3 | +LIB= $(LUA)/lib | |
| 4 | +INC= $(LUA)/include | |
| 5 | + | |
| 6 | +CC= gcc | |
| 7 | +CFLAGS= -g -Wall -O2 -I$(INC) $(DEFS) | |
| 8 | +DEFS= -DMAXCODE=64000 -DMAXCONSTANT=1024 -DMAXSYMBOL=1024 -DMAXARRAY=1024 | |
| 9 | + | |
| 10 | +OBJS= hash.o inout.o lex.o opcode.o table.o y.tab.o | |
| 11 | +SLIB= $(LIB)/liblua.a | |
| 12 | +DLIB= $(LIB)/liblua.so.1.1 | |
| 13 | + | |
| 14 | +libs: $(SLIB) $(DLIB) | |
| 15 | + | |
| 16 | +$(SLIB): $(OBJS) | |
| 17 | + ar ruvl $@ $(OBJS) | |
| 18 | + ranlib $(SLIB) | |
| 19 | + | |
| 20 | +$(DLIB): $(OBJS) | |
| 21 | + ld -o $@ $(OBJS) | |
| 22 | + | |
| 23 | +clean: | |
| 24 | + rm -f $(OBJS) $(SLIB) $(DLIB) | |
| @@ -2,13 +2,15 @@ · 1 unmodified line | ||
| 2 | 2 | ** hash.c |
| 3 | 3 | ** hash manager for lua |
| 4 | 4 | ** Luiz Henrique de Figueiredo - 17 Aug 90 |
| 5 | −** Modified by Waldemar Celes Filho | |
| 6 | −** 12 May 93 | |
| 7 | 5 | */ |
| 8 | 6 | |
| 7 | +char *rcs_hash="$Id: hash.c,v 2.1 1994/04/20 22:07:57 celes Exp $"; | |
| 8 | + | |
| 9 | 9 | #include <string.h> |
| 10 | 10 | #include <stdlib.h> |
| 11 | 11 | |
| 12 | +#include "mm.h" | |
| 13 | + | |
| 12 | 14 | #include "opcode.h" |
| 13 | 15 | #include "hash.h" |
| 14 | 16 | #include "inout.h" |
| @@ -24,10 +26,23 @@ · 9 unmodified lines | ||
| 24 | 26 | #define nhash(t) ((t)->nhash) |
| 25 | 27 | #define nodelist(t) ((t)->list) |
| 26 | 28 | #define list(t,i) ((t)->list[i]) |
| 29 | +#define markarray(t) ((t)->mark) | |
| 27 | 30 | #define ref_tag(n) (tag(&(n)->ref)) |
| 28 | 31 | #define ref_nvalue(n) (nvalue(&(n)->ref)) |
| 29 | 32 | #define ref_svalue(n) (svalue(&(n)->ref)) |
| 30 | 33 | |
| 34 | +#ifndef ARRAYBLOCK | |
| 35 | +#define ARRAYBLOCK 50 | |
| 36 | +#endif | |
| 37 | + | |
| 38 | +typedef struct ArrayList | |
| 39 | +{ | |
| 40 | + Hash *array; | |
| 41 | + struct ArrayList *next; | |
| 42 | +} ArrayList; | |
| 43 | + | |
| 44 | +static ArrayList *listhead = NULL; | |
| 45 | + | |
| 31 | 46 | static int head (Hash *t, Object *ref) /* hash function */ |
| 32 | 47 | { |
| 33 | 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 | 105 | ** Create a new hash. Return the hash pointer or NULL on error. |
| 91 | 106 | */ |
| 92 | −Hash *lua_hashcreate (unsigned int nhash) | |
| 107 | +static Hash *hashcreate (unsigned int nhash) | |
| 93 | 108 | { |
| 94 | 109 | Hash *t = new (Hash); |
| 95 | 110 | if (t == NULL) |
| @@ -111,7 +126,7 @@ Hash *lua_hashcreate (unsigned int nhash) · 15 unmodified lines | ||
| 111 | 126 | /* |
| 112 | 127 | ** Delete a hash |
| 113 | 128 | */ |
| 114 | −void lua_hashdelete (Hash *h) | |
| 129 | +static void hashdelete (Hash *h) | |
| 115 | 130 | { |
| 116 | 131 | int i; |
| 117 | 132 | for (i=0; i<nhash(h); i++) |
| @@ -120,6 +135,86 @@ void lua_hashdelete (Hash *h) · 2 unmodified lines | ||
| 120 | 135 | free(h); |
| 121 | 136 | } |
| 122 | 137 | |
| 138 | + | |
| 139 | +/* | |
| 140 | +** Mark a hash and check its elements | |
| 141 | +*/ | |
| 142 | +void 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 | +*/ | |
| 164 | +void 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 | +*/ | |
| 193 | +Hash *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 | 219 | ** If the hash node is present, return its pointer, otherwise create a new |
| 125 | 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 | 244 | return (&n->val); |
| 150 | 245 | } |
| 151 | 246 | |
| 152 | −/* | |
| 153 | −** Mark a hash and check its elements | |
| 154 | −*/ | |
| 155 | −void 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 | 249 | ** Internal function to manipulate arrays. |
| @@ -176,7 +251,6 @@ void lua_hashmark (Hash *h) · 1 unmodified line | ||
| 176 | 251 | ** in the hash. |
| 177 | 252 | ** This function pushs the element value and its reference to the stack. |
| 178 | 253 | */ |
| 179 | −#include "lua.h" | |
| 180 | 254 | static void firstnode (Hash *a, int h) |
| 181 | 255 | { |
| 182 | 256 | if (h < nhash(a)) |
| @@ -184,11 +258,25 @@ static void firstnode (Hash *a, int h) · 1 unmodified line | ||
| 184 | 258 | int i; |
| 185 | 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); | |
| 190 | − lua_pushobject (&list(a,i)->val); | |
| 191 | − return; | |
| 263 | + if (tag(&list(a,i)->val) != T_NIL) | |
| 264 | + { | |
| 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 | } |
| @@ -2,8 +2,7 @@ · 1 unmodified line | ||
| 2 | 2 | ** hash.h |
| 3 | 3 | ** hash manager for lua |
| 4 | 4 | ** Luiz Henrique de Figueiredo - 17 Aug 90 |
| 5 | −** Modified by Waldemar Celes Filho | |
| 6 | −** 26 Apr 93 | |
| 5 | +** $Id: hash.h,v 2.1 1994/04/20 22:07:57 celes Exp $ | |
| 7 | 6 | */ |
| 8 | 7 | |
| 9 | 8 | #ifndef hash_h |
| @@ -23,13 +22,11 @@ typedef struct Hash · 13 unmodified lines | ||
| 23 | 22 | Node **list; |
| 24 | 23 | } Hash; |
| 25 | 24 | |
| 26 | −#define markarray(t) ((t)->mark) | |
| 27 | 25 | |
| 28 | −Hash *lua_hashcreate (unsigned int nhash); | |
| 29 | −void lua_hashdelete (Hash *h); | |
| 26 | +Hash *lua_createarray (int nhash); | |
| 27 | +void lua_hashmark (Hash *h); | |
| 28 | +void lua_hashcollector (void); | |
| 30 | 29 | Object *lua_hashdefine (Hash *t, Object *ref); |
| 31 | −void lua_hashmark (Hash *h); | |
| 32 | − | |
| 33 | 30 | void lua_next (void); |
| 34 | 31 | |
| 35 | 32 | #endif |
| @@ -2,12 +2,10 @@ · 1 unmodified line | ||
| 2 | 2 | ** inout.c |
| 3 | 3 | ** Provide function to realise the input/output function and debugger |
| 4 | 4 | ** facilities. |
| 5 | −** | |
| 6 | −** Waldemar Celes Filho | |
| 7 | −** TeCGraf - PUC-Rio | |
| 8 | −** 11 May 93 | |
| 9 | 5 | */ |
| 10 | 6 | |
| 7 | +char *rcs_inout="$Id: inout.c,v 1.2 1993/12/22 21:15:16 roberto Exp $"; | |
| 8 | + | |
| 11 | 9 | #include <stdio.h> |
| 12 | 10 | #include <string.h> |
| 13 | 11 | |
| @@ -49,14 +47,6 @@ static int fileinput (void) · 35 unmodified lines | ||
| 49 | 47 | return (c == EOF ? 0 : c); |
| 50 | 48 | } |
| 51 | 49 | |
| 52 | −/* | |
| 53 | −** Function to unget the next character from to input file | |
| 54 | −*/ | |
| 55 | −static void fileunput (int c) | |
| 56 | −{ | |
| 57 | − ungetc (c, fp); | |
| 58 | −} | |
| 59 | − | |
| 60 | 50 | /* |
| 61 | 51 | ** Function to get the next character from the input string |
| 62 | 52 | */ |
| @@ -66,14 +56,6 @@ static int stringinput (void) · 3 unmodified lines | ||
| 66 | 56 | return (*(st-1)); |
| 67 | 57 | } |
| 68 | 58 | |
| 69 | −/* | |
| 70 | −** Function to unget the next character from to input string | |
| 71 | −*/ | |
| 72 | −static void stringunput (int c) | |
| 73 | −{ | |
| 74 | − st--; | |
| 75 | −} | |
| 76 | − | |
| 77 | 59 | /* |
| 78 | 60 | ** Function to open a file to be input unit. |
| 79 | 61 | ** Return 0 on success or 1 on error. |
| @@ -82,7 +64,6 @@ int lua_openfile (char *fn) · 2 unmodified lines | ||
| 82 | 64 | { |
| 83 | 65 | lua_linenumber = 1; |
| 84 | 66 | lua_setinput (fileinput); |
| 85 | − lua_setunput (fileunput); | |
| 86 | 67 | fp = fopen (fn, "r"); |
| 87 | 68 | if (fp == NULL) return 1; |
| 88 | 69 | if (lua_addfile (fn)) return 1; |
| @@ -96,6 +77,7 @@ void lua_closefile (void) · 7 unmodified lines | ||
| 96 | 77 | { |
| 97 | 78 | if (fp != NULL) |
| 98 | 79 | { |
| 80 | + lua_delfile(); | |
| 99 | 81 | fclose (fp); |
| 100 | 82 | fp = NULL; |
| 101 | 83 | } |
| @@ -108,7 +90,6 @@ int lua_openstring (char *s) · 6 unmodified lines | ||
| 108 | 90 | { |
| 109 | 91 | lua_linenumber = 1; |
| 110 | 92 | lua_setinput (stringinput); |
| 111 | − lua_setunput (stringunput); | |
| 112 | 93 | st = s; |
| 113 | 94 | { |
| 114 | 95 | char sn[64]; |
| @@ -118,6 +99,14 @@ int lua_openstring (char *s) · 3 unmodified lines | ||
| 118 | 99 | return 0; |
| 119 | 100 | } |
| 120 | 101 | |
| 102 | +/* | |
| 103 | +** Function to close an opened string | |
| 104 | +*/ | |
| 105 | +void lua_closestring (void) | |
| 106 | +{ | |
| 107 | + lua_delfile(); | |
| 108 | +} | |
| 109 | + | |
| 121 | 110 | /* |
| 122 | 111 | ** Call user function to handle error messages, if registred. Or report error |
| 123 | 112 | ** using standard function (fprintf). |
| @@ -1,9 +1,5 @@ | ||
| 1 | 1 | /* |
| 2 | −** inout.h | |
| 3 | −** | |
| 4 | −** Waldemar Celes Filho | |
| 5 | −** TeCGraf - PUC-Rio | |
| 6 | −** 11 May 93 | |
| 2 | +** $Id: inout.h,v 1.1 1993/12/17 18:41:19 celes Exp $ | |
| 7 | 3 | */ |
| 8 | 4 | |
| 9 | 5 | |
| @@ -17,6 +13,7 @@ extern int lua_debugline; · 7 unmodified lines | ||
| 17 | 13 | int lua_openfile (char *fn); |
| 18 | 14 | void lua_closefile (void); |
| 19 | 15 | int lua_openstring (char *s); |
| 16 | +void lua_closestring (void); | |
| 20 | 17 | int lua_pushfunction (int file, int function); |
| 21 | 18 | void lua_popfunction (void); |
| 22 | 19 | void lua_reportbug (char *s); |
| @@ -0,0 +1,238 @@ | ||
| 1 | +char *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 | + | |
| 33 | +static int current; | |
| 34 | +static char yytext[256]; | |
| 35 | +static char *yytextLast; | |
| 36 | + | |
| 37 | +static Input input; | |
| 38 | + | |
| 39 | +void lua_setinput (Input fn) | |
| 40 | +{ | |
| 41 | + current = ' '; | |
| 42 | + input = fn; | |
| 43 | +} | |
| 44 | + | |
| 45 | +char *lua_lasttext (void) | |
| 46 | +{ | |
| 47 | + *yytextLast = 0; | |
| 48 | + return yytext; | |
| 49 | +} | |
| 50 | + | |
| 51 | + | |
| 52 | +static 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 | + | |
| 77 | +int 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 | + | |
| 96 | +int 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(); | |
| 218 | +fraction: 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 | + | |
| @@ -1,15 +1,18 @@ | ||
| 1 | 1 | /* |
| 2 | 2 | ** opcode.c |
| 3 | 3 | ** TecCGraf - PUC-Rio |
| 4 | −** 26 Apr 93 | |
| 5 | 4 | */ |
| 6 | 5 | |
| 6 | +char *rcs_opcode="$Id: opcode.c,v 2.1 1994/04/20 22:07:57 celes Exp $"; | |
| 7 | + | |
| 7 | 8 | #include <stdio.h> |
| 8 | 9 | #include <stdlib.h> |
| 9 | 10 | #include <string.h> |
| 10 | −#ifdef __GNUC__ | |
| 11 | −#include <floatingpoint.h> | |
| 12 | −#endif | |
| 11 | + | |
| 12 | +/* stdlib.h does not have this in SunOS */ | |
| 13 | +extern double strtod(const char *, char **); | |
| 14 | + | |
| 15 | +#include "mm.h" | |
| 13 | 16 | |
| 14 | 17 | #include "opcode.h" |
| 15 | 18 | #include "hash.h" |
| @@ -137,12 +140,13 @@ static int lua_tostring (Object *obj) · 121 unmodified lines | ||
| 137 | 140 | */ |
| 138 | 141 | int lua_execute (Byte *pc) |
| 139 | 142 | { |
| 143 | + Object *oldbase = base; | |
| 144 | + base = top; | |
| 140 | 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 | 150 | case PUSHNIL: tag(top++) = T_NIL; break; |
| 147 | 151 | |
| 148 | 152 | case PUSH0: tag(top) = T_NUMBER; nvalue(top++) = 0; break; |
| @@ -152,35 +156,42 @@ int lua_execute (Byte *pc) · 3 unmodified lines | ||
| 152 | 156 | case PUSHBYTE: tag(top) = T_NUMBER; nvalue(top++) = *pc++; break; |
| 153 | 157 | |
| 154 | 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 | 164 | break; |
| 157 | 165 | |
| 158 | 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 | 172 | break; |
| 173 | + | |
| 161 | 174 | case PUSHSTRING: |
| 162 | 175 | { |
| 163 | − int w = *((Word *)(pc)); | |
| 164 | − pc += sizeof(Word); | |
| 165 | − tag(top) = T_STRING; svalue(top++) = lua_constant[w]; | |
| 176 | + CodeWord code; | |
| 177 | + get_word(code,pc); | |
| 178 | + tag(top) = T_STRING; svalue(top++) = lua_constant[code.w]; | |
| 166 | 179 | } |
| 167 | 180 | break; |
| 168 | 181 | |
| 169 | − case PUSHLOCAL0: *top++ = *(base + 0); break; | |
| 170 | − case PUSHLOCAL1: *top++ = *(base + 1); break; | |
| 171 | − case PUSHLOCAL2: *top++ = *(base + 2); break; | |
| 172 | − case PUSHLOCAL3: *top++ = *(base + 3); 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; | |
| 182 | + case PUSHLOCAL0: case PUSHLOCAL1: case PUSHLOCAL2: | |
| 183 | + case PUSHLOCAL3: case PUSHLOCAL4: case PUSHLOCAL5: | |
| 184 | + case PUSHLOCAL6: case PUSHLOCAL7: case PUSHLOCAL8: | |
| 185 | + case PUSHLOCAL9: *top++ = *(base + (int)(opcode-PUSHLOCAL0)); break; | |
| 179 | 186 | |
| 180 | 187 | case PUSHLOCAL: *top++ = *(base + (*pc++)); break; |
| 181 | 188 | |
| 182 | 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 | 195 | break; |
| 185 | 196 | |
| 186 | 197 | case PUSHINDEXED: |
| @@ -201,21 +212,19 @@ int lua_execute (Byte *pc) · 14 unmodified lines | ||
| 201 | 212 | |
| 202 | 213 | case PUSHOBJECT: *top = *(top-3); top++; break; |
| 203 | 214 | |
| 204 | − case STORELOCAL0: *(base + 0) = *(--top); break; | |
| 205 | − case STORELOCAL1: *(base + 1) = *(--top); break; | |
| 206 | − case STORELOCAL2: *(base + 2) = *(--top); break; | |
| 207 | − case STORELOCAL3: *(base + 3) = *(--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; | |
| 215 | + case STORELOCAL0: case STORELOCAL1: case STORELOCAL2: | |
| 216 | + case STORELOCAL3: case STORELOCAL4: case STORELOCAL5: | |
| 217 | + case STORELOCAL6: case STORELOCAL7: case STORELOCAL8: | |
| 218 | + case STORELOCAL9: *(base + (int)(opcode-STORELOCAL0)) = *(--top); break; | |
| 214 | 219 | |
| 215 | 220 | case STORELOCAL: *(base + (*pc++)) = *(--top); break; |
| 216 | 221 | |
| 217 | 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 | 228 | break; |
| 220 | 229 | |
| 221 | 230 | case STOREINDEXED0: |
| @@ -245,31 +254,63 @@ int lua_execute (Byte *pc) · 23 unmodified lines | ||
| 245 | 254 | if (h == NULL) return 1; |
| 246 | 255 | *h = *(top-1); |
| 247 | 256 | } |
| 248 | − --top; | |
| 257 | + top--; | |
| 249 | 258 | } |
| 250 | 259 | break; |
| 251 | 260 | |
| 252 | − case STOREFIELD: | |
| 253 | − if (tag(top-3) != T_ARRAY) | |
| 261 | + case STORELIST0: | |
| 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 | 273 | return 1; |
| 257 | 274 | } |
| 258 | − *(lua_hashdefine (avalue(top-3), top-2)) = *(top-1); | |
| 259 | − top -= 2; | |
| 275 | + while (n) | |
| 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 | 283 | break; |
| 261 | 284 | |
| 262 | − case ADJUST: | |
| 285 | + case STORERECORD: | |
| 263 | 286 | { |
| 264 | − Object *newtop = base + *(pc++); | |
| 265 | − if (top != newtop) | |
| 287 | + int n = *(pc++); | |
| 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; | |
| 268 | − top = newtop; | |
| 296 | + CodeWord code; | |
| 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 | 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 | 314 | case CREATEARRAY: |
| 274 | 315 | if (tag(top-1) == T_NIL) |
| 275 | 316 | nvalue(top-1) = 101; |
| @@ -278,7 +319,7 @@ int lua_execute (Byte *pc) · 2 unmodified lines | ||
| 278 | 319 | if (tonumber(top-1)) return 1; |
| 279 | 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 | 323 | if (avalue(top-1) == NULL) |
| 283 | 324 | return 1; |
| 284 | 325 | tag(top-1) = T_ARRAY; |
| @@ -412,39 +453,51 @@ int lua_execute (Byte *pc) · 127 unmodified lines | ||
| 412 | 453 | |
| 413 | 454 | case ONTJMP: |
| 414 | 455 | { |
| 415 | − int n = *((Word *)(pc)); | |
| 416 | − pc += sizeof(Word); | |
| 417 | − if (tag(top-1) != T_NIL) pc += n; | |
| 456 | + CodeWord code; | |
| 457 | + get_word(code,pc); | |
| 458 | + if (tag(top-1) != T_NIL) pc += code.w; | |
| 418 | 459 | } |
| 419 | 460 | break; |
| 420 | 461 | |
| 421 | 462 | case ONFJMP: |
| 422 | 463 | { |
| 423 | − int n = *((Word *)(pc)); | |
| 424 | − pc += sizeof(Word); | |
| 425 | − if (tag(top-1) == T_NIL) pc += n; | |
| 464 | + CodeWord code; | |
| 465 | + get_word(code,pc); | |
| 466 | + if (tag(top-1) == T_NIL) pc += code.w; | |
| 426 | 467 | } |
| 427 | 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 | 486 | case IFFJMP: |
| 434 | 487 | { |
| 435 | − int n = *((Word *)(pc)); | |
| 436 | − pc += sizeof(Word); | |
| 488 | + CodeWord code; | |
| 489 | + get_word(code,pc); | |
| 437 | 490 | top--; |
| 438 | − if (tag(top) == T_NIL) pc += n; | |
| 491 | + if (tag(top) == T_NIL) pc += code.w; | |
| 439 | 492 | } |
| 440 | 493 | break; |
| 441 | 494 | |
| 442 | 495 | case IFFUPJMP: |
| 443 | 496 | { |
| 444 | − int n = *((Word *)(pc)); | |
| 445 | − pc += sizeof(Word); | |
| 497 | + CodeWord code; | |
| 498 | + get_word(code,pc); | |
| 446 | 499 | top--; |
| 447 | − if (tag(top) == T_NIL) pc -= n; | |
| 500 | + if (tag(top) == T_NIL) pc -= code.w; | |
| 448 | 501 | } |
| 449 | 502 | break; |
| 450 | 503 | |
| @@ -516,23 +569,25 @@ int lua_execute (Byte *pc) · 65 unmodified lines | ||
| 516 | 569 | break; |
| 517 | 570 | |
| 518 | 571 | case HALT: |
| 572 | + base = oldbase; | |
| 519 | 573 | return 0; /* success */ |
| 520 | 574 | |
| 521 | 575 | case SETFUNCTION: |
| 522 | 576 | { |
| 523 | − int file, func; | |
| 524 | − file = *((Word *)(pc)); | |
| 525 | − pc += sizeof(Word); | |
| 526 | − func = *((Word *)(pc)); | |
| 527 | − pc += sizeof(Word); | |
| 528 | − if (lua_pushfunction (file, func)) | |
| 577 | + CodeWord file, func; | |
| 578 | + get_word(file,pc); | |
| 579 | + get_word(func,pc); | |
| 580 | + if (lua_pushfunction (file.w, func.w)) | |
| 529 | 581 | return 1; |
| 530 | 582 | } |
| 531 | 583 | break; |
| 532 | 584 | |
| 533 | 585 | case SETLINE: |
| 534 | − lua_debugline = *((Word *)(pc)); | |
| 535 | − pc += sizeof(Word); | |
| 586 | + { | |
| 587 | + CodeWord code; | |
| 588 | + get_word(code,pc); | |
| 589 | + lua_debugline = code.w; | |
| 590 | + } | |
| 536 | 591 | break; |
| 537 | 592 | |
| 538 | 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 | */ |
| 553 | −void lua_markstack (void) | |
| 608 | +void lua_travstack (void (*fn)(Object *)) | |
| 554 | 609 | { |
| 555 | 610 | Object *o; |
| 556 | 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 | 633 | if (lua_openstring (string)) return 1; |
| 579 | 634 | if (lua_parse ()) return 1; |
| 635 | + lua_closestring(); | |
| 580 | 636 | return 0; |
| 581 | 637 | } |
| 582 | 638 | |
| @@ -612,6 +668,7 @@ Object *lua_getparam (int number) · 29 unmodified lines | ||
| 612 | 668 | */ |
| 613 | 669 | real lua_getnumber (Object *object) |
| 614 | 670 | { |
| 671 | + if (object == NULL || tag(object) == T_NIL) return 0.0; | |
| 615 | 672 | if (tonumber (object)) return 0.0; |
| 616 | 673 | else return (nvalue(object)); |
| 617 | 674 | } |
| @@ -621,6 +678,7 @@ real lua_getnumber (Object *object) · 3 unmodified lines | ||
| 621 | 678 | */ |
| 622 | 679 | char *lua_getstring (Object *object) |
| 623 | 680 | { |
| 681 | + if (object == NULL || tag(object) == T_NIL) return NULL; | |
| 624 | 682 | if (tostring (object)) return NULL; |
| 625 | 683 | else return (svalue(object)); |
| 626 | 684 | } |
| @@ -630,6 +688,7 @@ char *lua_getstring (Object *object) · 3 unmodified lines | ||
| 630 | 688 | */ |
| 631 | 689 | char *lua_copystring (Object *object) |
| 632 | 690 | { |
| 691 | + if (object == NULL || tag(object) == T_NIL) return NULL; | |
| 633 | 692 | if (tostring (object)) return NULL; |
| 634 | 693 | else return (strdup(svalue(object))); |
| 635 | 694 | } |
| @@ -639,6 +698,7 @@ char *lua_copystring (Object *object) · 3 unmodified lines | ||
| 639 | 698 | */ |
| 640 | 699 | lua_CFunction lua_getcfunction (Object *object) |
| 641 | 700 | { |
| 701 | + if (object == NULL) return NULL; | |
| 642 | 702 | if (tag(object) != T_CFUNCTION) return NULL; |
| 643 | 703 | else return (fvalue(object)); |
| 644 | 704 | } |
| @@ -648,6 +708,7 @@ lua_CFunction lua_getcfunction (Object *object) · 3 unmodified lines | ||
| 648 | 708 | */ |
| 649 | 709 | void *lua_getuserdata (Object *object) |
| 650 | 710 | { |
| 711 | + if (object == NULL) return NULL; | |
| 651 | 712 | if (tag(object) != T_USERDATA) return NULL; |
| 652 | 713 | else return (uvalue(object)); |
| 653 | 714 | } |
| @@ -658,6 +719,7 @@ void *lua_getuserdata (Object *object) · 4 unmodified lines | ||
| 658 | 719 | */ |
| 659 | 720 | Object *lua_getfield (Object *object, char *field) |
| 660 | 721 | { |
| 722 | + if (object == NULL) return NULL; | |
| 661 | 723 | if (tag(object) != T_ARRAY) |
| 662 | 724 | return NULL; |
| 663 | 725 | else |
| @@ -675,6 +737,7 @@ Object *lua_getfield (Object *object, char *field) · 11 unmodified lines | ||
| 675 | 737 | */ |
| 676 | 738 | Object *lua_getindexed (Object *object, float index) |
| 677 | 739 | { |
| 740 | + if (object == NULL) return NULL; | |
| 678 | 741 | if (tag(object) != T_ARRAY) |
| 679 | 742 | return NULL; |
| 680 | 743 | 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 | +*/ | |
| 1000 | +void 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 | +*/ | |
| 1012 | +void 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 | + | |
| @@ -1,7 +1,6 @@ | ||
| 1 | 1 | /* |
| 2 | −** opcode.h | |
| 3 | 2 | ** TeCGraf - PUC-Rio |
| 4 | −** 16 Apr 92 | |
| 3 | +** $Id: opcode.h,v 2.1 1994/04/20 22:07:57 celes Exp $ | |
| 5 | 4 | */ |
| 6 | 5 | |
| 7 | 6 | #ifndef opcode_h |
| @@ -15,13 +14,26 @@ · 7 unmodified lines | ||
| 15 | 14 | #define real float |
| 16 | 15 | #endif |
| 17 | 16 | |
| 17 | +#define FIELDS_PER_FLUSH 40 | |
| 18 | + | |
| 18 | 19 | typedef unsigned char Byte; |
| 19 | 20 | |
| 20 | 21 | typedef unsigned short Word; |
| 21 | 22 | |
| 23 | +typedef union | |
| 24 | +{ | |
| 25 | + struct {char c1; char c2;} m; | |
| 26 | + Word w; | |
| 27 | +} CodeWord; | |
| 28 | + | |
| 29 | +typedef union | |
| 30 | +{ | |
| 31 | + struct {char c1; char c2; char c3; char c4;} m; | |
| 32 | + float f; | |
| 33 | +} CodeFloat; | |
| 34 | + | |
| 22 | 35 | typedef enum |
| 23 | 36 | { |
| 24 | − NOP, | |
| 25 | 37 | PUSHNIL, |
| 26 | 38 | PUSH0, PUSH1, PUSH2, |
| 27 | 39 | PUSHBYTE, |
| @@ -41,7 +53,9 @@ typedef enum · 13 unmodified lines | ||
| 41 | 53 | STOREGLOBAL, |
| 42 | 54 | STOREINDEXED0, |
| 43 | 55 | STOREINDEXED, |
| 44 | − STOREFIELD, | |
| 56 | + STORELIST0, | |
| 57 | + STORELIST, | |
| 58 | + STORERECORD, | |
| 45 | 59 | ADJUST, |
| 46 | 60 | CREATEARRAY, |
| 47 | 61 | EQOP, |
| @@ -83,7 +97,6 @@ typedef enum · 35 unmodified lines | ||
| 83 | 97 | |
| 84 | 98 | typedef void (*Cfunction) (void); |
| 85 | 99 | typedef int (*Input) (void); |
| 86 | −typedef void (*Unput) (int ); | |
| 87 | 100 | |
| 88 | 101 | typedef union |
| 89 | 102 | { |
| @@ -127,18 +140,25 @@ typedef struct · 37 unmodified lines | ||
| 127 | 140 | #define s_fvalue(i) (fvalue(&s_object(i))) |
| 128 | 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 | 149 | /* Exported functions */ |
| 132 | 150 | int lua_execute (Byte *pc); |
| 133 | 151 | void lua_markstack (void); |
| 134 | 152 | char *lua_strdup (char *l); |
| 135 | 153 | |
| 136 | −void lua_setinput (Input fn); /* from "lua.lex" module */ | |
| 137 | −void lua_setunput (Unput fn); /* from "lua.lex" module */ | |
| 138 | −char *lua_lasttext (void); /* from "lua.lex" module */ | |
| 154 | +void lua_setinput (Input fn); /* from "lex.c" module */ | |
| 155 | +char *lua_lasttext (void); /* from "lex.c" module */ | |
| 139 | 156 | int lua_parse (void); /* from "lua.stx" module */ |
| 140 | 157 | void lua_type (void); |
| 141 | 158 | void lua_obj2number (void); |
| 142 | 159 | void lua_print (void); |
| 160 | +void lua_internaldofile (void); | |
| 161 | +void lua_internaldostring (void); | |
| 162 | +void lua_travstack (void (*fn)(Object *)); | |
| 143 | 163 | |
| 144 | 164 | #endif |
| @@ -1,20 +1,22 @@ | ||
| 1 | 1 | /* |
| 2 | 2 | ** table.c |
| 3 | 3 | ** Module to control static tables |
| 4 | −** TeCGraf - PUC-Rio | |
| 5 | −** 11 May 93 | |
| 6 | 4 | */ |
| 7 | 5 | |
| 6 | +char *rcs_table="$Id: table.c,v 2.1 1994/04/20 22:07:57 celes Exp $"; | |
| 7 | + | |
| 8 | 8 | #include <stdlib.h> |
| 9 | 9 | #include <string.h> |
| 10 | 10 | |
| 11 | +#include "mm.h" | |
| 12 | + | |
| 11 | 13 | #include "opcode.h" |
| 12 | 14 | #include "hash.h" |
| 13 | 15 | #include "inout.h" |
| 14 | 16 | #include "table.h" |
| 15 | 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 | 21 | #ifndef MAXSYMBOL |
| 20 | 22 | #define MAXSYMBOL 512 |
| @@ -24,20 +26,47 @@ static Symbol tablebuffer[MAXSYMBOL] = { · 3 unmodified lines | ||
| 24 | 26 | {"tonumber",{T_CFUNCTION,{lua_obj2number}}}, |
| 25 | 27 | {"next",{T_CFUNCTION,{lua_next}}}, |
| 26 | 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 | }; |
| 29 | 33 | Symbol *lua_table=tablebuffer; |
| 30 | −Word lua_ntable=5; | |
| 34 | +Word lua_ntable=7; | |
| 35 | + | |
| 36 | +struct List | |
| 37 | +{ | |
| 38 | + Symbol *s; | |
| 39 | + struct List *next; | |
| 40 | +}; | |
| 41 | + | |
| 42 | +static struct List o6={ tablebuffer+6, 0}; | |
| 43 | +static struct List o5={ tablebuffer+5, &o6 }; | |
| 44 | +static struct List o4={ tablebuffer+4, &o5 }; | |
| 45 | +static struct List o3={ tablebuffer+3, &o4 }; | |
| 46 | +static struct List o2={ tablebuffer+2, &o3 }; | |
| 47 | +static struct List o1={ tablebuffer+1, &o2 }; | |
| 48 | +static struct List o0={ tablebuffer+0, &o1 }; | |
| 49 | +static struct List *searchlist=&o0; | |
| 31 | 50 | |
| 32 | 51 | #ifndef MAXCONSTANT |
| 33 | 52 | #define MAXCONSTANT 256 |
| 34 | 53 | #endif |
| 35 | −static char *constantbuffer[MAXCONSTANT] = {"mark","nil","number", | |
| 36 | − "string","table", | |
| 37 | − "function","cfunction" | |
| 54 | +/* pre-defined constants need garbage collection extra byte */ | |
| 55 | +static char tm[] = " mark"; | |
| 56 | +static char ti[] = " nil"; | |
| 57 | +static char tn[] = " number"; | |
| 58 | +static char ts[] = " string"; | |
| 59 | +static char tt[] = " table"; | |
| 60 | +static char tf[] = " function"; | |
| 61 | +static char tc[] = " cfunction"; | |
| 62 | +static char tu[] = " userdata"; | |
| 63 | +static char *constantbuffer[MAXCONSTANT] = {tm+1, ti+1, | |
| 64 | + tn+1, ts+1, | |
| 65 | + tt+1, tf+1, | |
| 66 | + tc+1, tu+1 | |
| 38 | 67 | }; |
| 39 | 68 | char **lua_constant = constantbuffer; |
| 40 | −Word lua_nconstant=T_CFUNCTION+1; | |
| 69 | +Word lua_nconstant=T_USERDATA+1; | |
| 41 | 70 | |
| 42 | 71 | #ifndef MAXSTRING |
| 43 | 72 | #define MAXSTRING 512 |
| @@ -46,18 +75,19 @@ static char *stringbuffer[MAXSTRING]; · 2 unmodified lines | ||
| 46 | 75 | char **lua_string = stringbuffer; |
| 47 | 76 | Word lua_nstring=0; |
| 48 | 77 | |
| 49 | −#ifndef MAXARRAY | |
| 50 | −#define MAXARRAY 512 | |
| 51 | −#endif | |
| 52 | −static Hash *arraybuffer[MAXARRAY]; | |
| 53 | −Hash **lua_array = arraybuffer; | |
| 54 | −Word lua_narray=0; | |
| 55 | − | |
| 56 | 78 | #define MAXFILE 20 |
| 57 | 79 | char *lua_file[MAXFILE]; |
| 58 | 80 | int lua_nfile; |
| 59 | 81 | |
| 60 | 82 | |
| 83 | +#define markstring(s) (*((s)-1)) | |
| 84 | + | |
| 85 | + | |
| 86 | +/* Variables to controll garbage collection */ | |
| 87 | +Word lua_block=10; /* to check when garbage collector will be called */ | |
| 88 | +Word lua_nentity; /* counter of new entities (strings and arrays) */ | |
| 89 | + | |
| 90 | + | |
| 61 | 91 | /* |
| 62 | 92 | ** Given a name, search it at symbol table and return its index. If not |
| 63 | 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 | */ |
| 66 | 96 | int lua_findsymbol (char *s) |
| 67 | 97 | { |
| 68 | − int i; | |
| 69 | − for (i=0; i<lua_ntable; i++) | |
| 70 | − if (streq(s,s_name(i))) | |
| 71 | − return i; | |
| 98 | + struct List *l, *p; | |
| 99 | + for (p=NULL, l=searchlist; l!=NULL; p=l, l=l->next) | |
| 100 | + if (streq(s,l->s->name)) | |
| 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 | 111 | if (lua_ntable >= MAXSYMBOL-1) |
| 73 | 112 | { |
| 74 | 113 | lua_error ("symbol table overflow"); |
| @@ -80,60 +119,13 @@ int lua_findsymbol (char *s) · 5 unmodified lines | ||
| 80 | 119 | lua_error ("not enough memory"); |
| 81 | 120 | return -1; |
| 82 | 121 | } |
| 83 | − s_tag(lua_ntable++) = T_NIL; | |
| 84 | − | |
| 85 | − return (lua_ntable-1); | |
| 86 | −} | |
| 87 | − | |
| 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 | −*/ | |
| 99 | −int 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 */ | |
| 122 | + s_tag(lua_ntable) = T_NIL; | |
| 123 | + p = malloc(sizeof(*p)); | |
| 124 | + p->s = lua_table+lua_ntable; | |
| 125 | + p->next = searchlist; | |
| 126 | + searchlist = p; | |
| 105 | 127 | |
| 106 | − /* introduce scape characters */ | |
| 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); | |
| 128 | + return lua_ntable++; | |
| 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 | +*/ | |
| 165 | +void 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 | 174 | ** Mark an object if it is a string or a unmarked array. |
| 172 | 175 | */ |
| 173 | 176 | void lua_markobject (Object *o) |
| 174 | 177 | { |
| 175 | 178 | if (tag(o) == T_STRING) |
| 176 | − lua_markstring (svalue(o)) = 1; | |
| 177 | − else if (tag(o) == T_ARRAY && markarray(avalue(o)) == 0) | |
| 179 | + markstring (svalue(o)) = 1; | |
| 180 | + else if (tag(o) == T_ARRAY) | |
| 178 | 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 | */ |
| 184 | −static void lua_marktable (void) | |
| 189 | +void lua_pack (void) | |
| 185 | 190 | { |
| 186 | − int i; | |
| 187 | − for (i=0; i<lua_ntable; i++) | |
| 188 | − lua_markobject (&s_object(i)); | |
| 191 | + /* mark stack strings */ | |
| 192 | + lua_travstack(lua_markobject); | |
| 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, | |
| 193 | −** this function check if all allocated strings and arrays are in use. If | |
| 194 | −** there are unused ones, pack (compress) the tables. | |
| 204 | +** Garbage collection to atrings. | |
| 205 | +** Delete all unmarked strings | |
| 195 | 206 | */ |
| 196 | −static void lua_pack (void) | |
| 207 | +void lua_stringcollector (void) | |
| 197 | 208 | { |
| 198 | − lua_markstack (); | |
| 199 | − lua_marktable (); | |
| 200 | − | |
| 201 | − { /* pack string */ | |
| 202 | − int i, j; | |
| 203 | − for (i=j=0; i<lua_nstring; i++) | |
| 204 | − if (lua_markstring(lua_string[i]) == 1) | |
| 205 | − { | |
| 206 | − lua_string[j++] = lua_string[i]; | |
| 207 | − lua_markstring(lua_string[i]) = 0; | |
| 208 | − } | |
| 209 | − else | |
| 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 | − } | |
| 209 | + int i, j; | |
| 210 | + for (i=j=0; i<lua_nstring; i++) | |
| 211 | + if (markstring(lua_string[i]) == 1) | |
| 212 | + { | |
| 213 | + lua_string[j++] = lua_string[i]; | |
| 214 | + markstring(lua_string[i]) = 0; | |
| 215 | + } | |
| 216 | + else | |
| 217 | + { | |
| 218 | + free (lua_string[i]-1); | |
| 219 | + } | |
| 220 | + lua_nstring = j; | |
| 230 | 221 | } |
| 231 | 222 | |
| 232 | 223 | /* |
| @@ -236,9 +227,17 @@ static void lua_pack (void) · 3 unmodified lines | ||
| 236 | 227 | */ |
| 237 | 228 | char *lua_createstring (char *s) |
| 238 | 229 | { |
| 230 | + int i; | |
| 239 | 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 | 242 | lua_pack (); |
| 244 | 243 | if (lua_nstring >= MAXSTRING-1) |
| @@ -248,32 +247,10 @@ char *lua_createstring (char *s) · 3 unmodified lines | ||
| 248 | 247 | } |
| 249 | 248 | } |
| 250 | 249 | lua_string[lua_nstring++] = s; |
| 250 | + lua_nentity++; | |
| 251 | 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 | −*/ | |
| 259 | −void *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 | 255 | ** Add a file name at file table, checking overflow. This function also set |
| 279 | 256 | ** the external variable "lua_filename" with the function filename set. |
| @@ -294,6 +271,15 @@ int lua_addfile (char *fn) · 14 unmodified lines | ||
| 294 | 271 | return 0; |
| 295 | 272 | } |
| 296 | 273 | |
| 274 | +/* | |
| 275 | +** Delete a file from file stack | |
| 276 | +*/ | |
| 277 | +int lua_delfile (void) | |
| 278 | +{ | |
| 279 | + lua_nfile--; | |
| 280 | + return 1; | |
| 281 | +} | |
| 282 | + | |
| 297 | 283 | /* |
| 298 | 284 | ** Return the last file name set. |
| 299 | 285 | */ |
| @@ -332,9 +318,9 @@ void lua_nextvar (void) · 32 unmodified lines | ||
| 332 | 318 | return; |
| 333 | 319 | } |
| 334 | 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 | 325 | lua_pushnil(); |
| 340 | 326 | lua_pushnil(); |
| @@ -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 | + | |
| 10 | +extern Symbol *lua_table; | |
| 11 | +extern Word lua_ntable; | |
| 12 | + | |
| 13 | +extern char **lua_constant; | |
| 14 | +extern Word lua_nconstant; | |
| 15 | + | |
| 16 | +extern char **lua_string; | |
| 17 | +extern Word lua_nstring; | |
| 18 | + | |
| 19 | +extern Hash **lua_array; | |
| 20 | +extern Word lua_narray; | |
| 21 | + | |
| 22 | +extern char *lua_file[]; | |
| 23 | +extern int lua_nfile; | |
| 24 | + | |
| 25 | +extern Word lua_block; | |
| 26 | +extern Word lua_nentity; | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | +int lua_findsymbol (char *s); | |
| 31 | +int lua_findconstant (char *s); | |
| 32 | +void lua_travsymbol (void (*fn)(Object *)); | |
| 33 | +void lua_markobject (Object *o); | |
| 34 | +void lua_pack (void); | |
| 35 | +void lua_stringcollector (void); | |
| 36 | +char *lua_createstring (char *s); | |
| 37 | +int lua_addfile (char *fn); | |
| 38 | +int lua_delfile (void); | |
| 39 | +char *lua_filename (void); | |
| 40 | +void lua_nextvar (void); | |
| 41 | + | |
| 42 | +#endif | |
| @@ -1,71 +1,125 @@ | ||
| 1 | + | |
| 1 | 2 | # line 2 "lua.stx" |
| 2 | 3 | |
| 4 | +char *rcs_luastx = "$Id: lua.stx,v 2.4 1994/04/20 16:22:21 celes Exp $"; | |
| 5 | + | |
| 3 | 6 | #include <stdio.h> |
| 4 | 7 | #include <stdlib.h> |
| 5 | 8 | #include <string.h> |
| 6 | 9 | |
| 10 | +#include "mm.h" | |
| 11 | + | |
| 7 | 12 | #include "opcode.h" |
| 8 | 13 | #include "hash.h" |
| 9 | 14 | #include "inout.h" |
| 10 | 15 | #include "table.h" |
| 11 | 16 | #include "lua.h" |
| 12 | 17 | |
| 13 | −#ifndef ALIGNMENT | |
| 14 | −#define ALIGNMENT (sizeof(void *)) | |
| 15 | −#endif | |
| 18 | +#define LISTING 0 | |
| 16 | 19 | |
| 17 | −#ifndef MAXCODE | |
| 18 | −#define MAXCODE 1024 | |
| 20 | +#ifndef GAPCODE | |
| 21 | +#define GAPCODE 50 | |
| 19 | 22 | #endif |
| 20 | −static long buffer[MAXCODE]; | |
| 21 | −static Byte *code = (Byte *)buffer; | |
| 22 | −static long mainbuffer[MAXCODE]; | |
| 23 | −static Byte *maincode = (Byte *)mainbuffer; | |
| 23 | +static Word maxcode; | |
| 24 | +static Word maxmain; | |
| 25 | +static Word maxcurr ; | |
| 26 | +static Byte *code = NULL; | |
| 27 | +static Byte *initcode; | |
| 24 | 28 | static Byte *basepc; |
| 25 | −static Byte *pc; | |
| 29 | +static Word maincode; | |
| 30 | +static Word pc; | |
| 26 | 31 | |
| 27 | 32 | #define MAXVAR 32 |
| 28 | −static long varbuffer[MAXVAR]; | |
| 29 | −static Byte nvarbuffer=0; /* number of variables at a list */ | |
| 33 | +static long varbuffer[MAXVAR]; /* variables in an assignment list; | |
| 34 | + it's long to store negative Word values */ | |
| 35 | +static int nvarbuffer=0; /* number of variables at a list */ | |
| 36 | + | |
| 37 | +static Word localvar[STACKGAP]; /* store local variable names */ | |
| 38 | +static int nlocalvar=0; /* number of local variables */ | |
| 30 | 39 | |
| 31 | −static Word localvar[STACKGAP]; | |
| 32 | −static Byte nlocalvar=0; /* number of local variables */ | |
| 40 | +#define MAXFIELDS FIELDS_PER_FLUSH*2 | |
| 41 | +static Word fields[MAXFIELDS]; /* fieldnames to be flushed */ | |
| 42 | +static int nfields=0; | |
| 33 | 43 | static int ntemp; /* number of temporary var into stack */ |
| 34 | 44 | static int err; /* flag to indicate error */ |
| 35 | 45 | |
| 36 | 46 | /* Internal functions */ |
| 37 | −#define align(n) align_n(sizeof(n)) | |
| 38 | 47 | |
| 39 | 48 | static 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"); | |
| 44 | − err = 1; | |
| 52 | + maxcurr += GAPCODE; | |
| 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 | |
| 49 | 63 | static void code_word (Word n) |
| 50 | 64 | { |
| 51 | − if (pc-basepc>MAXCODE-sizeof(Word)) | |
| 52 | − { | |
| 53 | − lua_error ("code buffer overflow"); | |
| 54 | − err = 1; | |
| 55 | − } | |
| 56 | − *((Word *)pc) = n; | |
| 57 | − pc += sizeof(Word); | |
| 65 | + CodeWord code; | |
| 66 | + code.w = n; | |
| 67 | + code_byte(code.m.c1); | |
| 68 | + code_byte(code.m.c2); | |
| 58 | 69 | } |
| 59 | 70 | |
| 60 | 71 | static void code_float (float n) |
| 61 | 72 | { |
| 62 | − if (pc-basepc>MAXCODE-sizeof(float)) | |
| 63 | − { | |
| 64 | − lua_error ("code buffer overflow"); | |
| 65 | − err = 1; | |
| 66 | − } | |
| 67 | − *((float *)pc) = n; | |
| 68 | − pc += sizeof(float); | |
| 73 | + CodeFloat code; | |
| 74 | + code.f = n; | |
| 75 | + code_byte(code.m.c1); | |
| 76 | + code_byte(code.m.c2); | |
| 77 | + code_byte(code.m.c3); | |
| 78 | + code_byte(code.m.c4); | |
| 79 | +} | |
| 80 | + | |
| 81 | +static 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 | + | |
| 89 | +static 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 | + | |
| 100 | +static 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 | + | |
| 111 | +static 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 | |
| 71 | 125 | static void incr_ntemp (void) |
| @@ -79,10 +133,10 @@ static void incr_ntemp (void) · 7 unmodified lines | ||
| 79 | 133 | } |
| 80 | 134 | } |
| 81 | 135 | |
| 82 | −static void incr_nlocalvar (void) | |
| 136 | +static void add_nlocalvar (int n) | |
| 83 | 137 | { |
| 84 | − if (ntemp+nlocalvar+MAXVAR+1 < STACKGAP) | |
| 85 | − nlocalvar++; | |
| 138 | + if (ntemp+nlocalvar+MAXVAR+n < STACKGAP) | |
| 139 | + nlocalvar += n; | |
| 86 | 140 | else |
| 87 | 141 | { |
| 88 | 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 | |
| 104 | −static 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 | − | |
| 111 | 158 | static void code_number (float f) |
| 112 | −{ int i = f; | |
| 113 | − if (f == i) /* f has an integer value */ | |
| 159 | +{ Word i = (Word)f; | |
| 160 | + if (f == (float)i) /* f has an (short) integer value */ | |
| 114 | 161 | { |
| 115 | 162 | if (i <= 2) code_byte(PUSH0 + i); |
| 116 | 163 | else if (i <= 255) |
| @@ -120,14 +167,12 @@ static void code_number (float f) · 3 unmodified lines | ||
| 120 | 167 | } |
| 121 | 168 | else |
| 122 | 169 | { |
| 123 | − align(Word); | |
| 124 | 170 | code_byte(PUSHWORD); |
| 125 | 171 | code_word(i); |
| 126 | 172 | } |
| 127 | 173 | } |
| 128 | 174 | else |
| 129 | 175 | { |
| 130 | − align(float); | |
| 131 | 176 | code_byte(PUSHFLOAT); |
| 132 | 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" | |
| 139 | 184 | typedef union |
| 140 | 185 | { |
| 141 | 186 | int vInt; |
| 142 | 187 | long vLong; |
| 143 | 188 | float vFloat; |
| 189 | + char *pChar; | |
| 144 | 190 | Word vWord; |
| 145 | 191 | Byte *pByte; |
| 146 | 192 | } YYSTYPE; |
| 147 | −# define NIL 257 | |
| 148 | −# define IF 258 | |
| 149 | −# define THEN 259 | |
| 150 | −# define ELSE 260 | |
| 151 | −# define ELSEIF 261 | |
| 152 | −# define WHILE 262 | |
| 153 | −# define DO 263 | |
| 154 | −# define REPEAT 264 | |
| 155 | −# define UNTIL 265 | |
| 156 | −# define END 266 | |
| 157 | −# define RETURN 267 | |
| 158 | −# define LOCAL 268 | |
| 159 | −# define NUMBER 269 | |
| 160 | −# define FUNCTION 270 | |
| 161 | −# define NAME 271 | |
| 193 | +# define WRONGTOKEN 257 | |
| 194 | +# define NIL 258 | |
| 195 | +# define IF 259 | |
| 196 | +# define THEN 260 | |
| 197 | +# define ELSE 261 | |
| 198 | +# define ELSEIF 262 | |
| 199 | +# define WHILE 263 | |
| 200 | +# define DO 264 | |
| 201 | +# define REPEAT 265 | |
| 202 | +# define UNTIL 266 | |
| 203 | +# define END 267 | |
| 204 | +# define RETURN 268 | |
| 205 | +# define LOCAL 269 | |
| 206 | +# define NUMBER 270 | |
| 207 | +# define FUNCTION 271 | |
| 162 | 208 | # define STRING 272 |
| 163 | −# define DEBUG 273 | |
| 164 | −# define NOT 274 | |
| 209 | +# define NAME 273 | |
| 210 | +# define DEBUG 274 | |
| 165 | 211 | # define AND 275 |
| 166 | 212 | # define OR 276 |
| 167 | 213 | # define NE 277 |
| @@ -169,6 +215,7 @@ typedef union · 1 unmodified line | ||
| 169 | 215 | # define GE 279 |
| 170 | 216 | # define CONC 280 |
| 171 | 217 | # define UNARY 281 |
| 218 | +# define NOT 282 | |
| 172 | 219 | #define yyclearin yychar = -1 |
| 173 | 220 | #define yyerrok yyerrflag = 0 |
| 174 | 221 | extern int yychar; |
| @@ -179,7 +226,7 @@ extern int yyerrflag; · 4 unmodified lines | ||
| 179 | 226 | YYSTYPE yylval, yyval; |
| 180 | 227 | # 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 | 250 | if (number > 0) /* global var */ |
| 204 | 251 | { |
| 205 | − align(Word); | |
| 206 | 252 | code_byte(PUSHGLOBAL); |
| 207 | 253 | code_word(number-1); |
| 208 | 254 | incr_ntemp(); |
| @@ -235,7 +281,6 @@ static void lua_codestore (int i) · 26 unmodified lines | ||
| 235 | 281 | { |
| 236 | 282 | if (varbuffer[i] > 0) /* global var */ |
| 237 | 283 | { |
| 238 | − align(Word); | |
| 239 | 284 | code_byte(STOREGLOBAL); |
| 240 | 285 | code_word(varbuffer[i]-1); |
| 241 | 286 | } |
| @@ -288,27 +333,37 @@ int yywrap (void) · 46 unmodified lines | ||
| 288 | 333 | */ |
| 289 | 334 | int 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 | 344 | err = 0; |
| 293 | 345 | if (yyparse () || (err==1)) return 1; |
| 294 | − *maincode++ = HALT; | |
| 295 | − if (lua_execute (initcode)) return 1; | |
| 296 | − maincode = initcode; | |
| 346 | + initcode[maincode++] = HALT; | |
| 347 | + init = initcode; | |
| 348 | +#if LISTING | |
| 349 | + PrintCode(init,init+maincode); | |
| 350 | +#endif | |
| 351 | + if (lua_execute (init)) return 1; | |
| 352 | + free(init); | |
| 297 | 353 | return 0; |
| 298 | 354 | } |
| 299 | 355 | |
| 300 | 356 | |
| 301 | −#if 0 | |
| 357 | +#if LISTING | |
| 302 | 358 | |
| 303 | −static void PrintCode (void) | |
| 359 | +static void PrintCode (Byte *code, Byte *end) | |
| 304 | 360 | { |
| 305 | 361 | Byte *p = code; |
| 306 | 362 | printf ("\n\nCODE\n"); |
| 307 | − while (p != pc) | |
| 363 | + while (p != end) | |
| 308 | 364 | { |
| 309 | 365 | switch ((OpCode)*p) |
| 310 | 366 | { |
| 311 | − case NOP: printf ("%d NOP\n", (p++)-code); break; | |
| 312 | 367 | case PUSHNIL: printf ("%d PUSHNIL\n", (p++)-code); break; |
| 313 | 368 | case PUSH0: case PUSH1: case PUSH2: |
| 314 | 369 | printf ("%d PUSH%c\n", p-code, *p-PUSH0+'0'); |
| @@ -319,16 +374,31 @@ static void PrintCode (void) · 4 unmodified lines | ||
| 319 | 374 | p++; |
| 320 | 375 | break; |
| 321 | 376 | case PUSHWORD: |
| 322 | − printf ("%d PUSHWORD %d\n", p-code, *((Word *)(p+1))); | |
| 323 | − p += 1 + sizeof(Word); | |
| 377 | + { | |
| 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 | 384 | break; |
| 325 | 385 | case PUSHFLOAT: |
| 326 | − printf ("%d PUSHFLOAT %f\n", p-code, *((float *)(p+1))); | |
| 327 | − p += 1 + sizeof(float); | |
| 386 | + { | |
| 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 | 393 | break; |
| 329 | 394 | case PUSHSTRING: |
| 330 | − printf ("%d PUSHSTRING %d\n", p-code, *((Word *)(p+1))); | |
| 331 | − p += 1 + sizeof(Word); | |
| 395 | + { | |
| 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 | 402 | break; |
| 333 | 403 | case PUSHLOCAL0: case PUSHLOCAL1: case PUSHLOCAL2: case PUSHLOCAL3: |
| 334 | 404 | case PUSHLOCAL4: case PUSHLOCAL5: case PUSHLOCAL6: case PUSHLOCAL7: |
| @@ -340,8 +410,13 @@ static void PrintCode (void) · 5 unmodified lines | ||
| 340 | 410 | p++; |
| 341 | 411 | break; |
| 342 | 412 | case PUSHGLOBAL: |
| 343 | − printf ("%d PUSHGLOBAL %d\n", p-code, *((Word *)(p+1))); | |
| 344 | − p += 1 + sizeof(Word); | |
| 413 | + { | |
| 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 | 420 | break; |
| 346 | 421 | case PUSHINDEXED: printf ("%d PUSHINDEXED\n", (p++)-code); break; |
| 347 | 422 | case PUSHMARK: printf ("%d PUSHMARK\n", (p++)-code); break; |
| @@ -353,18 +428,34 @@ static void PrintCode (void) · 5 unmodified lines | ||
| 353 | 428 | p++; |
| 354 | 429 | break; |
| 355 | 430 | case STORELOCAL: |
| 356 | − printf ("%d STORELOCAK %d\n", p-code, *(++p)); | |
| 431 | + printf ("%d STORELOCAL %d\n", p-code, *(++p)); | |
| 357 | 432 | p++; |
| 358 | 433 | break; |
| 359 | 434 | case STOREGLOBAL: |
| 360 | − printf ("%d STOREGLOBAL %d\n", p-code, *((Word *)(p+1))); | |
| 361 | − p += 1 + sizeof(Word); | |
| 435 | + { | |
| 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 | 442 | break; |
| 363 | 443 | case STOREINDEXED0: printf ("%d STOREINDEXED0\n", (p++)-code); break; |
| 364 | 444 | case STOREINDEXED: printf ("%d STOREINDEXED %d\n", p-code, *(++p)); |
| 365 | 445 | p++; |
| 366 | 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 | 459 | case ADJUST: |
| 369 | 460 | printf ("%d ADJUST %d\n", p-code, *(++p)); |
| 370 | 461 | p++; |
| @@ -381,28 +472,58 @@ static void PrintCode (void) · 10 unmodified lines | ||
| 381 | 472 | case MINUSOP: printf ("%d MINUSOP\n", (p++)-code); break; |
| 382 | 473 | case NOTOP: printf ("%d NOTOP\n", (p++)-code); break; |
| 383 | 474 | case ONTJMP: |
| 384 | − printf ("%d ONTJMP %d\n", p-code, *((Word *)(p+1))); | |
| 385 | − p += sizeof(Word) + 1; | |
| 475 | + { | |
| 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 | 482 | break; |
| 387 | 483 | case ONFJMP: |
| 388 | − printf ("%d ONFJMP %d\n", p-code, *((Word *)(p+1))); | |
| 389 | − p += sizeof(Word) + 1; | |
| 484 | + { | |
| 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 | 491 | break; |
| 391 | 492 | case JMP: |
| 392 | − printf ("%d JMP %d\n", p-code, *((Word *)(p+1))); | |
| 393 | − p += sizeof(Word) + 1; | |
| 493 | + { | |
| 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 | 500 | break; |
| 395 | 501 | case UPJMP: |
| 396 | − printf ("%d UPJMP %d\n", p-code, *((Word *)(p+1))); | |
| 397 | − p += sizeof(Word) + 1; | |
| 502 | + { | |
| 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 | 509 | break; |
| 399 | 510 | case IFFJMP: |
| 400 | − printf ("%d IFFJMP %d\n", p-code, *((Word *)(p+1))); | |
| 401 | − p += sizeof(Word) + 1; | |
| 511 | + { | |
| 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 | 518 | break; |
| 403 | 519 | case IFFUPJMP: |
| 404 | − printf ("%d IFFUPJMP %d\n", p-code, *((Word *)(p+1))); | |
| 405 | − p += sizeof(Word) + 1; | |
| 520 | + { | |
| 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 | 527 | break; |
| 407 | 528 | case POP: printf ("%d POP\n", (p++)-code); break; |
| 408 | 529 | case CALLFUNC: printf ("%d CALLFUNC\n", (p++)-code); break; |
| @@ -410,7 +531,29 @@ static void PrintCode (void) · 1 unmodified line | ||
| 410 | 531 | printf ("%d RETCODE %d\n", p-code, *(++p)); |
| 411 | 532 | p++; |
| 412 | 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 | 563 | -1, 1, |
| 421 | 564 | 0, -1, |
| 422 | 565 | -2, 2, |
| 423 | −-1, 19, | |
| 424 | − 40, 65, | |
| 425 | − 91, 95, | |
| 426 | − 46, 97, | |
| 427 | − -2, 92, | |
| 428 | −-1, 29, | |
| 429 | − 40, 65, | |
| 430 | − 91, 95, | |
| 431 | − 46, 97, | |
| 566 | +-1, 20, | |
| 567 | + 40, 67, | |
| 568 | + 91, 94, | |
| 569 | + 46, 96, | |
| 570 | + -2, 91, | |
| 571 | +-1, 32, | |
| 572 | + 40, 67, | |
| 573 | + 91, 94, | |
| 574 | + 46, 96, | |
| 432 | 575 | -2, 51, |
| 433 | −-1, 70, | |
| 434 | − 275, 33, | |
| 435 | − 276, 33, | |
| 436 | − 61, 33, | |
| 437 | − 277, 33, | |
| 438 | − 62, 33, | |
| 439 | − 60, 33, | |
| 440 | − 278, 33, | |
| 441 | − 279, 33, | |
| 442 | − 280, 33, | |
| 443 | − 43, 33, | |
| 444 | − 45, 33, | |
| 445 | − 42, 33, | |
| 446 | − 47, 33, | |
| 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, | |
| 576 | +-1, 73, | |
| 577 | + 275, 34, | |
| 578 | + 276, 34, | |
| 579 | + 61, 34, | |
| 580 | + 277, 34, | |
| 581 | + 62, 34, | |
| 582 | + 60, 34, | |
| 583 | + 278, 34, | |
| 584 | + 279, 34, | |
| 585 | + 280, 34, | |
| 586 | + 43, 34, | |
| 587 | + 45, 34, | |
| 588 | + 42, 34, | |
| 589 | + 47, 34, | |
| 479 | 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 105 | |
| 482 | −# define YYLAST 318 | |
| 621 | +# define YYNPROD 103 | |
| 622 | +# define YYLAST 364 | |
| 483 | 623 | int yyact[]={ |
| 484 | 624 | |
| 485 | − 54, 52, 136, 53, 13, 55, 54, 52, 14, 53, | |
| 486 | − 15, 55, 5, 166, 18, 6, 129, 21, 47, 46, | |
| 487 | − 48, 107, 104, 97, 47, 46, 48, 54, 52, 80, | |
| 488 | − 53, 21, 55, 54, 52, 40, 53, 9, 55, 54, | |
| 489 | − 52, 158, 53, 160, 55, 47, 46, 48, 159, 101, | |
| 490 | − 81, 47, 46, 48, 10, 54, 52, 126, 53, 67, | |
| 491 | − 55, 54, 52, 60, 53, 155, 55, 148, 149, 135, | |
| 492 | − 147, 108, 150, 47, 46, 48, 73, 23, 75, 47, | |
| 493 | − 46, 48, 7, 25, 38, 153, 26, 164, 27, 117, | |
| 494 | − 61, 62, 74, 11, 76, 54, 24, 127, 65, 66, | |
| 495 | − 55, 37, 154, 151, 103, 111, 72, 28, 93, 94, | |
| 496 | − 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, | |
| 497 | − 92, 116, 59, 77, 54, 52, 118, 53, 99, 55, | |
| 498 | − 110, 95, 64, 44, 70, 109, 29, 33, 105, 106, | |
| 499 | − 42, 112, 41, 165, 139, 19, 17, 152, 79, 123, | |
| 500 | − 43, 119, 20, 114, 113, 98, 63, 144, 143, 122, | |
| 501 | − 68, 39, 36, 130, 35, 120, 12, 8, 102, 125, | |
| 502 | − 128, 141, 78, 69, 70, 71, 142, 131, 132, 140, | |
| 503 | − 22, 124, 4, 3, 2, 121, 96, 138, 146, 137, | |
| 504 | − 134, 157, 133, 115, 16, 1, 0, 0, 0, 0, | |
| 505 | − 0, 0, 0, 156, 0, 0, 0, 0, 161, 0, | |
| 506 | − 0, 0, 0, 162, 0, 0, 0, 168, 0, 172, | |
| 507 | − 145, 163, 171, 0, 174, 0, 0, 0, 169, 156, | |
| 508 | − 167, 170, 173, 57, 58, 49, 50, 51, 56, 57, | |
| 509 | − 58, 49, 50, 51, 56, 175, 0, 0, 100, 0, | |
| 510 | − 45, 0, 0, 0, 0, 70, 0, 0, 0, 0, | |
| 511 | − 57, 58, 49, 50, 51, 56, 57, 58, 49, 50, | |
| 512 | − 51, 56, 0, 0, 0, 0, 0, 56, 0, 0, | |
| 513 | − 0, 0, 0, 0, 0, 0, 0, 0, 57, 58, | |
| 514 | − 49, 50, 51, 56, 0, 0, 49, 50, 51, 56, | |
| 515 | − 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
| 516 | − 0, 0, 30, 0, 21, 31, 0, 34 }; | |
| 625 | + 58, 56, 22, 57, 132, 59, 58, 56, 137, 57, | |
| 626 | + 110, 59, 58, 56, 107, 57, 85, 59, 51, 50, | |
| 627 | + 52, 82, 23, 43, 51, 50, 52, 58, 56, 9, | |
| 628 | + 57, 157, 59, 58, 56, 165, 57, 5, 59, 162, | |
| 629 | + 6, 161, 104, 154, 155, 51, 50, 52, 64, 153, | |
| 630 | + 70, 51, 50, 52, 26, 58, 56, 127, 57, 10, | |
| 631 | + 59, 111, 25, 78, 27, 58, 56, 28, 57, 29, | |
| 632 | + 59, 131, 147, 51, 50, 52, 7, 65, 66, 115, | |
| 633 | + 150, 112, 63, 51, 50, 52, 68, 69, 31, 159, | |
| 634 | + 11, 79, 58, 76, 128, 73, 41, 59, 151, 87, | |
| 635 | + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, | |
| 636 | + 77, 114, 148, 40, 58, 56, 102, 57, 106, 59, | |
| 637 | + 117, 32, 72, 121, 116, 100, 80, 109, 67, 48, | |
| 638 | + 20, 36, 73, 30, 45, 73, 44, 118, 149, 84, | |
| 639 | + 17, 126, 18, 46, 21, 47, 120, 119, 101, 145, | |
| 640 | + 144, 125, 71, 123, 75, 39, 38, 12, 8, 108, | |
| 641 | + 105, 136, 83, 74, 135, 24, 4, 3, 139, 140, | |
| 642 | + 2, 81, 134, 141, 133, 130, 129, 42, 113, 16, | |
| 643 | + 1, 146, 124, 0, 143, 0, 0, 152, 0, 0, | |
| 644 | + 0, 86, 0, 0, 0, 0, 0, 13, 0, 0, | |
| 645 | + 160, 14, 0, 15, 164, 163, 0, 19, 167, 0, | |
| 646 | + 0, 23, 73, 0, 0, 0, 0, 0, 168, 166, | |
| 647 | + 158, 171, 173, 0, 0, 0, 169, 0, 0, 0, | |
| 648 | + 0, 0, 0, 61, 62, 53, 54, 55, 60, 61, | |
| 649 | + 62, 53, 54, 55, 60, 0, 0, 0, 0, 103, | |
| 650 | + 60, 49, 0, 98, 99, 0, 0, 0, 0, 0, | |
| 651 | + 61, 62, 53, 54, 55, 60, 61, 62, 53, 54, | |
| 652 | + 55, 60, 0, 0, 0, 0, 0, 0, 0, 0, | |
| 653 | + 0, 0, 35, 0, 0, 0, 0, 0, 61, 62, | |
| 654 | + 53, 54, 55, 60, 33, 122, 34, 23, 0, 0, | |
| 655 | + 53, 54, 55, 60, 0, 0, 37, 0, 0, 0, | |
| 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 }; | |
| 517 | 662 | int yypact[]={ |
| 518 | 663 | |
| 519 | − -1000, -258, -1000, -1000, -1000, -234, -1000, 34, -254, -1000, | |
| 520 | − -1000, -1000, -1000, 43, -1000, -1000, 40, -1000, -236, -1000, | |
| 521 | − -1000, -1000, 93, -9, -1000, 43, 43, 43, 92, -1000, | |
| 522 | − -1000, -1000, -1000, -1000, 43, 43, -1000, 43, -240, 62, | |
| 523 | − 31, -13, 48, 83, -242, -1000, 43, 43, 43, 43, | |
| 524 | − 43, 43, 43, 43, 43, 43, 43, -1000, -1000, 90, | |
| 525 | − 13, -1000, -1000, -248, 43, 19, -15, -216, -1000, 60, | |
| 526 | − -1000, -1000, -249, -1000, -1000, 43, -250, 43, 89, 61, | |
| 527 | − -1000, -1000, -3, -3, -3, -3, -3, -3, 53, 53, | |
| 528 | − -1000, -1000, 82, -1000, -1000, -1000, -2, -1000, 85, 13, | |
| 529 | − -1000, 43, -1000, -1000, 31, 43, -36, -1000, 56, 60, | |
| 530 | − -1000, -255, -1000, 43, 43, -1000, -269, -1000, -1000, -1000, | |
| 531 | − 13, 34, -1000, 43, -1000, 13, -1000, -1000, -1000, -1000, | |
| 532 | − -193, 19, 19, -53, 59, -1000, -1000, -8, 58, 43, | |
| 533 | − -1000, -1000, -1000, -1000, -226, -1000, -218, -223, -1000, 43, | |
| 534 | − -1000, -269, 26, -1000, -1000, -1000, 13, -253, 43, -1000, | |
| 535 | − -1000, -1000, -42, -1000, 43, 43, -1000, 34, -1000, 13, | |
| 536 | − -1000, -1000, -1000, -1000, -193, -1000 }; | |
| 664 | + -1000, -234, -1000, -1000, -1000, -244, -1000, 31, -62, -1000, | |
| 665 | + -1000, -1000, -1000, 24, -1000, -1000, 52, -1000, -1000, -250, | |
| 666 | + -1000, -1000, -1000, -1000, 89, -9, -1000, 24, 24, 24, | |
| 667 | + -1000, 88, -1000, -1000, -1000, -1000, -1000, 24, 24, -1000, | |
| 668 | + 24, -251, 49, -1000, -28, 45, 86, -252, -257, -1000, | |
| 669 | + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, | |
| 670 | + 24, -1000, -1000, 84, 13, -1000, -1000, 24, -1000, -15, | |
| 671 | + -224, -1000, 74, -1000, -1000, -1000, -259, 24, 24, -263, | |
| 672 | + 24, -12, -1000, 83, 76, -1000, -1000, -30, -30, -30, | |
| 673 | + -30, -30, -30, 50, 50, -1000, -1000, 72, -1000, -1000, | |
| 674 | + -1000, 82, 13, -1000, 24, -1000, -1000, -1000, 74, -36, | |
| 675 | + -1000, 53, 74, -1000, -269, 24, -1000, -265, -1000, 24, | |
| 676 | + 24, -1000, -1000, 13, 31, -1000, 24, -1000, -1000, -53, | |
| 677 | + 68, -1000, -1000, -13, 54, 13, -1000, -1000, -218, 23, | |
| 678 | + 23, -1000, -1000, -1000, -1000, -237, -1000, -1000, -269, 28, | |
| 679 | + -1000, 24, -226, -228, -1000, 24, -232, 24, -1000, 24, | |
| 680 | + 13, -1000, -1000, -1000, -42, -1000, 31, 13, -1000, -1000, | |
| 681 | + -1000, -1000, -218, -1000 }; | |
| 537 | 682 | int yypgo[]={ |
| 538 | 683 | |
| 539 | − 0, 195, 50, 96, 71, 135, 194, 193, 192, 190, | |
| 540 | − 189, 187, 136, 186, 184, 82, 54, 183, 182, 180, | |
| 541 | − 172, 170, 59, 168, 167, 166, 63, 70, 164, 162, | |
| 542 | − 137, 161, 160, 159, 158, 157, 156, 155, 154, 153, | |
| 543 | − 152, 150, 149, 148, 69, 147, 144, 65, 143, 142, | |
| 544 | − 140, 76, 138 }; | |
| 684 | + 0, 180, 191, 54, 61, 81, 179, 133, 178, 177, | |
| 685 | + 176, 175, 174, 172, 121, 171, 170, 76, 59, 167, | |
| 686 | + 166, 165, 162, 161, 50, 160, 158, 157, 48, 49, | |
| 687 | + 156, 155, 131, 154, 152, 151, 150, 149, 148, 147, | |
| 688 | + 146, 145, 144, 143, 141, 139, 71, 138, 136, 134 }; | |
| 545 | 689 | int yyr1[]={ |
| 546 | 690 | |
| 547 | − 0, 1, 14, 1, 1, 1, 19, 21, 17, 23, | |
| 548 | − 23, 24, 15, 16, 16, 25, 28, 25, 29, 25, | |
| 549 | − 25, 25, 25, 27, 27, 27, 32, 33, 22, 34, | |
| 550 | − 35, 34, 2, 26, 3, 3, 3, 3, 3, 3, | |
| 551 | − 3, 3, 3, 3, 3, 3, 3, 3, 36, 3, | |
| 552 | − 3, 3, 3, 3, 3, 3, 3, 38, 3, 39, | |
| 553 | − 3, 37, 37, 41, 30, 40, 4, 4, 5, 42, | |
| 554 | − 5, 20, 20, 43, 43, 13, 13, 7, 7, 8, | |
| 555 | − 8, 9, 9, 45, 44, 10, 10, 46, 11, 48, | |
| 556 | − 11, 47, 6, 6, 12, 49, 12, 50, 12, 31, | |
| 557 | − 31, 51, 52, 51, 18 }; | |
| 691 | + 0, 1, 16, 1, 1, 1, 21, 23, 19, 25, | |
| 692 | + 25, 26, 17, 18, 18, 27, 30, 27, 31, 27, | |
| 693 | + 27, 27, 27, 27, 29, 29, 29, 34, 35, 24, | |
| 694 | + 36, 37, 36, 2, 28, 3, 3, 3, 3, 3, | |
| 695 | + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, | |
| 696 | + 3, 3, 3, 3, 3, 3, 3, 39, 3, 40, | |
| 697 | + 3, 41, 7, 38, 38, 43, 32, 42, 4, 4, | |
| 698 | + 5, 44, 5, 22, 22, 45, 45, 15, 15, 8, | |
| 699 | + 8, 10, 10, 11, 11, 47, 46, 12, 12, 13, | |
| 700 | + 13, 6, 6, 14, 48, 14, 49, 14, 9, 9, | |
| 701 | + 33, 33, 20 }; | |
| 558 | 702 | int yyr2[]={ |
| 559 | 703 | |
| 560 | 704 | 0, 0, 1, 9, 4, 4, 1, 1, 19, 0, |
| 561 | 705 | 6, 1, 4, 0, 2, 17, 1, 17, 1, 13, |
| 562 | − 7, 3, 4, 0, 4, 15, 1, 1, 9, 0, | |
| 563 | − 1, 9, 1, 3, 7, 7, 7, 7, 7, 7, | |
| 564 | − 7, 7, 7, 7, 7, 7, 5, 5, 1, 9, | |
| 706 | + 7, 3, 3, 7, 0, 4, 15, 1, 1, 9, | |
| 707 | + 0, 1, 9, 1, 3, 7, 7, 7, 7, 7, | |
| 708 | + 7, 7, 7, 7, 7, 7, 7, 5, 5, 3, | |
| 565 | 709 | 9, 3, 3, 3, 3, 3, 5, 1, 11, 1, |
| 566 | − 11, 1, 2, 1, 11, 3, 1, 3, 3, 1, | |
| 567 | − 9, 0, 2, 3, 7, 1, 3, 7, 7, 1, | |
| 568 | − 3, 3, 7, 1, 9, 1, 3, 1, 5, 1, | |
| 569 | − 9, 3, 3, 7, 3, 1, 11, 1, 9, 5, | |
| 570 | − 9, 1, 1, 6, 3 }; | |
| 710 | + 11, 1, 9, 1, 2, 1, 11, 3, 1, 3, | |
| 711 | + 3, 1, 9, 0, 2, 3, 7, 1, 3, 7, | |
| 712 | + 7, 1, 3, 3, 7, 1, 9, 1, 3, 3, | |
| 713 | + 7, 3, 7, 3, 1, 11, 1, 9, 3, 7, | |
| 714 | + 0, 4, 3 }; | |
| 571 | 715 | int yychk[]={ |
| 572 | 716 | |
| 573 | − -1000, -1, -14, -17, -18, 270, 273, -15, -24, 271, | |
| 574 | − -16, 59, -25, 258, 262, 264, -6, -30, 268, -12, | |
| 575 | − -40, 271, -19, -26, -3, 40, 43, 45, 64, -12, | |
| 576 | − 269, 272, 257, -30, 274, -28, -29, 61, 44, -31, | |
| 577 | − 271, -49, -50, -41, 40, 259, 61, 60, 62, 277, | |
| 578 | − 278, 279, 43, 45, 42, 47, 280, 275, 276, -3, | |
| 579 | − -26, -26, -26, -36, 40, -26, -26, -22, -32, -5, | |
| 580 | − -3, -12, 44, -51, 61, 91, 46, 40, -20, -43, | |
| 581 | − 271, -2, -26, -26, -26, -26, -26, -26, -26, -26, | |
| 582 | − -26, -26, -26, -2, -2, 41, -13, 271, -37, -26, | |
| 583 | − 263, 265, -23, 44, 271, -52, -26, 271, -4, -5, | |
| 584 | − 41, 44, -22, -38, -39, -7, 123, 91, 41, -2, | |
| 585 | − -26, -15, -33, -42, -51, -26, 93, 41, -21, 271, | |
| 586 | − -2, -26, -26, -8, -9, -44, 271, -10, -11, -46, | |
| 587 | − -22, -2, -16, -34, -35, -3, -22, -27, 260, 261, | |
| 588 | − 125, 44, -45, 93, 44, -47, -26, -2, 267, 266, | |
| 589 | − 266, -22, -26, -44, 61, -48, 266, -4, 259, -26, | |
| 590 | − -47, -16, -2, -22, -2, -27 }; | |
| 717 | + -1000, -1, -16, -19, -20, 271, 274, -17, -26, 273, | |
| 718 | + -18, 59, -27, 259, 263, 265, -6, -32, -7, 269, | |
| 719 | + -14, -42, 64, 273, -21, -28, -3, 40, 43, 45, | |
| 720 | + -7, 64, -14, 270, 272, 258, -32, 282, -30, -31, | |
| 721 | + 61, 44, -9, 273, -48, -49, -43, -41, 40, 260, | |
| 722 | + 61, 60, 62, 277, 278, 279, 43, 45, 42, 47, | |
| 723 | + 280, 275, 276, -3, -28, -28, -28, 40, -28, -28, | |
| 724 | + -24, -34, -5, -3, -14, -33, 44, 61, 91, 46, | |
| 725 | + 40, -15, 273, -22, -45, 273, -2, -28, -28, -28, | |
| 726 | + -28, -28, -28, -28, -28, -28, -28, -28, -2, -2, | |
| 727 | + 41, -38, -28, 264, 266, -25, 44, 273, -5, -28, | |
| 728 | + 273, -4, -5, -8, 123, 91, 41, 44, -24, -39, | |
| 729 | + -40, 41, -2, -28, -17, -35, -44, 93, 41, -10, | |
| 730 | + -11, -46, 273, -12, -13, -28, -23, 273, -2, -28, | |
| 731 | + -28, -24, -2, -18, -36, -37, -3, 125, 44, -47, | |
| 732 | + 93, 44, -24, -29, 261, 262, -2, 268, -46, 61, | |
| 733 | + -28, 267, 267, -24, -28, 267, -4, -28, 260, -18, | |
| 734 | + -2, -24, -2, -29 }; | |
| 591 | 735 | int yydef[]={ |
| 592 | 736 | |
| 593 | − 1, -2, 11, 4, 5, 0, 104, 13, 0, 6, | |
| 594 | − 3, 14, 12, 0, 16, 18, 0, 21, 0, -2, | |
| 595 | − 63, 94, 0, 0, 33, 0, 0, 0, 48, -2, | |
| 596 | − 52, 53, 54, 55, 0, 0, 26, 0, 0, 22, | |
| 597 | − 101, 0, 0, 0, 71, 32, 0, 0, 0, 0, | |
| 598 | − 0, 0, 0, 0, 0, 0, 0, 32, 32, 33, | |
| 599 | − 0, 46, 47, 75, 61, 56, 0, 0, 9, 20, | |
| 600 | − -2, -2, 0, 99, 102, 0, 0, 66, 0, 72, | |
| 601 | − 73, 26, 35, 36, 37, 38, 39, 40, 41, 42, | |
| 602 | − 43, 44, 45, 57, 59, 34, 0, 76, 0, 62, | |
| 603 | − 32, 0, -2, 69, 101, 0, 0, 98, 0, 67, | |
| 604 | − 7, 0, 32, 0, 0, 49, 79, -2, 50, 26, | |
| 605 | − 32, 13, -2, 0, 100, 103, 96, 64, 26, 74, | |
| 606 | − 23, 58, 60, 0, 80, 81, 83, 0, 86, 0, | |
| 607 | − 32, 19, 10, 28, 0, -2, 0, 0, 26, 0, | |
| 608 | − 77, 0, 0, 78, 89, 88, 91, 0, 66, 8, | |
| 609 | − 15, 24, 0, 82, 0, 0, 17, 13, 32, 84, | |
| 610 | − 90, 31, 26, 32, 23, 25 }; | |
| 737 | + 1, -2, 11, 4, 5, 0, 102, 13, 0, 6, | |
| 738 | + 3, 14, 12, 0, 16, 18, 0, 21, 22, 0, | |
| 739 | + -2, 65, 61, 93, 0, 0, 34, 0, 0, 0, | |
| 740 | + 49, 61, -2, 52, 53, 54, 55, 0, 0, 27, | |
| 741 | + 0, 0, 100, 98, 0, 0, 0, 77, 73, 33, | |
| 742 | + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
| 743 | + 0, 33, 33, 34, 0, 47, 48, 63, 56, 0, | |
| 744 | + 0, 9, 20, -2, -2, 23, 0, 0, 0, 0, | |
| 745 | + 68, 0, 78, 0, 74, 75, 27, 36, 37, 38, | |
| 746 | + 39, 40, 41, 42, 43, 44, 45, 46, 57, 59, | |
| 747 | + 35, 0, 64, 33, 0, -2, 71, 99, 101, 0, | |
| 748 | + 97, 0, 69, 62, 81, 87, 7, 0, 33, 0, | |
| 749 | + 0, 50, 27, 33, 13, -2, 0, 95, 66, 0, | |
| 750 | + 82, 83, 85, 0, 88, 89, 27, 76, 24, 58, | |
| 751 | + 60, 33, 19, 10, 29, 0, -2, 79, 0, 0, | |
| 752 | + 80, 0, 0, 0, 27, 0, 0, 68, 84, 0, | |
| 753 | + 90, 8, 15, 25, 0, 17, 13, 86, 33, 32, | |
| 754 | + 27, 33, 24, 26 }; | |
| 611 | 755 | typedef struct { char *t_name; int t_val; } yytoktype; |
| 612 | 756 | #ifndef YYDEBUG |
| 613 | 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 | |
| 618 | 762 | yytoktype yytoks[] = |
| 619 | 763 | { |
| 620 | − "NIL", 257, | |
| 621 | − "IF", 258, | |
| 622 | − "THEN", 259, | |
| 623 | − "ELSE", 260, | |
| 624 | − "ELSEIF", 261, | |
| 625 | − "WHILE", 262, | |
| 626 | − "DO", 263, | |
| 627 | − "REPEAT", 264, | |
| 628 | − "UNTIL", 265, | |
| 629 | − "END", 266, | |
| 630 | − "RETURN", 267, | |
| 631 | − "LOCAL", 268, | |
| 632 | − "NUMBER", 269, | |
| 633 | − "FUNCTION", 270, | |
| 634 | − "NAME", 271, | |
| 764 | + "WRONGTOKEN", 257, | |
| 765 | + "NIL", 258, | |
| 766 | + "IF", 259, | |
| 767 | + "THEN", 260, | |
| 768 | + "ELSE", 261, | |
| 769 | + "ELSEIF", 262, | |
| 770 | + "WHILE", 263, | |
| 771 | + "DO", 264, | |
| 772 | + "REPEAT", 265, | |
| 773 | + "UNTIL", 266, | |
| 774 | + "END", 267, | |
| 775 | + "RETURN", 268, | |
| 776 | + "LOCAL", 269, | |
| 777 | + "NUMBER", 270, | |
| 778 | + "FUNCTION", 271, | |
| 635 | 779 | "STRING", 272, |
| 636 | − "DEBUG", 273, | |
| 637 | − "NOT", 274, | |
| 780 | + "NAME", 273, | |
| 781 | + "DEBUG", 274, | |
| 638 | 782 | "AND", 275, |
| 639 | 783 | "OR", 276, |
| 640 | 784 | "=", 61, |
| @@ -648,8 +792,8 @@ yytoktype yytoks[] = · 7 unmodified lines | ||
| 648 | 792 | "-", 45, |
| 649 | 793 | "*", 42, |
| 650 | 794 | "/", 47, |
| 651 | − "%", 37, | |
| 652 | 795 | "UNARY", 281, |
| 796 | + "NOT", 282, | |
| 653 | 797 | "-unknown-", -1 /* ends search */ |
| 654 | 798 | }; |
| 655 | 799 | |
| @@ -677,7 +821,8 @@ char * yyreds[] = · 21 unmodified lines | ||
| 677 | 821 | "stat1 : REPEAT block UNTIL expr1 PrepJump", |
| 678 | 822 | "stat1 : varlist1 '=' exprlist1", |
| 679 | 823 | "stat1 : functioncall", |
| 680 | − "stat1 : LOCAL declist", | |
| 824 | + "stat1 : typeconstructor", | |
| 825 | + "stat1 : LOCAL localdeclist decinit", | |
| 681 | 826 | "elsepart : /* empty */", |
| 682 | 827 | "elsepart : ELSE block", |
| 683 | 828 | "elsepart : ELSEIF expr1 THEN PrepJump block PrepJump elsepart", |
| @@ -703,8 +848,7 @@ char * yyreds[] = · 19 unmodified lines | ||
| 703 | 848 | "expr : expr1 CONC expr1", |
| 704 | 849 | "expr : '+' expr1", |
| 705 | 850 | "expr : '-' expr1", |
| 706 | − "expr : '@'", | |
| 707 | − "expr : '@' objectname fieldlist", | |
| 851 | + "expr : typeconstructor", | |
| 708 | 852 | "expr : '@' '(' dimension ')'", |
| 709 | 853 | "expr : var", |
| 710 | 854 | "expr : NUMBER", |
| @@ -716,6 +860,8 @@ char * yyreds[] = · 5 unmodified lines | ||
| 716 | 860 | "expr : expr1 AND PrepJump expr1", |
| 717 | 861 | "expr : expr1 OR PrepJump", |
| 718 | 862 | "expr : expr1 OR PrepJump expr1", |
| 863 | + "typeconstructor : '@'", | |
| 864 | + "typeconstructor : '@' objectname fieldlist", | |
| 719 | 865 | "dimension : /* empty */", |
| 720 | 866 | "dimension : expr1", |
| 721 | 867 | "functioncall : functionvalue", |
| @@ -742,11 +888,8 @@ char * yyreds[] = · 20 unmodified lines | ||
| 742 | 888 | "ffield : NAME '=' expr1", |
| 743 | 889 | "lfieldlist : /* empty */", |
| 744 | 890 | "lfieldlist : lfieldlist1", |
| 745 | − "lfieldlist1 : /* empty */", | |
| 746 | − "lfieldlist1 : lfield", | |
| 747 | − "lfieldlist1 : lfieldlist1 ','", | |
| 748 | − "lfieldlist1 : lfieldlist1 ',' lfield", | |
| 749 | − "lfield : expr1", | |
| 891 | + "lfieldlist1 : expr1", | |
| 892 | + "lfieldlist1 : lfieldlist1 ',' expr1", | |
| 750 | 893 | "varlist1 : var", |
| 751 | 894 | "varlist1 : varlist1 ',' var", |
| 752 | 895 | "var : NAME", |
| @@ -754,11 +897,10 @@ char * yyreds[] = · 1 unmodified line | ||
| 754 | 897 | "var : var '[' expr1 ']'", |
| 755 | 898 | "var : var", |
| 756 | 899 | "var : var '.' NAME", |
| 757 | − "declist : NAME init", | |
| 758 | − "declist : declist ',' NAME init", | |
| 759 | − "init : /* empty */", | |
| 760 | − "init : '='", | |
| 761 | − "init : '=' expr1", | |
| 900 | + "localdeclist : NAME", | |
| 901 | + "localdeclist : localdeclist ',' NAME", | |
| 902 | + "decinit : /* empty */", | |
| 903 | + "decinit : '=' exprlist1", | |
| 762 | 904 | "setdebug : DEBUG", |
| 763 | 905 | }; |
| 764 | 906 | #endif /* YYDEBUG */ |
| @@ -1203,87 +1345,113 @@ yyparse() · 438 unmodified lines | ||
| 1203 | 1345 | { |
| 1204 | 1346 | |
| 1205 | 1347 | case 2: |
| 1206 | −# line 179 "lua.stx" | |
| 1207 | −{pc=basepc=maincode; nlocalvar=0;} break; | |
| 1348 | +# line 227 "lua.stx" | |
| 1349 | +{ | |
| 1350 | + pc=maincode; basepc=initcode; maxcurr=maxmain; | |
| 1351 | + nlocalvar=0; | |
| 1352 | + } break; | |
| 1208 | 1353 | case 3: |
| 1209 | −# line 179 "lua.stx" | |
| 1210 | −{maincode=pc;} break; | |
| 1354 | +# line 232 "lua.stx" | |
| 1355 | +{ | |
| 1356 | + maincode=pc; initcode=basepc; maxmain=maxcurr; | |
| 1357 | + } break; | |
| 1211 | 1358 | case 6: |
| 1212 | −# line 184 "lua.stx" | |
| 1213 | −{pc=basepc=code; nlocalvar=0;} break; | |
| 1359 | +# line 240 "lua.stx" | |
| 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; | |
| 1214 | 1375 | case 7: |
| 1215 | −# line 185 "lua.stx" | |
| 1376 | +# line 256 "lua.stx" | |
| 1216 | 1377 | { |
| 1217 | 1378 | if (lua_debug) |
| 1218 | 1379 | { |
| 1219 | − align(Word); | |
| 1220 | 1380 | code_byte(SETFUNCTION); |
| 1221 | − code_word(yypvt[-5].vWord); | |
| 1222 | − code_word(yypvt[-4].vWord); | |
| 1381 | + code_word(lua_nfile-1); | |
| 1382 | + code_word(yypvt[-3].vWord); | |
| 1223 | 1383 | } |
| 1224 | 1384 | lua_codeadjust (0); |
| 1225 | 1385 | } break; |
| 1226 | 1386 | case 8: |
| 1227 | −# line 197 "lua.stx" | |
| 1387 | +# line 267 "lua.stx" | |
| 1228 | 1388 | { |
| 1229 | 1389 | if (lua_debug) code_byte(RESET); |
| 1230 | 1390 | code_byte(RETCODE); code_byte(nlocalvar); |
| 1231 | − s_tag(yypvt[-7].vWord) = T_FUNCTION; | |
| 1232 | − s_bvalue(yypvt[-7].vWord) = calloc (pc-code, sizeof(Byte)); | |
| 1233 | − memcpy (s_bvalue(yypvt[-7].vWord), code, (pc-code)*sizeof(Byte)); | |
| 1391 | + s_tag(yypvt[-6].vWord) = T_FUNCTION; | |
| 1392 | + s_bvalue(yypvt[-6].vWord) = calloc (pc, 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 | |
| 1401 | +PrintCode(code,code+pc); | |
| 1402 | +#endif | |
| 1234 | 1403 | } break; |
| 1235 | 1404 | case 11: |
| 1236 | −# line 210 "lua.stx" | |
| 1405 | +# line 289 "lua.stx" | |
| 1237 | 1406 | { |
| 1238 | 1407 | ntemp = 0; |
| 1239 | 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 | 1412 | } break; |
| 1244 | 1413 | case 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 | 1418 | if (pc - elseinit == 0) /* no else */ |
| 1250 | 1419 | { |
| 1251 | 1420 | pc -= sizeof(Word)+1; |
| 1252 | − /* if (*(pc-1) == NOP) --pc; */ | |
| 1253 | 1421 | elseinit = pc; |
| 1254 | 1422 | } |
| 1255 | 1423 | else |
| 1256 | 1424 | { |
| 1257 | − *(yypvt[-2].pByte) = JMP; | |
| 1258 | − *((Word *)(yypvt[-2].pByte+1)) = pc - elseinit; | |
| 1425 | + basepc[yypvt[-2].vWord] = JMP; | |
| 1426 | + code_word_at(basepc+yypvt[-2].vWord+1, pc - elseinit); | |
| 1259 | 1427 | } |
| 1260 | − *(yypvt[-4].pByte) = IFFJMP; | |
| 1261 | − *((Word *)(yypvt[-4].pByte+1)) = elseinit - (yypvt[-4].pByte + sizeof(Word)+1); | |
| 1428 | + basepc[yypvt[-4].vWord] = IFFJMP; | |
| 1429 | + code_word_at(basepc+yypvt[-4].vWord+1,elseinit-(yypvt[-4].vWord+sizeof(Word)+1)); | |
| 1262 | 1430 | } |
| 1263 | 1431 | } break; |
| 1264 | 1432 | case 16: |
| 1265 | −# line 242 "lua.stx" | |
| 1266 | −{yyval.pByte = pc;} break; | |
| 1433 | +# line 320 "lua.stx" | |
| 1434 | +{yyval.vWord=pc;} break; | |
| 1267 | 1435 | case 17: |
| 1268 | −# line 244 "lua.stx" | |
| 1436 | +# line 322 "lua.stx" | |
| 1269 | 1437 | { |
| 1270 | − *(yypvt[-3].pByte) = IFFJMP; | |
| 1271 | − *((Word *)(yypvt[-3].pByte+1)) = pc - (yypvt[-3].pByte + sizeof(Word)+1); | |
| 1438 | + basepc[yypvt[-3].vWord] = IFFJMP; | |
| 1439 | + code_word_at(basepc+yypvt[-3].vWord+1, pc - (yypvt[-3].vWord + sizeof(Word)+1)); | |
| 1272 | 1440 | |
| 1273 | − *(yypvt[-1].pByte) = UPJMP; | |
| 1274 | − *((Word *)(yypvt[-1].pByte+1)) = pc - yypvt[-6].pByte; | |
| 1441 | + basepc[yypvt[-1].vWord] = UPJMP; | |
| 1442 | + code_word_at(basepc+yypvt[-1].vWord+1, pc - (yypvt[-6].vWord)); | |
| 1275 | 1443 | } break; |
| 1276 | 1444 | case 18: |
| 1277 | −# line 252 "lua.stx" | |
| 1278 | −{yyval.pByte = pc;} break; | |
| 1445 | +# line 330 "lua.stx" | |
| 1446 | +{yyval.vWord=pc;} break; | |
| 1279 | 1447 | case 19: |
| 1280 | −# line 254 "lua.stx" | |
| 1448 | +# line 332 "lua.stx" | |
| 1281 | 1449 | { |
| 1282 | − *(yypvt[-0].pByte) = IFFUPJMP; | |
| 1283 | − *((Word *)(yypvt[-0].pByte+1)) = pc - yypvt[-4].pByte; | |
| 1450 | + basepc[yypvt[-0].vWord] = IFFUPJMP; | |
| 1451 | + code_word_at(basepc+yypvt[-0].vWord+1, pc - (yypvt[-4].vWord)); | |
| 1284 | 1452 | } break; |
| 1285 | 1453 | case 20: |
| 1286 | −# line 261 "lua.stx" | |
| 1454 | +# line 339 "lua.stx" | |
| 1287 | 1455 | { |
| 1288 | 1456 | { |
| 1289 | 1457 | int i; |
| @@ -1296,36 +1464,41 @@ case 20: · 6 unmodified lines | ||
| 1296 | 1464 | } |
| 1297 | 1465 | } break; |
| 1298 | 1466 | case 21: |
| 1299 | −# line 272 "lua.stx" | |
| 1467 | +# line 350 "lua.stx" | |
| 1300 | 1468 | { lua_codeadjust (0); } break; |
| 1301 | −case 25: | |
| 1302 | −# line 279 "lua.stx" | |
| 1469 | +case 22: | |
| 1470 | +# line 351 "lua.stx" | |
| 1471 | +{ lua_codeadjust (0); } break; | |
| 1472 | +case 23: | |
| 1473 | +# line 352 "lua.stx" | |
| 1474 | +{ add_nlocalvar(yypvt[-1].vInt); lua_codeadjust (0); } break; | |
| 1475 | +case 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 | 1480 | if (pc - elseinit == 0) /* no else */ |
| 1307 | 1481 | { |
| 1308 | 1482 | pc -= sizeof(Word)+1; |
| 1309 | − /* if (*(pc-1) == NOP) --pc; */ | |
| 1310 | 1483 | elseinit = pc; |
| 1311 | 1484 | } |
| 1312 | 1485 | else |
| 1313 | 1486 | { |
| 1314 | − *(yypvt[-1].pByte) = JMP; | |
| 1315 | − *((Word *)(yypvt[-1].pByte+1)) = pc - elseinit; | |
| 1487 | + basepc[yypvt[-1].vWord] = JMP; | |
| 1488 | + code_word_at(basepc+yypvt[-1].vWord+1, pc - elseinit); | |
| 1316 | 1489 | } |
| 1317 | − *(yypvt[-3].pByte) = IFFJMP; | |
| 1318 | − *((Word *)(yypvt[-3].pByte+1)) = elseinit - (yypvt[-3].pByte + sizeof(Word)+1); | |
| 1490 | + basepc[yypvt[-3].vWord] = IFFJMP; | |
| 1491 | + code_word_at(basepc+yypvt[-3].vWord+1, elseinit - (yypvt[-3].vWord + sizeof(Word)+1)); | |
| 1319 | 1492 | } |
| 1320 | 1493 | } break; |
| 1321 | −case 26: | |
| 1322 | −# line 299 "lua.stx" | |
| 1323 | −{yyval.vInt = nlocalvar;} break; | |
| 1324 | 1494 | case 27: |
| 1325 | −# line 299 "lua.stx" | |
| 1326 | −{ntemp = 0;} break; | |
| 1495 | +# line 377 "lua.stx" | |
| 1496 | +{yyval.vInt = nlocalvar;} break; | |
| 1327 | 1497 | case 28: |
| 1328 | −# line 300 "lua.stx" | |
| 1498 | +# line 377 "lua.stx" | |
| 1499 | +{ntemp = 0;} break; | |
| 1500 | +case 29: | |
| 1501 | +# line 378 "lua.stx" | |
| 1329 | 1502 | { |
| 1330 | 1503 | if (nlocalvar != yypvt[-3].vInt) |
| 1331 | 1504 | { |
| @@ -1333,306 +1506,305 @@ case 28: · 1 unmodified line | ||
| 1333 | 1506 | lua_codeadjust (0); |
| 1334 | 1507 | } |
| 1335 | 1508 | } break; |
| 1336 | −case 30: | |
| 1337 | −# line 310 "lua.stx" | |
| 1338 | −{ if (lua_debug){align(Word);code_byte(SETLINE);code_word(lua_linenumber);}} break; | |
| 1339 | 1509 | case 31: |
| 1340 | −# line 312 "lua.stx" | |
| 1510 | +# line 388 "lua.stx" | |
| 1511 | +{ if (lua_debug){code_byte(SETLINE);code_word(lua_linenumber);}} break; | |
| 1512 | +case 32: | |
| 1513 | +# line 390 "lua.stx" | |
| 1341 | 1514 | { |
| 1342 | 1515 | if (lua_debug) code_byte(RESET); |
| 1343 | 1516 | code_byte(RETCODE); code_byte(nlocalvar); |
| 1344 | 1517 | } break; |
| 1345 | −case 32: | |
| 1346 | −# line 319 "lua.stx" | |
| 1518 | +case 33: | |
| 1519 | +# line 397 "lua.stx" | |
| 1347 | 1520 | { |
| 1348 | − align(Word); | |
| 1349 | − yyval.pByte = pc; | |
| 1521 | + yyval.vWord = pc; | |
| 1350 | 1522 | code_byte(0); /* open space */ |
| 1351 | 1523 | code_word (0); |
| 1352 | 1524 | } break; |
| 1353 | −case 33: | |
| 1354 | −# line 326 "lua.stx" | |
| 1355 | −{ if (yypvt[-0].vInt == 0) {lua_codeadjust (ntemp+1); incr_ntemp();}} break; | |
| 1356 | 1525 | case 34: |
| 1357 | −# line 329 "lua.stx" | |
| 1358 | −{ yyval.vInt = yypvt[-1].vInt; } break; | |
| 1526 | +# line 403 "lua.stx" | |
| 1527 | +{ if (yypvt[-0].vInt == 0) {lua_codeadjust (ntemp+1); incr_ntemp();}} break; | |
| 1359 | 1528 | case 35: |
| 1360 | −# line 330 "lua.stx" | |
| 1361 | −{ code_byte(EQOP); yyval.vInt = 1; ntemp--;} break; | |
| 1529 | +# line 406 "lua.stx" | |
| 1530 | +{ yyval.vInt = yypvt[-1].vInt; } break; | |
| 1362 | 1531 | case 36: |
| 1363 | −# line 331 "lua.stx" | |
| 1364 | −{ code_byte(LTOP); yyval.vInt = 1; ntemp--;} break; | |
| 1532 | +# line 407 "lua.stx" | |
| 1533 | +{ code_byte(EQOP); yyval.vInt = 1; ntemp--;} break; | |
| 1365 | 1534 | case 37: |
| 1366 | −# line 332 "lua.stx" | |
| 1367 | −{ code_byte(LEOP); code_byte(NOTOP); yyval.vInt = 1; ntemp--;} break; | |
| 1535 | +# line 408 "lua.stx" | |
| 1536 | +{ code_byte(LTOP); yyval.vInt = 1; ntemp--;} break; | |
| 1368 | 1537 | case 38: |
| 1369 | −# line 333 "lua.stx" | |
| 1370 | −{ code_byte(EQOP); code_byte(NOTOP); yyval.vInt = 1; ntemp--;} break; | |
| 1538 | +# line 409 "lua.stx" | |
| 1539 | +{ code_byte(LEOP); code_byte(NOTOP); yyval.vInt = 1; ntemp--;} break; | |
| 1371 | 1540 | case 39: |
| 1372 | −# line 334 "lua.stx" | |
| 1373 | −{ code_byte(LEOP); yyval.vInt = 1; ntemp--;} break; | |
| 1541 | +# line 410 "lua.stx" | |
| 1542 | +{ code_byte(EQOP); code_byte(NOTOP); yyval.vInt = 1; ntemp--;} break; | |
| 1374 | 1543 | case 40: |
| 1375 | −# line 335 "lua.stx" | |
| 1376 | −{ code_byte(LTOP); code_byte(NOTOP); yyval.vInt = 1; ntemp--;} break; | |
| 1544 | +# line 411 "lua.stx" | |
| 1545 | +{ code_byte(LEOP); yyval.vInt = 1; ntemp--;} break; | |
| 1377 | 1546 | case 41: |
| 1378 | −# line 336 "lua.stx" | |
| 1379 | −{ code_byte(ADDOP); yyval.vInt = 1; ntemp--;} break; | |
| 1547 | +# line 412 "lua.stx" | |
| 1548 | +{ code_byte(LTOP); code_byte(NOTOP); yyval.vInt = 1; ntemp--;} break; | |
| 1380 | 1549 | case 42: |
| 1381 | −# line 337 "lua.stx" | |
| 1382 | −{ code_byte(SUBOP); yyval.vInt = 1; ntemp--;} break; | |
| 1550 | +# line 413 "lua.stx" | |
| 1551 | +{ code_byte(ADDOP); yyval.vInt = 1; ntemp--;} break; | |
| 1383 | 1552 | case 43: |
| 1384 | −# line 338 "lua.stx" | |
| 1385 | −{ code_byte(MULTOP); yyval.vInt = 1; ntemp--;} break; | |
| 1553 | +# line 414 "lua.stx" | |
| 1554 | +{ code_byte(SUBOP); yyval.vInt = 1; ntemp--;} break; | |
| 1386 | 1555 | case 44: |
| 1387 | −# line 339 "lua.stx" | |
| 1388 | −{ code_byte(DIVOP); yyval.vInt = 1; ntemp--;} break; | |
| 1556 | +# line 415 "lua.stx" | |
| 1557 | +{ code_byte(MULTOP); yyval.vInt = 1; ntemp--;} break; | |
| 1389 | 1558 | case 45: |
| 1390 | −# line 340 "lua.stx" | |
| 1391 | −{ code_byte(CONCOP); yyval.vInt = 1; ntemp--;} break; | |
| 1559 | +# line 416 "lua.stx" | |
| 1560 | +{ code_byte(DIVOP); yyval.vInt = 1; ntemp--;} break; | |
| 1392 | 1561 | case 46: |
| 1393 | −# line 341 "lua.stx" | |
| 1394 | −{ yyval.vInt = 1; } break; | |
| 1562 | +# line 417 "lua.stx" | |
| 1563 | +{ code_byte(CONCOP); yyval.vInt = 1; ntemp--;} break; | |
| 1395 | 1564 | case 47: |
| 1396 | −# line 342 "lua.stx" | |
| 1397 | −{ code_byte(MINUSOP); yyval.vInt = 1;} break; | |
| 1565 | +# line 418 "lua.stx" | |
| 1566 | +{ yyval.vInt = 1; } break; | |
| 1398 | 1567 | case 48: |
| 1399 | −# line 344 "lua.stx" | |
| 1400 | −{ | |
| 1401 | − code_byte(PUSHBYTE); | |
| 1402 | − yyval.pByte = pc; code_byte(0); | |
| 1403 | − incr_ntemp(); | |
| 1404 | − code_byte(CREATEARRAY); | |
| 1405 | − } break; | |
| 1568 | +# line 419 "lua.stx" | |
| 1569 | +{ code_byte(MINUSOP); yyval.vInt = 1;} break; | |
| 1406 | 1570 | case 49: |
| 1407 | −# line 351 "lua.stx" | |
| 1408 | −{ | |
| 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; | |
| 1571 | +# line 420 "lua.stx" | |
| 1572 | +{ yyval.vInt = yypvt[-0].vInt; } break; | |
| 1430 | 1573 | case 50: |
| 1431 | −# line 374 "lua.stx" | |
| 1574 | +# line 422 "lua.stx" | |
| 1432 | 1575 | { |
| 1433 | 1576 | code_byte(CREATEARRAY); |
| 1434 | 1577 | yyval.vInt = 1; |
| 1435 | 1578 | } break; |
| 1436 | 1579 | case 51: |
| 1437 | −# line 378 "lua.stx" | |
| 1580 | +# line 426 "lua.stx" | |
| 1438 | 1581 | { lua_pushvar (yypvt[-0].vLong); yyval.vInt = 1;} break; |
| 1439 | 1582 | case 52: |
| 1440 | −# line 379 "lua.stx" | |
| 1583 | +# line 427 "lua.stx" | |
| 1441 | 1584 | { code_number(yypvt[-0].vFloat); yyval.vInt = 1; } break; |
| 1442 | 1585 | case 53: |
| 1443 | −# line 381 "lua.stx" | |
| 1586 | +# line 429 "lua.stx" | |
| 1444 | 1587 | { |
| 1445 | − align(Word); | |
| 1446 | 1588 | code_byte(PUSHSTRING); |
| 1447 | 1589 | code_word(yypvt[-0].vWord); |
| 1448 | 1590 | yyval.vInt = 1; |
| 1449 | 1591 | incr_ntemp(); |
| 1450 | 1592 | } break; |
| 1451 | 1593 | case 54: |
| 1452 | −# line 388 "lua.stx" | |
| 1594 | +# line 435 "lua.stx" | |
| 1453 | 1595 | {code_byte(PUSHNIL); yyval.vInt = 1; incr_ntemp();} break; |
| 1454 | 1596 | case 55: |
| 1455 | −# line 390 "lua.stx" | |
| 1597 | +# line 437 "lua.stx" | |
| 1456 | 1598 | { |
| 1457 | 1599 | yyval.vInt = 0; |
| 1458 | 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 | 1604 | } break; |
| 1463 | 1605 | case 56: |
| 1464 | −# line 397 "lua.stx" | |
| 1606 | +# line 444 "lua.stx" | |
| 1465 | 1607 | { code_byte(NOTOP); yyval.vInt = 1;} break; |
| 1466 | 1608 | case 57: |
| 1467 | −# line 398 "lua.stx" | |
| 1609 | +# line 445 "lua.stx" | |
| 1468 | 1610 | {code_byte(POP); ntemp--;} break; |
| 1469 | 1611 | case 58: |
| 1470 | −# line 399 "lua.stx" | |
| 1612 | +# line 446 "lua.stx" | |
| 1471 | 1613 | { |
| 1472 | − *(yypvt[-2].pByte) = ONFJMP; | |
| 1473 | − *((Word *)(yypvt[-2].pByte+1)) = pc - (yypvt[-2].pByte + sizeof(Word)+1); | |
| 1614 | + basepc[yypvt[-2].vWord] = ONFJMP; | |
| 1615 | + code_word_at(basepc+yypvt[-2].vWord+1, pc - (yypvt[-2].vWord + sizeof(Word)+1)); | |
| 1474 | 1616 | yyval.vInt = 1; |
| 1475 | 1617 | } break; |
| 1476 | 1618 | case 59: |
| 1477 | −# line 404 "lua.stx" | |
| 1619 | +# line 451 "lua.stx" | |
| 1478 | 1620 | {code_byte(POP); ntemp--;} break; |
| 1479 | 1621 | case 60: |
| 1480 | −# line 405 "lua.stx" | |
| 1622 | +# line 452 "lua.stx" | |
| 1481 | 1623 | { |
| 1482 | − *(yypvt[-2].pByte) = ONTJMP; | |
| 1483 | − *((Word *)(yypvt[-2].pByte+1)) = pc - (yypvt[-2].pByte + sizeof(Word)+1); | |
| 1624 | + basepc[yypvt[-2].vWord] = ONTJMP; | |
| 1625 | + code_word_at(basepc+yypvt[-2].vWord+1, pc - (yypvt[-2].vWord + sizeof(Word)+1)); | |
| 1484 | 1626 | yyval.vInt = 1; |
| 1485 | 1627 | } break; |
| 1486 | 1628 | case 61: |
| 1487 | −# line 412 "lua.stx" | |
| 1488 | −{ code_byte(PUSHNIL); incr_ntemp();} break; | |
| 1629 | +# line 460 "lua.stx" | |
| 1630 | +{ | |
| 1631 | + code_byte(PUSHBYTE); | |
| 1632 | + yyval.vWord = pc; code_byte(0); | |
| 1633 | + incr_ntemp(); | |
| 1634 | + code_byte(CREATEARRAY); | |
| 1635 | + } break; | |
| 1636 | +case 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; | |
| 1489 | 1660 | case 63: |
| 1490 | −# line 416 "lua.stx" | |
| 1661 | +# line 491 "lua.stx" | |
| 1662 | +{ code_byte(PUSHNIL); incr_ntemp();} break; | |
| 1663 | +case 65: | |
| 1664 | +# line 495 "lua.stx" | |
| 1491 | 1665 | {code_byte(PUSHMARK); yyval.vInt = ntemp; incr_ntemp();} break; |
| 1492 | −case 64: | |
| 1493 | −# line 417 "lua.stx" | |
| 1666 | +case 66: | |
| 1667 | +# line 496 "lua.stx" | |
| 1494 | 1668 | { code_byte(CALLFUNC); ntemp = yypvt[-3].vInt-1;} break; |
| 1495 | −case 65: | |
| 1496 | −# line 419 "lua.stx" | |
| 1669 | +case 67: | |
| 1670 | +# line 498 "lua.stx" | |
| 1497 | 1671 | {lua_pushvar (yypvt[-0].vLong); } break; |
| 1498 | −case 66: | |
| 1499 | −# line 422 "lua.stx" | |
| 1672 | +case 68: | |
| 1673 | +# line 501 "lua.stx" | |
| 1500 | 1674 | { yyval.vInt = 1; } break; |
| 1501 | −case 67: | |
| 1502 | −# line 423 "lua.stx" | |
| 1675 | +case 69: | |
| 1676 | +# line 502 "lua.stx" | |
| 1503 | 1677 | { yyval.vInt = yypvt[-0].vInt; } break; |
| 1504 | −case 68: | |
| 1505 | −# line 426 "lua.stx" | |
| 1678 | +case 70: | |
| 1679 | +# line 505 "lua.stx" | |
| 1506 | 1680 | { yyval.vInt = yypvt[-0].vInt; } break; |
| 1507 | −case 69: | |
| 1508 | −# line 427 "lua.stx" | |
| 1681 | +case 71: | |
| 1682 | +# line 506 "lua.stx" | |
| 1509 | 1683 | {if (!yypvt[-1].vInt){lua_codeadjust (ntemp+1); incr_ntemp();}} break; |
| 1510 | −case 70: | |
| 1511 | −# line 428 "lua.stx" | |
| 1684 | +case 72: | |
| 1685 | +# line 507 "lua.stx" | |
| 1512 | 1686 | {yyval.vInt = yypvt[-0].vInt;} break; |
| 1513 | −case 73: | |
| 1514 | −# line 435 "lua.stx" | |
| 1515 | −{localvar[nlocalvar]=yypvt[-0].vWord; incr_nlocalvar();} break; | |
| 1516 | −case 74: | |
| 1517 | −# line 436 "lua.stx" | |
| 1518 | −{localvar[nlocalvar]=yypvt[-0].vWord; incr_nlocalvar();} break; | |
| 1519 | 1687 | case 75: |
| 1520 | −# line 439 "lua.stx" | |
| 1521 | −{yyval.vLong=-1;} break; | |
| 1688 | +# line 515 "lua.stx" | |
| 1689 | +{ | |
| 1690 | + localvar[nlocalvar]=lua_findsymbol(yypvt[-0].pChar); | |
| 1691 | + add_nlocalvar(1); | |
| 1692 | + } break; | |
| 1522 | 1693 | case 76: |
| 1523 | −# line 440 "lua.stx" | |
| 1524 | −{yyval.vLong=yypvt[-0].vWord;} break; | |
| 1694 | +# line 520 "lua.stx" | |
| 1695 | +{ | |
| 1696 | + localvar[nlocalvar]=lua_findsymbol(yypvt[-0].pChar); | |
| 1697 | + add_nlocalvar(1); | |
| 1698 | + } break; | |
| 1525 | 1699 | case 77: |
| 1526 | −# line 443 "lua.stx" | |
| 1527 | −{ yyval.vInt = yypvt[-1].vInt; } break; | |
| 1700 | +# line 526 "lua.stx" | |
| 1701 | +{yyval.vLong=-1;} break; | |
| 1528 | 1702 | case 78: |
| 1529 | −# line 444 "lua.stx" | |
| 1530 | −{ yyval.vInt = yypvt[-1].vInt; } break; | |
| 1703 | +# line 527 "lua.stx" | |
| 1704 | +{yyval.vLong=lua_findsymbol(yypvt[-0].pChar);} break; | |
| 1531 | 1705 | case 79: |
| 1532 | −# line 447 "lua.stx" | |
| 1533 | −{ yyval.vInt = 0; } break; | |
| 1706 | +# line 531 "lua.stx" | |
| 1707 | +{ | |
| 1708 | + flush_record(yypvt[-1].vInt%FIELDS_PER_FLUSH); | |
| 1709 | + yyval.vInt = yypvt[-1].vInt; | |
| 1710 | + } break; | |
| 1534 | 1711 | case 80: |
| 1535 | −# line 448 "lua.stx" | |
| 1536 | −{ yyval.vInt = yypvt[-0].vInt; } break; | |
| 1712 | +# line 536 "lua.stx" | |
| 1713 | +{ | |
| 1714 | + flush_list(yypvt[-1].vInt/FIELDS_PER_FLUSH, yypvt[-1].vInt%FIELDS_PER_FLUSH); | |
| 1715 | + yyval.vInt = yypvt[-1].vInt; | |
| 1716 | + } break; | |
| 1537 | 1717 | case 81: |
| 1538 | −# line 451 "lua.stx" | |
| 1539 | −{yyval.vInt=1;} break; | |
| 1718 | +# line 542 "lua.stx" | |
| 1719 | +{ yyval.vInt = 0; } break; | |
| 1540 | 1720 | case 82: |
| 1541 | −# line 452 "lua.stx" | |
| 1542 | −{yyval.vInt=yypvt[-2].vInt+1;} break; | |
| 1721 | +# line 543 "lua.stx" | |
| 1722 | +{ yyval.vInt = yypvt[-0].vInt; } break; | |
| 1543 | 1723 | case 83: |
| 1544 | −# line 456 "lua.stx" | |
| 1545 | −{ | |
| 1546 | − align(Word); | |
| 1547 | − code_byte(PUSHSTRING); | |
| 1548 | − code_word(lua_findconstant (s_name(yypvt[-0].vWord))); | |
| 1549 | − incr_ntemp(); | |
| 1550 | − } break; | |
| 1724 | +# line 546 "lua.stx" | |
| 1725 | +{yyval.vInt=1;} break; | |
| 1551 | 1726 | case 84: |
| 1552 | −# line 463 "lua.stx" | |
| 1727 | +# line 548 "lua.stx" | |
| 1553 | 1728 | { |
| 1554 | − code_byte(STOREFIELD); | |
| 1555 | − ntemp-=2; | |
| 1556 | − } break; | |
| 1729 | + yyval.vInt=yypvt[-2].vInt+1; | |
| 1730 | + if (yyval.vInt%FIELDS_PER_FLUSH == 0) flush_record(FIELDS_PER_FLUSH); | |
| 1731 | + } break; | |
| 1557 | 1732 | case 85: |
| 1558 | −# line 469 "lua.stx" | |
| 1559 | −{ yyval.vInt = 0; } break; | |
| 1733 | +# line 554 "lua.stx" | |
| 1734 | +{yyval.vWord = lua_findconstant(yypvt[-0].pChar);} break; | |
| 1560 | 1735 | case 86: |
| 1561 | −# line 470 "lua.stx" | |
| 1562 | −{ yyval.vInt = yypvt[-0].vInt; } break; | |
| 1736 | +# line 555 "lua.stx" | |
| 1737 | +{ | |
| 1738 | + push_field(yypvt[-2].vWord); | |
| 1739 | + } break; | |
| 1563 | 1740 | case 87: |
| 1564 | −# line 473 "lua.stx" | |
| 1565 | −{ code_number(1); } break; | |
| 1741 | +# line 560 "lua.stx" | |
| 1742 | +{ yyval.vInt = 0; } break; | |
| 1566 | 1743 | case 88: |
| 1567 | −# line 473 "lua.stx" | |
| 1568 | −{yyval.vInt=1;} break; | |
| 1744 | +# line 561 "lua.stx" | |
| 1745 | +{ yyval.vInt = yypvt[-0].vInt; } break; | |
| 1569 | 1746 | case 89: |
| 1570 | −# line 474 "lua.stx" | |
| 1571 | −{ code_number(yypvt[-1].vInt+1); } break; | |
| 1747 | +# line 564 "lua.stx" | |
| 1748 | +{yyval.vInt=1;} break; | |
| 1572 | 1749 | case 90: |
| 1573 | −# line 475 "lua.stx" | |
| 1574 | −{yyval.vInt=yypvt[-3].vInt+1;} break; | |
| 1575 | −case 91: | |
| 1576 | −# line 479 "lua.stx" | |
| 1750 | +# line 566 "lua.stx" | |
| 1577 | 1751 | { |
| 1578 | − code_byte(STOREFIELD); | |
| 1579 | − ntemp-=2; | |
| 1580 | − } break; | |
| 1581 | −case 92: | |
| 1582 | −# line 486 "lua.stx" | |
| 1752 | + yyval.vInt=yypvt[-2].vInt+1; | |
| 1753 | + if (yyval.vInt%FIELDS_PER_FLUSH == 0) | |
| 1754 | + flush_list(yyval.vInt/FIELDS_PER_FLUSH - 1, FIELDS_PER_FLUSH); | |
| 1755 | + } break; | |
| 1756 | +case 91: | |
| 1757 | +# line 574 "lua.stx" | |
| 1583 | 1758 | { |
| 1584 | 1759 | nvarbuffer = 0; |
| 1585 | 1760 | varbuffer[nvarbuffer] = yypvt[-0].vLong; incr_nvarbuffer(); |
| 1586 | 1761 | yyval.vInt = (yypvt[-0].vLong == 0) ? 1 : 0; |
| 1587 | 1762 | } break; |
| 1588 | −case 93: | |
| 1589 | −# line 492 "lua.stx" | |
| 1763 | +case 92: | |
| 1764 | +# line 580 "lua.stx" | |
| 1590 | 1765 | { |
| 1591 | 1766 | varbuffer[nvarbuffer] = yypvt[-0].vLong; incr_nvarbuffer(); |
| 1592 | 1767 | yyval.vInt = (yypvt[-0].vLong == 0) ? yypvt[-2].vInt + 1 : yypvt[-2].vInt; |
| 1593 | 1768 | } break; |
| 1594 | −case 94: | |
| 1595 | −# line 499 "lua.stx" | |
| 1596 | −{ | |
| 1597 | − int local = lua_localname (yypvt[-0].vWord); | |
| 1769 | +case 93: | |
| 1770 | +# line 587 "lua.stx" | |
| 1771 | +{ | |
| 1772 | + Word s = lua_findsymbol(yypvt[-0].pChar); | |
| 1773 | + int local = lua_localname (s); | |
| 1598 | 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 | 1776 | else |
| 1601 | 1777 | yyval.vLong = -(local+1); /* return negative value */ |
| 1602 | 1778 | } break; |
| 1603 | −case 95: | |
| 1604 | −# line 507 "lua.stx" | |
| 1779 | +case 94: | |
| 1780 | +# line 596 "lua.stx" | |
| 1605 | 1781 | {lua_pushvar (yypvt[-0].vLong);} break; |
| 1606 | −case 96: | |
| 1607 | −# line 508 "lua.stx" | |
| 1782 | +case 95: | |
| 1783 | +# line 597 "lua.stx" | |
| 1608 | 1784 | { |
| 1609 | 1785 | yyval.vLong = 0; /* indexed variable */ |
| 1610 | 1786 | } break; |
| 1611 | −case 97: | |
| 1612 | −# line 511 "lua.stx" | |
| 1787 | +case 96: | |
| 1788 | +# line 600 "lua.stx" | |
| 1613 | 1789 | {lua_pushvar (yypvt[-0].vLong);} break; |
| 1614 | −case 98: | |
| 1615 | −# line 512 "lua.stx" | |
| 1790 | +case 97: | |
| 1791 | +# line 601 "lua.stx" | |
| 1616 | 1792 | { |
| 1617 | − align(Word); | |
| 1618 | 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 | 1795 | yyval.vLong = 0; /* indexed variable */ |
| 1621 | 1796 | } break; |
| 1797 | +case 98: | |
| 1798 | +# line 608 "lua.stx" | |
| 1799 | +{localvar[nlocalvar]=lua_findsymbol(yypvt[-0].pChar); yyval.vInt = 1;} break; | |
| 1622 | 1800 | case 99: |
| 1623 | −# line 520 "lua.stx" | |
| 1624 | −{localvar[nlocalvar]=yypvt[-1].vWord; incr_nlocalvar();} break; | |
| 1625 | −case 100: | |
| 1626 | −# line 521 "lua.stx" | |
| 1627 | −{localvar[nlocalvar]=yypvt[-1].vWord; incr_nlocalvar();} break; | |
| 1628 | −case 101: | |
| 1629 | −# line 524 "lua.stx" | |
| 1630 | −{ code_byte(PUSHNIL); } break; | |
| 1801 | +# line 610 "lua.stx" | |
| 1802 | +{ | |
| 1803 | + localvar[nlocalvar+yypvt[-2].vInt]=lua_findsymbol(yypvt[-0].pChar); | |
| 1804 | + yyval.vInt = yypvt[-2].vInt+1; | |
| 1805 | + } break; | |
| 1631 | 1806 | case 102: |
| 1632 | −# line 525 "lua.stx" | |
| 1633 | −{ntemp = 0;} break; | |
| 1634 | −case 104: | |
| 1635 | −# line 528 "lua.stx" | |
| 1807 | +# line 620 "lua.stx" | |
| 1636 | 1808 | {lua_debug = yypvt[-0].vInt;} break; |
| 1637 | 1809 | } |
| 1638 | 1810 | goto yystack; /* reset registers in driver code */ |
| @@ -0,0 +1,37 @@ | ||
| 1 | + | |
| 2 | +typedef union | |
| 3 | +{ | |
| 4 | + int vInt; | |
| 5 | + long vLong; | |
| 6 | + float vFloat; | |
| 7 | + char *pChar; | |
| 8 | + Word vWord; | |
| 9 | + Byte *pByte; | |
| 10 | +} YYSTYPE; | |
| 11 | +extern 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 | |
| @@ -0,0 +1,27 @@ | ||
| 1 | +# makefile for lua | |
| 2 | + | |
| 3 | +LIB= $(LUA)/lib | |
| 4 | +INC= $(LUA)/inc | |
| 5 | + | |
| 6 | +CC= gcc | |
| 7 | +CFLAGS= -g -Wall -O2 -I$(INC) $(DEFS) | |
| 8 | +DEFS= -DMAXCODE=64000 -DMAXCONSTANT=1024 -DMAXSYMBOL=1024 -DMAXARRAY=1024 | |
| 9 | + | |
| 10 | +OBJS= hash.o inout.o lex.o opcode.o table.o y.tab.o | |
| 11 | +SLIB= $(LIB)/lua.a | |
| 12 | +DLIB= $(LIB)/liblua.so.1.1 | |
| 13 | + | |
| 14 | +libs: $(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 | + | |
| 23 | +y.tab.c: lua.stx exscript | |
| 24 | + yacc -d lua.stx ; ex y.tab.c <exscript | |
| 25 | + | |
| 26 | +clean: | |
| 27 | + rm -f $(OBJS) $(SLIB) $(DLIB) | |
| @@ -0,0 +1,3 @@ | ||
| 1 | +1d | |
| 2 | +x | |
| 3 | + | |
| @@ -0,0 +1,85 @@ | ||
| 1 | +%{ | |
| 2 | + | |
| 3 | +char *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 | + | |
| 17 | +static Input input; | |
| 18 | +static Unput unput; | |
| 19 | + | |
| 20 | +void lua_setinput (Input fn) | |
| 21 | +{ | |
| 22 | + input = fn; | |
| 23 | +} | |
| 24 | + | |
| 25 | +void lua_setunput (Unput fn) | |
| 26 | +{ | |
| 27 | + unput = fn; | |
| 28 | +} | |
| 29 | + | |
| 30 | +char *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 | + | |
| @@ -0,0 +1,953 @@ | ||
| 1 | +%{ | |
| 2 | + | |
| 3 | +char *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 | |
| 22 | +static Word maxcode; | |
| 23 | +static Word maxmain; | |
| 24 | +static Word maxcurr ; | |
| 25 | +static Byte *code = NULL; | |
| 26 | +static Byte *initcode; | |
| 27 | +static Byte *basepc; | |
| 28 | +static Word maincode; | |
| 29 | +static Word pc; | |
| 30 | + | |
| 31 | +#define MAXVAR 32 | |
| 32 | +static long varbuffer[MAXVAR]; /* variables in an assignment list; | |
| 33 | + it's long to store negative Word values */ | |
| 34 | +static int nvarbuffer=0; /* number of variables at a list */ | |
| 35 | + | |
| 36 | +static Word localvar[STACKGAP]; /* store local variable names */ | |
| 37 | +static int nlocalvar=0; /* number of local variables */ | |
| 38 | + | |
| 39 | +#define MAXFIELDS FIELDS_PER_FLUSH*2 | |
| 40 | +static Word fields[MAXFIELDS]; /* fieldnames to be flushed */ | |
| 41 | +static int nfields=0; | |
| 42 | +static int ntemp; /* number of temporary var into stack */ | |
| 43 | +static int err; /* flag to indicate error */ | |
| 44 | + | |
| 45 | +/* Internal functions */ | |
| 46 | + | |
| 47 | +static 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 | + | |
| 62 | +static 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 | + | |
| 70 | +static 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 | + | |
| 80 | +static 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 | + | |
| 88 | +static 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 | + | |
| 99 | +static 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 | + | |
| 110 | +static 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 | + | |
| 124 | +static 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 | + | |
| 135 | +static 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 | + | |
| 146 | +static 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 | + | |
| 157 | +static 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 | + | |
| 225 | +functionlist : /* 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 | + | |
| 239 | +function : 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 | |
| 280 | +PrintCode(code,code+pc); | |
| 281 | +#endif | |
| 282 | + } | |
| 283 | + ; | |
| 284 | + | |
| 285 | +statlist : /* empty */ | |
| 286 | + | statlist stat sc | |
| 287 | + ; | |
| 288 | + | |
| 289 | +stat : { | |
| 290 | + ntemp = 0; | |
| 291 | + if (lua_debug) | |
| 292 | + { | |
| 293 | + code_byte(SETLINE); code_word(lua_linenumber); | |
| 294 | + } | |
| 295 | + } | |
| 296 | + stat1 | |
| 297 | + | |
| 298 | +sc : /* empty */ | ';' ; | |
| 299 | + | |
| 300 | + | |
| 301 | +stat1 : 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 | + | |
| 355 | +elsepart : /* 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 | + | |
| 377 | +block : {$<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 | + | |
| 387 | +ret : /* 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 | + | |
| 396 | +PrepJump : /* empty */ | |
| 397 | + { | |
| 398 | + $$ = pc; | |
| 399 | + code_byte(0); /* open space */ | |
| 400 | + code_word (0); | |
| 401 | + } | |
| 402 | + | |
| 403 | +expr1 : expr { if ($1 == 0) {lua_codeadjust (ntemp+1); incr_ntemp();}} | |
| 404 | + ; | |
| 405 | + | |
| 406 | +expr : '(' 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 | + | |
| 459 | +typeconstructor: '@' | |
| 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 | + | |
| 491 | +dimension : /* empty */ { code_byte(PUSHNIL); incr_ntemp();} | |
| 492 | + | expr1 | |
| 493 | + ; | |
| 494 | + | |
| 495 | +functioncall : functionvalue {code_byte(PUSHMARK); $<vInt>$ = ntemp; incr_ntemp();} | |
| 496 | + '(' exprlist ')' { code_byte(CALLFUNC); ntemp = $<vInt>2-1;} | |
| 497 | + | |
| 498 | +functionvalue : var {lua_pushvar ($1); } | |
| 499 | + ; | |
| 500 | + | |
| 501 | +exprlist : /* empty */ { $$ = 1; } | |
| 502 | + | exprlist1 { $$ = $1; } | |
| 503 | + ; | |
| 504 | + | |
| 505 | +exprlist1 : expr { $$ = $1; } | |
| 506 | + | exprlist1 ',' {if (!$1){lua_codeadjust (ntemp+1); incr_ntemp();}} | |
| 507 | + expr {$$ = $4;} | |
| 508 | + ; | |
| 509 | + | |
| 510 | +parlist : /* empty */ | |
| 511 | + | parlist1 | |
| 512 | + ; | |
| 513 | + | |
| 514 | +parlist1 : 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 | + | |
| 526 | +objectname : /* empty */ {$$=-1;} | |
| 527 | + | NAME {$$=lua_findsymbol($1);} | |
| 528 | + ; | |
| 529 | + | |
| 530 | +fieldlist : '{' 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 | + | |
| 542 | +ffieldlist : /* empty */ { $$ = 0; } | |
| 543 | + | ffieldlist1 { $$ = $1; } | |
| 544 | + ; | |
| 545 | + | |
| 546 | +ffieldlist1 : ffield {$$=1;} | |
| 547 | + | ffieldlist1 ',' ffield | |
| 548 | + { | |
| 549 | + $$=$1+1; | |
| 550 | + if ($$%FIELDS_PER_FLUSH == 0) flush_record(FIELDS_PER_FLUSH); | |
| 551 | + } | |
| 552 | + ; | |
| 553 | + | |
| 554 | +ffield : NAME {$<vWord>$ = lua_findconstant($1);} '=' expr1 | |
| 555 | + { | |
| 556 | + push_field($<vWord>2); | |
| 557 | + } | |
| 558 | + ; | |
| 559 | + | |
| 560 | +lfieldlist : /* empty */ { $$ = 0; } | |
| 561 | + | lfieldlist1 { $$ = $1; } | |
| 562 | + ; | |
| 563 | + | |
| 564 | +lfieldlist1 : 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 | + | |
| 573 | +varlist1 : 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 | + | |
| 586 | +var : 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 | + | |
| 608 | +localdeclist : NAME {localvar[nlocalvar]=lua_findsymbol($1); $$ = 1;} | |
| 609 | + | localdeclist ',' NAME | |
| 610 | + { | |
| 611 | + localvar[nlocalvar+$1]=lua_findsymbol($3); | |
| 612 | + $$ = $1+1; | |
| 613 | + } | |
| 614 | + ; | |
| 615 | + | |
| 616 | +decinit : /* empty */ | |
| 617 | + | '=' exprlist1 | |
| 618 | + ; | |
| 619 | + | |
| 620 | +setdebug : 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 | +*/ | |
| 627 | +static 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 | +*/ | |
| 640 | +static 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 | + | |
| 666 | +static void lua_codeadjust (int n) | |
| 667 | +{ | |
| 668 | + code_byte(ADJUST); | |
| 669 | + code_byte(n + nlocalvar); | |
| 670 | +} | |
| 671 | + | |
| 672 | +static 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 | + | |
| 707 | +void 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 | + | |
| 716 | +int 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 | +*/ | |
| 726 | +int 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 | + | |
| 751 | +static 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 | + | |
| @@ -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 | − | |
| 11 | −extern Symbol *lua_table; | |
| 12 | −extern Word lua_ntable; | |
| 13 | − | |
| 14 | −extern char **lua_constant; | |
| 15 | −extern Word lua_nconstant; | |
| 16 | − | |
| 17 | −extern char **lua_string; | |
| 18 | −extern Word lua_nstring; | |
| 19 | − | |
| 20 | −extern Hash **lua_array; | |
| 21 | −extern Word lua_narray; | |
| 22 | − | |
| 23 | −extern char *lua_file[]; | |
| 24 | −extern int lua_nfile; | |
| 25 | − | |
| 26 | −#define lua_markstring(s) (*((s)-1)) | |
| 27 | − | |
| 28 | − | |
| 29 | −int lua_findsymbol (char *s); | |
| 30 | −int lua_findenclosedconstant (char *s); | |
| 31 | −int lua_findconstant (char *s); | |
| 32 | −void lua_markobject (Object *o); | |
| 33 | −char *lua_createstring (char *s); | |
| 34 | −void *lua_createarray (void *a); | |
| 35 | −int lua_addfile (char *fn); | |
| 36 | −char *lua_filename (void); | |
| 37 | −void lua_nextvar (void); | |
| 38 | − | |
| 39 | −#endif | |
| @@ -1,15 +0,0 @@ | ||
| 1 | −$debug | |
| 2 | − | |
| 3 | − | |
| 4 | −function somaP (x1,y1,x2,y2) | |
| 5 | − return x1+x2, y1+y2 | |
| 6 | −end | |
| 7 | − | |
| 8 | −function norma (x,y) | |
| 9 | − return x*x+y*y | |
| 10 | −end | |
| 11 | − | |
| 12 | −function retorno_multiplo () | |
| 13 | − print (norma(somaP(2,3,4,5))) | |
| 14 | −end | |
| 15 | − | |
File renamed without changes.
| @@ -0,0 +1,37 @@ | ||
| 1 | + | |
| 2 | + | |
| 3 | +function 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 | |
| 27 | +end | |
| 28 | + | |
| 29 | +function save () | |
| 30 | + local n,v = nextvar(nil) | |
| 31 | + while n ~= nil do | |
| 32 | + savevar(n,v); | |
| 33 | + n,v = nextvar(n) | |
| 34 | + end | |
| 35 | +end | |
| 36 | + | |
| 37 | +save() | |
| @@ -0,0 +1,6 @@ | ||
| 1 | +$debug | |
| 2 | +i=0 | |
| 3 | +repeat | |
| 4 | + print(i) | |
| 5 | + i=i+1 | |
| 6 | +until i>10 | |
| @@ -1,4 +1,3 @@ | ||
| 1 | −$debug | |
| 2 | 1 | |
| 3 | 2 | |
| 4 | 3 | function savevar (n,v) |
| @@ -2,9 +2,7 @@ $debug · 1 unmodified line | ||
| 2 | 2 | |
| 3 | 3 | function quicksort(r,s) |
| 4 | 4 | if s<=r then return end -- caso basico da recursao |
| 5 | − local v=x[r] | |
| 6 | − local i=r | |
| 7 | − local j=s+1 | |
| 5 | + local v, i, j = x[r], r, s+1 | |
| 8 | 6 | i=i+1; while x[i]<v do i=i+1 end |
| 9 | 7 | j=j-1; while x[j]>v do j=j-1 end |
| 10 | 8 | x[i],x[j]=x[j],x[i] |
| @@ -22,8 +20,7 @@ end · 11 unmodified lines | ||
| 22 | 20 | function sort(a,n) -- selection sort |
| 23 | 21 | local i=1 |
| 24 | 22 | while i<=n do |
| 25 | − local m=i | |
| 26 | − local j=i+1 | |
| 23 | + local m, j = i, i+1 | |
| 27 | 24 | while j<=n do |
| 28 | 25 | if a[j]<a[m] then m=j end |
| 29 | 26 | j=j+1 |
| @@ -47,10 +44,11 @@ function main() · 17 unmodified lines | ||
| 47 | 44 | n=n+1; x[n]="marcelo" |
| 48 | 45 | n=n+1; x[n]="sedrez" |
| 49 | 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 | 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 | 50 | sort (x, n-1) |
| 53 | 51 | print(x[0]..","..x[1]..","..x[2]..","..x[3]..","..x[4]..","..x[5]..","..x[6]..","..x[7]..","..x[8]..","..x[9]..","..x[10]) |
| 54 | 52 | end |
| 55 | 53 | |
| 56 | − | |
| 54 | +main() | |
| @@ -0,0 +1,51 @@ | ||
| 1 | +function 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) | |
| 15 | +end | |
| 16 | + | |
| 17 | +function 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) | |
| 33 | +print(x[0]..","..x[1]..","..x[2]..","..x[3]..","..x[4]..","..x[5]..","..x[6]..","..x[7]..","..x[8]..","..x[9]..","..x[10]) | |
| 34 | +end | |
| 35 | + | |
| 36 | +function 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 | |
| 49 | +end | |
| 50 | + | |
| 51 | +main() | |
| @@ -0,0 +1,51 @@ | ||
| 1 | +$debug | |
| 2 | +function 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) | |
| 19 | +end | |
| 20 | + | |
| 21 | +function 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 | |
| 34 | +end | |
| 35 | + | |
| 36 | +x=@(20) | |
| 37 | +n=-1 | |
| 38 | +n=n+1; x[n]="a" | |
| 39 | +n=n+1; x[n]="waldemar" | |
| 40 | +n=n+1; x[n]="luiz" | |
| 41 | +n=n+1; x[n]="lula" | |
| 42 | +n=n+1; x[n]="peter" | |
| 43 | +n=n+1; x[n]="raquel" | |
| 44 | +n=n+1; x[n]="camilo" | |
| 45 | +n=n+1; x[n]="andre" | |
| 46 | +n=n+1; x[n]="marcelo" | |
| 47 | +n=n+1; x[n]="sedrez" | |
| 48 | +n=n+1; x[n]="z" | |
| 49 | +-- sort(x,n) | |
| 50 | +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]) | |
| @@ -0,0 +1,18 @@ | ||
| 1 | +function 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) | |
| 9 | +end | |
| 10 | + | |
| 11 | + | |
| 12 | +function test(s) | |
| 13 | + local path, filename = split(s) | |
| 14 | + print(s .. "=[".. path.."]+["..filename.."]") | |
| 15 | +end | |
| 16 | + | |
| 17 | +test("a:/lua/obj/lua.c") | |
| 18 | +test("lua.lib") | |
| @@ -0,0 +1,22 @@ | ||
| 1 | +function 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 | |
| 12 | +end | |
| 13 | + | |
| 14 | + | |
| 15 | +v = @(5000) | |
| 16 | + | |
| 17 | +i=1 | |
| 18 | +while i <= 5000 do v[i] = 5000-i i=i+1 end | |
| 19 | + | |
| 20 | +sort(v,5000) | |
| 21 | + | |
| 22 | +print("v512 = ".. v[512]) | |
| @@ -0,0 +1,37 @@ | ||
| 1 | +$debug | |
| 2 | + | |
| 3 | +function 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 | |
| 24 | +end | |
| 25 | + | |
| 26 | +typeblock = @{x = @{default = 0, type = "number"}, | |
| 27 | + y = @{default = 0, type = "number"}, | |
| 28 | + name = @{type = "string"} | |
| 29 | + } | |
| 30 | + | |
| 31 | +function 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} | |
| @@ -1,35 +0,0 @@ | ||
| 1 | −$debug | |
| 2 | − | |
| 3 | −function 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 | |
| 22 | −end | |
| 23 | − | |
| 24 | −typetrilha = @{x = @{default = 0, type = "number"}, | |
| 25 | − y = @{default = 0, type = "number"}, | |
| 26 | − name = @{type = "string"} | |
| 27 | − } | |
| 28 | − | |
| 29 | −function trilha (t) check(t,typetrilha) end | |
| 30 | − | |
| 31 | −t1 = @trilha{ x = 4, name = "3"} | |
| 32 | − | |
| 33 | −a = "na".."me" | |
| 34 | − | |
| 35 | − | |
| @@ -1,35 +0,0 @@ | ||
| 1 | − | |
| 2 | −typedef union | |
| 3 | −{ | |
| 4 | − int vInt; | |
| 5 | − long vLong; | |
| 6 | − float vFloat; | |
| 7 | − Word vWord; | |
| 8 | − Byte *pByte; | |
| 9 | −} YYSTYPE; | |
| 10 | −extern 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 | |