| 663 | // |
| 664 | |
| 665 | static void asgn_from(const act* action, const ref* reference) |
| 666 | { |
| 667 | SCHAR name[MAX_REF_SIZE], variable[MAX_REF_SIZE], temp[MAX_REF_SIZE]; |
| 668 | |
| 669 | for (; reference; reference = reference->ref_next) |
| 670 | { |
| 671 | const gpre_fld* field = reference->ref_field; |
| 672 | if (field->fld_array_info) |
| 673 | if (!(reference->ref_flags & REF_array_elem)) |
| 674 | { |
| 675 | printa(COLUMN, "CALL isc_qtoq (isc_blob_null, %s)", gen_name(name, reference, true)); |
| 676 | gen_get_or_put_slice(action, reference, false); |
| 677 | continue; |
| 678 | } |
| 679 | |
| 680 | if (!reference->ref_source && !reference->ref_value) |
| 681 | continue; |
| 682 | gen_name(variable, reference, true); |
| 683 | |
| 684 | const TEXT* value; |
| 685 | if (reference->ref_source) |
| 686 | value = gen_name(temp, reference->ref_source, true); |
| 687 | else |
| 688 | value = reference->ref_value; |
| 689 | if (reference->ref_value && (reference->ref_flags & REF_array_elem)) |
| 690 | field = field->fld_array; |
| 691 | if (field->fld_dtype == dtype_blob || field->fld_dtype == dtype_quad || |
| 692 | field->fld_dtype == dtype_date) |
| 693 | { |
| 694 | sprintf(output_buffer, "%sCALL isc_qtoq (%s, %s)\n", COLUMN, value, variable); |
| 695 | } |
| 696 | else if (!reference->ref_master || (reference->ref_flags & REF_literal)) |
| 697 | { |
| 698 | sprintf(output_buffer, "%s%s = %s\n", COLUMN, variable, value); |
| 699 | } |
| 700 | else |
| 701 | { |
| 702 | sprintf(output_buffer, "%sIF (%s .LT. 0) THEN\n", COLUMN, value); |
| 703 | FTN_print_buffer(output_buffer); |
| 704 | sprintf(output_buffer, "%s%s = -1\n", COLUMN_INDENT, variable); |
| 705 | FTN_print_buffer(output_buffer); |
| 706 | sprintf(output_buffer, "%sELSE\n", COLUMN); |
| 707 | FTN_print_buffer(output_buffer); |
| 708 | sprintf(output_buffer, "%s%s = 0\n", COLUMN_INDENT, variable); |
| 709 | FTN_print_buffer(output_buffer); |
| 710 | sprintf(output_buffer, "%sEND IF\n", COLUMN); |
| 711 | } |
| 712 | FTN_print_buffer(output_buffer); |
| 713 | } |
| 714 | } |
| 715 | |
| 716 | |
| 717 | //____________________________________________________________ |
no test coverage detected