MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / make_array_declaration

Function make_array_declaration

src/gpre/languages/cob.cpp:3712–3826  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3710//
3711
3712static 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)

Callers 1

gen_databaseFunction · 0.70

Calls 3

CPR_errorFunction · 0.85
printaFunction · 0.70
snprintfFunction · 0.50

Tested by

no test coverage detected