61 lines
1.6 KiB
C
61 lines
1.6 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 "gdsroot.h"
|
||
|
#include "gtm_facility.h"
|
||
|
#include "fileinfo.h"
|
||
|
#include "gdsbt.h"
|
||
|
#include "collseq.h"
|
||
|
#include "gdsfhead.h"
|
||
|
#include "do_xform.h"
|
||
|
#include "gvstrsub.h"
|
||
|
#include "zshow.h"
|
||
|
|
||
|
GBLREF gv_namehead *gv_target;
|
||
|
|
||
|
unsigned char *gvstrsub(unsigned char *src, unsigned char *target)
|
||
|
{
|
||
|
int length, n, target_len;
|
||
|
char buf[MAX_KEY_SZ + 1], buf1[MAX_KEY_SZ + 1], *ptr;
|
||
|
unsigned char *str;
|
||
|
mstr mstr_x;
|
||
|
mstr mstr_tmp;
|
||
|
DCL_THREADGBL_ACCESS;
|
||
|
|
||
|
SETUP_THREADGBL_ACCESS;
|
||
|
ptr = buf;
|
||
|
for (n = 0, str = src; *str; ++n, ++str)
|
||
|
{
|
||
|
if (1 == *str)
|
||
|
{
|
||
|
str++;
|
||
|
*ptr++ = *str - 1;
|
||
|
} else
|
||
|
*ptr++ = *str;
|
||
|
}
|
||
|
if (TREF(transform) && gv_target && gv_target->collseq)
|
||
|
{
|
||
|
mstr_x.len = n;
|
||
|
mstr_x.addr = buf;
|
||
|
mstr_tmp.len = SIZEOF(buf1);
|
||
|
mstr_tmp.addr = buf1;
|
||
|
do_xform(gv_target->collseq, XBACK, &mstr_x, &mstr_tmp, &length);
|
||
|
n = length;
|
||
|
str = (unsigned char *)mstr_tmp.addr; /* mstr_tmp.addr is used just in case it is
|
||
|
reallocated in the XBACK routine */
|
||
|
} else
|
||
|
str = (unsigned char *)buf;
|
||
|
format2zwr((sm_uc_ptr_t)str, n, target, &target_len);
|
||
|
return target + target_len;
|
||
|
}
|