| 3710 | // |
| 3711 | |
| 3712 | static void make_array_declaration( ref* reference) |
| 3713 | { |
| 3714 | gpre_fld* field = reference->ref_field; |
| 3715 | const TEXT* name = field->fld_symbol->sym_string; |
| 3716 | |
| 3717 | // Don't generate multiple declarations for the array. V3 Bug 569. |
| 3718 | |
| 3719 | if (field->fld_array_info->ary_declared) |
| 3720 | return; |
| 3721 | |
| 3722 | field->fld_array_info->ary_declared = true; |
| 3723 | |
| 3724 | fprintf(gpreGlob.out_file, "%s01 %s%dL.\n", names[COLUMN_0], names[isc_a_pos], |
| 3725 | field->fld_array_info->ary_ident); |
| 3726 | TEXT space[128]; |
| 3727 | strcpy(space, " "); |
| 3728 | |
| 3729 | // Print out the dimension part of the declaration |
| 3730 | const dim* dimension = field->fld_array_info->ary_dimension; |
| 3731 | int i = 3; |
| 3732 | for (; dimension->dim_next; dimension = dimension->dim_next, i += 2) |
| 3733 | { |
| 3734 | const int dimension_size = dimension->dim_upper - dimension->dim_lower + 1; |
| 3735 | printa(space, false, "%02d %s%d%s%d OCCURS %d TIMES.", |
| 3736 | i, names[isc_a_pos], field->fld_array_info->ary_ident, |
| 3737 | names[UNDER], i, dimension_size); |
| 3738 | strcat(space, " "); // Will overflow at 41 dimensions, is it relevant? |
| 3739 | } |
| 3740 | |
| 3741 | TEXT string1[256]; |
| 3742 | TEXT* p = string1; |
| 3743 | const int dimension_size = dimension->dim_upper - dimension->dim_lower + 1; |
| 3744 | sprintf(p, "%02d %s%d OCCURS %d TIMES ", |
| 3745 | i, names[isc_a_pos], field->fld_array_info->ary_ident, dimension_size); |
| 3746 | while (*p) |
| 3747 | p++; |
| 3748 | |
| 3749 | SSHORT digits, scale; |
| 3750 | |
| 3751 | switch (field->fld_array_info->ary_dtype) |
| 3752 | { |
| 3753 | case dtype_short: |
| 3754 | case dtype_long: |
| 3755 | digits = (field->fld_array_info->ary_dtype == dtype_short) ? 4 : 9; |
| 3756 | scale = field->fld_array->fld_scale; |
| 3757 | strcpy(p, "PIC S"); |
| 3758 | while (*p) |
| 3759 | p++; |
| 3760 | if (scale >= -digits && scale <= 0) |
| 3761 | { |
| 3762 | if (scale > -digits) |
| 3763 | sprintf(p, "9(%d)", digits + scale); |
| 3764 | while (*p) |
| 3765 | p++; |
| 3766 | if (scale) |
| 3767 | sprintf(p, "V9(%d)", digits - (digits + scale)); |
| 3768 | } |
| 3769 | else if (scale > 0) |
no test coverage detected