768 lines
22 KiB
C
768 lines
22 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_unistd.h"
|
|
#include "gtm_string.h"
|
|
#include "gtm_limits.h"
|
|
|
|
#include "gdsroot.h"
|
|
#include "gdsblk.h"
|
|
#include "gdskill.h"
|
|
#include "gtm_facility.h"
|
|
#include "fileinfo.h"
|
|
#include "gdsbt.h"
|
|
#include "gdsfhead.h"
|
|
#include "filestruct.h"
|
|
#include "gdscc.h"
|
|
#include "io.h"
|
|
#include "jnl.h"
|
|
#include "rtnhdr.h"
|
|
#include "stack_frame.h"
|
|
#include "svnames.h"
|
|
#include "mlkdef.h"
|
|
#include "zshow.h"
|
|
#include "buddy_list.h" /* needed for tp.h */
|
|
#include "iottdef.h" /* needed for tp.h */
|
|
#include "hashtab_int4.h" /* needed for tp.h */
|
|
#include "tp.h"
|
|
#include "op.h"
|
|
#include "mvalconv.h"
|
|
#include "zroutines.h"
|
|
#include "getstorage.h"
|
|
#include "get_command_line.h"
|
|
#include "getzposition.h"
|
|
#include "dollar_zlevel.h"
|
|
#include "get_ret_targ.h"
|
|
#include "error_trap.h"
|
|
#include "setzdir.h"
|
|
#include "get_reference.h"
|
|
#include "sgtm_putmsg.h"
|
|
#include "dollar_quit.h"
|
|
|
|
#define ESC_OFFSET 4
|
|
#define MAX_COMMAND_LINE_LENGTH 255
|
|
#define ZS_ONE_OUT(V,TEXT) ((V)->len = 1, (V)->addr = (TEXT), zshow_output(output,V))
|
|
#define ZS_VAR_EQU(V,TEXT) ((V)->len = SIZEOF(TEXT) - 1, (V)->addr = TEXT, \
|
|
zshow_output(output,(V)), ZS_ONE_OUT((V),equal_text))
|
|
|
|
static readonly char equal_text[] = {'='};
|
|
static readonly char device_text[] = "$DEVICE";
|
|
static readonly char ecode_text[] = "$ECODE";
|
|
static readonly char estack_text[] = "$ESTACK";
|
|
static readonly char etrap_text[] = "$ETRAP";
|
|
static readonly char horolog_text[] = "$HOROLOG";
|
|
static readonly char io_text[] = "$IO";
|
|
static readonly char job_text[] = "$JOB";
|
|
static readonly char key_text[] = "$KEY";
|
|
static readonly char principal_text[] = "$PRINCIPAL";
|
|
static readonly char quit_text[] = "$QUIT";
|
|
static readonly char reference_text[] = "$REFERENCE";
|
|
static readonly char stack_text[] = "$STACK";
|
|
static readonly char storage_text[] = "$STORAGE";
|
|
static readonly char system_text[] = "$SYSTEM";
|
|
static readonly char test_text[] = "$TEST";
|
|
static readonly char tlevel_text[] = "$TLEVEL";
|
|
static readonly char trestart_text[] = "$TRESTART";
|
|
static readonly char x_text[] = "$X";
|
|
static readonly char y_text[] = "$Y";
|
|
static readonly char za_text[] = "$ZA";
|
|
static readonly char zallocstor_text[] = "$ZALLOCSTOR";
|
|
static readonly char zb_text[] = "$ZB";
|
|
static readonly char zchset_text[] = "$ZCHSET";
|
|
static readonly char zcmdline_text[] = "$ZCMDLINE";
|
|
static readonly char zcompile_text[] = "$ZCOMPILE";
|
|
static readonly char zcstatus_text[] = "$ZCSTATUS";
|
|
static readonly char zdate_form_text[] = "$ZDATEFORM";
|
|
static readonly char zdirectory_text[] = "$ZDIRECTORY";
|
|
static readonly char zeditor_text[] = "$ZEDITOR";
|
|
static readonly char zeof_text[] = "$ZEOF";
|
|
static readonly char zerror_text[] = "$ZERROR";
|
|
static readonly char zgbldir_text[] = "$ZGBLDIR";
|
|
static readonly char zininterrupt_text[] = "$ZININTERRUPT";
|
|
static readonly char zinterrupt_text[] = "$ZINTERRUPT";
|
|
static readonly char zio_text[] = "$ZIO";
|
|
static readonly char zjob_text[] = "$ZJOB";
|
|
static readonly char zlevel_text[] = "$ZLEVEL";
|
|
static readonly char zmaxtptime_text[] = "$ZMAXTPTIME";
|
|
static readonly char zmode_text[] = "$ZMODE";
|
|
static readonly char zpatnumeric_text[] = "$ZPATNUMERIC";
|
|
static readonly char zproc_text[] = "$ZPROCESS";
|
|
static readonly char zprompt_text[] = "$ZPROMPT";
|
|
static readonly char zpos_text[] = "$ZPOSITION";
|
|
static readonly char zquit_text[] = "$ZQUIT";
|
|
static readonly char zrealstor_text[] = "$ZREALSTOR";
|
|
static readonly char zroutines_text[] = "$ZROUTINES";
|
|
static readonly char zsource_text[] = "$ZSOURCE";
|
|
static readonly char zstatus_text[] = "$ZSTATUS";
|
|
static readonly char zstep_text[] = "$ZSTEP";
|
|
static readonly char zsystem_text[] = "$ZSYSTEM";
|
|
#ifdef GTM_TRIGGER
|
|
static readonly char ztname_text[] = "$ZTNAME";
|
|
static readonly char ztdata_text[] = "$ZTDATA";
|
|
#endif
|
|
static readonly char ztexit_text[] = "$ZTEXIT";
|
|
GTMTRIG_ONLY(static readonly char ztlevel_text[] = "$ZTLEVEL";)
|
|
#ifdef GTM_TRIGGER
|
|
static readonly char ztoldval_text[] = "$ZTOLDVAL";
|
|
#endif
|
|
static readonly char ztrap_text[] = "$ZTRAP";
|
|
#ifdef GTM_TRIGGER
|
|
static readonly char ztriggerop_text[] = "$ZTRIGGEROP";
|
|
static readonly char ztslate_text[] = "$ZTSLATE";
|
|
static readonly char ztupdate_text[] = "$ZTUPDATE";
|
|
static readonly char ztvalue_text[] = "$ZTVALUE";
|
|
static readonly char ztwormhole_text[] = "$ZTWORMHOLE";
|
|
#endif
|
|
static readonly char zusedstor_text[] = "$ZUSEDSTOR";
|
|
static readonly char zversion_text[] = "$ZVERSION";
|
|
static readonly char zyerror_text[] = "$ZYERROR";
|
|
static readonly char arrow_text[] = "->";
|
|
|
|
GBLREF mval dollar_zdir;
|
|
GBLREF mval dollar_zproc;
|
|
GBLREF stack_frame *frame_pointer;
|
|
GBLREF io_pair io_curr_device;
|
|
GBLREF io_log_name *io_root_log_name;
|
|
GBLREF io_log_name *dollar_principal;
|
|
GBLREF mval dollar_ztrap;
|
|
GBLREF mval dollar_zgbldir;
|
|
GBLREF mval dollar_job;
|
|
GBLREF uint4 dollar_zjob;
|
|
GBLREF mval dollar_zstatus;
|
|
GBLREF mval dollar_zstep;
|
|
GBLREF mval dollar_zsource;
|
|
GBLREF int dollar_zmaxtptime;
|
|
GBLREF int4 dollar_zsystem;
|
|
GBLREF int4 dollar_zeditor;
|
|
GBLREF uint4 dollar_tlevel;
|
|
GBLREF uint4 dollar_trestart;
|
|
GBLREF mval dollar_etrap, dollar_estack_delta, dollar_zerror, dollar_zyerror, dollar_system;
|
|
GBLREF mval dollar_zinterrupt, dollar_ztexit;
|
|
GBLREF boolean_t dollar_zininterrupt;
|
|
GBLREF int4 zdir_form;
|
|
GBLREF size_t totalAlloc;
|
|
GBLREF size_t totalRmalloc;
|
|
GBLREF size_t totalUsed;
|
|
GBLREF mstr dollar_zchset;
|
|
GBLREF mstr dollar_zpatnumeric;
|
|
GBLREF boolean_t dollar_zquit_anyway;
|
|
#ifdef GTM_TRIGGER
|
|
GBLREF mstr *dollar_ztname;
|
|
GBLREF mval *dollar_ztdata;
|
|
GBLREF mval *dollar_ztoldval;
|
|
GBLREF mval *dollar_ztriggerop;
|
|
GBLREF mval dollar_ztslate;
|
|
GBLREF mval *dollar_ztupdate;
|
|
GBLREF mval *dollar_ztvalue;
|
|
GBLREF mval dollar_ztwormhole;
|
|
GBLREF int4 gtm_trigger_depth;
|
|
#endif
|
|
|
|
LITREF mval literal_zero, literal_one, literal_null;
|
|
LITREF char gtm_release_name[];
|
|
LITREF int4 gtm_release_name_len;
|
|
|
|
error_def(ERR_ZDIROUTOFSYNC);
|
|
|
|
void zshow_svn(zshow_out *output, int one_sv)
|
|
{
|
|
mstr x;
|
|
mval var, zdir;
|
|
io_log_name *tl;
|
|
stack_frame *fp;
|
|
int count, save_dollar_zlevel;
|
|
char *c1, *c2;
|
|
char zdir_error[3 * GTM_MAX_DIR_LEN + 128]; /* PATH_MAX + "->" + GTM-W-ZDIROUTOFSYNC, <text of ZDIROUTOFSYNC> */
|
|
DCL_THREADGBL_ACCESS;
|
|
|
|
SETUP_THREADGBL_ACCESS;
|
|
switch(one_sv)
|
|
{
|
|
case SV_ALL:
|
|
case SV_DEVICE:
|
|
get_dlr_device(&var);
|
|
ZS_VAR_EQU(&x, device_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ECODE:
|
|
ecode_get(-1, &var);
|
|
ZS_VAR_EQU(&x, ecode_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ESTACK:
|
|
save_dollar_zlevel = dollar_zlevel();
|
|
count = (save_dollar_zlevel - 1) - dollar_estack_delta.m[0];
|
|
MV_FORCE_MVAL(&var, count);
|
|
ZS_VAR_EQU(&x, estack_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ETRAP:
|
|
var.mvtype = MV_STR;
|
|
var.str = dollar_etrap.str;
|
|
ZS_VAR_EQU(&x, etrap_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_HOROLOG:
|
|
op_horolog(&var);
|
|
ZS_VAR_EQU(&x, horolog_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_IO:
|
|
var.str.addr = io_curr_device.in->name->dollar_io;
|
|
var.str.len = io_curr_device.in->name->len;
|
|
/*** The following should be in the I/O code ***/
|
|
if (ESC == *var.str.addr)
|
|
{
|
|
if (5 > var.str.len)
|
|
var.str.len = 0;
|
|
else
|
|
{
|
|
var.str.addr += ESC_OFFSET;
|
|
var.str.len -= ESC_OFFSET;
|
|
}
|
|
}
|
|
var.mvtype = MV_STR;
|
|
ZS_VAR_EQU(&x, io_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_JOB:
|
|
ZS_VAR_EQU(&x, job_text);
|
|
mval_write(output, &dollar_job, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_KEY:
|
|
get_dlr_key(&var);
|
|
ZS_VAR_EQU(&x, key_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_PRINCIPAL:
|
|
if (dollar_principal)
|
|
tl = dollar_principal;
|
|
else
|
|
tl = io_root_log_name->iod->trans_name;
|
|
var.str.addr = tl->dollar_io;
|
|
var.str.len = tl->len;
|
|
/*** The following should be in the I/O code ***/
|
|
if (ESC == *var.str.addr)
|
|
{
|
|
if (5 > var.str.len)
|
|
var.str.len = 0;
|
|
else
|
|
{
|
|
var.str.addr += ESC_OFFSET;
|
|
var.str.len -= ESC_OFFSET;
|
|
}
|
|
}
|
|
var.mvtype = MV_STR;
|
|
ZS_VAR_EQU(&x, principal_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_QUIT:
|
|
count = dollar_quit();
|
|
MV_FORCE_MVAL(&var, count);
|
|
ZS_VAR_EQU(&x, quit_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_REFERENCE:
|
|
get_reference(&var);
|
|
ZS_VAR_EQU(&x, reference_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_STACK:
|
|
save_dollar_zlevel = dollar_zlevel();
|
|
count = (save_dollar_zlevel - 1);
|
|
MV_FORCE_MVAL(&var, count);
|
|
ZS_VAR_EQU(&x, stack_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_STORAGE:
|
|
/* double2mval(&var, getstorage()); Causes issues with unaligned stack on x86_64 - remove until fixed */
|
|
i2mval(&var, getstorage());
|
|
ZS_VAR_EQU(&x, storage_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_SYSTEM:
|
|
var.mvtype = MV_STR;
|
|
var.str = dollar_system.str;
|
|
ZS_VAR_EQU(&x, system_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_TEST:
|
|
i2mval(&var, (int)op_dt_get());
|
|
ZS_VAR_EQU(&x, test_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_TLEVEL:
|
|
count = (int)dollar_tlevel;
|
|
MV_FORCE_MVAL(&var, count);
|
|
ZS_VAR_EQU(&x, tlevel_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_TRESTART:
|
|
MV_FORCE_MVAL(&var, (int)((MAX_VISIBLE_TRESTART < dollar_trestart)
|
|
? MAX_VISIBLE_TRESTART : dollar_trestart));
|
|
ZS_VAR_EQU(&x, trestart_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_X:
|
|
count = (int)io_curr_device.out->dollar.x;
|
|
MV_FORCE_MVAL(&var, count);
|
|
ZS_VAR_EQU(&x, x_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_Y:
|
|
count = (int)io_curr_device.out->dollar.y;
|
|
MV_FORCE_MVAL(&var, count);
|
|
ZS_VAR_EQU(&x, y_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZA:
|
|
count = (int)io_curr_device.in->dollar.za;
|
|
MV_FORCE_MVAL(&var, count);
|
|
ZS_VAR_EQU(&x, za_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZALLOCSTOR:
|
|
count = (int)totalAlloc; /* WARNING: downcasting possible 64bit value to 32bits */
|
|
MV_FORCE_UMVAL(&var, (unsigned int)count);
|
|
ZS_VAR_EQU(&x, zallocstor_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZB:
|
|
c1 = (char *)io_curr_device.in->dollar.zb;
|
|
c2 = c1 + SIZEOF(io_curr_device.in->dollar.zb);
|
|
var.mvtype = MV_STR;
|
|
var.str.addr = (char *)io_curr_device.in->dollar.zb;
|
|
while (c1 < c2 && *c1)
|
|
c1++;
|
|
var.str.len = INTCAST((char *)c1 - var.str.addr);
|
|
ZS_VAR_EQU(&x, zb_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZCHSET:
|
|
var.mvtype = MV_STR;
|
|
var.str = dollar_zchset;
|
|
ZS_VAR_EQU(&x, zchset_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZCMDLINE:
|
|
get_command_line(&var, TRUE); /* TRUE indicates $ZCMDLINE (i.e. processed not actual command line) */
|
|
ZS_VAR_EQU(&x, zcmdline_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZCOMPILE:
|
|
var.mvtype = MV_STR;
|
|
var.str = TREF(dollar_zcompile);
|
|
ZS_VAR_EQU(&x, zcompile_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZCSTATUS:
|
|
MV_FORCE_MVAL(&var, TREF(dollar_zcstatus));
|
|
ZS_VAR_EQU(&x, zcstatus_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZDATE_FORM:
|
|
MV_FORCE_MVAL(&var, TREF(zdate_form));
|
|
ZS_VAR_EQU(&x, zdate_form_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZDIR:
|
|
ZS_VAR_EQU(&x, zdirectory_text);
|
|
setzdir(NULL, &zdir);
|
|
if (zdir.str.len != dollar_zdir.str.len || 0 != memcmp(zdir.str.addr, dollar_zdir.str.addr, zdir.str.len))
|
|
{
|
|
memcpy(zdir_error, zdir.str.addr, zdir.str.len);
|
|
memcpy(&zdir_error[zdir.str.len], arrow_text, STR_LIT_LEN(arrow_text));
|
|
sgtm_putmsg(&zdir_error[zdir.str.len + STR_LIT_LEN(arrow_text)], VARLSTCNT(6) ERR_ZDIROUTOFSYNC, 4,
|
|
zdir.str.len, zdir.str.addr, dollar_zdir.str.len, dollar_zdir.str.addr);
|
|
zdir.str.addr = zdir_error;
|
|
zdir.str.len = STRLEN(zdir_error) - 1; /* eliminate trailing '\n' */
|
|
}
|
|
SKIP_DEVICE_IF_NOT_NEEDED(&zdir);
|
|
mval_write(output, &zdir, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZEDITOR:
|
|
MV_FORCE_MVAL(&var, dollar_zeditor);
|
|
ZS_VAR_EQU(&x, zeditor_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZEOF:
|
|
ZS_VAR_EQU(&x, zeof_text);
|
|
mval_write(output, io_curr_device.in->dollar.zeof ? (mval *)&literal_one : (mval *)&literal_zero, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZERROR:
|
|
var.mvtype = MV_STR;
|
|
var.str = dollar_zerror.str;
|
|
ZS_VAR_EQU(&x, zerror_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZGBLDIR:
|
|
ZS_VAR_EQU(&x, zgbldir_text);
|
|
mval_write(output, &dollar_zgbldir, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZININTERRUPT:
|
|
MV_FORCE_MVAL(&var, dollar_zininterrupt);
|
|
ZS_VAR_EQU(&x, zininterrupt_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZINTERRUPT:
|
|
var.mvtype = MV_STR;
|
|
var.str = dollar_zinterrupt.str;
|
|
ZS_VAR_EQU(&x, zinterrupt_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZIO:
|
|
var.mvtype = MV_STR;
|
|
/* NOTE: This is **NOT** equivalent to :
|
|
* io_curr_log_name->dollar_io
|
|
*/
|
|
var.str.addr = io_curr_device.in->trans_name->dollar_io;
|
|
var.str.len = io_curr_device.in->trans_name->len;
|
|
if (*var.str.addr == ESC)
|
|
{
|
|
if (5 > var.str.len)
|
|
var.str.len = 0;
|
|
else
|
|
{
|
|
var.str.addr += ESC_OFFSET;
|
|
var.str.len -= ESC_OFFSET;
|
|
}
|
|
}
|
|
ZS_VAR_EQU(&x, zio_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZJOB:
|
|
MV_FORCE_UMVAL(&var, dollar_zjob);
|
|
ZS_VAR_EQU(&x, zjob_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZLEVEL:
|
|
save_dollar_zlevel = dollar_zlevel();
|
|
MV_FORCE_MVAL(&var, save_dollar_zlevel);
|
|
ZS_VAR_EQU(&x, zlevel_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZMAXTPTIME:
|
|
MV_FORCE_MVAL(&var, dollar_zmaxtptime);
|
|
ZS_VAR_EQU(&x, zmaxtptime_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZMODE:
|
|
ZS_VAR_EQU(&x, zmode_text);
|
|
mval_write(output, TADR(dollar_zmode), TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZPATNUMERIC:
|
|
var.mvtype = MV_STR;
|
|
var.str = dollar_zpatnumeric;
|
|
ZS_VAR_EQU(&x, zpatnumeric_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZPOS:
|
|
getzposition(&var);
|
|
ZS_VAR_EQU(&x, zpos_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZPROC:
|
|
ZS_VAR_EQU(&x, zproc_text);
|
|
mval_write(output, &dollar_zproc, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_PROMPT:
|
|
var.mvtype = MV_STR;
|
|
var.str.addr = (TREF(gtmprompt)).addr;
|
|
var.str.len = (TREF(gtmprompt)).len;
|
|
ZS_VAR_EQU(&x, zprompt_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZQUIT:
|
|
MV_FORCE_MVAL(&var, dollar_zquit_anyway);
|
|
ZS_VAR_EQU(&x, zquit_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZREALSTOR:
|
|
count = (int)totalRmalloc; /* WARNING: downcasting possible 64bit value to 32bits */
|
|
MV_FORCE_UMVAL(&var, (unsigned int)count);
|
|
ZS_VAR_EQU(&x, zrealstor_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZROUTINES:
|
|
if (!TREF(zro_root))
|
|
zro_init();
|
|
var.mvtype = MV_STR;
|
|
var.str = TREF(dollar_zroutines);
|
|
ZS_VAR_EQU(&x, zroutines_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZSOURCE:
|
|
ZS_VAR_EQU(&x, zsource_text);
|
|
mval_write(output, &dollar_zsource, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZSTATUS:
|
|
ZS_VAR_EQU(&x, zstatus_text);
|
|
mval_write(output, &dollar_zstatus, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZSTEP:
|
|
ZS_VAR_EQU(&x, zstep_text);
|
|
mval_write(output, &dollar_zstep, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZSYSTEM:
|
|
MV_FORCE_MVAL(&var, dollar_zsystem);
|
|
ZS_VAR_EQU(&x, zsystem_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
# ifdef GTM_TRIGGER
|
|
case SV_ZTCODE: /* deprecated */
|
|
/* CAUTION: fall through */
|
|
case SV_ZTNAME:
|
|
if (NULL != dollar_ztname)
|
|
{
|
|
var.mvtype = MV_STR;
|
|
var.str.addr = dollar_ztname->addr;
|
|
var.str.len = dollar_ztname->len;
|
|
} else
|
|
memcpy(&var, &literal_null, SIZEOF(mval));
|
|
ZS_VAR_EQU(&x, ztname_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZTDATA:
|
|
if (NULL != dollar_ztdata)
|
|
{
|
|
var.mvtype = MV_STR;
|
|
var.str = dollar_ztdata->str;
|
|
} else
|
|
memcpy(&var, &literal_zero, SIZEOF(mval));
|
|
ZS_VAR_EQU(&x, ztdata_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
# endif
|
|
/* CAUTION: fall through */
|
|
case SV_ZTEXIT:
|
|
var.mvtype = MV_STR;
|
|
var.str = dollar_ztexit.str;
|
|
ZS_VAR_EQU(&x, ztexit_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
# ifdef GTM_TRIGGER
|
|
case SV_ZTLEVEL:
|
|
MV_FORCE_MVAL(&var, gtm_trigger_depth);
|
|
ZS_VAR_EQU(&x, ztlevel_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZTOLDVAL:
|
|
if (NULL != dollar_ztoldval)
|
|
{
|
|
var.mvtype = MV_STR;
|
|
var.str = dollar_ztoldval->str;
|
|
} else
|
|
memcpy(&var, &literal_null, SIZEOF(mval));
|
|
ZS_VAR_EQU(&x, ztoldval_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
# endif
|
|
/* CAUTION: fall through */
|
|
case SV_ZTRAP:
|
|
var.mvtype = MV_STR;
|
|
var.str = dollar_ztrap.str;
|
|
ZS_VAR_EQU(&x, ztrap_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
# ifdef GTM_TRIGGER
|
|
case SV_ZTRIGGEROP:
|
|
if (NULL != dollar_ztriggerop)
|
|
{
|
|
var.mvtype = MV_STR;
|
|
var.str = dollar_ztriggerop->str;
|
|
} else
|
|
memcpy(&var, &literal_null, SIZEOF(mval));
|
|
ZS_VAR_EQU(&x, ztriggerop_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZTSLATE:
|
|
var.mvtype = MV_STR;
|
|
var.str = dollar_ztslate.str;
|
|
ZS_VAR_EQU(&x, ztslate_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZTUPDATE:
|
|
if (NULL != dollar_ztupdate)
|
|
{
|
|
var.mvtype = MV_STR;
|
|
var.str = dollar_ztupdate->str;
|
|
} else
|
|
memcpy(&var, &literal_null, SIZEOF(mval));
|
|
ZS_VAR_EQU(&x, ztupdate_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZTVALUE:
|
|
if (NULL != dollar_ztvalue)
|
|
{
|
|
var.mvtype = MV_STR;
|
|
var.str = dollar_ztvalue->str;
|
|
} else
|
|
memcpy(&var, &literal_null, SIZEOF(mval));
|
|
ZS_VAR_EQU(&x, ztvalue_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZTWORMHOLE:
|
|
var.mvtype = MV_STR;
|
|
var.str = dollar_ztwormhole.str;
|
|
ZS_VAR_EQU(&x, ztwormhole_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
# endif
|
|
/* CAUTION: fall through */
|
|
case SV_ZUSEDSTOR:
|
|
count = (int)totalUsed; /* WARNING: downcasting possible 64bit value to 32bits */
|
|
MV_FORCE_UMVAL(&var, (unsigned int)count);
|
|
ZS_VAR_EQU(&x, zusedstor_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
/* CAUTION: fall through */
|
|
case SV_ZVERSION:
|
|
var.mvtype = MV_STR;
|
|
var.str.addr = (char *)gtm_release_name;
|
|
var.str.len = gtm_release_name_len;
|
|
ZS_VAR_EQU(&x, zversion_text);
|
|
mval_write(output, &var, TRUE);
|
|
if (SV_ALL != one_sv)
|
|
break;
|
|
case SV_ZYERROR:
|
|
var.mvtype = MV_STR;
|
|
var.str = dollar_zyerror.str;
|
|
ZS_VAR_EQU(&x, zyerror_text);
|
|
mval_write(output, &var, TRUE);
|
|
break;
|
|
default:
|
|
GTMASSERT;
|
|
|
|
}
|
|
}
|