73 lines
2.2 KiB
C
73 lines
2.2 KiB
C
/****************************************************************
|
|
* *
|
|
* Copyright 2001, 2011 Fidelity Information Services, Inc *
|
|
* *
|
|
* This source code contains the intellectual property *
|
|
* of its copyright holder(s), and is made available *
|
|
* under a license. If you do not know the terms of *
|
|
* the license, please stop and do not read further. *
|
|
* *
|
|
****************************************************************/
|
|
|
|
#include "mdef.h"
|
|
|
|
#include "gtm_string.h"
|
|
|
|
#include "gdsroot.h"
|
|
#include "gtm_facility.h"
|
|
#include "fileinfo.h"
|
|
#include "gdsbt.h"
|
|
#include "gdsfhead.h"
|
|
#include "zwrite.h"
|
|
#include "subscript.h"
|
|
#include "mlkdef.h"
|
|
#include "zshow.h"
|
|
#include "alias.h"
|
|
|
|
GBLREF lvzwrite_datablk *lvzwrite_block;
|
|
GBLREF int merge_args;
|
|
GBLREF symval *curr_symval;
|
|
GBLREF uint4 zwrtacindx;
|
|
|
|
|
|
void lvzwr_init(enum zwr_init_types zwrpattyp, mval *val)
|
|
{
|
|
lvzwrite_datablk *prevzwrb;
|
|
|
|
/* Standard call at start of zwrite type functions. If this symval has aliases in it,
|
|
* prep a hash table we will use to track the lv_val addrs we process (but only if not merging).
|
|
*/
|
|
if (!merge_args)
|
|
{ /* Re-initialize table even if no "aliases" defined since dotted parms are actually aliases too and
|
|
* will be placed in this table by lvzwr_out().
|
|
*/
|
|
als_zwrhtab_init();
|
|
zwrtacindx = 0;
|
|
}
|
|
if (!lvzwrite_block)
|
|
{
|
|
lvzwrite_block = (lvzwrite_datablk *)malloc(SIZEOF(lvzwrite_datablk));
|
|
memset(lvzwrite_block, 0, SIZEOF(lvzwrite_datablk));
|
|
} else
|
|
{ /* Get back to one zwrite_block if multiples were stacked (and left over) */
|
|
for (prevzwrb = lvzwrite_block->prev; prevzwrb; lvzwrite_block = prevzwrb, prevzwrb = lvzwrite_block->prev)
|
|
{
|
|
if (lvzwrite_block->sub)
|
|
free(lvzwrite_block->sub);
|
|
free(lvzwrite_block);
|
|
}
|
|
}
|
|
lvzwrite_block->zwr_intype = zwrpattyp;
|
|
if (!merge_args && val)
|
|
{ /* val may be null when called from gtm_startup/gtm$startup */
|
|
MV_FORCE_STR(val);
|
|
lvzwrite_block->pat = val;
|
|
} else
|
|
lvzwrite_block->pat = NULL;
|
|
lvzwrite_block->mask = lvzwrite_block->subsc_count = 0;
|
|
if (!lvzwrite_block->sub)
|
|
lvzwrite_block->sub = (zwr_sub_lst *)malloc(SIZEOF(zwr_sub_lst) * MAX_LVSUBSCRIPTS);
|
|
lvzwrite_block->fixed = TRUE;
|
|
return;
|
|
}
|