diff options
| author | Waldemar Celes <celes@tecgraf.puc-rio.br> | 1994-08-04 13:23:29 -0300 |
|---|---|---|
| committer | Waldemar Celes <celes@tecgraf.puc-rio.br> | 1994-08-04 13:23:29 -0300 |
| commit | 5034be66359eca9d7aea7edc1c51c71bf42f29c3 (patch) | |
| tree | 66801a87a6414df92ecfa42805221345df04d5ea | |
| parent | b1e9b37883ebc3f9926f6693350a73d6cbb94b6e (diff) | |
| download | lua-5034be66359eca9d7aea7edc1c51c71bf42f29c3.tar.gz lua-5034be66359eca9d7aea7edc1c51c71bf42f29c3.tar.bz2 lua-5034be66359eca9d7aea7edc1c51c71bf42f29c3.zip | |
Alteracao na funcao 'write" para permitir acrescentar caracteres
de espacamento, tabs, newline, etc. nos formatos.
Corrigiu tambem bug do formato 'F' maiusculo.
Diffstat (limited to '')
| -rw-r--r-- | iolib.c | 39 |
1 files changed, 28 insertions, 11 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.3 1994/03/28 15:14:02 celes Exp celes $"; | 6 | char *rcs_iolib="$Id: iolib.c,v 1.4 1994/04/25 20:11:23 celes Exp celes $"; |
| 7 | 7 | ||
| 8 | #include <stdlib.h> | 8 | #include <stdlib.h> |
| 9 | #include <string.h> | 9 | #include <string.h> |
| @@ -344,9 +344,11 @@ static char *buildformat (char *e, lua_Object o) | |||
| 344 | static char buffer[512]; | 344 | static char buffer[512]; |
| 345 | static char f[80]; | 345 | static char f[80]; |
| 346 | char *string = &buffer[255]; | 346 | char *string = &buffer[255]; |
| 347 | char *fstart=e, *fspace; | ||
| 347 | char t, j='r'; | 348 | char t, j='r'; |
| 348 | int m=0, n=0, l; | 349 | int m=0, n=0, l; |
| 349 | while (isspace(*e)) e++; | 350 | while (isspace(*e)) e++; |
| 351 | fspace = e; | ||
| 350 | t = *e++; | 352 | t = *e++; |
| 351 | if (*e == '<' || *e == '|' || *e == '>') j = *e++; | 353 | if (*e == '<' || *e == '|' || *e == '>') j = *e++; |
| 352 | while (isdigit(*e)) | 354 | while (isdigit(*e)) |
| @@ -359,16 +361,22 @@ static char *buildformat (char *e, lua_Object o) | |||
| 359 | if (j == '<' || j == '|') sprintf(strchr(f,0),"-"); | 361 | if (j == '<' || j == '|') sprintf(strchr(f,0),"-"); |
| 360 | if (m != 0) sprintf(strchr(f,0),"%d", m); | 362 | if (m != 0) sprintf(strchr(f,0),"%d", m); |
| 361 | if (n != 0) sprintf(strchr(f,0),".%d", n); | 363 | if (n != 0) sprintf(strchr(f,0),".%d", n); |
| 362 | sprintf(strchr(f,0), "%c", t); | 364 | switch (t) |
| 363 | switch (tolower(t)) | ||
| 364 | { | 365 | { |
| 365 | case 'i': t = 'i'; | 366 | case 'i': case 'I': t = 'd'; |
| 367 | sprintf(strchr(f,0), "%c", t); | ||
| 366 | sprintf (string, f, (long int)lua_getnumber(o)); | 368 | sprintf (string, f, (long int)lua_getnumber(o)); |
| 367 | break; | 369 | break; |
| 368 | case 'f': case 'g': case 'e': t = 'f'; | 370 | case 'f': case 'g': case 'e': case 'G': case 'E': |
| 371 | sprintf(strchr(f,0), "%c", t); | ||
| 369 | sprintf (string, f, (float)lua_getnumber(o)); | 372 | sprintf (string, f, (float)lua_getnumber(o)); |
| 370 | break; | 373 | break; |
| 371 | case 's': t = 's'; | 374 | case 'F': t = 'f'; |
| 375 | sprintf(strchr(f,0), "%c", t); | ||
| 376 | sprintf (string, f, (float)lua_getnumber(o)); | ||
| 377 | break; | ||
| 378 | case 's': case 'S': t = 's'; | ||
| 379 | sprintf(strchr(f,0), "%c", t); | ||
| 372 | sprintf (string, f, lua_getstring(o)); | 380 | sprintf (string, f, lua_getstring(o)); |
| 373 | break; | 381 | break; |
| 374 | default: return ""; | 382 | default: return ""; |
| @@ -383,13 +391,22 @@ static char *buildformat (char *e, lua_Object o) | |||
| 383 | } | 391 | } |
| 384 | else if (m!=0 && j=='|') | 392 | else if (m!=0 && j=='|') |
| 385 | { | 393 | { |
| 394 | int k; | ||
| 386 | int i=l-1; | 395 | int i=l-1; |
| 387 | while (isspace(string[i])) i--; | 396 | while (isspace(string[i]) || string[i]==0) i--; |
| 388 | string -= (m-i) / 2; | 397 | string -= (m-i)/2; |
| 389 | i=0; | 398 | for(k=0; k<(m-i)/2; k++) |
| 390 | while (string[i]==0) string[i++] = ' '; | 399 | string[k] = ' '; |
| 391 | string[l] = 0; | 400 | } |
| 401 | /* add space characteres */ | ||
| 402 | while (fspace != fstart) | ||
| 403 | { | ||
| 404 | string--; | ||
| 405 | fspace--; | ||
| 406 | *string = *fspace; | ||
| 392 | } | 407 | } |
| 408 | while (isspace(*e)) string[l++] = *e++; | ||
| 409 | string[l] = 0; | ||
| 393 | return string; | 410 | return string; |
| 394 | } | 411 | } |
| 395 | static void io_write (void) | 412 | static void io_write (void) |
