fis-gtm/sr_unix/zl_cmd_qlf.c

58 lines
2.1 KiB
C

/****************************************************************
* *
* Copyright 2001, 2010 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 "cmd_qlf.h"
#include "cli.h"
#include "cli_parse.h"
#define COMMAND "MUMPS "
GBLREF char cli_err_str[];
GBLREF CLI_ENTRY *cmd_ary;
GBLREF CLI_ENTRY mumps_cmd_ary[];
void zl_cmd_qlf (mstr *quals, command_qualifier *qualif)
{
char cbuf[MAX_LINE];
int parse_ret;
CLI_ENTRY *save_cmd_ary;
error_def (ERR_COMPILEQUALS);
if (quals->len + SIZEOF(COMMAND) > MAX_LINE)
rts_error(VARLSTCNT(4) ERR_COMPILEQUALS, 2, quals->len, quals->addr);
MEMCPY_LIT(cbuf, COMMAND);
memcpy(cbuf + SIZEOF(COMMAND) -1, quals->addr, quals->len);
cbuf[SIZEOF(COMMAND) - 1 + quals->len] = 0;
/* The caller of this function could be GT.M, DSE, MUPIP, GTCM GNP server, GTCM OMI server etc. Most of them have their
* own command parsing tables and some dont even have one. Nevertheless, we need to parse the string as if it was a
* MUMPS compilation command. So we switch temporarily to the MUMPS parsing table "mumps_cmd_ary". Note that the only
* rts_errors possible between save and restore of the cmd_ary are in compile_source_file and those are internally
* handled by source_ch which will transfer control back to us (right after the the call to compile_source_file below)
* and hence proper restoring of cmd_ary is guaranteed even in case of errors.
*/
save_cmd_ary = cmd_ary;
cmd_ary = &mumps_cmd_ary[0];
cli_str_setup((SIZEOF(COMMAND) + quals->len), cbuf);
parse_ret = parse_cmd();
if (parse_ret)
rts_error(VARLSTCNT(4) parse_ret, 2, LEN_AND_STR(cli_err_str));
qualif->object_file.mvtype = qualif->list_file.mvtype = qualif->ceprep_file.mvtype = 0;
get_cmd_qlf (qualif);
cmd_ary = save_cmd_ary; /* restore cmd_ary */
}