| 557 | // |
| 558 | |
| 559 | static void asgn_from( const act* action, ref* reference, int column) |
| 560 | { |
| 561 | TEXT name[MAX_REF_SIZE], variable[MAX_REF_SIZE], temp[MAX_REF_SIZE]; |
| 562 | |
| 563 | for (; reference; reference = reference->ref_next) |
| 564 | { |
| 565 | bool slice_flag = false; |
| 566 | const gpre_fld* field = reference->ref_field; |
| 567 | if (field->fld_array_info) |
| 568 | { |
| 569 | act* slice_action; |
| 570 | ref* source = reference->ref_friend; |
| 571 | if (source && (slice_action = (act*) source->ref_slice) && slice_action->act_object) |
| 572 | { |
| 573 | slice_flag = true; |
| 574 | slice_action->act_type = ACT_put_slice; |
| 575 | gen_slice(slice_action, 0, column); |
| 576 | } |
| 577 | else if (!(reference->ref_flags & REF_array_elem)) |
| 578 | { |
| 579 | printa(column, "%s = fbBlobNull;", gen_name(name, reference, true)); |
| 580 | gen_get_or_put_slice(action, reference, false, column); |
| 581 | continue; |
| 582 | } |
| 583 | } |
| 584 | if (!reference->ref_source && !reference->ref_value && !slice_flag) |
| 585 | continue; |
| 586 | align(column); |
| 587 | gen_name(variable, reference, true); |
| 588 | const TEXT* value; |
| 589 | if (slice_flag) |
| 590 | value = gen_name(temp, reference->ref_friend, true); |
| 591 | else if (reference->ref_source) |
| 592 | value = gen_name(temp, reference->ref_source, true); |
| 593 | else |
| 594 | value = reference->ref_value; |
| 595 | |
| 596 | if (!slice_flag && reference->ref_value && (reference->ref_flags & REF_array_elem)) |
| 597 | { |
| 598 | field = field->fld_array; |
| 599 | } |
| 600 | if (field && field->fld_dtype <= dtype_cstring) |
| 601 | { |
| 602 | if (field->fld_sub_type == 1) |
| 603 | if (field->fld_length == 1) |
| 604 | fprintf(gpreGlob.out_file, "%s = %s;", variable, value); |
| 605 | else |
| 606 | fprintf(gpreGlob.out_file, "isc_ftof (%s, sizeof(%s), %s, %d);", value, |
| 607 | value, variable, field->fld_length); |
| 608 | else if (field->fld_flags & FLD_dbkey) |
| 609 | fprintf(gpreGlob.out_file, "isc_ftof (%s, %d, %s, %d);", value, |
| 610 | field->fld_length, variable, field->fld_length); |
| 611 | else if (gpreGlob.sw_cstring) |
| 612 | fprintf(gpreGlob.out_file, isLangCpp(gpreGlob.sw_language) ? |
| 613 | "isc_vtov ((const char*) %s, (char*) %s, %d);" : |
| 614 | "isc_vtov ((char*) %s, (char*) %s, %d);", |
| 615 | value, variable, field->fld_length); |
| 616 | else if (reference->ref_source) |