| 529 | // |
| 530 | |
| 531 | static void asgn_from( const act* action, const ref* reference, int column) |
| 532 | { |
| 533 | TEXT name[MAX_REF_SIZE], variable[MAX_REF_SIZE], temp[MAX_REF_SIZE]; |
| 534 | |
| 535 | for (; reference; reference = reference->ref_next) |
| 536 | { |
| 537 | const gpre_fld* field = reference->ref_field; |
| 538 | if (field->fld_array_info) |
| 539 | if (!(reference->ref_flags & REF_array_elem)) |
| 540 | { |
| 541 | printa(column, "%s := gds__blob_null;\n", gen_name(name, reference, true)); |
| 542 | gen_get_or_put_slice(action, reference, false, column); |
| 543 | continue; |
| 544 | } |
| 545 | |
| 546 | if (!reference->ref_source && !reference->ref_value) |
| 547 | continue; |
| 548 | align(column); |
| 549 | gen_name(variable, reference, true); |
| 550 | const TEXT* value; |
| 551 | if (reference->ref_source) |
| 552 | value = gen_name(temp, reference->ref_source, true); |
| 553 | else |
| 554 | value = reference->ref_value; |
| 555 | if (reference->ref_value && (reference->ref_flags & REF_array_elem)) |
| 556 | field = field->fld_array; |
| 557 | if (!field || (field->fld_flags & FLD_text)) |
| 558 | fprintf(gpreGlob.out_file, "gds__ftof (%s%s, %s (%s), %s%s, %d);", |
| 559 | REF_PAR, value, SIZEOF, value, REF_PAR, variable, field->fld_length); |
| 560 | else if (!reference->ref_master || (reference->ref_flags & REF_literal)) |
| 561 | fprintf(gpreGlob.out_file, "%s := %s;", variable, value); |
| 562 | else |
| 563 | { |
| 564 | fprintf(gpreGlob.out_file, "if %s < 0 then", value); |
| 565 | align(column + 4); |
| 566 | fprintf(gpreGlob.out_file, "%s := -1", variable); |
| 567 | align(column); |
| 568 | fprintf(gpreGlob.out_file, "else"); |
| 569 | align(column + 4); |
| 570 | fprintf(gpreGlob.out_file, "%s := 0;", variable); |
| 571 | } |
| 572 | } |
| 573 | } |
| 574 | |
| 575 | |
| 576 | //____________________________________________________________ |
no test coverage detected