fis-gtm/sr_port/lvzwr_init.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;
}