diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1996-02-05 19:32:19 -0200 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1996-02-05 19:32:19 -0200 |
commit | 5fa51fc4263522d8c5056d76aacbb77e52a3b1ea (patch) | |
tree | ac9796d0e9ccfb20b1d9e7e3a6400fefa28a1090 /iolib.c | |
parent | 15057aa0a42477a04d718270c9bc3303b4e9b613 (diff) | |
download | lua-5fa51fc4263522d8c5056d76aacbb77e52a3b1ea.tar.gz lua-5fa51fc4263522d8c5056d76aacbb77e52a3b1ea.tar.bz2 lua-5fa51fc4263522d8c5056d76aacbb77e52a3b1ea.zip |
new option "q" in function "write", to write literal strings.
Diffstat (limited to 'iolib.c')
-rw-r--r-- | iolib.c | 44 |
1 files changed, 38 insertions, 6 deletions
@@ -3,7 +3,7 @@ | |||
3 | ** Input/output library to LUA | 3 | ** Input/output library to LUA |
4 | */ | 4 | */ |
5 | 5 | ||
6 | char *rcs_iolib="$Id: iolib.c,v 1.31 1996/01/22 17:46:55 roberto Exp roberto $"; | 6 | char *rcs_iolib="$Id: iolib.c,v 1.32 1996/01/29 16:40:09 roberto Exp roberto $"; |
7 | 7 | ||
8 | #include <stdio.h> | 8 | #include <stdio.h> |
9 | #include <ctype.h> | 9 | #include <ctype.h> |
@@ -142,15 +142,14 @@ static char getformat (char *f, int *just, int *m, int *n) | |||
142 | int t; | 142 | int t; |
143 | switch (*f++) | 143 | switch (*f++) |
144 | { | 144 | { |
145 | case 'q': case 'Q': | ||
145 | case 's': case 'S': | 146 | case 's': case 'S': |
146 | t = 's'; | 147 | case 'i': case 'I': |
148 | t = tolower(*(f-1)); | ||
147 | break; | 149 | break; |
148 | case 'f': case 'F': case 'g': case 'G': case 'e': case 'E': | 150 | case 'f': case 'F': case 'g': case 'G': case 'e': case 'E': |
149 | t = 'f'; | 151 | t = 'f'; |
150 | break; | 152 | break; |
151 | case 'i': case 'I': | ||
152 | t = 'i'; | ||
153 | break; | ||
154 | default: | 153 | default: |
155 | t = 0; /* to avoid compiler warnings */ | 154 | t = 0; /* to avoid compiler warnings */ |
156 | lua_arg_error("read/write (format)"); | 155 | lua_arg_error("read/write (format)"); |
@@ -293,6 +292,8 @@ static void io_read (void) | |||
293 | lua_pushnil(); | 292 | lua_pushnil(); |
294 | break; | 293 | break; |
295 | } | 294 | } |
295 | default: | ||
296 | lua_arg_error("read (format)"); | ||
296 | } | 297 | } |
297 | } | 298 | } |
298 | } | 299 | } |
@@ -369,6 +370,34 @@ static int write_string (char *s, int just, int m) | |||
369 | return status; | 370 | return status; |
370 | } | 371 | } |
371 | 372 | ||
373 | static int write_quoted (int just, int m) | ||
374 | { | ||
375 | char *s = lua_check_string(1, "write"); | ||
376 | luaI_addchar(0); | ||
377 | luaI_addchar('"'); | ||
378 | while (1) | ||
379 | { | ||
380 | switch (*s) | ||
381 | { | ||
382 | case '"': case '\\': | ||
383 | luaI_addchar('\\'); | ||
384 | luaI_addchar(*s); | ||
385 | break; | ||
386 | case '\n': | ||
387 | luaI_addchar('\\'); | ||
388 | luaI_addchar('n'); | ||
389 | break; | ||
390 | case 0: | ||
391 | goto END_WHILE; | ||
392 | default: | ||
393 | luaI_addchar(*s); | ||
394 | } | ||
395 | s++; | ||
396 | } END_WHILE: | ||
397 | luaI_addchar('"'); | ||
398 | return write_string(luaI_addchar(0), just, m); | ||
399 | } | ||
400 | |||
372 | static int write_float (int just, int m, int n) | 401 | static int write_float (int just, int m, int n) |
373 | { | 402 | { |
374 | char buffer[100]; | 403 | char buffer[100]; |
@@ -413,7 +442,7 @@ static void io_write (void) | |||
413 | else /* formated */ | 442 | else /* formated */ |
414 | { | 443 | { |
415 | int just, m, n; | 444 | int just, m, n; |
416 | switch (getformat (lua_check_string(2, "write"), &just, &m, &n)) | 445 | switch (getformat(lua_check_string(2, "write"), &just, &m, &n)) |
417 | { | 446 | { |
418 | case 's': | 447 | case 's': |
419 | { | 448 | { |
@@ -424,6 +453,9 @@ static void io_write (void) | |||
424 | status = 0; | 453 | status = 0; |
425 | break; | 454 | break; |
426 | } | 455 | } |
456 | case 'q': | ||
457 | status = write_quoted(just, m); | ||
458 | break; | ||
427 | case 'f': | 459 | case 'f': |
428 | status = write_float(just, m, n); | 460 | status = write_float(just, m, n); |
429 | break; | 461 | break; |